From 59663743390f1e0ca695b7366f0ad194ca37c2ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fynn=20Sp=C3=A4ker?= Date: Tue, 4 Apr 2023 13:14:38 +0200 Subject: [PATCH] revendor/gardener 1.62 (#31) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Revendor Gardener v1.62 Signed-off-by: Fynn Späker * Update logger Signed-off-by: Fynn Späker --------- Signed-off-by: Fynn Späker --- .../main.go | 2 +- .../main.go | 2 +- go.mod | 12 +- go.sum | 21 +- .../emicklei/go-restful/v3/bench_test.sh | 0 .../emicklei/go-restful/v3/coverage.sh | 0 .../extensions/pkg/controller/cluster.go | 2 - .../pkg/controller/common/checkerwatchdog.go | 195 - .../common/checkerwatchdogfactory.go | 64 - .../pkg/controller/common/ownerchecker.go | 74 - .../controller/common/ownercheckerfactory.go | 59 - .../pkg/controller/common/watchdogmanager.go | 209 - .../pkg/controller/controlplane/reconciler.go | 16 - .../controller/infrastructure/reconciler.go | 16 - .../pkg/controller/worker/controller.go | 3 +- .../genericactuator/actuator_reconcile.go | 26 +- .../pkg/controller/worker/reconciler.go | 26 +- .../pkg/webhook/certificates/add.go | 24 +- .../pkg/webhook/certificates/certificates.go | 12 +- .../pkg/webhook/certificates/reconciler.go | 53 +- .../extensions/pkg/webhook/cmd/options.go | 19 +- .../extensions/pkg/webhook/registration.go | 41 +- .../gardener/hack/.ci/component_descriptor | 0 .../gardener/gardener/hack/.ci/doc.go | 0 .../gardener/hack/.ci/prepare_release | 0 .../gardener/hack/.ci/set_dependency_version | 0 .../gardener/hack/LICENSE_BOILERPLATE.txt | 0 .../gardener/gardener/hack/check-apidiff.sh | 2 +- .../gardener/hack/check-skaffold-deps.sh | 44 +- .../gardener/hack/cherry-pick-pull.sh | 2 +- .../hack/ci-e2e-kind-ha-multi-zone.sh | 38 + .../hack/ci-e2e-kind-ha-single-zone.sh | 38 + .../gardener/hack/ci-e2e-kind-migration.sh | 4 +- ...e2e-kind-ha.sh => ci-e2e-kind-operator.sh} | 14 +- .../gardener/hack/ci-e2e-kind-upgrade.sh | 199 + .../gardener/gardener/hack/ci-e2e-kind.sh | 2 +- .../hack/download_gardener_source_code.sh | 43 + .../gardener/gardener/hack/gardener-down.sh | 50 + .../gardener/hack/gardener-extensions-down.sh | 49 + .../gardener/hack/gardener-extensions-up.sh | 41 + ...generate-seed-crds.sh => generate-crds.sh} | 14 +- .../gardener/gardener/hack/kind-down.sh | 38 + .../gardener/gardener/hack/kind-up.sh | 69 + .../gardener/gardener/hack/test-e2e-local.env | 0 .../gardener/gardener/hack/test-e2e-local.sh | 74 +- .../gardener/hack/test-integration.env | 0 .../gardener/hack/test-integration.sh | 9 +- .../github.com/gardener/gardener/hack/test.sh | 9 +- .../gardener/gardener/hack/tools.go | 0 .../gardener/gardener/hack/tools.mk | 2 +- .../gardener/hack/tools/install-promtool.sh | 0 .../gardener/gardener/hack/update-codegen.sh | 42 + .../gardener/pkg/apis/core/field_constants.go | 9 +- .../apis/core/types_controllerregistration.go | 28 + .../gardener/pkg/apis/core/types_seed.go | 6 - .../gardener/pkg/apis/core/types_shoot.go | 55 +- .../pkg/apis/core/v1alpha1/defaults.go | 33 + .../pkg/apis/core/v1alpha1/generated.pb.go | 3584 ++++++++++------ .../pkg/apis/core/v1alpha1/generated.proto | 108 +- .../v1alpha1/types_controllerregistration.go | 32 + .../pkg/apis/core/v1alpha1/types_seed.go | 7 - .../pkg/apis/core/v1alpha1/types_shoot.go | 61 +- .../core/v1alpha1/zz_generated.conversion.go | 192 +- .../core/v1alpha1/zz_generated.deepcopy.go | 154 +- .../core/v1beta1/constants/types_constants.go | 90 +- .../pkg/apis/core/v1beta1/conversions.go | 2 +- .../pkg/apis/core/v1beta1/defaults.go | 33 + .../pkg/apis/core/v1beta1/generated.pb.go | 3639 ++++++++++------- .../pkg/apis/core/v1beta1/generated.proto | 112 +- .../pkg/apis/core/v1beta1/helper/helper.go | 97 +- .../v1beta1/types_controllerregistration.go | 32 + .../pkg/apis/core/v1beta1/types_seed.go | 7 - .../pkg/apis/core/v1beta1/types_shoot.go | 67 +- .../core/v1beta1/zz_generated.conversion.go | 192 +- .../core/v1beta1/zz_generated.deepcopy.go | 154 +- .../pkg/apis/core/zz_generated.deepcopy.go | 154 +- .../gardener/pkg/apis/operator/register.go | 18 + .../operator/v1alpha1/constants.go} | 23 +- .../pkg/apis/operator/v1alpha1/doc.go | 24 + .../pkg/apis/operator/v1alpha1/register.go | 53 + .../pkg/apis/operator/v1alpha1/types.go | 206 + .../v1alpha1/zz_generated.deepcopy.go | 421 ++ .../gardener/pkg/apis/resources/register.go | 2 +- .../pkg/apis/resources/v1alpha1/types.go | 23 + .../apis/seedmanagement/encoding/encoding.go | 1 - .../apis/seedmanagement/types_managedseed.go | 11 +- .../v1alpha1/defaults_managedseed.go | 9 +- .../seedmanagement/v1alpha1/generated.pb.go | 323 +- .../seedmanagement/v1alpha1/generated.proto | 15 +- .../v1alpha1/types_managedseed.go | 17 +- .../v1alpha1/zz_generated.conversion.go | 20 - .../v1alpha1/zz_generated.deepcopy.go | 10 - .../seedmanagement/zz_generated.deepcopy.go | 10 - .../gardener/pkg/client/kubernetes/client.go | 3 - .../gardener/pkg/client/kubernetes/types.go | 2 + .../pkg/controllerutils/eventhandler.go | 73 + .../pkg/controllerutils/miscellaneous.go | 11 +- .../controllerutils/predicate/predicate.go | 144 +- .../pkg/controllerutils/seedfilter.go | 113 - .../pkg/extensions/customresources.go | 10 +- .../gardener/gardener/pkg/extensions/owner.go | 41 - .../pkg/gardenlet/apis/config/register.go | 2 +- .../apis/config/v1alpha1/register.go | 2 +- .../gardener/gardener/pkg/logger/types.go | 1 - .../gardener/gardener/pkg/logger/zap.go | 22 - .../templates/scripts/health-monitor.tpl.sh | 29 +- .../containerd/templates/scripts/init.tpl.sh | 0 .../templates/scripts/health-monitor.tpl.sh | 0 .../original/components/kubelet/cliflags.go | 5 - .../original/components/kubelet/config.go | 17 +- .../templates/scripts/health-monitor.tpl.sh | 0 .../pkg/utils/gardener/backupentry.go | 17 +- .../gardener/pkg/utils/gardener/identity.go | 110 + .../gardener/pkg/utils/gardener/migration.go | 67 + .../gardener/pkg/utils/gardener/shoot.go | 40 +- .../gardener/pkg/utils/images/images.go | 2 - .../pkg/utils/kubernetes/admissionplugins.go | 6 +- .../pkg/utils/kubernetes/health/etcd.go | 2 +- .../pkg/utils/kubernetes/highavailability.go | 103 + .../pkg/utils/kubernetes/kubernetes.go | 40 - .../gardener/pkg/utils/kubernetes/object.go | 7 +- .../managedresources/managedresources.go | 32 +- .../gardener/pkg/utils/secrets/basic_auth.go | 16 - .../gardener/pkg/utils/timewindow/schedule.go | 77 + .../gardener/pkg/utils/version/version.go | 38 +- vendor/github.com/gobwas/glob/bench.sh | 0 vendor/github.com/json-iterator/go/build.sh | 0 vendor/github.com/json-iterator/go/test.sh | 0 .../github.com/mattn/go-colorable/go.test.sh | 0 vendor/github.com/mattn/go-isatty/go.test.sh | 0 .../github.com/modern-go/concurrent/test.sh | 0 vendor/go.uber.org/atomic/.gitignore | 3 + vendor/go.uber.org/atomic/.travis.yml | 27 - vendor/go.uber.org/atomic/CHANGELOG.md | 44 +- vendor/go.uber.org/atomic/Makefile | 1 + vendor/go.uber.org/atomic/README.md | 4 +- vendor/go.uber.org/atomic/bool.go | 20 +- vendor/go.uber.org/atomic/bool_ext.go | 2 +- vendor/go.uber.org/atomic/duration.go | 20 +- vendor/go.uber.org/atomic/duration_ext.go | 8 +- vendor/go.uber.org/atomic/error.go | 12 +- vendor/go.uber.org/atomic/float64.go | 19 +- vendor/go.uber.org/atomic/float64_ext.go | 34 +- vendor/go.uber.org/atomic/gen.go | 1 + vendor/go.uber.org/atomic/int32.go | 24 +- vendor/go.uber.org/atomic/int64.go | 24 +- vendor/go.uber.org/atomic/string.go | 12 +- vendor/go.uber.org/atomic/string_ext.go | 2 + .../{multierr/go113.go => atomic/time.go} | 55 +- vendor/go.uber.org/atomic/time_ext.go | 36 + vendor/go.uber.org/atomic/uint32.go | 24 +- vendor/go.uber.org/atomic/uint64.go | 24 +- vendor/go.uber.org/atomic/uintptr.go | 102 + vendor/go.uber.org/atomic/unsafe_pointer.go | 58 + vendor/go.uber.org/multierr/.travis.yml | 23 - vendor/go.uber.org/multierr/CHANGELOG.md | 6 + vendor/go.uber.org/multierr/LICENSE.txt | 2 +- vendor/go.uber.org/multierr/Makefile | 6 +- vendor/go.uber.org/multierr/README.md | 8 +- vendor/go.uber.org/multierr/error.go | 208 +- vendor/go.uber.org/zap/checklicense.sh | 0 .../crypto/curve25519/internal/field/sync.sh | 0 vendor/golang.org/x/sys/plan9/mkall.sh | 0 vendor/golang.org/x/sys/plan9/mkerrors.sh | 0 .../golang.org/x/sys/plan9/mksysnum_plan9.sh | 0 vendor/golang.org/x/sys/unix/mkall.sh | 0 vendor/golang.org/x/sys/unix/mkerrors.sh | 0 .../appengine/internal/regen.sh | 0 .../api/analysis/v1alpha1/message.pb.go | 2 +- .../istio.io/api/meta/v1alpha1/status.pb.go | 2 +- .../v1alpha3/destination_rule.gen.json | 14 +- .../v1alpha3/destination_rule.pb.go | 1001 +++-- .../v1alpha3/destination_rule.proto | 83 +- .../networking/v1alpha3/envoy_filter.pb.go | 10 +- .../networking/v1alpha3/envoy_filter.proto | 7 +- .../api/networking/v1alpha3/gateway.gen.json | 2 +- .../api/networking/v1alpha3/gateway.pb.go | 165 +- .../api/networking/v1alpha3/gateway.proto | 6 +- .../networking/v1alpha3/service_entry.pb.go | 13 +- .../networking/v1alpha3/service_entry.proto | 4 +- .../api/networking/v1alpha3/sidecar.gen.json | 8 +- .../api/networking/v1alpha3/sidecar.pb.go | 17 +- .../api/networking/v1alpha3/sidecar.proto | 15 +- .../v1alpha3/virtual_service.gen.json | 81 +- .../networking/v1alpha3/virtual_service.pb.go | 2611 +++++++----- .../networking/v1alpha3/virtual_service.proto | 200 +- .../v1alpha3/virtual_service_deepcopy.gen.go | 42 + .../v1alpha3/virtual_service_json.gen.go | 22 + .../networking/v1alpha3/workload_entry.pb.go | 2 +- .../networking/v1alpha3/workload_group.pb.go | 3 +- .../v1beta1/destination_rule.gen.json | 14 +- .../networking/v1beta1/destination_rule.pb.go | 932 +++-- .../networking/v1beta1/destination_rule.proto | 28 +- .../api/networking/v1beta1/gateway.gen.json | 2 +- .../api/networking/v1beta1/gateway.pb.go | 165 +- .../api/networking/v1beta1/gateway.proto | 6 +- .../networking/v1beta1/proxy_config.gen.json | 2 +- .../api/networking/v1beta1/proxy_config.pb.go | 12 +- .../api/networking/v1beta1/proxy_config.proto | 10 +- .../networking/v1beta1/service_entry.pb.go | 13 +- .../networking/v1beta1/service_entry.proto | 4 +- .../api/networking/v1beta1/sidecar.gen.json | 8 +- .../api/networking/v1beta1/sidecar.pb.go | 17 +- .../api/networking/v1beta1/sidecar.proto | 15 +- .../v1beta1/virtual_service.gen.json | 81 +- .../networking/v1beta1/virtual_service.pb.go | 2593 +++++++----- .../networking/v1beta1/virtual_service.proto | 200 +- .../v1beta1/virtual_service_deepcopy.gen.go | 42 + .../v1beta1/virtual_service_json.gen.go | 22 + .../networking/v1beta1/workload_entry.pb.go | 2 +- .../networking/v1beta1/workload_group.pb.go | 3 +- .../istio.io/api/type/v1beta1/selector.pb.go | 2 +- .../k8s.io/code-generator/generate-groups.sh | 0 .../generate-internal-groups.sh | 0 vendor/modules.txt | 16 +- 215 files changed, 14044 insertions(+), 7989 deletions(-) mode change 100755 => 100644 vendor/github.com/emicklei/go-restful/v3/bench_test.sh mode change 100755 => 100644 vendor/github.com/emicklei/go-restful/v3/coverage.sh delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdog.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdogfactory.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/common/ownerchecker.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/common/ownercheckerfactory.go delete mode 100644 vendor/github.com/gardener/gardener/extensions/pkg/controller/common/watchdogmanager.go mode change 100644 => 100755 vendor/github.com/gardener/gardener/hack/.ci/component_descriptor mode change 100644 => 100755 vendor/github.com/gardener/gardener/hack/.ci/doc.go mode change 100644 => 100755 vendor/github.com/gardener/gardener/hack/.ci/prepare_release mode change 100644 => 100755 vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version mode change 100644 => 100755 vendor/github.com/gardener/gardener/hack/LICENSE_BOILERPLATE.txt create mode 100755 vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-multi-zone.sh create mode 100755 vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-single-zone.sh rename vendor/github.com/gardener/gardener/hack/{ci-e2e-kind-ha.sh => ci-e2e-kind-operator.sh} (79%) create mode 100755 vendor/github.com/gardener/gardener/hack/ci-e2e-kind-upgrade.sh create mode 100755 vendor/github.com/gardener/gardener/hack/download_gardener_source_code.sh create mode 100755 vendor/github.com/gardener/gardener/hack/gardener-down.sh create mode 100755 vendor/github.com/gardener/gardener/hack/gardener-extensions-down.sh create mode 100755 vendor/github.com/gardener/gardener/hack/gardener-extensions-up.sh rename vendor/github.com/gardener/gardener/hack/{generate-seed-crds.sh => generate-crds.sh} (88%) create mode 100755 vendor/github.com/gardener/gardener/hack/kind-down.sh create mode 100755 vendor/github.com/gardener/gardener/hack/kind-up.sh mode change 100644 => 100755 vendor/github.com/gardener/gardener/hack/test-e2e-local.env mode change 100644 => 100755 vendor/github.com/gardener/gardener/hack/test-integration.env mode change 100644 => 100755 vendor/github.com/gardener/gardener/hack/tools.go mode change 100644 => 100755 vendor/github.com/gardener/gardener/hack/tools.mk mode change 100755 => 100644 vendor/github.com/gardener/gardener/hack/tools/install-promtool.sh create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/operator/register.go rename vendor/github.com/gardener/gardener/pkg/{logger/logger.go => apis/operator/v1alpha1/constants.go} (55%) create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/doc.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/register.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go create mode 100644 vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/zz_generated.deepcopy.go create mode 100644 vendor/github.com/gardener/gardener/pkg/controllerutils/eventhandler.go delete mode 100644 vendor/github.com/gardener/gardener/pkg/extensions/owner.go mode change 100755 => 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/containerd/templates/scripts/health-monitor.tpl.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/containerd/templates/scripts/init.tpl.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/docker/templates/scripts/health-monitor.tpl.sh mode change 100755 => 100644 vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/templates/scripts/health-monitor.tpl.sh create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/gardener/identity.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/gardener/migration.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/kubernetes/highavailability.go create mode 100644 vendor/github.com/gardener/gardener/pkg/utils/timewindow/schedule.go mode change 100755 => 100644 vendor/github.com/gobwas/glob/bench.sh mode change 100755 => 100644 vendor/github.com/json-iterator/go/build.sh mode change 100755 => 100644 vendor/github.com/json-iterator/go/test.sh mode change 100755 => 100644 vendor/github.com/mattn/go-colorable/go.test.sh mode change 100755 => 100644 vendor/github.com/mattn/go-isatty/go.test.sh mode change 100755 => 100644 vendor/github.com/modern-go/concurrent/test.sh delete mode 100644 vendor/go.uber.org/atomic/.travis.yml rename vendor/go.uber.org/{multierr/go113.go => atomic/time.go} (58%) create mode 100644 vendor/go.uber.org/atomic/time_ext.go create mode 100644 vendor/go.uber.org/atomic/uintptr.go create mode 100644 vendor/go.uber.org/atomic/unsafe_pointer.go delete mode 100644 vendor/go.uber.org/multierr/.travis.yml mode change 100755 => 100644 vendor/go.uber.org/zap/checklicense.sh mode change 100755 => 100644 vendor/golang.org/x/crypto/curve25519/internal/field/sync.sh mode change 100755 => 100644 vendor/golang.org/x/sys/plan9/mkall.sh mode change 100755 => 100644 vendor/golang.org/x/sys/plan9/mkerrors.sh mode change 100755 => 100644 vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh mode change 100755 => 100644 vendor/golang.org/x/sys/unix/mkall.sh mode change 100755 => 100644 vendor/golang.org/x/sys/unix/mkerrors.sh mode change 100755 => 100644 vendor/google.golang.org/appengine/internal/regen.sh mode change 100755 => 100644 vendor/k8s.io/code-generator/generate-groups.sh mode change 100755 => 100644 vendor/k8s.io/code-generator/generate-internal-groups.sh diff --git a/cmd/gardener-extension-admission-hcloud/main.go b/cmd/gardener-extension-admission-hcloud/main.go index a3f2d6f75..3fc5312e9 100644 --- a/cmd/gardener-extension-admission-hcloud/main.go +++ b/cmd/gardener-extension-admission-hcloud/main.go @@ -27,7 +27,7 @@ import ( ) func main() { - log.SetLogger(logger.ZapLogger(false)) + log.SetLogger(logger.MustNewZapLogger(logger.InfoLevel, logger.FormatJSON)) cmdDefinition := admission.NewAdmissionCommand(signals.SetupSignalHandler()) if err := cmdDefinition.Execute(); err != nil { diff --git a/cmd/gardener-extension-provider-hcloud/main.go b/cmd/gardener-extension-provider-hcloud/main.go index 26e03a358..4d934b6fd 100644 --- a/cmd/gardener-extension-provider-hcloud/main.go +++ b/cmd/gardener-extension-provider-hcloud/main.go @@ -28,7 +28,7 @@ import ( // main is the executable entry point. func main() { - log.SetLogger(logger.ZapLogger(false)) + log.SetLogger(logger.MustNewZapLogger(logger.InfoLevel, logger.FormatJSON)) cmdDefinition := controller.NewControllerManagerCommand(signals.SetupSignalHandler()) if err := cmdDefinition.Execute(); err != nil { diff --git a/go.mod b/go.mod index 99b9a2ccd..c0590a692 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( github.com/ahmetb/gen-crd-api-reference-docs v0.3.0 github.com/coreos/go-systemd/v22 v22.4.0 github.com/gardener/etcd-druid/api v0.6.0 - github.com/gardener/gardener v1.59.1 + github.com/gardener/gardener v1.62.0 github.com/gardener/machine-controller-manager v0.47.0 github.com/go-logr/logr v1.2.3 github.com/golang/mock v1.6.0 @@ -103,8 +103,8 @@ require ( github.com/prometheus/procfs v0.7.3 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/spf13/afero v1.8.2 // indirect - go.uber.org/atomic v1.7.0 // indirect - go.uber.org/multierr v1.6.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.7.0 // indirect go.uber.org/zap v1.21.0 // indirect golang.org/x/crypto v0.1.0 // indirect golang.org/x/mod v0.6.0 // indirect @@ -117,13 +117,13 @@ require ( golang.org/x/tools v0.2.0 // indirect gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 // indirect + google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 // indirect google.golang.org/protobuf v1.28.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - istio.io/api v0.0.0-20220512181135-e8ec1e1d89de // indirect - istio.io/client-go v1.14.0 // indirect + istio.io/api v0.0.0-20221013011440-bc935762d2b9 // indirect + istio.io/client-go v1.15.3 // indirect k8s.io/apiserver v0.25.0 // indirect k8s.io/gengo v0.0.0-20211129171323-c02415ce4185 // indirect k8s.io/helm v2.16.1+incompatible // indirect diff --git a/go.sum b/go.sum index aca99e6e0..021a21f68 100644 --- a/go.sum +++ b/go.sum @@ -165,8 +165,8 @@ github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwV github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/gardener/etcd-druid/api v0.6.0 h1:XVrH3i2Phxf5wPnqI/9UL5I7Rb4kC+XYqquEzdtRxKI= github.com/gardener/etcd-druid/api v0.6.0/go.mod h1:vaVjHhgtJ22MhGxedLJ175gTfSG4l7xnAtlR6P9wRic= -github.com/gardener/gardener v1.59.1 h1:tyVrgjz/QkdR9JbtOnxVHQF2wlJemv+eY9pGkTT9wFo= -github.com/gardener/gardener v1.59.1/go.mod h1:4vopE/Pg4LJud1CRg80rAcp94v83MJIgktlHNcSKO84= +github.com/gardener/gardener v1.62.0 h1:sztDXT6+7bkPqXTH7MrE3p1emuc12m+MC48/KftlH4Q= +github.com/gardener/gardener v1.62.0/go.mod h1:nFYc80MM5ZPyMBUiT70w9lIw0VUnOTSa1NpsgX4hiUs= github.com/gardener/hvpa-controller/api v0.5.0 h1:f4F3O7YUrenwh4S3TgPREPiB287JjjUiUL18OqPLyAA= github.com/gardener/hvpa-controller/api v0.5.0/go.mod h1:QQl3ELkCaki+8RhXl0FZMfvnm0WCGwGJlGmrxJj6lvM= github.com/gardener/machine-controller-manager v0.47.0 h1:TnDvdNxYgC7FXQAHv4AXGcHEe8x1m1NFrtGWWc8uj0U= @@ -559,14 +559,16 @@ go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4 go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= +go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= +go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= @@ -951,8 +953,9 @@ google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaE google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 h1:hrbNEivu7Zn1pxvHk6MBrq9iE22woVILTHqexqBxe6I= google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 h1:W70HjnmXFJm+8RNjOpIDYW2nKsSi/af0VvIZUtYkwuU= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -1031,10 +1034,10 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -istio.io/api v0.0.0-20220512181135-e8ec1e1d89de h1:xYxUL/LyuJ5yb0o/d2GXseYjx9HIBpLHLArp2Zd8d+M= -istio.io/api v0.0.0-20220512181135-e8ec1e1d89de/go.mod h1:00myJeQGWma4Y5pboJ+MM4P2uqEWulKA1duC8kYN5Wo= -istio.io/client-go v1.14.0 h1:KKXMnxXx3U2866OP8FBYlJhjKdI3yIUQnt8L6hSzDHE= -istio.io/client-go v1.14.0/go.mod h1:C7K0CKQlvY84yQKkZhxQbD1riqvnsgXJm3jF5GOmzNg= +istio.io/api v0.0.0-20221013011440-bc935762d2b9 h1:oDY95NgV77atZrCMx7i3XaSPL/OSirRI8jWWsiHA4GI= +istio.io/api v0.0.0-20221013011440-bc935762d2b9/go.mod h1:hQkF0Q19MCmfOTre/Sg4KvrwwETq45oaFplnBm2p4j8= +istio.io/client-go v1.15.3 h1:Zyd4ZVYCImWlPs+7yGye//K7l0j4UM06cqmQm5v8JX4= +istio.io/client-go v1.15.3/go.mod h1:7M4mYZ9o9UVQQEwWihAq//EK9Ak0a/pUfOvP7b3I+XM= k8s.io/api v0.24.2 h1:g518dPU/L7VRLxWfcadQn2OnsiGWVOadTLpdnqgY2OI= k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg= k8s.io/apiextensions-apiserver v0.24.2 h1:/4NEQHKlEz1MlaK/wHT5KMKC9UKYz6NZz6JE6ov4G6k= diff --git a/vendor/github.com/emicklei/go-restful/v3/bench_test.sh b/vendor/github.com/emicklei/go-restful/v3/bench_test.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/emicklei/go-restful/v3/coverage.sh b/vendor/github.com/emicklei/go-restful/v3/coverage.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/cluster.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/cluster.go index f61621b28..e4f1573db 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/cluster.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/cluster.go @@ -30,8 +30,6 @@ var ( ShootFromCluster = extensions.ShootFromCluster // GetShoot tries to read Gardener's Cluster extension resource in the given namespace and return the embedded Shoot resource. GetShoot = extensions.GetShoot - // GetOwnerNameAndID reads the owner DNS name and ID from the owner DNSRecord extension resource in the given namespace. - GetOwnerNameAndID = extensions.GetOwnerNameAndID // GenericTokenKubeconfigSecretNameFromCluster reads the generic-token-kubeconfig.secret.gardener.cloud/name annotation // and returns its value. If the annotation is not present then it falls back to the deprecated // SecretNameGenericTokenKubeconfig. diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdog.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdog.go deleted file mode 100644 index 11d4faeff..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdog.go +++ /dev/null @@ -1,195 +0,0 @@ -// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package common - -import ( - "context" - "sync" - "time" - - "github.com/go-logr/logr" - "k8s.io/utils/clock" -) - -// Watchdog manages a goroutine that regularly checks if a certain condition is true, -// and if the check fails or returns false, cancels multiple previously added contexts. -type Watchdog interface { - // Start starts a goroutine that regularly checks if a certain condition is true. - // If the check fails or returns false, it cancels all contexts. - Start(ctx context.Context) - // Stop stops the goroutine started by Start. - Stop() - // AddContext adds the given context to this watchdog mapped to the given key, - // and returns a new context that will be cancelled if the condition check fails or returns false. - // It returns true if the first context has been added, false otherwise. - AddContext(ctx context.Context, key string) (context.Context, bool) - // RemoveContext removes the context mapped to the given key from this watchdog. - // It returns true if the last context has been removed, false otherwise. - RemoveContext(key string) bool - // Result returns the result of the last condition check. - Result() (bool, error) -} - -// NewCheckerWatchdog creates a new Watchdog that checks if the condition checked by the given checker is true -// every given interval, using the given clock and logger. -func NewCheckerWatchdog(checker Checker, interval, timeout time.Duration, clock clock.Clock, logger logr.Logger) Watchdog { - return &checkerWatchdog{ - checker: checker, - interval: interval, - timeout: timeout, - clock: clock, - logger: logger, - ctxCancelFuncs: make(map[string]context.CancelFunc), - resultChan: make(chan struct{}), - resultReadyChan: make(chan struct{}), - timerChan: make(chan bool), - } -} - -type checkerWatchdog struct { - checker Checker - interval time.Duration - timeout time.Duration - clock clock.Clock - logger logr.Logger - cancelFunc context.CancelFunc - ctxCancelFuncs map[string]context.CancelFunc - ctxCancelFuncsMutex sync.Mutex - result bool - err error - resultTime time.Time - resultMutex sync.RWMutex - resultChan chan struct{} - resultReadyChan chan struct{} - timerChan chan bool -} - -// Start starts a goroutine that checks if the condition checked by the watchdog checker is true every watchdog interval. -// If the check fails or returns false, it cancels all contexts. -func (w *checkerWatchdog) Start(ctx context.Context) { - w.logger.V(1).Info("Starting watchdog") - ctx, w.cancelFunc = context.WithCancel(ctx) - timer := w.clock.NewTimer(w.interval) - timer.Stop() - go func() { - for { - // Wait for a timer event or a result request - resultRequested := false - select { - case <-ctx.Done(): - return - case reset := <-w.timerChan: - // Stop the timer, then reset it if a reset was requested - // Timers are not concurrency safe, therefore all timer updates are performed here - timer.Stop() - if reset { - timer.Reset(w.interval) - } - continue - case <-w.resultChan: - resultRequested = true - // If the last result is not older than w.interval, use it - if !w.clock.Now().After(w.resultTime.Add(w.interval)) { - w.resultReadyChan <- struct{}{} - continue - } - case <-timer.C(): - timer.Reset(w.interval) - } - - // Call checker and update result - timeoutCtx, cancel := context.WithTimeout(ctx, w.timeout) - result, err := w.checker.Check(timeoutCtx) - cancel() - w.setResult(result, err) - - // If a result was requested, notify the requester that the new result is available - if resultRequested { - w.resultReadyChan <- struct{}{} - } - - // If the check failed or returned false, cancel all contexts - if err != nil || !result { - w.logger.Info("Cancelling all contexts") - w.ctxCancelFuncsMutex.Lock() - for _, cancelFunc := range w.ctxCancelFuncs { - cancelFunc() - } - w.ctxCancelFuncsMutex.Unlock() - } - } - }() -} - -// Stop stops the goroutine started by Start. -func (w *checkerWatchdog) Stop() { - w.logger.V(1).Info("Stopping watchdog") - w.cancelFunc() -} - -// AddContext adds the given context to this watchdog mapped to the given key, -// and returns a new context that will be cancelled if the condition check fails or returns false. -// It returns true if the first context has been added, false otherwise. -func (w *checkerWatchdog) AddContext(ctx context.Context, key string) (context.Context, bool) { - w.logger.V(1).Info("Adding context", "key", key) - - w.ctxCancelFuncsMutex.Lock() - ctx, cancelFunc := context.WithCancel(ctx) - w.ctxCancelFuncs[key] = cancelFunc - firstAdded := len(w.ctxCancelFuncs) == 1 - w.ctxCancelFuncsMutex.Unlock() - - // Reset the timer if the first context has been added - if firstAdded { - w.timerChan <- true - } - - return ctx, firstAdded -} - -// RemoveContext removes the context mapped to the given key from this watchdog. -// It returns true if the last context has been removed, false otherwise. -func (w *checkerWatchdog) RemoveContext(key string) bool { - w.logger.V(1).Info("Removing context", "key", key) - - w.ctxCancelFuncsMutex.Lock() - delete(w.ctxCancelFuncs, key) - lastRemoved := len(w.ctxCancelFuncs) == 0 - w.ctxCancelFuncsMutex.Unlock() - - // Stop the timer if the last context has been removed - if lastRemoved { - w.timerChan <- false - } - - return lastRemoved -} - -// Result returns the result of the last condition check. -func (w *checkerWatchdog) Result() (bool, error) { - // Request the result and wait for it to be updated if needed - w.resultChan <- struct{}{} - <-w.resultReadyChan - - w.resultMutex.RLock() - defer w.resultMutex.RUnlock() - return w.result, w.err -} - -func (w *checkerWatchdog) setResult(result bool, err error) { - w.resultMutex.Lock() - defer w.resultMutex.Unlock() - w.result, w.err, w.resultTime = result, err, w.clock.Now() -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdogfactory.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdogfactory.go deleted file mode 100644 index 49463ffe8..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/checkerwatchdogfactory.go +++ /dev/null @@ -1,64 +0,0 @@ -// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package common - -import ( - "context" - "time" - - "github.com/go-logr/logr" - "k8s.io/utils/clock" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -// WatchdogFactory creates Watchdog instances. -type WatchdogFactory interface { - // NewWatchdog creates a new Watchdog using the given context, client, namespace, and shoot name. - NewWatchdog(ctx context.Context, c client.Client, namespace, shootName string) (Watchdog, error) -} - -// NewCheckerWatchdogFactory creates a new WatchdogFactory that uses NewCheckerWatchdog to create Watchdog instances. -func NewCheckerWatchdogFactory(checkerFactory CheckerFactory, interval, timeout time.Duration, clock clock.Clock, logger logr.Logger) WatchdogFactory { - return &checkerWatchdogFactory{ - checkerFactory: checkerFactory, - interval: interval, - timeout: timeout, - clock: clock, - logger: logger, - } -} - -type checkerWatchdogFactory struct { - checkerFactory CheckerFactory - interval time.Duration - timeout time.Duration - clock clock.Clock - logger logr.Logger -} - -// NewWatchdog creates a new Watchdog using the given context, client, namespace, and shoot name. -// It uses the checker factory to create a new Checker that is then passed to NewCheckerWatchdog. -// If the checker factory returns a nil Checker, this method returns a nil Watchdog. -func (f *checkerWatchdogFactory) NewWatchdog(ctx context.Context, c client.Client, namespace, shootName string) (Watchdog, error) { - checker, err := f.checkerFactory.NewChecker(ctx, c, namespace, shootName) - if err != nil { - return nil, err - } - if checker == nil { - return nil, nil - } - - return NewCheckerWatchdog(checker, f.interval, f.timeout, f.clock, f.logger.WithName(namespace)), nil -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/ownerchecker.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/ownerchecker.go deleted file mode 100644 index e2edc4465..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/ownerchecker.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package common - -import ( - "context" - "fmt" - - "github.com/go-logr/logr" -) - -// Resolver looks up domain names and returns the corresponding DNS records. -type Resolver interface { - // LookupTXT returns the DNS TXT records for the given domain name. - LookupTXT(ctx context.Context, name string) ([]string, error) -} - -// Checker checks if a certain condition is true. -type Checker interface { - // Check checks that a certain condition is true. - Check(ctx context.Context) (bool, error) -} - -// NewOwnerChecker returns a Checker that checks if the given owner domain name resolves to the given owner ID, -// using the given resolver and logger. -func NewOwnerChecker(ownerName, ownerID string, resolver Resolver, logger logr.Logger) Checker { - return &ownerChecker{ - ownerName: ownerName, - ownerID: ownerID, - resolver: resolver, - logger: logger, - } -} - -type ownerChecker struct { - ownerName string - ownerID string - resolver Resolver - logger logr.Logger -} - -// Check returns true if the owner domain name resolves to the owner ID, false otherwise. -func (c *ownerChecker) Check(ctx context.Context) (bool, error) { - c.logger.V(1).Info("Resolving owner domain name", "ownerName", c.ownerName) - owner, err := c.resolver.LookupTXT(ctx, c.ownerName) - if err != nil { - return false, fmt.Errorf("could not resolve owner domain name %s: %w", c.ownerName, err) - } - - var actualOwnerID string - if len(owner) > 0 { - actualOwnerID = owner[0] - } - - switch { - case actualOwnerID == c.ownerID: - return true, nil - default: - c.logger.Info("Resolved owner domain name to a different owner ID", "ownerName", c.ownerName, "ownerID", c.ownerID, "actualOwnerID", actualOwnerID) - return false, nil - } -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/ownercheckerfactory.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/ownercheckerfactory.go deleted file mode 100644 index c3294775e..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/ownercheckerfactory.go +++ /dev/null @@ -1,59 +0,0 @@ -// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package common - -import ( - "context" - - extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - - "github.com/go-logr/logr" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -// CheckerFactory creates Checker instances. -type CheckerFactory interface { - // NewChecker creates a new Checker using the given context, client, namespace, and shoot name. - NewChecker(ctx context.Context, c client.Client, namespace, shootName string) (Checker, error) -} - -// NewOwnerCheckerFactory creates a new CheckerFactory that uses NewOwnerChecker to create Checker instances. -func NewOwnerCheckerFactory(resolver Resolver, logger logr.Logger) CheckerFactory { - return &ownerCheckerFactory{ - resolver: resolver, - logger: logger, - } -} - -type ownerCheckerFactory struct { - resolver Resolver - logger logr.Logger -} - -// NewChecker creates a new Checker using the given context, client, namespace, and shoot name. -// It reads the owner domain name and ID from the owner DNSRecord extension resource in the given namespace -// so that it can pass them to NewOwnerChecker. -// If the owner domain name and ID are empty strings, this method returns a nil Checker. -func (f *ownerCheckerFactory) NewChecker(ctx context.Context, c client.Client, namespace, shootName string) (Checker, error) { - ownerName, ownerID, err := extensionscontroller.GetOwnerNameAndID(ctx, c, namespace, shootName) - if err != nil { - return nil, err - } - if ownerName == "" && ownerID == "" { - return nil, nil - } - - return NewOwnerChecker(ownerName, ownerID, f.resolver, f.logger.WithName(namespace)), nil -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/watchdogmanager.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/watchdogmanager.go deleted file mode 100644 index 5062205b1..000000000 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/common/watchdogmanager.go +++ /dev/null @@ -1,209 +0,0 @@ -// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package common - -import ( - "context" - "net" - "sync" - "time" - - "github.com/go-logr/logr" - "k8s.io/utils/clock" - "sigs.k8s.io/controller-runtime/pkg/client" - "sigs.k8s.io/controller-runtime/pkg/log" -) - -const ( - // DefaultWatchdogInterval is the default interval between checks performed by watchdogs. - DefaultWatchdogInterval = 30 * time.Second - // DefaultWatchdogTimeout is the default timeout for checks performed by watchdogs. - DefaultWatchdogTimeout = 2 * time.Minute - // DefaultWatchdogTTL is the default watchdog TTL. - DefaultWatchdogTTL = 10 * time.Minute -) - -// WatchdogManager manages Watchdog instances for multiple namespaces. -type WatchdogManager interface { - // GetResultAndContext returns the result and context from the watchdog for the given namespace. - // If the watchdog does not exist yet, it is created using the given context, client, namespace, and shoot name. - // If the watchdog result is true, the given context is added to the watchdog mapped to the given key, - // and a cleanup function for properly removing it is also returned. - GetResultAndContext(ctx context.Context, c client.Client, namespace, shootName, key string) (bool, context.Context, func(), error) -} - -// GetOwnerCheckResultAndContext returns the result and context from the watchdog for the given namespace managed by -// the default owner check WatchdogManager. -func GetOwnerCheckResultAndContext(ctx context.Context, c client.Client, namespace, shootName, key string) (bool, context.Context, func(), error) { - return GetDefaultOwnerCheckWatchdogManager().GetResultAndContext(ctx, c, namespace, shootName, key) -} - -// GetDefaultOwnerCheckWatchdogManager returns the default owner check WatchdogManager. -func GetDefaultOwnerCheckWatchdogManager() WatchdogManager { - defaultOwnerCheckWatchdogManagerMutex.Lock() - defer defaultOwnerCheckWatchdogManagerMutex.Unlock() - - if defaultOwnerCheckWatchdogManager == nil { - defaultOwnerCheckWatchdogManager = NewWatchdogManager( - NewCheckerWatchdogFactory( - NewOwnerCheckerFactory( - net.DefaultResolver, - log.Log.WithName("owner-checker"), - ), - DefaultWatchdogInterval, - DefaultWatchdogTimeout, - clock.RealClock{}, - log.Log.WithName("owner-check-watchdog"), - ), - DefaultWatchdogTTL, - clock.RealClock{}, - log.Log.WithName("owner-check-watchdog-manager"), - ) - } - return defaultOwnerCheckWatchdogManager -} - -var ( - defaultOwnerCheckWatchdogManager WatchdogManager - defaultOwnerCheckWatchdogManagerMutex sync.Mutex -) - -// NewWatchdogManager creates a new WatchdogManager using the given watchdog factory, ttl, and logger. -func NewWatchdogManager(watchdogFactory WatchdogFactory, ttl time.Duration, clk clock.WithTickerAndDelayedExecution, logger logr.Logger) WatchdogManager { - return &watchdogManager{ - watchdogFactory: watchdogFactory, - ttl: ttl, - clock: clk, - logger: logger, - watchdogs: make(map[string]Watchdog), - timers: make(map[string]clock.Timer), - } -} - -type watchdogManager struct { - watchdogFactory WatchdogFactory - ttl time.Duration - clock clock.WithTickerAndDelayedExecution - logger logr.Logger - watchdogs map[string]Watchdog - watchdogsMutex sync.Mutex - timers map[string]clock.Timer - timersMutex sync.Mutex -} - -// GetResultAndContext returns the result and context from the watchdog for the given namespace. -// If the watchdog does not exist yet, it is created using the given context, client, namespace, and shoot name. -// If the watchdog factory returns a nil watchdog, this method returns true. -// If the watchdog result is false or error, it is returned immediately. -// If the watchdog result is true, the given context is added to the watchdog mapped to the given key, -// and a cleanup function for properly removing it is also returned. -func (m *watchdogManager) GetResultAndContext(ctx context.Context, c client.Client, namespace, shootName, key string) (bool, context.Context, func(), error) { - // Get ot create the watchdog for the given namespace - watchdog, err := m.getWatchdog(ctx, c, namespace, shootName) - if err != nil { - return false, ctx, nil, err - } - - // If a nil watchdog was returned by the watchdog factory, return true - if watchdog == nil { - return true, ctx, nil, nil - } - - // Get watchdog result and return false if it's false or error - result, err := watchdog.Result() - if err != nil { - return false, ctx, nil, err - } - if !result { - return false, ctx, nil, nil - } - - // Add the given context to the watchdog mapped to the given key and return a cleanup function for removing it - var firstAdded bool - if ctx, firstAdded = watchdog.AddContext(ctx, key); firstAdded { - // Prevent the watchdog from being stopped and removed if it has contexts - m.cancelWatchdogRemoval(namespace) - } - cleanup := func() { - if lastRemoved := watchdog.RemoveContext(key); lastRemoved { - // Ensure that the watchdog is eventually stopped and removed if has no contexts - m.scheduleWatchdogRemoval(namespace) - } - } - return true, ctx, cleanup, nil -} - -func (m *watchdogManager) getWatchdog(ctx context.Context, c client.Client, namespace, shootName string) (Watchdog, error) { - m.watchdogsMutex.Lock() - defer m.watchdogsMutex.Unlock() - - watchdog, ok := m.watchdogs[namespace] - if !ok { - var err error - watchdog, err = m.watchdogFactory.NewWatchdog(ctx, c, namespace, shootName) - if err != nil { - return nil, err - } - if watchdog == nil { - return nil, nil - } - - m.logger.Info("Starting watchdog", "namespace", namespace) - watchdog.Start(context.Background()) - // Ensure that the watchdog is eventually stopped and removed - // even if no context are ever added to it (because e.g. its result is always false or error) - m.scheduleWatchdogRemoval(namespace) - - m.watchdogs[namespace] = watchdog - } - - return watchdog, nil -} - -func (m *watchdogManager) removeWatchdog(namespace string) { - m.watchdogsMutex.Lock() - defer m.watchdogsMutex.Unlock() - - if watchdog, ok := m.watchdogs[namespace]; ok { - m.logger.Info("Stopping watchdog", "namespace", namespace) - watchdog.Stop() - - delete(m.watchdogs, namespace) - } -} - -func (m *watchdogManager) scheduleWatchdogRemoval(namespace string) { - m.timersMutex.Lock() - defer m.timersMutex.Unlock() - - if timer, ok := m.timers[namespace]; !ok { - timer = m.clock.AfterFunc(m.ttl, func() { - m.removeWatchdog(namespace) - }) - m.timers[namespace] = timer - } else { - timer.Reset(m.ttl) - } -} - -func (m *watchdogManager) cancelWatchdogRemoval(namespace string) { - m.timersMutex.Lock() - defer m.timersMutex.Unlock() - - if timer, ok := m.timers[namespace]; ok { - timer.Stop() - delete(m.timers, namespace) - } -} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/reconciler.go index 8a6d74455..dc62755c5 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/controlplane/reconciler.go @@ -20,14 +20,12 @@ import ( "time" extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - "github.com/gardener/gardener/extensions/pkg/controller/common" gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "github.com/gardener/gardener/pkg/controllerutils" reconcilerutils "github.com/gardener/gardener/pkg/controllerutils/reconciler" - kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/go-logr/logr" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -99,20 +97,6 @@ func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) ( operationType := gardencorev1beta1helper.ComputeOperationType(cp.ObjectMeta, cp.Status.LastOperation) - if cluster.Shoot != nil && operationType != gardencorev1beta1.LastOperationTypeMigrate { - key := "controlplane:" + kutil.ObjectName(cp) - ok, watchdogCtx, cleanup, err := common.GetOwnerCheckResultAndContext(ctx, r.client, cp.Namespace, cluster.Shoot.Name, key) - if err != nil { - return reconcile.Result{}, err - } else if !ok { - return reconcile.Result{}, fmt.Errorf("this seed is not the owner of shoot %s", kutil.ObjectName(cluster.Shoot)) - } - ctx = watchdogCtx - if cleanup != nil { - defer cleanup() - } - } - switch { case extensionscontroller.ShouldSkipOperation(operationType, cp): return reconcile.Result{}, nil diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go index 8bcd751ad..8488a15d4 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/infrastructure/reconciler.go @@ -19,14 +19,12 @@ import ( "fmt" extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - "github.com/gardener/gardener/extensions/pkg/controller/common" gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "github.com/gardener/gardener/pkg/controllerutils" reconcilerutils "github.com/gardener/gardener/pkg/controllerutils/reconciler" - kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/go-logr/logr" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -104,20 +102,6 @@ func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) ( operationType := gardencorev1beta1helper.ComputeOperationType(infrastructure.ObjectMeta, infrastructure.Status.LastOperation) - if cluster.Shoot != nil && operationType != gardencorev1beta1.LastOperationTypeMigrate { - key := "infrastructure:" + kutil.ObjectName(infrastructure) - ok, watchdogCtx, cleanup, err := common.GetOwnerCheckResultAndContext(ctx, r.client, infrastructure.Namespace, cluster.Shoot.Name, key) - if err != nil { - return reconcile.Result{}, err - } else if !ok { - return reconcile.Result{}, fmt.Errorf("this seed is not the owner of shoot %s", kutil.ObjectName(cluster.Shoot)) - } - ctx = watchdogCtx - if cleanup != nil { - defer cleanup() - } - } - switch { case extensionscontroller.ShouldSkipOperation(operationType, infrastructure): return reconcile.Result{}, nil diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/controller.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/controller.go index f600b74ce..9c1b19db6 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/controller.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/controller.go @@ -22,7 +22,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/predicate" "sigs.k8s.io/controller-runtime/pkg/source" - "github.com/gardener/gardener/extensions/pkg/controller/common" extensionspredicate "github.com/gardener/gardener/extensions/pkg/predicate" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "github.com/gardener/gardener/pkg/controllerutils/mapper" @@ -64,7 +63,7 @@ func DefaultPredicates(ignoreOperationAnnotation bool) []predicate.Predicate { // Add creates a new Worker Controller and adds it to the Manager. // and Start it when the Manager is Started. func Add(mgr manager.Manager, args AddArgs) error { - args.ControllerOptions.Reconciler = NewReconciler(args.Actuator, common.GetDefaultOwnerCheckWatchdogManager()) + args.ControllerOptions.Reconciler = NewReconciler(args.Actuator) args.ControllerOptions.RecoverPanic = true predicates := extensionspredicate.AddTypePredicate(args.Predicates, args.Type) if err := add(mgr, args, predicates); err != nil { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_reconcile.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_reconcile.go index 2d3921ae8..d61bf6646 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_reconcile.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/genericactuator/actuator_reconcile.go @@ -55,14 +55,23 @@ func (a *genericActuator) Reconcile(ctx context.Context, log logr.Logger, worker return fmt.Errorf("pre worker reconciliation hook failed: %w", err) } + // Get the list of all existing machine deployments. + existingMachineDeployments := &machinev1alpha1.MachineDeploymentList{} + if err := a.client.List(ctx, existingMachineDeployments, client.InNamespace(worker.Namespace)); err != nil { + return err + } + // mcmReplicaFunc returns the desired replicas for machine controller manager var mcmReplicaFunc = func() int32 { switch { // If the cluster is hibernated then there is no further need of MCM and therefore its desired replicas is 0 case extensionscontroller.IsHibernated(cluster): return 0 - // If the cluster is created with hibernation enabled, then desired replicas for MCM is 0 + // If the cluster is created with hibernation enabled, then desired replicas for MCM is 0 if there are no existing machine deployments with positive replica count case extensionscontroller.IsHibernationEnabled(cluster) && extensionscontroller.IsCreationInProcess(cluster): + if isExistingMachineDeploymentWithPositiveReplicaCountPresent(existingMachineDeployments) { + return 1 + } return 0 // If shoot is either waking up or in the process of hibernation then, MCM is required and therefore its desired replicas is 1 case extensionscontroller.IsHibernatingOrWakingUp(cluster): @@ -130,12 +139,6 @@ func (a *genericActuator) Reconcile(ctx context.Context, log logr.Logger, worker return fmt.Errorf("failed to update the machine image status: %w", err) } - // Get the list of all existing machine deployments. - existingMachineDeployments := &machinev1alpha1.MachineDeploymentList{} - if err := a.client.List(ctx, existingMachineDeployments, client.InNamespace(worker.Namespace)); err != nil { - return err - } - existingMachineDeploymentNames := sets.String{} for _, deployment := range existingMachineDeployments.Items { existingMachineDeploymentNames.Insert(deployment.Name) @@ -528,6 +531,15 @@ func getExistingMachineDeployment(existingMachineDeployments *machinev1alpha1.Ma return nil } +func isExistingMachineDeploymentWithPositiveReplicaCountPresent(existingMachineDeployments *machinev1alpha1.MachineDeploymentList) bool { + for _, machineDeployment := range existingMachineDeployments.Items { + if machineDeployment.Status.Replicas > 0 { + return true + } + } + return false +} + // ReadMachineConfiguration reads the configuration from worker-pool and returns the corresponding configuration of machine-deployment. func ReadMachineConfiguration(pool extensionsv1alpha1.WorkerPool) *machinev1alpha1.MachineConfiguration { machineConfiguration := &machinev1alpha1.MachineConfiguration{} diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/reconciler.go index 4a0a32473..e65446f29 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/controller/worker/reconciler.go @@ -19,14 +19,12 @@ import ( "fmt" extensionscontroller "github.com/gardener/gardener/extensions/pkg/controller" - "github.com/gardener/gardener/extensions/pkg/controller/common" gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" "github.com/gardener/gardener/pkg/controllerutils" reconcilerutils "github.com/gardener/gardener/pkg/controllerutils/reconciler" - kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "github.com/go-logr/logr" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -38,8 +36,7 @@ import ( ) type reconciler struct { - actuator Actuator - watchdogManager common.WatchdogManager + actuator Actuator client client.Client reader client.Reader @@ -48,13 +45,12 @@ type reconciler struct { // NewReconciler creates a new reconcile.Reconciler that reconciles // Worker resources of Gardener's `extensions.gardener.cloud` API group. -func NewReconciler(actuator Actuator, watchdogManager common.WatchdogManager) reconcile.Reconciler { +func NewReconciler(actuator Actuator) reconcile.Reconciler { return reconcilerutils.OperationAnnotationWrapper( func() client.Object { return &extensionsv1alpha1.Worker{} }, &reconciler{ - actuator: actuator, - watchdogManager: watchdogManager, - statusUpdater: extensionscontroller.NewStatusUpdater(), + actuator: actuator, + statusUpdater: extensionscontroller.NewStatusUpdater(), }, ) } @@ -98,20 +94,6 @@ func (r *reconciler) Reconcile(ctx context.Context, request reconcile.Request) ( operationType := gardencorev1beta1helper.ComputeOperationType(worker.ObjectMeta, worker.Status.LastOperation) - if cluster.Shoot != nil && operationType != gardencorev1beta1.LastOperationTypeMigrate { - key := "worker:" + kutil.ObjectName(worker) - ok, watchdogCtx, cleanup, err := r.watchdogManager.GetResultAndContext(ctx, r.client, worker.Namespace, cluster.Shoot.Name, key) - if err != nil { - return reconcile.Result{}, err - } else if !ok { - return reconcile.Result{}, fmt.Errorf("this seed is not the owner of shoot %s", kutil.ObjectName(cluster.Shoot)) - } - ctx = watchdogCtx - if cleanup != nil { - defer cleanup() - } - } - switch { case extensionscontroller.ShouldSkipOperation(operationType, worker): return reconcile.Result{}, nil diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/add.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/add.go index 764dc7c7d..8e9a3443f 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/add.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/add.go @@ -22,7 +22,10 @@ import ( admissionregistrationv1 "k8s.io/api/admissionregistration/v1" "k8s.io/utils/clock" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" + + "github.com/gardener/gardener/extensions/pkg/webhook" ) // DefaultSyncPeriod is the default sync period for the certificate reconciler and reloader. @@ -35,17 +38,20 @@ func AddCertificateManagementToManager( ctx context.Context, mgr manager.Manager, clock clock.Clock, - seedWebhookConfig, shootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration, + sourceWebhookConfig client.Object, + shootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration, atomicShootWebhookConfig *atomic.Value, - extensionName string, - shootWebhookManagedResourceName string, shootNamespaceSelector map[string]string, - namespace, mode, url string, + shootWebhookManagedResourceName string, + componentName string, + namespace string, + mode string, + url string, ) error { var ( - identity = "gardener-extension-" + extensionName + "-webhook" - caSecretName = "ca-" + extensionName + "-webhook" - serverSecretName = extensionName + "-webhook-server" + identity = webhook.PrefixedName(componentName) + "-webhook" + caSecretName = "ca-" + componentName + "-webhook" + serverSecretName = componentName + "-webhook-server" ) // first, add reconciler that manages the certificates and injects them into webhook configs @@ -53,14 +59,14 @@ func AddCertificateManagementToManager( if err := (&reconciler{ Clock: clock, SyncPeriod: DefaultSyncPeriod, - SeedWebhookConfig: seedWebhookConfig, + SourceWebhookConfig: sourceWebhookConfig, ShootWebhookConfig: shootWebhookConfig, AtomicShootWebhookConfig: atomicShootWebhookConfig, CASecretName: caSecretName, ServerSecretName: serverSecretName, Namespace: namespace, Identity: identity, - ExtensionName: extensionName, + ComponentName: componentName, ShootWebhookManagedResourceName: shootWebhookManagedResourceName, ShootNamespaceSelector: shootNamespaceSelector, Mode: mode, diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/certificates.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/certificates.go index 9d3239b98..80c1b698b 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/certificates.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/certificates.go @@ -62,7 +62,7 @@ func getWebhookCAConfig(name string) *secretutils.CertificateSecretConfig { } } -func getWebhookServerCertConfig(name, namespace, providerName, mode, url string) *secretutils.CertificateSecretConfig { +func getWebhookServerCertConfig(name, namespace, componentName, mode, url string) *secretutils.CertificateSecretConfig { var ( dnsNames []string ipAddresses []net.IP @@ -84,20 +84,18 @@ func getWebhookServerCertConfig(name, namespace, providerName, mode, url string) } case webhook.ModeService: - dnsNames = []string{ - fmt.Sprintf("gardener-extension-%s", providerName), - } + dnsNames = []string{webhook.PrefixedName(componentName)} if namespace != "" { dnsNames = append(dnsNames, - fmt.Sprintf("gardener-extension-%s.%s", providerName, namespace), - fmt.Sprintf("gardener-extension-%s.%s.svc", providerName, namespace), + fmt.Sprintf("%s.%s", webhook.PrefixedName(componentName), namespace), + fmt.Sprintf("%s.%s.svc", webhook.PrefixedName(componentName), namespace), ) } } return &secretutils.CertificateSecretConfig{ Name: name, - CommonName: providerName, + CommonName: componentName, DNSNames: dnsNames, IPAddresses: ipAddresses, CertType: secretutils.ServerCert, diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go index d520c4080..6efadbd42 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/certificates/reconciler.go @@ -20,16 +20,9 @@ import ( "sync/atomic" "time" - "github.com/gardener/gardener/extensions/pkg/webhook" - extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" - "github.com/gardener/gardener/pkg/controllerutils" - secretutils "github.com/gardener/gardener/pkg/utils/secrets" - secretsmanager "github.com/gardener/gardener/pkg/utils/secrets/manager" - "github.com/go-logr/logr" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/util/workqueue" "k8s.io/utils/clock" "sigs.k8s.io/controller-runtime/pkg/client" @@ -37,6 +30,13 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" "sigs.k8s.io/controller-runtime/pkg/reconcile" + + "github.com/gardener/gardener/extensions/pkg/webhook" + extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" + "github.com/gardener/gardener/pkg/controllerutils" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" + secretutils "github.com/gardener/gardener/pkg/utils/secrets" + secretsmanager "github.com/gardener/gardener/pkg/utils/secrets/manager" ) const certificateReconcilerName = "webhook-certificate" @@ -49,8 +49,8 @@ type reconciler struct { Clock clock.Clock // SyncPeriod is the frequency with which to reload the server cert. Defaults to 5m. SyncPeriod time.Duration - // SeedWebhookConfig is the webhook configuration to reconcile in the Seed cluster. - SeedWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration + // SourceWebhookConfig is the webhook configuration to reconcile in the Source cluster. + SourceWebhookConfig client.Object // ShootWebhookConfig is the webhook configuration to reconcile in all Shoot clusters. ShootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration // AtomicShootWebhookConfig is an atomic value in which this reconciler will store the updated ShootWebhookConfig. @@ -66,11 +66,11 @@ type reconciler struct { Namespace string // Identity of the secrets manager used for managing the secret. Identity string - // Name of the extension. - ExtensionName string - // ShootWebhookManagedResourceName is the name of the ManagedResource containing the raw extensionswebhookshoot webhook config. + // Name of the component. + ComponentName string + // ShootWebhookManagedResourceName is the name of the ManagedResource containing the raw shoot webhook config. ShootWebhookManagedResourceName string - // ShootNamespaceSelector is a label selector for extensionswebhookshoot namespaces relevant to the extension. + // ShootNamespaceSelector is a label selector for shoot namespaces relevant to the extension. ShootNamespaceSelector map[string]string // Mode is the webhook client config mode. Mode string @@ -165,11 +165,11 @@ func (r *reconciler) Reconcile(ctx context.Context, _ reconcile.Request) (reconc } log.Info("Generated webhook server cert", "serverSecretName", serverSecret.Name) - if r.SeedWebhookConfig != nil { - if err := r.reconcileSeedWebhookConfig(ctx, caBundleSecret); err != nil { - return reconcile.Result{}, fmt.Errorf("error reconciling seed webhook config: %w", err) + if r.SourceWebhookConfig != nil { + if err := r.reconcileSourceWebhookConfig(ctx, caBundleSecret); err != nil { + return reconcile.Result{}, fmt.Errorf("error reconciling source webhook config: %w", err) } - log.Info("Updated seed webhook config with new CA bundle", "webhookConfig", r.SeedWebhookConfig) + log.Info("Updated source webhook config with new CA bundle", "webhookConfig", r.SourceWebhookConfig) } if r.ShootWebhookConfig != nil { @@ -181,7 +181,7 @@ func (r *reconciler) Reconcile(ctx context.Context, _ reconcile.Request) (reconc r.AtomicShootWebhookConfig.Store(r.ShootWebhookConfig.DeepCopy()) // reconcile all shoot webhook configs with the freshly created CA bundle - if err := extensionswebhookshoot.ReconcileWebhooksForAllNamespaces(ctx, r.client, r.ExtensionName, r.ShootWebhookManagedResourceName, r.ShootNamespaceSelector, r.serverPort, r.ShootWebhookConfig); err != nil { + if err := extensionswebhookshoot.ReconcileWebhooksForAllNamespaces(ctx, r.client, r.ComponentName, r.ShootWebhookManagedResourceName, r.ShootNamespaceSelector, r.serverPort, r.ShootWebhookConfig); err != nil { return reconcile.Result{}, fmt.Errorf("error reconciling all shoot webhook configs: %w", err) } log.Info("Updated all shoot webhook configs with new CA bundle", "webhookConfig", r.ShootWebhookConfig) @@ -194,9 +194,9 @@ func (r *reconciler) Reconcile(ctx context.Context, _ reconcile.Request) (reconc return reconcile.Result{RequeueAfter: r.SyncPeriod}, nil } -func (r *reconciler) reconcileSeedWebhookConfig(ctx context.Context, caBundleSecret *corev1.Secret) error { +func (r *reconciler) reconcileSourceWebhookConfig(ctx context.Context, caBundleSecret *corev1.Secret) error { // copy object so that we don't lose its name on API/client errors - config := r.SeedWebhookConfig.DeepCopyObject().(client.Object) + config := r.SourceWebhookConfig.DeepCopyObject().(client.Object) if err := r.client.Get(ctx, client.ObjectKeyFromObject(config), config); err != nil { return err } @@ -209,18 +209,11 @@ func (r *reconciler) reconcileSeedWebhookConfig(ctx context.Context, caBundleSec } func isWebhookServerSecretPresent(ctx context.Context, c client.Reader, secretName, namespace, identity string) (bool, error) { - secretList := &metav1.PartialObjectMetadataList{} - secretList.SetGroupVersionKind(corev1.SchemeGroupVersion.WithKind("SecretList")) - - if err := c.List(ctx, secretList, client.InNamespace(namespace), client.Limit(1), client.MatchingLabels{ + return kutil.ResourcesExist(ctx, c, corev1.SchemeGroupVersion.WithKind("SecretList"), client.InNamespace(namespace), client.MatchingLabels{ secretsmanager.LabelKeyName: secretName, secretsmanager.LabelKeyManagedBy: secretsmanager.LabelValueSecretsManager, secretsmanager.LabelKeyManagerIdentity: identity, - }); err != nil { - return false, err - } - - return len(secretList.Items) > 0, nil + }) } func (r *reconciler) newSecretsManager(ctx context.Context, log logr.Logger, c client.Client) (secretsmanager.Interface, error) { @@ -242,6 +235,6 @@ func (r *reconciler) generateWebhookCA(ctx context.Context, sm secretsmanager.In func (r *reconciler) generateWebhookServerCert(ctx context.Context, sm secretsmanager.Interface) (*corev1.Secret, error) { // use current CA for signing server cert to prevent mismatches when dropping the old CA from the webhook config - return sm.Generate(ctx, getWebhookServerCertConfig(r.ServerSecretName, r.Namespace, r.ExtensionName, r.Mode, r.URL), + return sm.Generate(ctx, getWebhookServerCertConfig(r.ServerSecretName, r.Namespace, r.ComponentName, r.Mode, r.URL), secretsmanager.SignedByCA(r.CASecretName, secretsmanager.UseCurrentCA)) } diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go index 863c611f8..3d5394178 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/cmd/options.go @@ -19,16 +19,17 @@ import ( "fmt" "sync/atomic" - extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" - "github.com/gardener/gardener/extensions/pkg/webhook/certificates" - extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" - "github.com/gardener/gardener/pkg/utils/flow" - "github.com/spf13/pflag" admissionregistrationv1 "k8s.io/api/admissionregistration/v1" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/utils/clock" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/manager" + + extensionswebhook "github.com/gardener/gardener/extensions/pkg/webhook" + "github.com/gardener/gardener/extensions/pkg/webhook/certificates" + extensionswebhookshoot "github.com/gardener/gardener/extensions/pkg/webhook/shoot" + "github.com/gardener/gardener/pkg/utils/flow" ) const ( @@ -288,8 +289,8 @@ func (c *AddToManagerConfig) AddToManager(ctx context.Context, mgr manager.Manag if err := extensionswebhook.InjectCABundleIntoWebhookConfig(shootWebhookConfig, caBundle); err != nil { return nil, err } + atomicShootWebhookConfig.Store(shootWebhookConfig.DeepCopy()) } - atomicShootWebhookConfig.Store(shootWebhookConfig.DeepCopy()) // register seed webhook config once we become leader – with the CA bundle we just generated // also reconcile all shoot webhook configs to update the CA bundle @@ -320,9 +321,9 @@ func (c *AddToManagerConfig) AddToManager(ctx context.Context, mgr manager.Manag seedWebhookConfig, shootWebhookConfig, atomicShootWebhookConfig, - c.extensionName, - c.shootWebhookManagedResourceName, c.shootNamespaceSelector, + c.shootWebhookManagedResourceName, + c.extensionName, c.Server.Namespace, c.Server.Mode, c.Server.URL, @@ -333,7 +334,7 @@ func (c *AddToManagerConfig) AddToManager(ctx context.Context, mgr manager.Manag return atomicShootWebhookConfig, nil } -func (c *AddToManagerConfig) reconcileSeedWebhookConfig(mgr manager.Manager, seedWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration, caBundle []byte) func(ctx context.Context) error { +func (c *AddToManagerConfig) reconcileSeedWebhookConfig(mgr manager.Manager, seedWebhookConfig client.Object, caBundle []byte) func(ctx context.Context) error { return func(ctx context.Context) error { if seedWebhookConfig != nil { if err := extensionswebhook.ReconcileSeedWebhookConfig(ctx, mgr.GetClient(), seedWebhookConfig, c.Server.Namespace, caBundle); err != nil { diff --git a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go index 89124b8a6..dbe46a1ed 100644 --- a/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go +++ b/vendor/github.com/gardener/gardener/extensions/pkg/webhook/registration.go @@ -48,8 +48,28 @@ const ( ModeURLWithServiceName = "url-service" ) +// PrefixedName does not prefix the component name if it starts with "gardener-". Otherwise, it prefixes it with +// "gardener-extension-". +func PrefixedName(componentName string) string { + if !strings.HasPrefix(componentName, "gardener-") { + return NamePrefix + componentName + } + return componentName +} + // BuildWebhookConfigs builds MutatingWebhookConfiguration objects for seed and shoots from the given webhooks slice. -func BuildWebhookConfigs(webhooks []*Webhook, c client.Client, namespace, providerName string, servicePort int, mode, url string, caBundle []byte) (*admissionregistrationv1.MutatingWebhookConfiguration, *admissionregistrationv1.MutatingWebhookConfiguration, error) { +func BuildWebhookConfigs( + webhooks []*Webhook, + c client.Client, + namespace, providerName string, + servicePort int, + mode, url string, + caBundle []byte, +) ( + seedWebhookConfig client.Object, + shootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration, + err error, +) { var ( exact = admissionregistrationv1.Exact sideEffects = admissionregistrationv1.SideEffectClassNone @@ -92,20 +112,18 @@ func BuildWebhookConfigs(webhooks []*Webhook, c client.Client, namespace, provid case TargetSeed: webhookToRegister.FailurePolicy = getFailurePolicy(admissionregistrationv1.Fail, webhook.FailurePolicy) webhookToRegister.MatchPolicy = &exact - webhookToRegister.ClientConfig = buildClientConfigFor(webhook, namespace, providerName, servicePort, mode, url, caBundle) + webhookToRegister.ClientConfig = BuildClientConfigFor(webhook.Path, namespace, providerName, servicePort, mode, url, caBundle) seedWebhooks = append(seedWebhooks, webhookToRegister) case TargetShoot: webhookToRegister.FailurePolicy = getFailurePolicy(admissionregistrationv1.Ignore, webhook.FailurePolicy) webhookToRegister.MatchPolicy = &exact - webhookToRegister.ClientConfig = buildClientConfigFor(webhook, namespace, providerName, servicePort, shootMode, url, caBundle) + webhookToRegister.ClientConfig = BuildClientConfigFor(webhook.Path, namespace, providerName, servicePort, shootMode, url, caBundle) shootWebhooks = append(shootWebhooks, webhookToRegister) default: return nil, nil, fmt.Errorf("invalid webhook target: %s", webhook.Target) } } - var seedWebhookConfig, shootWebhookConfig *admissionregistrationv1.MutatingWebhookConfiguration - // if all webhooks for one target are removed in a new version, extensions need to explicitly delete the respective // webhook config if len(seedWebhooks) > 0 { @@ -298,24 +316,29 @@ func buildRule(c client.Client, t Type) (*admissionregistrationv1.RuleWithOperat }, nil } -func buildClientConfigFor(webhook *Webhook, namespace, providerName string, servicePort int, mode, url string, caBundle []byte) admissionregistrationv1.WebhookClientConfig { +// BuildClientConfigFor builds the client config for a webhook. +func BuildClientConfigFor(webhookPath string, namespace, componentName string, servicePort int, mode, url string, caBundle []byte) admissionregistrationv1.WebhookClientConfig { var ( - path = "/" + webhook.Path + path = webhookPath clientConfig = admissionregistrationv1.WebhookClientConfig{ // can be empty if injected later on CABundle: caBundle, } ) + if !strings.HasPrefix(path, "/") { + path = "/" + path + } + switch mode { case ModeURL: clientConfig.URL = pointer.String(fmt.Sprintf("https://%s%s", url, path)) case ModeURLWithServiceName: - clientConfig.URL = pointer.String(fmt.Sprintf("https://gardener-extension-%s.%s:%d%s", providerName, namespace, servicePort, path)) + clientConfig.URL = pointer.String(fmt.Sprintf("https://%s.%s:%d%s", PrefixedName(componentName), namespace, servicePort, path)) case ModeService: clientConfig.Service = &admissionregistrationv1.ServiceReference{ Namespace: namespace, - Name: "gardener-extension-" + providerName, + Name: PrefixedName(componentName), Path: &path, } } diff --git a/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor b/vendor/github.com/gardener/gardener/hack/.ci/component_descriptor old mode 100644 new mode 100755 diff --git a/vendor/github.com/gardener/gardener/hack/.ci/doc.go b/vendor/github.com/gardener/gardener/hack/.ci/doc.go old mode 100644 new mode 100755 diff --git a/vendor/github.com/gardener/gardener/hack/.ci/prepare_release b/vendor/github.com/gardener/gardener/hack/.ci/prepare_release old mode 100644 new mode 100755 diff --git a/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version b/vendor/github.com/gardener/gardener/hack/.ci/set_dependency_version old mode 100644 new mode 100755 diff --git a/vendor/github.com/gardener/gardener/hack/LICENSE_BOILERPLATE.txt b/vendor/github.com/gardener/gardener/hack/LICENSE_BOILERPLATE.txt old mode 100644 new mode 100755 diff --git a/vendor/github.com/gardener/gardener/hack/check-apidiff.sh b/vendor/github.com/gardener/gardener/hack/check-apidiff.sh index f302fcc98..6bb008476 100755 --- a/vendor/github.com/gardener/gardener/hack/check-apidiff.sh +++ b/vendor/github.com/gardener/gardener/hack/check-apidiff.sh @@ -57,7 +57,7 @@ exported_pkg=( # check the changes only for the package that is in the exported_pkg list while IFS= read -r line; do - if [[ $line =~ "gardener/gardener" ]]; then + if [[ $line =~ ^"github.com/gardener/gardener" ]]; then temp=0 for x in ${exported_pkg[*]}; do if [[ $line =~ $x ]]; then diff --git a/vendor/github.com/gardener/gardener/hack/check-skaffold-deps.sh b/vendor/github.com/gardener/gardener/hack/check-skaffold-deps.sh index c2025c9ab..ede748370 100755 --- a/vendor/github.com/gardener/gardener/hack/check-skaffold-deps.sh +++ b/vendor/github.com/gardener/gardener/hack/check-skaffold-deps.sh @@ -26,24 +26,15 @@ function cleanup_output { } trap cleanup_output EXIT -declare -A binary_to_skaffold_config_name -binary_to_skaffold_config_name["gardener-admission-controller"]="controlplane" -binary_to_skaffold_config_name["gardener-apiserver"]="controlplane" -binary_to_skaffold_config_name["gardener-controller-manager"]="controlplane" -binary_to_skaffold_config_name["gardener-extension-provider-local"]="provider-local" -binary_to_skaffold_config_name["gardener-resource-manager"]="gardenlet" -binary_to_skaffold_config_name["gardener-seed-admission-controller"]="gardenlet" -binary_to_skaffold_config_name["gardener-scheduler"]="controlplane" -binary_to_skaffold_config_name["gardenlet"]="gardenlet" +function check() { + skaffold_file="$1" + binary_name="$2" + skaffold_config_name="$3" -skaffold_yaml="$(cat "$(dirname "$0")/../skaffold.yaml")" + skaffold_yaml="$(cat "$(dirname "$0")/../$skaffold_file")" -for key in "${!binary_to_skaffold_config_name[@]}"; do - binary_name="$key" - skaffold_config_name="${binary_to_skaffold_config_name[${key}]}" - - path_current_skaffold_dependencies="${out_dir}/current-skaffold-deps-$binary_name.txt" - path_actual_dependencies="${out_dir}/actual-deps-$binary_name.txt" + path_current_skaffold_dependencies="${out_dir}/current-$skaffold_file-deps-$binary_name.txt" + path_actual_dependencies="${out_dir}/actual-$skaffold_file-deps-$binary_name.txt" echo "$skaffold_yaml" |\ yq eval "select(.metadata.name == \"$skaffold_config_name\") | .build.artifacts[] | select(.ko.main == \"./cmd/$binary_name\") | .ko.dependencies.paths[]?" - |\ @@ -59,21 +50,34 @@ for key in "${!binary_to_skaffold_config_name[@]}"; do # always add vendor directory echo "vendor" >> "$path_actual_dependencies" - echo -n ">> Checking defined dependencies in Skaffold config '$skaffold_config_name' for '$binary_name'..." + echo -n ">> Checking defined dependencies in Skaffold config '$skaffold_config_name' for '$binary_name' in '$skaffold_file'..." if ! diff="$(diff "$path_current_skaffold_dependencies" "$path_actual_dependencies")"; then check_successful=false echo - echo ">>> The following actual dependencies are missing in skaffold.yaml (need to be added):" + echo ">>> The following actual dependencies are missing in $skaffold_file (need to be added):" echo "$diff" | grep '>' | awk '{print $2}' echo - echo ">>> The following dependencies defined in skaffold.yaml are not needed actually (need to be removed):" + echo ">>> The following dependencies defined in $skaffold_file are not needed actually (need to be removed):" echo "$diff" | grep '<' | awk '{print $2}' echo else echo " success." fi -done +} + +# skaffold.yaml +check "skaffold.yaml" "gardener-admission-controller" "controlplane" +check "skaffold.yaml" "gardener-apiserver" "controlplane" +check "skaffold.yaml" "gardener-controller-manager" "controlplane" +check "skaffold.yaml" "gardener-extension-provider-local" "provider-local" +check "skaffold.yaml" "gardener-resource-manager" "gardenlet" +check "skaffold.yaml" "gardener-scheduler" "controlplane" +check "skaffold.yaml" "gardenlet" "gardenlet" + +# skaffold-operator.yaml +check "skaffold-operator.yaml" "gardener-operator" "gardener-operator" +check "skaffold-operator.yaml" "gardener-resource-manager" "gardener-operator" if [ "$check_successful" = false ] ; then exit 1 diff --git a/vendor/github.com/gardener/gardener/hack/cherry-pick-pull.sh b/vendor/github.com/gardener/gardener/hack/cherry-pick-pull.sh index 81bcbecbe..9b895910d 100755 --- a/vendor/github.com/gardener/gardener/hack/cherry-pick-pull.sh +++ b/vendor/github.com/gardener/gardener/hack/cherry-pick-pull.sh @@ -210,7 +210,7 @@ for pull in "${PULLS[@]}"; do pr_info=$(curl "https://api.github.com/repos/${MAIN_REPO_ORG}/${MAIN_REPO_NAME}/pulls/${pull}" -sS) subject=$(echo ${pr_info} | jq -cr '.title') SUBJECTS+=("#${pull}: ${subject}") - labels=$(echo ${pr_info} | jq '.labels[].name' -cr | grep -P '^(area|kind)' | sed 's|^|/|g') + labels=$(echo ${pr_info} | jq '.labels[].name' -cr | grep -P '^(area|kind)' | sed -e 's|/| |' -e 's|^|/|g') LABELS+=("${labels}") # remove the patch file from /tmp diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-multi-zone.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-multi-zone.sh new file mode 100755 index 000000000..f977dfe8c --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-multi-zone.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o nounset +set -o pipefail +set -o errexit +set -x + +source $(dirname "${0}")/ci-common.sh + +clamp_mss_to_pmtu + +# test setup +make kind-ha-multi-zone-up + +# export all container logs and events after test execution +trap " + ( export_logs 'gardener-local-ha-multi-zone'; + export_events_for_kind 'gardener-local-ha-multi-zone'; export_events_for_shoots ) + ( make kind-ha-multi-zone-down ) +" EXIT + +make gardener-ha-multi-zone-up +make test-e2e-local-ha-multi-zone PARALLEL_E2E_TESTS=10 +make gardener-ha-multi-zone-down diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-single-zone.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-single-zone.sh new file mode 100755 index 000000000..3da5596f5 --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha-single-zone.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o nounset +set -o pipefail +set -o errexit +set -x + +source $(dirname "${0}")/ci-common.sh + +clamp_mss_to_pmtu + +# test setup +make kind-ha-single-zone-up + +# export all container logs and events after test execution +trap " + ( export_logs 'gardener-local-ha-single-zone'; + export_events_for_kind 'gardener-local-ha-single-zone'; export_events_for_shoots ) + ( make kind-ha-single-zone-down ) +" EXIT + +make gardener-ha-single-zone-up +make test-e2e-local-ha-single-zone PARALLEL_E2E_TESTS=10 +make gardener-ha-single-zone-down diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration.sh index 9b6a5dfc3..f2091a4f0 100755 --- a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration.sh +++ b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-migration.sh @@ -28,9 +28,9 @@ make kind2-up # export all container logs and events after test execution trap " - ( export KUBECONFIG=$PWD/example/gardener-local/kind/kubeconfig; export_logs 'gardener-local'; + ( export KUBECONFIG=$PWD/example/gardener-local/kind/local/kubeconfig; export_logs 'gardener-local'; export_events_for_kind 'gardener-local'; export_events_for_shoots ) - ( export KUBECONFIG=$PWD/example/gardener-local/kind2/kubeconfig; export_logs 'gardener-local2'; + ( export KUBECONFIG=$PWD/example/gardener-local/kind/local2/kubeconfig; export_logs 'gardener-local2'; export_events_for_kind 'gardener-local2' ) ( make kind-down; make kind2-down ) " EXIT diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-operator.sh similarity index 79% rename from vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha.sh rename to vendor/github.com/gardener/gardener/hack/ci-e2e-kind-operator.sh index 541995440..7ad7553f0 100755 --- a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-ha.sh +++ b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-operator.sh @@ -17,22 +17,20 @@ set -o nounset set -o pipefail set -o errexit -set -x source $(dirname "${0}")/ci-common.sh clamp_mss_to_pmtu # test setup -make kind-ha-up +make kind-operator-up # export all container logs and events after test execution trap " - ( export_logs 'gardener-local-ha'; - export_events_for_kind 'gardener-local-ha'; export_events_for_shoots ) - ( make kind-ha-down ) + ( export KUBECONFIG=$PWD/example/gardener-local/kind/operator/kubeconfig; export_logs 'gardener-operator-local' ) + ( make kind-down ) " EXIT -make gardener-ha-up -make KUBECONFIG=$KUBECONFIG test-e2e-local -make gardener-ha-down +make operator-up +make test-e2e-local-operator PARALLEL_E2E_TESTS=10 +make operator-down diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-upgrade.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-upgrade.sh new file mode 100755 index 000000000..f4922fc1b --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind-upgrade.sh @@ -0,0 +1,199 @@ +#!/usr/bin/env bash +# +# Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o nounset +set -o pipefail +set -o errexit + +source $(dirname "${0}")/ci-common.sh + +VERSION="$(cat VERSION)" +CLUSTER_NAME="" +SEED_NAME="" + +# copy_kubeconfig_from_kubeconfig_env_var copies the kubeconfig to apporiate location based on kind setup +function copy_kubeconfig_from_kubeconfig_env_var() { + case "$SHOOT_FAILURE_TOLERANCE_TYPE" in + node) + cp $KUBECONFIG example/provider-local/seed-kind-ha-single-zone/base/kubeconfig + cp $KUBECONFIG example/gardener-local/kind/ha-single-zone/kubeconfig + ;; + zone) + cp $KUBECONFIG example/provider-local/seed-kind-ha-multi-zone/base/kubeconfig + cp $KUBECONFIG example/gardener-local/kind/ha-multi-zone/kubeconfig + ;; + *) + cp $KUBECONFIG example/provider-local/seed-kind/base/kubeconfig + cp $KUBECONFIG example/gardener-local/kind/local/kubeconfig + ;; + esac +} + +function gardener_up() { + case "$SHOOT_FAILURE_TOLERANCE_TYPE" in + node) + make gardener-ha-single-zone-up + ;; + zone) + make gardener-ha-multi-zone-up + ;; + *) + make gardener-up + ;; + esac +} + +function gardener_down() { + case "$SHOOT_FAILURE_TOLERANCE_TYPE" in + node) + make gardener-ha-single-zone-down + ;; + zone) + make gardener-ha-multi-zone-down + ;; + *) + make gardener-down + ;; + esac +} + +function kind_up() { + case "$SHOOT_FAILURE_TOLERANCE_TYPE" in + node) + make kind-ha-single-zone-up + ;; + zone) + make kind-ha-multi-zone-up + ;; + *) + make kind-up + ;; + esac +} + +function kind_down() { + case "$SHOOT_FAILURE_TOLERANCE_TYPE" in + node) + make kind-ha-single-zone-down + ;; + zone) + make kind-ha-multi-zone-down + ;; + *) + make kind-down + ;; + esac +} + +function install_previous_release() { + pushd $GARDENER_RELEASE_DOWNLOAD_PATH/gardener-releases/$GARDENER_PREVIOUS_RELEASE >/dev/null + copy_kubeconfig_from_kubeconfig_env_var + gardener_up + popd >/dev/null +} + +function upgrade_to_next_release() { + # downloads and upgrades to GARDENER_NEXT_RELEASE release if GARDENER_NEXT_RELEASE is not same as version mentioned in VERSION file. + # if GARDENER_NEXT_RELEASE is same as version mentioned in VERSION file then it is considered as local release and install gardener from local repo. + if [[ -n $GARDENER_NEXT_RELEASE && $GARDENER_NEXT_RELEASE != $VERSION ]]; then + # download gardener previous release to perform gardener upgrade tests + $(dirname "${0}")/download_gardener_source_code.sh --gardener-version $GARDENER_NEXT_RELEASE --download-path $GARDENER_RELEASE_DOWNLOAD_PATH/gardener-releases + pushd $GARDENER_RELEASE_DOWNLOAD_PATH/gardener-releases/$GARDENER_NEXT_RELEASE >/dev/null + copy_kubeconfig_from_kubeconfig_env_var + gardener_up + popd >/dev/null + else + gardener_up + fi + +} + +function set_gardener_upgrade_version_env_variables() { + if [[ -z "$GARDENER_PREVIOUS_RELEASE" ]]; then + export GARDENER_PREVIOUS_RELEASE="$(curl -s https://api.github.com/repos/gardener/gardener/releases/latest | grep tag_name | cut -d '"' -f 4)" + fi + + if [[ -z "$GARDENER_NEXT_RELEASE" ]]; then + export GARDENER_NEXT_RELEASE="$VERSION" + fi +} + +function set_cluster_name() { + case "$SHOOT_FAILURE_TOLERANCE_TYPE" in + node) + CLUSTER_NAME="gardener-local-ha-single-zone" + ;; + zone) + CLUSTER_NAME="gardener-local-ha-multi-zone" + ;; + *) + CLUSTER_NAME="gardener-local" + ;; + esac +} + +function set_seed_name() { + case "$SHOOT_FAILURE_TOLERANCE_TYPE" in + node) + SEED_NAME="local-ha-single-zone" + ;; + zone) + SEED_NAME="local-ha-multi-zone" + ;; + *) + SEED_NAME="local" + ;; + esac +} + +function wait_until_seed_gets_upgraded() { + echo "Wait until seed gets upgraded from version '$GARDENER_PREVIOUS_RELEASE' to '$GARDENER_NEXT_RELEASE'" + kubectl wait seed $1 --timeout=5m \ + --for=jsonpath='{.status.gardener.version}'=$GARDENER_NEXT_RELEASE && condition=gardenletready && condition=extensionsready && condition=bootstrapped +} + +clamp_mss_to_pmtu +set_gardener_upgrade_version_env_variables +set_cluster_name +set_seed_name + +# download gardener previous release to perform gardener upgrade tests +$(dirname "${0}")/download_gardener_source_code.sh --gardener-version $GARDENER_PREVIOUS_RELEASE --download-path $GARDENER_RELEASE_DOWNLOAD_PATH/gardener-releases + +# test setup +kind_up + +# export all container logs and events after test execution +trap " +( rm -rf $GARDENER_RELEASE_DOWNLOAD_PATH/gardener-releases); +( export_logs '$CLUSTER_NAME'; export_events_for_kind '$CLUSTER_NAME'; export_events_for_shoots ) +( kind_down;) +" EXIT + +echo "Installing gardener version '$GARDENER_PREVIOUS_RELEASE'" +install_previous_release + +echo "Running gardener pre-upgrade tests" +make test-pre-upgrade GARDENER_PREVIOUS_RELEASE=$GARDENER_PREVIOUS_RELEASE GARDENER_NEXT_RELEASE=$GARDENER_NEXT_RELEASE + +echo "Upgrading gardener version '$GARDENER_PREVIOUS_RELEASE' to '$GARDENER_NEXT_RELEASE'" +upgrade_to_next_release +wait_until_seed_gets_upgraded "$SEED_NAME" + +echo "Running gardener post-upgrade tests" +make test-post-upgrade GARDENER_PREVIOUS_RELEASE=$GARDENER_PREVIOUS_RELEASE GARDENER_NEXT_RELEASE=$GARDENER_NEXT_RELEASE + +gardener_down diff --git a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind.sh b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind.sh index 5cad10a75..9633de2c6 100755 --- a/vendor/github.com/gardener/gardener/hack/ci-e2e-kind.sh +++ b/vendor/github.com/gardener/gardener/hack/ci-e2e-kind.sh @@ -27,7 +27,7 @@ make kind-up # export all container logs and events after test execution trap " - ( export KUBECONFIG=$PWD/example/gardener-local/kind/kubeconfig; export_logs 'gardener-local'; + ( export KUBECONFIG=$PWD/example/gardener-local/kind/local/kubeconfig; export_logs 'gardener-local'; export_events_for_kind 'gardener-local'; export_events_for_shoots ) ( make kind-down ) " EXIT diff --git a/vendor/github.com/gardener/gardener/hack/download_gardener_source_code.sh b/vendor/github.com/gardener/gardener/hack/download_gardener_source_code.sh new file mode 100755 index 000000000..3ff770223 --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/download_gardener_source_code.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +# Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -o errexit +set -o nounset +set -o pipefail + +GARDENER_VERSION="$(curl -s https://api.github.com/repos/gardener/gardener/releases/latest | grep tag_name | cut -d '"' -f 4)" +GARDENER_RELEASE_DOWNLOAD_PATH="$(dirname $0)/dev/gardener-releases" + +parse_flags() { + while test $# -gt 0; do + case "$1" in + --gardener-version) + shift + GARDENER_VERSION="$1" + ;; + --download-path) + shift + GARDENER_RELEASE_DOWNLOAD_PATH="$1" + ;; + esac + shift + done +} + +parse_flags "$@" + +curl -sL "https://codeload.github.com/gardener/gardener/legacy.tar.gz/${GARDENER_VERSION}" -o /tmp/source_code.tar.gz && + mkdir -p "${GARDENER_RELEASE_DOWNLOAD_PATH}/${GARDENER_VERSION}" && + tar -C "${GARDENER_RELEASE_DOWNLOAD_PATH}/${GARDENER_VERSION}" -xzf /tmp/source_code.tar.gz --strip-components=1 && rm /tmp/source_code.tar.gz diff --git a/vendor/github.com/gardener/gardener/hack/gardener-down.sh b/vendor/github.com/gardener/gardener/hack/gardener-down.sh new file mode 100755 index 000000000..f1438d325 --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/gardener-down.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +SKAFFOLD_PROFILE="" + +parse_flags() { + while test $# -gt 0; do + case "$1" in + --skaffold-profile) + shift; SKAFFOLD_PROFILE="-p $1" + ;; + esac + + shift + done +} + +parse_flags "$@" + +# delete stuff gradually in the right order, otherwise several dependencies will prevent the cleanup from succeeding +kubectl delete seed \ + local \ + local2 \ + local-ha-single-zone \ + local-ha-multi-zone \ + --ignore-not-found \ + --wait \ + --timeout 5m + +skaffold delete -m provider-local,gardenlet $SKAFFOLD_PROFILE + +kubectl delete validatingwebhookconfiguration/gardener-admission-controller --ignore-not-found +kubectl annotate project local garden confirmation.gardener.cloud/deletion=true + +skaffold delete -m local-env $SKAFFOLD_PROFILE +skaffold delete -m etcd,controlplane $SKAFFOLD_PROFILE + +# workaround for https://github.com/gardener/gardener/issues/5164 +kubectl delete ns \ + seed-local \ + seed-local2 \ + seed-local-ha-single-zone \ + seed-local-ha-multi-zone \ + --ignore-not-found + +# cleanup namespaces that don't get deleted automatically +kubectl delete ns gardener-system-seed-lease --ignore-not-found diff --git a/vendor/github.com/gardener/gardener/hack/gardener-extensions-down.sh b/vendor/github.com/gardener/gardener/hack/gardener-extensions-down.sh new file mode 100755 index 000000000..7e77e59da --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/gardener-extensions-down.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +SEED_NAME="" +PATH_SEED_KUBECONFIG="" +PATH_GARDEN_KUBECONFIG="" + +parse_flags() { + while test $# -gt 0; do + case "$1" in + --seed-name) + shift; SEED_NAME="$1" + ;; + --path-seed-kubeconfig) + shift; PATH_SEED_KUBECONFIG="$1" + ;; + --path-garden-kubeconfig) + shift; PATH_GARDEN_KUBECONFIG="$1" + ;; + esac + + shift + done +} + +parse_flags "$@" + +# Delete stuff gradually in the right order, otherwise several dependencies will prevent the cleanup from succeeding. +# Deleting seed will fail as long as there are shoots scheduled on it. This is desired to ensure that there are no orphan infrastructure elements left. +echo "Deleting $SEED_NAME seed" +kubectl --kubeconfig="$PATH_GARDEN_KUBECONFIG" delete seeds "$SEED_NAME" --wait --ignore-not-found +skaffold --kubeconfig="$PATH_SEED_KUBECONFIG" delete -m gardenlet -p extensions +kubectl --kubeconfig="$PATH_GARDEN_KUBECONFIG" delete ns relay --ignore-not-found +kubectl --kubeconfig "$PATH_SEED_KUBECONFIG" delete ns garden registry relay --ignore-not-found +kubectl --kubeconfig "$PATH_SEED_KUBECONFIG" delete -k "$SCRIPT_DIR"/../example/provider-extensions/kyverno --ignore-not-found +kubectl --kubeconfig "$PATH_SEED_KUBECONFIG" delete mutatingwebhookconfigurations kyverno-policy-mutating-webhook-cfg kyverno-resource-mutating-webhook-cfg kyverno-verify-mutating-webhook-cfg --ignore-not-found +kubectl --kubeconfig "$PATH_SEED_KUBECONFIG" delete validatingwebhookconfigurations kyverno-policy-validating-webhook-cfg kyverno-resource-validating-webhook-cfg --ignore-not-found + +echo "Cleaning up kind cluster" +kubectl --kubeconfig="$PATH_GARDEN_KUBECONFIG" delete validatingwebhookconfiguration/gardener-admission-controller --ignore-not-found +kubectl --kubeconfig="$PATH_GARDEN_KUBECONFIG" annotate project local garden confirmation.gardener.cloud/deletion=true +skaffold --kubeconfig="$PATH_GARDEN_KUBECONFIG" delete -m extensions-env -p extensions +skaffold --kubeconfig="$PATH_GARDEN_KUBECONFIG" delete -m etcd,controlplane -p extensions +kubectl --kubeconfig="$PATH_GARDEN_KUBECONFIG" delete ns garden gardener-system-seed-lease --ignore-not-found diff --git a/vendor/github.com/gardener/gardener/hack/gardener-extensions-up.sh b/vendor/github.com/gardener/gardener/hack/gardener-extensions-up.sh new file mode 100755 index 000000000..c9670e1d1 --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/gardener-extensions-up.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )" + +SEED_NAME="" +PATH_SEED_KUBECONFIG="" +PATH_GARDEN_KUBECONFIG="" + +parse_flags() { + while test $# -gt 0; do + case "$1" in + --seed-name) + shift; SEED_NAME="$1" + ;; + --path-seed-kubeconfig) + shift; PATH_SEED_KUBECONFIG="$1" + ;; + --path-garden-kubeconfig) + shift; PATH_GARDEN_KUBECONFIG="$1" + ;; + esac + + shift + done +} + +parse_flags "$@" + +echo "Configure seed cluster" +"$SCRIPT_DIR"/../example/provider-extensions/seed/configure-seed.sh "$PATH_GARDEN_KUBECONFIG" "$PATH_SEED_KUBECONFIG" "$SEED_NAME" +echo "Start bootstrapping Gardener" +SKAFFOLD_DEFAULT_REPO=localhost:5001 SKAFFOLD_PUSH=true skaffold run -m etcd,controlplane,extensions-env -p extensions +echo "Registering controllers" +kubectl --kubeconfig "$PATH_GARDEN_KUBECONFIG" --server-side=true apply -f "$SCRIPT_DIR"/../example/provider-extensions/garden/controllerregistrations +echo "Creating CloudProfiles" +kubectl --kubeconfig "$PATH_GARDEN_KUBECONFIG" --server-side=true apply -f "$SCRIPT_DIR"/../example/provider-extensions/garden/cloudprofiles +"$SCRIPT_DIR"/../example/provider-extensions/seed/create-seed.sh "$PATH_GARDEN_KUBECONFIG" "$PATH_SEED_KUBECONFIG" diff --git a/vendor/github.com/gardener/gardener/hack/generate-seed-crds.sh b/vendor/github.com/gardener/gardener/hack/generate-crds.sh similarity index 88% rename from vendor/github.com/gardener/gardener/hack/generate-seed-crds.sh rename to vendor/github.com/gardener/gardener/hack/generate-crds.sh index 3e1fe19ce..253027126 100755 --- a/vendor/github.com/gardener/gardener/hack/generate-seed-crds.sh +++ b/vendor/github.com/gardener/gardener/hack/generate-crds.sh @@ -19,8 +19,8 @@ set -o nounset set -o pipefail # Usage: -# generate-seed-crds.sh [ ...] -# Generate manifests for all CRDs that are present on a Seed cluster to the current working directory. +# generate-crds.sh [ ...] +# Generate manifests for all CRDs to the current working directory. # Useful for development purposes. # # File name prefix for manifest files (e.g. '10-crd-') @@ -44,12 +44,18 @@ get_group_package () { "resources.gardener.cloud") echo "github.com/gardener/gardener/pkg/apis/resources/v1alpha1" ;; + "operator.gardener.cloud") + echo "github.com/gardener/gardener/pkg/apis/operator/v1alpha1" + ;; "druid.gardener.cloud") echo "github.com/gardener/etcd-druid/api/v1alpha1" ;; "autoscaling.k8s.io") echo "github.com/gardener/hvpa-controller/api/v1alpha1" ;; + "fluentbit.fluent.io") + echo "github.com/fluent/fluent-operator/apis/fluentbit/v1alpha2" + ;; *) >&2 echo "unknown group $1" return 1 @@ -109,8 +115,10 @@ if [ -n "${2:-}" ]; then else generate_group extensions.gardener.cloud generate_group resources.gardener.cloud + generate_group operator.gardener.cloud generate_group druid.gardener.cloud generate_group autoscaling.k8s.io + generate_group fluentbit.fluent.io fi else while [ -n "${2:-}" ] ; do @@ -121,6 +129,8 @@ if [ -n "${2:-}" ]; then else generate_group extensions.gardener.cloud generate_group resources.gardener.cloud + generate_group operator.gardener.cloud generate_group druid.gardener.cloud generate_group autoscaling.k8s.io + generate_group fluentbit.fluent.io fi diff --git a/vendor/github.com/gardener/gardener/hack/kind-down.sh b/vendor/github.com/gardener/gardener/hack/kind-down.sh new file mode 100755 index 000000000..464d39487 --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/kind-down.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +CLUSTER_NAME="" +PATH_KUBECONFIG="" +KEEP_BACKUPBUCKETS_DIRECTORY=false + +parse_flags() { + while test $# -gt 0; do + case "$1" in + --cluster-name) + shift; CLUSTER_NAME="$1" + ;; + --path-kubeconfig) + shift; PATH_KUBECONFIG="$1" + ;; + --keep-backupbuckets-dir) + KEEP_BACKUPBUCKETS_DIRECTORY=false + ;; + esac + + shift + done +} + +parse_flags "$@" + +kind delete cluster \ + --name "$CLUSTER_NAME" + +rm -f "$PATH_KUBECONFIG" + +if [[ "$KEEP_BACKUPBUCKETS_DIRECTORY" == "false" ]]; then + rm -rf "$(dirname "$0")/../dev/local-backupbuckets" +fi diff --git a/vendor/github.com/gardener/gardener/hack/kind-up.sh b/vendor/github.com/gardener/gardener/hack/kind-up.sh new file mode 100755 index 000000000..96bf122f3 --- /dev/null +++ b/vendor/github.com/gardener/gardener/hack/kind-up.sh @@ -0,0 +1,69 @@ +#!/usr/bin/env bash + +set -o errexit +set -o nounset +set -o pipefail + +CLUSTER_NAME="" +PATH_CLUSTER_VALUES="" +PATH_KUBECONFIG="" +ENVIRONMENT="skaffold" +DEPLOY_REGISTRY=true +CHART=$(dirname "$0")/../example/gardener-local/kind/cluster + +parse_flags() { + while test $# -gt 0; do + case "$1" in + --chart) + shift; CHART="$1" + ;; + --cluster-name) + shift; CLUSTER_NAME="$1" + ;; + --path-cluster-values) + shift; PATH_CLUSTER_VALUES="$1" + ;; + --path-kubeconfig) + shift; PATH_KUBECONFIG="$1" + ;; + --environment) + shift; ENVIRONMENT="$1" + ;; + --skip-registry) + DEPLOY_REGISTRY=false + ;; + esac + + shift + done +} + +parse_flags "$@" + +mkdir -m 0755 -p \ + "$(dirname "$0")/../dev/local-backupbuckets" \ + "$(dirname "$0")/../dev/local-registry" + +kind create cluster \ + --name "$CLUSTER_NAME" \ + --config <(helm template $CHART --values "$PATH_CLUSTER_VALUES" --set "environment=$ENVIRONMENT") + +# workaround https://kind.sigs.k8s.io/docs/user/known-issues/#pod-errors-due-to-too-many-open-files +kubectl get nodes -o name |\ + cut -d/ -f2 |\ + xargs -I {} docker exec {} sh -c "sysctl fs.inotify.max_user_instances=8192" + +if [[ "$KUBECONFIG" != "$PATH_KUBECONFIG" ]]; then + cp "$KUBECONFIG" "$PATH_KUBECONFIG" +fi + +if [[ "$DEPLOY_REGISTRY" == "true" ]]; then + kubectl apply -k "$(dirname "$0")/../example/gardener-local/registry" --server-side + kubectl wait --for=condition=available deployment -l app=registry -n registry --timeout 5m +fi +kubectl apply -k "$(dirname "$0")/../example/gardener-local/calico" --server-side +kubectl apply -k "$(dirname "$0")/../example/gardener-local/metrics-server" --server-side + +kubectl get nodes -l node-role.kubernetes.io/control-plane -o name |\ + cut -d/ -f2 |\ + xargs -I {} kubectl taint node {} node-role.kubernetes.io/master:NoSchedule- node-role.kubernetes.io/control-plane:NoSchedule- || true diff --git a/vendor/github.com/gardener/gardener/hack/test-e2e-local.env b/vendor/github.com/gardener/gardener/hack/test-e2e-local.env old mode 100644 new mode 100755 diff --git a/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh b/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh index eeca92a30..e98b523d7 100755 --- a/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh +++ b/vendor/github.com/gardener/gardener/hack/test-e2e-local.sh @@ -10,45 +10,53 @@ source "$(dirname "$0")/test-e2e-local.env" ginkgo_flags= -seed_name="local"; -if [[ "${SHOOT_FAILURE_TOLERANCE_TYPE:-}" != "" ]] ; then - seed_name="local-ha"; -fi - -shoot_names=( - e2e-managedseed.garden - e2e-hibernated.local - e2e-unpriv.local - e2e-wake-up.local - e2e-migrate.local - e2e-rotate.local - e2e-default.local -) - # If running in prow, we want to generate a machine-readable output file under the location specified via $ARTIFACTS. # This will add a JUnit view above the build log that shows an overview over successful and failed test cases. if [ -n "${CI:-}" -a -n "${ARTIFACTS:-}" ]; then mkdir -p "$ARTIFACTS" ginkgo_flags="--output-dir=$ARTIFACTS --junit-report=junit.xml" - - # make shoot domains accessible to test - for shoot in "${shoot_names[@]}" ; do - printf "\n127.0.0.1 api.%s.external.local.gardener.cloud\n127.0.0.1 api.%s.internal.local.gardener.cloud\n" $shoot $shoot >>/etc/hosts - done - printf "\n127.0.0.1 gu-local--e2e-rotate.ingress.$seed_name.seed.local.gardener.cloud\n" >>/etc/hosts - printf "\n127.0.0.1 api.e2e-managedseed.garden.external.local.gardener.cloud\n127.0.0.1 api.e2e-managedseed.garden.internal.local.gardener.cloud\n" >>/etc/hosts -else - for shoot in "${shoot_names[@]}" ; do - if ! grep -q "$(printf "\n127.0.0.1 api.%s.external.local.gardener.cloud\n127.0.0.1 api.%s.internal.local.gardener.cloud\n" $shoot $shoot)" /etc/hosts; then - printf "To access shoot clusters and run e2e tests, you have to extend your /etc/hosts file.\nPlease refer to https://github.com/gardener/gardener/blob/master/docs/deployment/getting_started_locally.md#accessing-the-shoot-cluster\n" - fi - done fi -for ((i = 2; i <= "$#"; i++)); do - if [ "${!i}" = "--" ]; then - break +# If we are not running the gardener-operator tests then we have to make the shoot domains accessible. +if [[ "$1" != "operator" ]]; then + seed_name="local"; + if [[ "${SHOOT_FAILURE_TOLERANCE_TYPE:-}" == "node" ]] ; then + seed_name="local-ha-single-zone"; fi -done -GO111MODULE=on ginkgo run --timeout=1h $ginkgo_flags "${@:1:$((i - 1))}" --v --progress ./test/e2e/... "${@:$i}" + if [[ "${SHOOT_FAILURE_TOLERANCE_TYPE:-}" == "zone" ]] ; then + seed_name="local-ha-multi-zone"; + fi + + shoot_names=( + e2e-managedseed.garden + e2e-hibernated.local + e2e-unpriv.local + e2e-wake-up.local + e2e-migrate.local + e2e-rotate.local + e2e-default.local + e2e-update-node.local + e2e-update-zone.local + e2e-upgrade.local + ) + + if [ -n "${CI:-}" -a -n "${ARTIFACTS:-}" ]; then + for shoot in "${shoot_names[@]}" ; do + printf "\n127.0.0.1 api.%s.external.local.gardener.cloud\n127.0.0.1 api.%s.internal.local.gardener.cloud\n" $shoot $shoot >>/etc/hosts + done + printf "\n127.0.0.1 gu-local--e2e-rotate.ingress.$seed_name.seed.local.gardener.cloud\n" >>/etc/hosts + printf "\n127.0.0.1 api.e2e-managedseed.garden.external.local.gardener.cloud\n127.0.0.1 api.e2e-managedseed.garden.internal.local.gardener.cloud\n" >>/etc/hosts + else + for shoot in "${shoot_names[@]}" ; do + for ip in internal external ; do + if ! grep -q -x "127.0.0.1 api.$shoot.$ip.local.gardener.cloud" /etc/hosts; then + printf "Hostnames for Shoot $shoot is missing in /etc/hosts. To access shoot clusters and run e2e tests, you have to extend your /etc/hosts file.\nPlease refer to https://github.com/gardener/gardener/blob/master/docs/deployment/getting_started_locally.md#accessing-the-shoot-cluster\n\n" + exit 1 + fi + done + done + fi +fi + +GO111MODULE=on ginkgo run --timeout=1h $ginkgo_flags --v --progress "$@" diff --git a/vendor/github.com/gardener/gardener/hack/test-integration.env b/vendor/github.com/gardener/gardener/hack/test-integration.env old mode 100644 new mode 100755 diff --git a/vendor/github.com/gardener/gardener/hack/test-integration.sh b/vendor/github.com/gardener/gardener/hack/test-integration.sh index a0238fd38..5ad809f8e 100755 --- a/vendor/github.com/gardener/gardener/hack/test-integration.sh +++ b/vendor/github.com/gardener/gardener/hack/test-integration.sh @@ -34,12 +34,17 @@ echo "> Integration Tests" source "$(dirname "$0")/test-integration.env" test_flags= -# If running in prow, we want to generate a machine-readable output file under the location specified via $ARTIFACTS. +# If running in Prow, we want to generate a machine-readable output file under the location specified via $ARTIFACTS. # This will add a JUnit view above the build log that shows an overview over successful and failed test cases. if [ -n "${CI:-}" -a -n "${ARTIFACTS:-}" ] ; then mkdir -p "$ARTIFACTS" trap "report-collector \"$ARTIFACTS/junit.xml\"" EXIT test_flags="--ginkgo.junit-report=junit.xml" + # Use Ginkgo timeout in Prow to print everything that is buffered in GinkgoWriter. + test_flags+=" --ginkgo.timeout=5m" +else + # We don't want Ginkgo's timeout flag locally because it causes skipping the test cache. + timeout_flag=-timeout=5m fi -GO111MODULE=on go test -timeout=5m -mod=vendor $@ $test_flags | grep -v 'no test files' +GO111MODULE=on go test ${timeout_flag:-} -mod=vendor $@ $test_flags | grep -v 'no test files' diff --git a/vendor/github.com/gardener/gardener/hack/test.sh b/vendor/github.com/gardener/gardener/hack/test.sh index b1201ddf8..0e08481ac 100755 --- a/vendor/github.com/gardener/gardener/hack/test.sh +++ b/vendor/github.com/gardener/gardener/hack/test.sh @@ -21,7 +21,7 @@ set -o pipefail echo "> Test" test_flags= -# If running in prow, we want to generate a machine-readable output file under the location specified via $ARTIFACTS. +# If running in Prow, we want to generate a machine-readable output file under the location specified via $ARTIFACTS. # This will add a JUnit view above the build log that shows an overview over successful and failed test cases. if [ -n "${CI:-}" -a -n "${ARTIFACTS:-}" ] ; then if which report-collector &>/dev/null; then @@ -31,6 +31,11 @@ if [ -n "${CI:-}" -a -n "${ARTIFACTS:-}" ] ; then else echo "report-collector not found in PATH, not generating machine-readable test report" fi + # Use Ginkgo timeout in Prow to print everything that is buffered in GinkgoWriter. + test_flags+=" --ginkgo.timeout=2m" +else + # We don't want Ginkgo's timeout flag locally because it causes skipping the test cache. + timeout_flag=-timeout=2m fi -GO111MODULE=on go test -race -timeout=2m -mod=vendor $@ $test_flags | grep -v 'no test files' +GO111MODULE=on go test -race ${timeout_flag:-} -mod=vendor $@ $test_flags | grep -v 'no test files' diff --git a/vendor/github.com/gardener/gardener/hack/tools.go b/vendor/github.com/gardener/gardener/hack/tools.go old mode 100644 new mode 100755 diff --git a/vendor/github.com/gardener/gardener/hack/tools.mk b/vendor/github.com/gardener/gardener/hack/tools.mk old mode 100644 new mode 100755 index 9ac9b5b9a..e4e3307cf --- a/vendor/github.com/gardener/gardener/hack/tools.mk +++ b/vendor/github.com/gardener/gardener/hack/tools.mk @@ -63,7 +63,7 @@ HELM_VERSION ?= v3.6.3 KIND_VERSION ?= v0.14.0 KUBECTL_VERSION ?= v1.24.3 SKAFFOLD_VERSION ?= v1.39.1 -YQ_VERSION ?= v4.9.6 +YQ_VERSION ?= v4.30.4 export TOOLS_BIN_DIR := $(TOOLS_BIN_DIR) export PATH := $(abspath $(TOOLS_BIN_DIR)):$(PATH) diff --git a/vendor/github.com/gardener/gardener/hack/tools/install-promtool.sh b/vendor/github.com/gardener/gardener/hack/tools/install-promtool.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/hack/update-codegen.sh b/vendor/github.com/gardener/gardener/hack/update-codegen.sh index 4316b9a11..7aa7ddca8 100755 --- a/vendor/github.com/gardener/gardener/hack/update-codegen.sh +++ b/vendor/github.com/gardener/gardener/hack/update-codegen.sh @@ -87,6 +87,20 @@ resources_groups() { } export -f resources_groups +# operator.gardener.cloud APIs + +operator_groups() { + echo "Generating API groups for pkg/apis/operator" + + bash "${PROJECT_ROOT}"/vendor/k8s.io/code-generator/generate-groups.sh \ + deepcopy \ + github.com/gardener/gardener/pkg/apis \ + github.com/gardener/gardener/pkg/apis \ + "operator:v1alpha1" \ + -h "${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt" +} +export -f operator_groups + # seedmanagement.gardener.cloud APIs seedmanagement_groups() { @@ -176,6 +190,30 @@ authentication_groups() { } export -f authentication_groups +# Componentconfig for operator + +operatorconfig_groups() { + echo "Generating API groups for pkg/operator/apis/config" + + bash "${PROJECT_ROOT}"/vendor/k8s.io/code-generator/generate-internal-groups.sh \ + deepcopy,defaulter \ + github.com/gardener/gardener/pkg/client/componentconfig \ + github.com/gardener/gardener/pkg/operator/apis \ + github.com/gardener/gardener/pkg/operator/apis \ + "config:v1alpha1" \ + -h "${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt" + + bash "${PROJECT_ROOT}"/vendor/k8s.io/code-generator/generate-internal-groups.sh \ + conversion \ + github.com/gardener/gardener/pkg/client/componentconfig \ + github.com/gardener/gardener/pkg/operator/apis \ + github.com/gardener/gardener/pkg/operator/apis \ + "config:v1alpha1" \ + --extra-peer-dirs=github.com/gardener/gardener/pkg/operator/apis/config,github.com/gardener/gardener/pkg/operator/apis/config/v1alpha1,k8s.io/apimachinery/pkg/apis/meta/v1,k8s.io/apimachinery/pkg/conversion,k8s.io/apimachinery/pkg/runtime,k8s.io/component-base/config,k8s.io/component-base/config/v1alpha1 \ + -h "${PROJECT_ROOT}/hack/LICENSE_BOILERPLATE.txt" +} +export -f operatorconfig_groups + # Componentconfig for controller-manager controllermanager_groups() { @@ -419,9 +457,11 @@ if [[ $# -gt 0 && "$1" == "--parallel" ]]; then core_groups \ extensions_groups \ resources_groups \ + operator_groups \ seedmanagement_groups \ operations_groups \ settings_groups \ + operatorconfig_groups \ controllermanager_groups \ admissioncontroller_groups \ scheduler_groups \ @@ -436,9 +476,11 @@ else core_groups extensions_groups resources_groups + operator_groups seedmanagement_groups operations_groups settings_groups + operatorconfig_groups controllermanager_groups admissioncontroller_groups scheduler_groups diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/field_constants.go b/vendor/github.com/gardener/gardener/pkg/apis/core/field_constants.go index 24beec3d4..922e3d0b5 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/field_constants.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/field_constants.go @@ -23,16 +23,19 @@ const ( // BackupEntrySeedName is the field selector path for finding // the Seed cluster of a core.gardener.cloud/v1beta1 BackupEntry. BackupEntrySeedName = "spec.seedName" + // BackupEntrySeedName is the field selector path for finding + // the BackupBucket for a core.gardener.cloud/v1beta1 BackupEntry. + BackupEntryBucketName = "spec.bucketName" // ProjectNamespace is the field selector path for filtering by namespace - // for core.gardener.cloud/{v1beta1,v1beta1} Project. + // for core.gardener.cloud/v1beta1 Project. ProjectNamespace = "spec.namespace" // RegistrationRefName is the field selector path for finding - // the ControllerRegistration name of a core.gardener.cloud/{v1beta1,v1beta1} ControllerInstallation. + // the ControllerRegistration name of a core.gardener.cloud/{v1alpha1,v1beta1} ControllerInstallation. RegistrationRefName = "spec.registrationRef.name" // SeedRefName is the field selector path for finding - // the Seed name of a core.gardener.cloud/{v1beta1,v1beta1} ControllerInstallation. + // the Seed name of a core.gardener.cloud/{v1alpha1,v1beta1} ControllerInstallation. SeedRefName = "spec.seedRef.name" // ShootCloudProfileName is the field selector path for finding diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go index 040898c59..195c53fd4 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_controllerregistration.go @@ -60,13 +60,21 @@ type ControllerResource struct { // Type is the resource type. Type string // GloballyEnabled determines if this resource is required by all Shoot clusters. + // This field is defaulted to false when kind is "Extension". GloballyEnabled *bool // ReconcileTimeout defines how long Gardener should wait for the resource reconciliation. + // This field is defaulted to 3m0s when kind is "Extension". ReconcileTimeout *metav1.Duration // Primary determines if the controller backed by this ControllerRegistration is responsible for the extension // resource's lifecycle. This field defaults to true. There must be exactly one primary controller for this kind/type // combination. This field is immutable. Primary *bool + // Lifecycle defines a strategy that determines when different operations on a ControllerResource should be performed. + // This field is defaulted in the following way when kind is "Extension". + // Reconcile: "AfterKubeAPIServer" + // Delete: "BeforeKubeAPIServer" + // Migrate: "BeforeKubeAPIServer" + Lifecycle *ControllerResourceLifecycle } // DeploymentRef contains information about `ControllerDeployment` references. @@ -101,3 +109,23 @@ const ( // whether another resource requires it, but only when the respective seed has at least one shoot. ControllerDeploymentPolicyAlwaysExceptNoShoots ControllerDeploymentPolicy = "AlwaysExceptNoShoots" ) + +// ControllerResourceLifecycleStrategy is a string alias. +type ControllerResourceLifecycleStrategy string + +const ( + // BeforeKubeAPIServer specifies that a resource should be handled before the kube-apiserver. + BeforeKubeAPIServer ControllerResourceLifecycleStrategy = "BeforeKubeAPIServer" + // AfterKubeAPIServer specifies that a resource should be handled after the kube-apiserver. + AfterKubeAPIServer ControllerResourceLifecycleStrategy = "AfterKubeAPIServer" +) + +// ControllerResourceLifecycle defines the lifecycle of a controller resource. +type ControllerResourceLifecycle struct { + // Reconcile defines the strategy during reconciliation. + Reconcile *ControllerResourceLifecycleStrategy + // Delete defines the strategy during deletion. + Delete *ControllerResourceLifecycleStrategy + // Migrate defines the strategy during migration. + Migrate *ControllerResourceLifecycleStrategy +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go index 9e525c2b6..7066291a5 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_seed.go @@ -79,12 +79,6 @@ type SeedSpec struct { Volume *SeedVolume // Ingress configures Ingress specific settings of the Seed cluster. This field is immutable. Ingress *Ingress - // HighAvailability describes the high availability configuration for seed system components. A highly available - // seed will need at least 3 nodes or 3 availability zones (depending on the configured FailureTolerance of `node` or `zone`), - // allowing spreading of system components across the configured failure domain. - // Deprecated: This field is deprecated and not respected at all. It will be removed in a future release. Use - // `.spec.provider.zones` instead. - HighAvailability *HighAvailability } // GetProviderType gets the type of the provider. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go index af07e1d5d..a04ab61eb 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/types_shoot.go @@ -154,6 +154,20 @@ type ShootStatus struct { MigrationStartTime *metav1.Time // Credentials contains information about the shoot credentials. Credentials *ShootCredentials + // LastMaintenance holds information about the last maintenance operations on the Shoot. + LastMaintenance *LastMaintenance +} + +// LastMaintenance holds information about a maintenance operation on the Shoot. +type LastMaintenance struct { + // A human-readable message containing details about the operations performed in the last maintenance. + Description string + // TriggeredTime is the time when maintenance was triggered. + TriggeredTime metav1.Time + // Status of the last maintenance operation, one of Processing, Succeeded, Error. + State LastOperationState + // FailureReason holds the information about the last maintenance operation failure reason. + FailureReason *string } // ShootCredentials contains information about the shoot credentials. @@ -165,7 +179,7 @@ type ShootCredentials struct { // ShootCredentialsRotation contains information about the rotation of credentials. type ShootCredentialsRotation struct { // CertificateAuthorities contains information about the certificate authority credential rotation. - CertificateAuthorities *ShootCARotation + CertificateAuthorities *CARotation // Kubeconfig contains information about the kubeconfig credential rotation. Kubeconfig *ShootKubeconfigRotation // SSHKeypair contains information about the ssh-keypair credential rotation. @@ -178,10 +192,10 @@ type ShootCredentialsRotation struct { ETCDEncryptionKey *ShootETCDEncryptionKeyRotation } -// ShootCARotation contains information about the certificate authority credential rotation. -type ShootCARotation struct { +// CARotation contains information about the certificate authority credential rotation. +type CARotation struct { // Phase describes the phase of the certificate authority credential rotation. - Phase ShootCredentialsRotationPhase + Phase CredentialsRotationPhase // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. LastInitiationTime *metav1.Time // LastCompletionTime is the most recent time when the certificate authority credential rotation was successfully @@ -216,7 +230,7 @@ type ShootObservabilityRotation struct { // ShootServiceAccountKeyRotation contains information about the service account key credential rotation. type ShootServiceAccountKeyRotation struct { // Phase describes the phase of the service account key credential rotation. - Phase ShootCredentialsRotationPhase + Phase CredentialsRotationPhase // LastInitiationTime is the most recent time when the service account key credential rotation was initiated. LastInitiationTime *metav1.Time // LastCompletionTime is the most recent time when the service account key credential rotation was successfully @@ -227,7 +241,7 @@ type ShootServiceAccountKeyRotation struct { // ShootETCDEncryptionKeyRotation contains information about the ETCD encryption key credential rotation. type ShootETCDEncryptionKeyRotation struct { // Phase describes the phase of the ETCD encryption key credential rotation. - Phase ShootCredentialsRotationPhase + Phase CredentialsRotationPhase // LastInitiationTime is the most recent time when the ETCD encryption key credential rotation was initiated. LastInitiationTime *metav1.Time // LastCompletionTime is the most recent time when the ETCD encryption key credential rotation was successfully @@ -235,19 +249,19 @@ type ShootETCDEncryptionKeyRotation struct { LastCompletionTime *metav1.Time } -// ShootCredentialsRotationPhase is a string alias. -type ShootCredentialsRotationPhase string +// CredentialsRotationPhase is a string alias. +type CredentialsRotationPhase string const ( // RotationPreparing is a constant for the credentials rotation phase describing that the procedure is being prepared. - RotationPreparing ShootCredentialsRotationPhase = "Preparing" + RotationPreparing CredentialsRotationPhase = "Preparing" // RotationPrepared is a constant for the credentials rotation phase describing that the procedure was prepared. - RotationPrepared ShootCredentialsRotationPhase = "Prepared" + RotationPrepared CredentialsRotationPhase = "Prepared" // RotationCompleting is a constant for the credentials rotation phase describing that the procedure is being // completed. - RotationCompleting ShootCredentialsRotationPhase = "Completing" + RotationCompleting CredentialsRotationPhase = "Completing" // RotationCompleted is a constant for the credentials rotation phase describing that the procedure was completed. - RotationCompleted ShootCredentialsRotationPhase = "Completed" + RotationCompleted CredentialsRotationPhase = "Completed" ) // ShootAdvertisedAddress contains information for the shoot's Kube API server. @@ -285,6 +299,7 @@ type KubernetesDashboard struct { const ( // KubernetesDashboardAuthModeBasic uses basic authentication mode for auth. + // Deprecated: basic authentication has been removed in Kubernetes v1.19+. KubernetesDashboardAuthModeBasic = "basic" // KubernetesDashboardAuthModeToken uses token-based mode for auth. KubernetesDashboardAuthModeToken = "token" @@ -526,6 +541,8 @@ type KubeAPIServerConfig struct { // AuditConfig contains configuration settings for the audit of the kube-apiserver. AuditConfig *AuditConfig // EnableBasicAuthentication defines whether basic authentication should be enabled for this cluster or not. + // Defaults to false. + // Deprecated: basic authentication has been removed in Kubernetes v1.19+. This field will be removed in a future version. EnableBasicAuthentication *bool // OIDCConfig contains configuration settings for the OIDC provider. OIDCConfig *OIDCConfig @@ -550,6 +567,16 @@ type KubeAPIServerConfig struct { EnableAnonymousAuthentication *bool // EventTTL controls the amount of time to retain events. EventTTL *metav1.Duration + // Logging contains configuration settings for the log verbosity and access logging + Logging *KubeAPIServerLogging +} + +// KubeAPIServerLogging contains configuration for the logs level and http access logs +type KubeAPIServerLogging struct { + // Verbosity is the kube-apiserver log verbosity level + Verbosity *int32 + // HTTPAccessVerbosity is the kube-apiserver access logs level + HTTPAccessVerbosity *int32 } // KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. @@ -1206,6 +1233,10 @@ type NodeLocalDNS struct { // ForceTCPToUpstreamDNS indicates whether the connection from the node local DNS to the upstream DNS (infrastructure DNS) will be forced to TCP or not. // Default, if unspecified, is to enforce TCP. ForceTCPToUpstreamDNS *bool + // DisableForwardToUpstreamDNS indicates whether requests from node local DNS to upstream DNS should be disabled. + // Default, if unspecified, is to forward requests for external domains to upstream DNS + // +optional + DisableForwardToUpstreamDNS *bool `json:"disableForwardToUpstreamDNS,omitempty" protobuf:"varint,4,opt,name=disableForwardToUpstreamDNS"` } ////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/defaults.go index 0008c0b9f..f9a0ab01e 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/defaults.go @@ -288,6 +288,14 @@ func SetDefaults_Shoot(obj *Shoot) { obj.Spec.Kubernetes.KubeAPIServer.EnableAnonymousAuthentication = pointer.Bool(false) } + if obj.Spec.Kubernetes.KubeAPIServer.Logging == nil { + obj.Spec.Kubernetes.KubeAPIServer.Logging = &KubeAPIServerLogging{} + } + + if obj.Spec.Kubernetes.KubeAPIServer.Logging.Verbosity == nil { + obj.Spec.Kubernetes.KubeAPIServer.Logging.Verbosity = pointer.Int32(2) + } + for i, worker := range obj.Spec.Provider.Workers { kubernetesVersion := obj.Spec.Kubernetes.Version if worker.Kubernetes != nil && worker.Kubernetes.Version != nil { @@ -433,6 +441,31 @@ func SetDefaults_ControllerResource(obj *ControllerResource) { if obj.Primary == nil { obj.Primary = pointer.Bool(true) } + if obj.Kind == "Extension" { + if obj.GloballyEnabled == nil { + obj.GloballyEnabled = pointer.Bool(false) + } + + if obj.ReconcileTimeout == nil { + obj.ReconcileTimeout = &metav1.Duration{Duration: time.Minute * 3} + } + + if obj.Lifecycle == nil { + obj.Lifecycle = &ControllerResourceLifecycle{} + } + if obj.Lifecycle.Reconcile == nil { + afterKubeAPIServer := AfterKubeAPIServer + obj.Lifecycle.Reconcile = &afterKubeAPIServer + } + if obj.Lifecycle.Delete == nil { + beforeKubeAPIServer := BeforeKubeAPIServer + obj.Lifecycle.Delete = &beforeKubeAPIServer + } + if obj.Lifecycle.Migrate == nil { + beforeKubeAPIServer := BeforeKubeAPIServer + obj.Lifecycle.Migrate = &beforeKubeAPIServer + } + } } // SetDefaults_ControllerRegistrationDeployment sets default values for ControllerDeployment objects. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.pb.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.pb.go index 643d8283b..f4cd72081 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.pb.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.pb.go @@ -503,10 +503,38 @@ func (m *BackupEntryStatus) XXX_DiscardUnknown() { var xxx_messageInfo_BackupEntryStatus proto.InternalMessageInfo +func (m *CARotation) Reset() { *m = CARotation{} } +func (*CARotation) ProtoMessage() {} +func (*CARotation) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{16} +} +func (m *CARotation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CARotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CARotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_CARotation.Merge(m, src) +} +func (m *CARotation) XXX_Size() int { + return m.Size() +} +func (m *CARotation) XXX_DiscardUnknown() { + xxx_messageInfo_CARotation.DiscardUnknown(m) +} + +var xxx_messageInfo_CARotation proto.InternalMessageInfo + func (m *CRI) Reset() { *m = CRI{} } func (*CRI) ProtoMessage() {} func (*CRI) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{16} + return fileDescriptor_f1caaec5647a9dbf, []int{17} } func (m *CRI) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -534,7 +562,7 @@ var xxx_messageInfo_CRI proto.InternalMessageInfo func (m *CloudProfile) Reset() { *m = CloudProfile{} } func (*CloudProfile) ProtoMessage() {} func (*CloudProfile) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{17} + return fileDescriptor_f1caaec5647a9dbf, []int{18} } func (m *CloudProfile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -562,7 +590,7 @@ var xxx_messageInfo_CloudProfile proto.InternalMessageInfo func (m *CloudProfileList) Reset() { *m = CloudProfileList{} } func (*CloudProfileList) ProtoMessage() {} func (*CloudProfileList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{18} + return fileDescriptor_f1caaec5647a9dbf, []int{19} } func (m *CloudProfileList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -590,7 +618,7 @@ var xxx_messageInfo_CloudProfileList proto.InternalMessageInfo func (m *CloudProfileSpec) Reset() { *m = CloudProfileSpec{} } func (*CloudProfileSpec) ProtoMessage() {} func (*CloudProfileSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{19} + return fileDescriptor_f1caaec5647a9dbf, []int{20} } func (m *CloudProfileSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -618,7 +646,7 @@ var xxx_messageInfo_CloudProfileSpec proto.InternalMessageInfo func (m *ClusterAutoscaler) Reset() { *m = ClusterAutoscaler{} } func (*ClusterAutoscaler) ProtoMessage() {} func (*ClusterAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{20} + return fileDescriptor_f1caaec5647a9dbf, []int{21} } func (m *ClusterAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -646,7 +674,7 @@ var xxx_messageInfo_ClusterAutoscaler proto.InternalMessageInfo func (m *Condition) Reset() { *m = Condition{} } func (*Condition) ProtoMessage() {} func (*Condition) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{21} + return fileDescriptor_f1caaec5647a9dbf, []int{22} } func (m *Condition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -674,7 +702,7 @@ var xxx_messageInfo_Condition proto.InternalMessageInfo func (m *ContainerRuntime) Reset() { *m = ContainerRuntime{} } func (*ContainerRuntime) ProtoMessage() {} func (*ContainerRuntime) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{22} + return fileDescriptor_f1caaec5647a9dbf, []int{23} } func (m *ContainerRuntime) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -702,7 +730,7 @@ var xxx_messageInfo_ContainerRuntime proto.InternalMessageInfo func (m *ControlPlane) Reset() { *m = ControlPlane{} } func (*ControlPlane) ProtoMessage() {} func (*ControlPlane) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{23} + return fileDescriptor_f1caaec5647a9dbf, []int{24} } func (m *ControlPlane) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -730,7 +758,7 @@ var xxx_messageInfo_ControlPlane proto.InternalMessageInfo func (m *ControllerDeployment) Reset() { *m = ControllerDeployment{} } func (*ControllerDeployment) ProtoMessage() {} func (*ControllerDeployment) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{24} + return fileDescriptor_f1caaec5647a9dbf, []int{25} } func (m *ControllerDeployment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -758,7 +786,7 @@ var xxx_messageInfo_ControllerDeployment proto.InternalMessageInfo func (m *ControllerDeploymentList) Reset() { *m = ControllerDeploymentList{} } func (*ControllerDeploymentList) ProtoMessage() {} func (*ControllerDeploymentList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{25} + return fileDescriptor_f1caaec5647a9dbf, []int{26} } func (m *ControllerDeploymentList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -786,7 +814,7 @@ var xxx_messageInfo_ControllerDeploymentList proto.InternalMessageInfo func (m *ControllerInstallation) Reset() { *m = ControllerInstallation{} } func (*ControllerInstallation) ProtoMessage() {} func (*ControllerInstallation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{26} + return fileDescriptor_f1caaec5647a9dbf, []int{27} } func (m *ControllerInstallation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -814,7 +842,7 @@ var xxx_messageInfo_ControllerInstallation proto.InternalMessageInfo func (m *ControllerInstallationList) Reset() { *m = ControllerInstallationList{} } func (*ControllerInstallationList) ProtoMessage() {} func (*ControllerInstallationList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{27} + return fileDescriptor_f1caaec5647a9dbf, []int{28} } func (m *ControllerInstallationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -842,7 +870,7 @@ var xxx_messageInfo_ControllerInstallationList proto.InternalMessageInfo func (m *ControllerInstallationSpec) Reset() { *m = ControllerInstallationSpec{} } func (*ControllerInstallationSpec) ProtoMessage() {} func (*ControllerInstallationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{28} + return fileDescriptor_f1caaec5647a9dbf, []int{29} } func (m *ControllerInstallationSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -870,7 +898,7 @@ var xxx_messageInfo_ControllerInstallationSpec proto.InternalMessageInfo func (m *ControllerInstallationStatus) Reset() { *m = ControllerInstallationStatus{} } func (*ControllerInstallationStatus) ProtoMessage() {} func (*ControllerInstallationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{29} + return fileDescriptor_f1caaec5647a9dbf, []int{30} } func (m *ControllerInstallationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -898,7 +926,7 @@ var xxx_messageInfo_ControllerInstallationStatus proto.InternalMessageInfo func (m *ControllerRegistration) Reset() { *m = ControllerRegistration{} } func (*ControllerRegistration) ProtoMessage() {} func (*ControllerRegistration) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{30} + return fileDescriptor_f1caaec5647a9dbf, []int{31} } func (m *ControllerRegistration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -926,7 +954,7 @@ var xxx_messageInfo_ControllerRegistration proto.InternalMessageInfo func (m *ControllerRegistrationDeployment) Reset() { *m = ControllerRegistrationDeployment{} } func (*ControllerRegistrationDeployment) ProtoMessage() {} func (*ControllerRegistrationDeployment) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{31} + return fileDescriptor_f1caaec5647a9dbf, []int{32} } func (m *ControllerRegistrationDeployment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -954,7 +982,7 @@ var xxx_messageInfo_ControllerRegistrationDeployment proto.InternalMessageInfo func (m *ControllerRegistrationList) Reset() { *m = ControllerRegistrationList{} } func (*ControllerRegistrationList) ProtoMessage() {} func (*ControllerRegistrationList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{32} + return fileDescriptor_f1caaec5647a9dbf, []int{33} } func (m *ControllerRegistrationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -982,7 +1010,7 @@ var xxx_messageInfo_ControllerRegistrationList proto.InternalMessageInfo func (m *ControllerRegistrationSpec) Reset() { *m = ControllerRegistrationSpec{} } func (*ControllerRegistrationSpec) ProtoMessage() {} func (*ControllerRegistrationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{33} + return fileDescriptor_f1caaec5647a9dbf, []int{34} } func (m *ControllerRegistrationSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1010,7 +1038,7 @@ var xxx_messageInfo_ControllerRegistrationSpec proto.InternalMessageInfo func (m *ControllerResource) Reset() { *m = ControllerResource{} } func (*ControllerResource) ProtoMessage() {} func (*ControllerResource) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{34} + return fileDescriptor_f1caaec5647a9dbf, []int{35} } func (m *ControllerResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1035,10 +1063,38 @@ func (m *ControllerResource) XXX_DiscardUnknown() { var xxx_messageInfo_ControllerResource proto.InternalMessageInfo +func (m *ControllerResourceLifecycle) Reset() { *m = ControllerResourceLifecycle{} } +func (*ControllerResourceLifecycle) ProtoMessage() {} +func (*ControllerResourceLifecycle) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{36} +} +func (m *ControllerResourceLifecycle) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ControllerResourceLifecycle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ControllerResourceLifecycle) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerResourceLifecycle.Merge(m, src) +} +func (m *ControllerResourceLifecycle) XXX_Size() int { + return m.Size() +} +func (m *ControllerResourceLifecycle) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerResourceLifecycle.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerResourceLifecycle proto.InternalMessageInfo + func (m *CoreDNS) Reset() { *m = CoreDNS{} } func (*CoreDNS) ProtoMessage() {} func (*CoreDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{35} + return fileDescriptor_f1caaec5647a9dbf, []int{37} } func (m *CoreDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1066,7 +1122,7 @@ var xxx_messageInfo_CoreDNS proto.InternalMessageInfo func (m *CoreDNSAutoscaling) Reset() { *m = CoreDNSAutoscaling{} } func (*CoreDNSAutoscaling) ProtoMessage() {} func (*CoreDNSAutoscaling) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{36} + return fileDescriptor_f1caaec5647a9dbf, []int{38} } func (m *CoreDNSAutoscaling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1094,7 +1150,7 @@ var xxx_messageInfo_CoreDNSAutoscaling proto.InternalMessageInfo func (m *CoreDNSRewriting) Reset() { *m = CoreDNSRewriting{} } func (*CoreDNSRewriting) ProtoMessage() {} func (*CoreDNSRewriting) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{37} + return fileDescriptor_f1caaec5647a9dbf, []int{39} } func (m *CoreDNSRewriting) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1122,7 +1178,7 @@ var xxx_messageInfo_CoreDNSRewriting proto.InternalMessageInfo func (m *DNS) Reset() { *m = DNS{} } func (*DNS) ProtoMessage() {} func (*DNS) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{38} + return fileDescriptor_f1caaec5647a9dbf, []int{40} } func (m *DNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1150,7 +1206,7 @@ var xxx_messageInfo_DNS proto.InternalMessageInfo func (m *DNSIncludeExclude) Reset() { *m = DNSIncludeExclude{} } func (*DNSIncludeExclude) ProtoMessage() {} func (*DNSIncludeExclude) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{39} + return fileDescriptor_f1caaec5647a9dbf, []int{41} } func (m *DNSIncludeExclude) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1178,7 +1234,7 @@ var xxx_messageInfo_DNSIncludeExclude proto.InternalMessageInfo func (m *DNSProvider) Reset() { *m = DNSProvider{} } func (*DNSProvider) ProtoMessage() {} func (*DNSProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{40} + return fileDescriptor_f1caaec5647a9dbf, []int{42} } func (m *DNSProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1206,7 +1262,7 @@ var xxx_messageInfo_DNSProvider proto.InternalMessageInfo func (m *DataVolume) Reset() { *m = DataVolume{} } func (*DataVolume) ProtoMessage() {} func (*DataVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{41} + return fileDescriptor_f1caaec5647a9dbf, []int{43} } func (m *DataVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1234,7 +1290,7 @@ var xxx_messageInfo_DataVolume proto.InternalMessageInfo func (m *DeploymentRef) Reset() { *m = DeploymentRef{} } func (*DeploymentRef) ProtoMessage() {} func (*DeploymentRef) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{42} + return fileDescriptor_f1caaec5647a9dbf, []int{44} } func (m *DeploymentRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1262,7 +1318,7 @@ var xxx_messageInfo_DeploymentRef proto.InternalMessageInfo func (m *ExpirableVersion) Reset() { *m = ExpirableVersion{} } func (*ExpirableVersion) ProtoMessage() {} func (*ExpirableVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{43} + return fileDescriptor_f1caaec5647a9dbf, []int{45} } func (m *ExpirableVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1290,7 +1346,7 @@ var xxx_messageInfo_ExpirableVersion proto.InternalMessageInfo func (m *ExposureClass) Reset() { *m = ExposureClass{} } func (*ExposureClass) ProtoMessage() {} func (*ExposureClass) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{44} + return fileDescriptor_f1caaec5647a9dbf, []int{46} } func (m *ExposureClass) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1318,7 +1374,7 @@ var xxx_messageInfo_ExposureClass proto.InternalMessageInfo func (m *ExposureClassList) Reset() { *m = ExposureClassList{} } func (*ExposureClassList) ProtoMessage() {} func (*ExposureClassList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{45} + return fileDescriptor_f1caaec5647a9dbf, []int{47} } func (m *ExposureClassList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1346,7 +1402,7 @@ var xxx_messageInfo_ExposureClassList proto.InternalMessageInfo func (m *ExposureClassScheduling) Reset() { *m = ExposureClassScheduling{} } func (*ExposureClassScheduling) ProtoMessage() {} func (*ExposureClassScheduling) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{46} + return fileDescriptor_f1caaec5647a9dbf, []int{48} } func (m *ExposureClassScheduling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1374,7 +1430,7 @@ var xxx_messageInfo_ExposureClassScheduling proto.InternalMessageInfo func (m *Extension) Reset() { *m = Extension{} } func (*Extension) ProtoMessage() {} func (*Extension) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{47} + return fileDescriptor_f1caaec5647a9dbf, []int{49} } func (m *Extension) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1402,7 +1458,7 @@ var xxx_messageInfo_Extension proto.InternalMessageInfo func (m *ExtensionResourceState) Reset() { *m = ExtensionResourceState{} } func (*ExtensionResourceState) ProtoMessage() {} func (*ExtensionResourceState) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{48} + return fileDescriptor_f1caaec5647a9dbf, []int{50} } func (m *ExtensionResourceState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1430,7 +1486,7 @@ var xxx_messageInfo_ExtensionResourceState proto.InternalMessageInfo func (m *FailureTolerance) Reset() { *m = FailureTolerance{} } func (*FailureTolerance) ProtoMessage() {} func (*FailureTolerance) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{49} + return fileDescriptor_f1caaec5647a9dbf, []int{51} } func (m *FailureTolerance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1458,7 +1514,7 @@ var xxx_messageInfo_FailureTolerance proto.InternalMessageInfo func (m *Gardener) Reset() { *m = Gardener{} } func (*Gardener) ProtoMessage() {} func (*Gardener) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{50} + return fileDescriptor_f1caaec5647a9dbf, []int{52} } func (m *Gardener) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1486,7 +1542,7 @@ var xxx_messageInfo_Gardener proto.InternalMessageInfo func (m *GardenerResourceData) Reset() { *m = GardenerResourceData{} } func (*GardenerResourceData) ProtoMessage() {} func (*GardenerResourceData) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{51} + return fileDescriptor_f1caaec5647a9dbf, []int{53} } func (m *GardenerResourceData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1514,7 +1570,7 @@ var xxx_messageInfo_GardenerResourceData proto.InternalMessageInfo func (m *Hibernation) Reset() { *m = Hibernation{} } func (*Hibernation) ProtoMessage() {} func (*Hibernation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{52} + return fileDescriptor_f1caaec5647a9dbf, []int{54} } func (m *Hibernation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1542,7 +1598,7 @@ var xxx_messageInfo_Hibernation proto.InternalMessageInfo func (m *HibernationSchedule) Reset() { *m = HibernationSchedule{} } func (*HibernationSchedule) ProtoMessage() {} func (*HibernationSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{53} + return fileDescriptor_f1caaec5647a9dbf, []int{55} } func (m *HibernationSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1570,7 +1626,7 @@ var xxx_messageInfo_HibernationSchedule proto.InternalMessageInfo func (m *HighAvailability) Reset() { *m = HighAvailability{} } func (*HighAvailability) ProtoMessage() {} func (*HighAvailability) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{54} + return fileDescriptor_f1caaec5647a9dbf, []int{56} } func (m *HighAvailability) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1598,7 +1654,7 @@ var xxx_messageInfo_HighAvailability proto.InternalMessageInfo func (m *HorizontalPodAutoscalerConfig) Reset() { *m = HorizontalPodAutoscalerConfig{} } func (*HorizontalPodAutoscalerConfig) ProtoMessage() {} func (*HorizontalPodAutoscalerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{55} + return fileDescriptor_f1caaec5647a9dbf, []int{57} } func (m *HorizontalPodAutoscalerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1626,7 +1682,7 @@ var xxx_messageInfo_HorizontalPodAutoscalerConfig proto.InternalMessageInfo func (m *Ingress) Reset() { *m = Ingress{} } func (*Ingress) ProtoMessage() {} func (*Ingress) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{56} + return fileDescriptor_f1caaec5647a9dbf, []int{58} } func (m *Ingress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1654,7 +1710,7 @@ var xxx_messageInfo_Ingress proto.InternalMessageInfo func (m *IngressController) Reset() { *m = IngressController{} } func (*IngressController) ProtoMessage() {} func (*IngressController) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{57} + return fileDescriptor_f1caaec5647a9dbf, []int{59} } func (m *IngressController) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1682,7 +1738,7 @@ var xxx_messageInfo_IngressController proto.InternalMessageInfo func (m *KubeAPIServerConfig) Reset() { *m = KubeAPIServerConfig{} } func (*KubeAPIServerConfig) ProtoMessage() {} func (*KubeAPIServerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{58} + return fileDescriptor_f1caaec5647a9dbf, []int{60} } func (m *KubeAPIServerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1707,10 +1763,38 @@ func (m *KubeAPIServerConfig) XXX_DiscardUnknown() { var xxx_messageInfo_KubeAPIServerConfig proto.InternalMessageInfo +func (m *KubeAPIServerLogging) Reset() { *m = KubeAPIServerLogging{} } +func (*KubeAPIServerLogging) ProtoMessage() {} +func (*KubeAPIServerLogging) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{61} +} +func (m *KubeAPIServerLogging) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *KubeAPIServerLogging) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *KubeAPIServerLogging) XXX_Merge(src proto.Message) { + xxx_messageInfo_KubeAPIServerLogging.Merge(m, src) +} +func (m *KubeAPIServerLogging) XXX_Size() int { + return m.Size() +} +func (m *KubeAPIServerLogging) XXX_DiscardUnknown() { + xxx_messageInfo_KubeAPIServerLogging.DiscardUnknown(m) +} + +var xxx_messageInfo_KubeAPIServerLogging proto.InternalMessageInfo + func (m *KubeAPIServerRequests) Reset() { *m = KubeAPIServerRequests{} } func (*KubeAPIServerRequests) ProtoMessage() {} func (*KubeAPIServerRequests) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{59} + return fileDescriptor_f1caaec5647a9dbf, []int{62} } func (m *KubeAPIServerRequests) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1738,7 +1822,7 @@ var xxx_messageInfo_KubeAPIServerRequests proto.InternalMessageInfo func (m *KubeControllerManagerConfig) Reset() { *m = KubeControllerManagerConfig{} } func (*KubeControllerManagerConfig) ProtoMessage() {} func (*KubeControllerManagerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{60} + return fileDescriptor_f1caaec5647a9dbf, []int{63} } func (m *KubeControllerManagerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1766,7 +1850,7 @@ var xxx_messageInfo_KubeControllerManagerConfig proto.InternalMessageInfo func (m *KubeProxyConfig) Reset() { *m = KubeProxyConfig{} } func (*KubeProxyConfig) ProtoMessage() {} func (*KubeProxyConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{61} + return fileDescriptor_f1caaec5647a9dbf, []int{64} } func (m *KubeProxyConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1794,7 +1878,7 @@ var xxx_messageInfo_KubeProxyConfig proto.InternalMessageInfo func (m *KubeSchedulerConfig) Reset() { *m = KubeSchedulerConfig{} } func (*KubeSchedulerConfig) ProtoMessage() {} func (*KubeSchedulerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{62} + return fileDescriptor_f1caaec5647a9dbf, []int{65} } func (m *KubeSchedulerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1822,7 +1906,7 @@ var xxx_messageInfo_KubeSchedulerConfig proto.InternalMessageInfo func (m *KubeletConfig) Reset() { *m = KubeletConfig{} } func (*KubeletConfig) ProtoMessage() {} func (*KubeletConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{63} + return fileDescriptor_f1caaec5647a9dbf, []int{66} } func (m *KubeletConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1850,7 +1934,7 @@ var xxx_messageInfo_KubeletConfig proto.InternalMessageInfo func (m *KubeletConfigEviction) Reset() { *m = KubeletConfigEviction{} } func (*KubeletConfigEviction) ProtoMessage() {} func (*KubeletConfigEviction) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{64} + return fileDescriptor_f1caaec5647a9dbf, []int{67} } func (m *KubeletConfigEviction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1878,7 +1962,7 @@ var xxx_messageInfo_KubeletConfigEviction proto.InternalMessageInfo func (m *KubeletConfigEvictionMinimumReclaim) Reset() { *m = KubeletConfigEvictionMinimumReclaim{} } func (*KubeletConfigEvictionMinimumReclaim) ProtoMessage() {} func (*KubeletConfigEvictionMinimumReclaim) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{65} + return fileDescriptor_f1caaec5647a9dbf, []int{68} } func (m *KubeletConfigEvictionMinimumReclaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1906,7 +1990,7 @@ var xxx_messageInfo_KubeletConfigEvictionMinimumReclaim proto.InternalMessageInf func (m *KubeletConfigEvictionSoftGracePeriod) Reset() { *m = KubeletConfigEvictionSoftGracePeriod{} } func (*KubeletConfigEvictionSoftGracePeriod) ProtoMessage() {} func (*KubeletConfigEvictionSoftGracePeriod) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{66} + return fileDescriptor_f1caaec5647a9dbf, []int{69} } func (m *KubeletConfigEvictionSoftGracePeriod) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1934,7 +2018,7 @@ var xxx_messageInfo_KubeletConfigEvictionSoftGracePeriod proto.InternalMessageIn func (m *KubeletConfigReserved) Reset() { *m = KubeletConfigReserved{} } func (*KubeletConfigReserved) ProtoMessage() {} func (*KubeletConfigReserved) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{67} + return fileDescriptor_f1caaec5647a9dbf, []int{70} } func (m *KubeletConfigReserved) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1962,7 +2046,7 @@ var xxx_messageInfo_KubeletConfigReserved proto.InternalMessageInfo func (m *Kubernetes) Reset() { *m = Kubernetes{} } func (*Kubernetes) ProtoMessage() {} func (*Kubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{68} + return fileDescriptor_f1caaec5647a9dbf, []int{71} } func (m *Kubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1990,7 +2074,7 @@ var xxx_messageInfo_Kubernetes proto.InternalMessageInfo func (m *KubernetesConfig) Reset() { *m = KubernetesConfig{} } func (*KubernetesConfig) ProtoMessage() {} func (*KubernetesConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{69} + return fileDescriptor_f1caaec5647a9dbf, []int{72} } func (m *KubernetesConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2018,7 +2102,7 @@ var xxx_messageInfo_KubernetesConfig proto.InternalMessageInfo func (m *KubernetesDashboard) Reset() { *m = KubernetesDashboard{} } func (*KubernetesDashboard) ProtoMessage() {} func (*KubernetesDashboard) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{70} + return fileDescriptor_f1caaec5647a9dbf, []int{73} } func (m *KubernetesDashboard) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2046,7 +2130,7 @@ var xxx_messageInfo_KubernetesDashboard proto.InternalMessageInfo func (m *KubernetesSettings) Reset() { *m = KubernetesSettings{} } func (*KubernetesSettings) ProtoMessage() {} func (*KubernetesSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{71} + return fileDescriptor_f1caaec5647a9dbf, []int{74} } func (m *KubernetesSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2074,7 +2158,7 @@ var xxx_messageInfo_KubernetesSettings proto.InternalMessageInfo func (m *LastError) Reset() { *m = LastError{} } func (*LastError) ProtoMessage() {} func (*LastError) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{72} + return fileDescriptor_f1caaec5647a9dbf, []int{75} } func (m *LastError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2099,10 +2183,38 @@ func (m *LastError) XXX_DiscardUnknown() { var xxx_messageInfo_LastError proto.InternalMessageInfo +func (m *LastMaintenance) Reset() { *m = LastMaintenance{} } +func (*LastMaintenance) ProtoMessage() {} +func (*LastMaintenance) Descriptor() ([]byte, []int) { + return fileDescriptor_f1caaec5647a9dbf, []int{76} +} +func (m *LastMaintenance) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LastMaintenance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LastMaintenance) XXX_Merge(src proto.Message) { + xxx_messageInfo_LastMaintenance.Merge(m, src) +} +func (m *LastMaintenance) XXX_Size() int { + return m.Size() +} +func (m *LastMaintenance) XXX_DiscardUnknown() { + xxx_messageInfo_LastMaintenance.DiscardUnknown(m) +} + +var xxx_messageInfo_LastMaintenance proto.InternalMessageInfo + func (m *LastOperation) Reset() { *m = LastOperation{} } func (*LastOperation) ProtoMessage() {} func (*LastOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{73} + return fileDescriptor_f1caaec5647a9dbf, []int{77} } func (m *LastOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2130,7 +2242,7 @@ var xxx_messageInfo_LastOperation proto.InternalMessageInfo func (m *Machine) Reset() { *m = Machine{} } func (*Machine) ProtoMessage() {} func (*Machine) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{74} + return fileDescriptor_f1caaec5647a9dbf, []int{78} } func (m *Machine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2158,7 +2270,7 @@ var xxx_messageInfo_Machine proto.InternalMessageInfo func (m *MachineControllerManagerSettings) Reset() { *m = MachineControllerManagerSettings{} } func (*MachineControllerManagerSettings) ProtoMessage() {} func (*MachineControllerManagerSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{75} + return fileDescriptor_f1caaec5647a9dbf, []int{79} } func (m *MachineControllerManagerSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2186,7 +2298,7 @@ var xxx_messageInfo_MachineControllerManagerSettings proto.InternalMessageInfo func (m *MachineImage) Reset() { *m = MachineImage{} } func (*MachineImage) ProtoMessage() {} func (*MachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{76} + return fileDescriptor_f1caaec5647a9dbf, []int{80} } func (m *MachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2214,7 +2326,7 @@ var xxx_messageInfo_MachineImage proto.InternalMessageInfo func (m *MachineImageVersion) Reset() { *m = MachineImageVersion{} } func (*MachineImageVersion) ProtoMessage() {} func (*MachineImageVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{77} + return fileDescriptor_f1caaec5647a9dbf, []int{81} } func (m *MachineImageVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2242,7 +2354,7 @@ var xxx_messageInfo_MachineImageVersion proto.InternalMessageInfo func (m *MachineType) Reset() { *m = MachineType{} } func (*MachineType) ProtoMessage() {} func (*MachineType) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{78} + return fileDescriptor_f1caaec5647a9dbf, []int{82} } func (m *MachineType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2270,7 +2382,7 @@ var xxx_messageInfo_MachineType proto.InternalMessageInfo func (m *MachineTypeStorage) Reset() { *m = MachineTypeStorage{} } func (*MachineTypeStorage) ProtoMessage() {} func (*MachineTypeStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{79} + return fileDescriptor_f1caaec5647a9dbf, []int{83} } func (m *MachineTypeStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2298,7 +2410,7 @@ var xxx_messageInfo_MachineTypeStorage proto.InternalMessageInfo func (m *Maintenance) Reset() { *m = Maintenance{} } func (*Maintenance) ProtoMessage() {} func (*Maintenance) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{80} + return fileDescriptor_f1caaec5647a9dbf, []int{84} } func (m *Maintenance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2326,7 +2438,7 @@ var xxx_messageInfo_Maintenance proto.InternalMessageInfo func (m *MaintenanceAutoUpdate) Reset() { *m = MaintenanceAutoUpdate{} } func (*MaintenanceAutoUpdate) ProtoMessage() {} func (*MaintenanceAutoUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{81} + return fileDescriptor_f1caaec5647a9dbf, []int{85} } func (m *MaintenanceAutoUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2354,7 +2466,7 @@ var xxx_messageInfo_MaintenanceAutoUpdate proto.InternalMessageInfo func (m *MaintenanceTimeWindow) Reset() { *m = MaintenanceTimeWindow{} } func (*MaintenanceTimeWindow) ProtoMessage() {} func (*MaintenanceTimeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{82} + return fileDescriptor_f1caaec5647a9dbf, []int{86} } func (m *MaintenanceTimeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2382,7 +2494,7 @@ var xxx_messageInfo_MaintenanceTimeWindow proto.InternalMessageInfo func (m *Monitoring) Reset() { *m = Monitoring{} } func (*Monitoring) ProtoMessage() {} func (*Monitoring) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{83} + return fileDescriptor_f1caaec5647a9dbf, []int{87} } func (m *Monitoring) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2410,7 +2522,7 @@ var xxx_messageInfo_Monitoring proto.InternalMessageInfo func (m *NamedResourceReference) Reset() { *m = NamedResourceReference{} } func (*NamedResourceReference) ProtoMessage() {} func (*NamedResourceReference) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{84} + return fileDescriptor_f1caaec5647a9dbf, []int{88} } func (m *NamedResourceReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2438,7 +2550,7 @@ var xxx_messageInfo_NamedResourceReference proto.InternalMessageInfo func (m *Networking) Reset() { *m = Networking{} } func (*Networking) ProtoMessage() {} func (*Networking) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{85} + return fileDescriptor_f1caaec5647a9dbf, []int{89} } func (m *Networking) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2466,7 +2578,7 @@ var xxx_messageInfo_Networking proto.InternalMessageInfo func (m *NginxIngress) Reset() { *m = NginxIngress{} } func (*NginxIngress) ProtoMessage() {} func (*NginxIngress) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{86} + return fileDescriptor_f1caaec5647a9dbf, []int{90} } func (m *NginxIngress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2494,7 +2606,7 @@ var xxx_messageInfo_NginxIngress proto.InternalMessageInfo func (m *NodeLocalDNS) Reset() { *m = NodeLocalDNS{} } func (*NodeLocalDNS) ProtoMessage() {} func (*NodeLocalDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{87} + return fileDescriptor_f1caaec5647a9dbf, []int{91} } func (m *NodeLocalDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2522,7 +2634,7 @@ var xxx_messageInfo_NodeLocalDNS proto.InternalMessageInfo func (m *OIDCConfig) Reset() { *m = OIDCConfig{} } func (*OIDCConfig) ProtoMessage() {} func (*OIDCConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{88} + return fileDescriptor_f1caaec5647a9dbf, []int{92} } func (m *OIDCConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2550,7 +2662,7 @@ var xxx_messageInfo_OIDCConfig proto.InternalMessageInfo func (m *OpenIDConnectClientAuthentication) Reset() { *m = OpenIDConnectClientAuthentication{} } func (*OpenIDConnectClientAuthentication) ProtoMessage() {} func (*OpenIDConnectClientAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{89} + return fileDescriptor_f1caaec5647a9dbf, []int{93} } func (m *OpenIDConnectClientAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2578,7 +2690,7 @@ var xxx_messageInfo_OpenIDConnectClientAuthentication proto.InternalMessageInfo func (m *Project) Reset() { *m = Project{} } func (*Project) ProtoMessage() {} func (*Project) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{90} + return fileDescriptor_f1caaec5647a9dbf, []int{94} } func (m *Project) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2606,7 +2718,7 @@ var xxx_messageInfo_Project proto.InternalMessageInfo func (m *ProjectList) Reset() { *m = ProjectList{} } func (*ProjectList) ProtoMessage() {} func (*ProjectList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{91} + return fileDescriptor_f1caaec5647a9dbf, []int{95} } func (m *ProjectList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2634,7 +2746,7 @@ var xxx_messageInfo_ProjectList proto.InternalMessageInfo func (m *ProjectMember) Reset() { *m = ProjectMember{} } func (*ProjectMember) ProtoMessage() {} func (*ProjectMember) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{92} + return fileDescriptor_f1caaec5647a9dbf, []int{96} } func (m *ProjectMember) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2662,7 +2774,7 @@ var xxx_messageInfo_ProjectMember proto.InternalMessageInfo func (m *ProjectSpec) Reset() { *m = ProjectSpec{} } func (*ProjectSpec) ProtoMessage() {} func (*ProjectSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{93} + return fileDescriptor_f1caaec5647a9dbf, []int{97} } func (m *ProjectSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2690,7 +2802,7 @@ var xxx_messageInfo_ProjectSpec proto.InternalMessageInfo func (m *ProjectStatus) Reset() { *m = ProjectStatus{} } func (*ProjectStatus) ProtoMessage() {} func (*ProjectStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{94} + return fileDescriptor_f1caaec5647a9dbf, []int{98} } func (m *ProjectStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2718,7 +2830,7 @@ var xxx_messageInfo_ProjectStatus proto.InternalMessageInfo func (m *ProjectTolerations) Reset() { *m = ProjectTolerations{} } func (*ProjectTolerations) ProtoMessage() {} func (*ProjectTolerations) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{95} + return fileDescriptor_f1caaec5647a9dbf, []int{99} } func (m *ProjectTolerations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2746,7 +2858,7 @@ var xxx_messageInfo_ProjectTolerations proto.InternalMessageInfo func (m *Provider) Reset() { *m = Provider{} } func (*Provider) ProtoMessage() {} func (*Provider) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{96} + return fileDescriptor_f1caaec5647a9dbf, []int{100} } func (m *Provider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2774,7 +2886,7 @@ var xxx_messageInfo_Provider proto.InternalMessageInfo func (m *Quota) Reset() { *m = Quota{} } func (*Quota) ProtoMessage() {} func (*Quota) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{97} + return fileDescriptor_f1caaec5647a9dbf, []int{101} } func (m *Quota) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2802,7 +2914,7 @@ var xxx_messageInfo_Quota proto.InternalMessageInfo func (m *QuotaList) Reset() { *m = QuotaList{} } func (*QuotaList) ProtoMessage() {} func (*QuotaList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{98} + return fileDescriptor_f1caaec5647a9dbf, []int{102} } func (m *QuotaList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2830,7 +2942,7 @@ var xxx_messageInfo_QuotaList proto.InternalMessageInfo func (m *QuotaSpec) Reset() { *m = QuotaSpec{} } func (*QuotaSpec) ProtoMessage() {} func (*QuotaSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{99} + return fileDescriptor_f1caaec5647a9dbf, []int{103} } func (m *QuotaSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2858,7 +2970,7 @@ var xxx_messageInfo_QuotaSpec proto.InternalMessageInfo func (m *Region) Reset() { *m = Region{} } func (*Region) ProtoMessage() {} func (*Region) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{100} + return fileDescriptor_f1caaec5647a9dbf, []int{104} } func (m *Region) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2886,7 +2998,7 @@ var xxx_messageInfo_Region proto.InternalMessageInfo func (m *ResourceData) Reset() { *m = ResourceData{} } func (*ResourceData) ProtoMessage() {} func (*ResourceData) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{101} + return fileDescriptor_f1caaec5647a9dbf, []int{105} } func (m *ResourceData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2914,7 +3026,7 @@ var xxx_messageInfo_ResourceData proto.InternalMessageInfo func (m *ResourceWatchCacheSize) Reset() { *m = ResourceWatchCacheSize{} } func (*ResourceWatchCacheSize) ProtoMessage() {} func (*ResourceWatchCacheSize) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{102} + return fileDescriptor_f1caaec5647a9dbf, []int{106} } func (m *ResourceWatchCacheSize) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2942,7 +3054,7 @@ var xxx_messageInfo_ResourceWatchCacheSize proto.InternalMessageInfo func (m *SecretBinding) Reset() { *m = SecretBinding{} } func (*SecretBinding) ProtoMessage() {} func (*SecretBinding) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{103} + return fileDescriptor_f1caaec5647a9dbf, []int{107} } func (m *SecretBinding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2970,7 +3082,7 @@ var xxx_messageInfo_SecretBinding proto.InternalMessageInfo func (m *SecretBindingList) Reset() { *m = SecretBindingList{} } func (*SecretBindingList) ProtoMessage() {} func (*SecretBindingList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{104} + return fileDescriptor_f1caaec5647a9dbf, []int{108} } func (m *SecretBindingList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2998,7 +3110,7 @@ var xxx_messageInfo_SecretBindingList proto.InternalMessageInfo func (m *SecretBindingProvider) Reset() { *m = SecretBindingProvider{} } func (*SecretBindingProvider) ProtoMessage() {} func (*SecretBindingProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{105} + return fileDescriptor_f1caaec5647a9dbf, []int{109} } func (m *SecretBindingProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3026,7 +3138,7 @@ var xxx_messageInfo_SecretBindingProvider proto.InternalMessageInfo func (m *Seed) Reset() { *m = Seed{} } func (*Seed) ProtoMessage() {} func (*Seed) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{106} + return fileDescriptor_f1caaec5647a9dbf, []int{110} } func (m *Seed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3054,7 +3166,7 @@ var xxx_messageInfo_Seed proto.InternalMessageInfo func (m *SeedBackup) Reset() { *m = SeedBackup{} } func (*SeedBackup) ProtoMessage() {} func (*SeedBackup) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{107} + return fileDescriptor_f1caaec5647a9dbf, []int{111} } func (m *SeedBackup) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3082,7 +3194,7 @@ var xxx_messageInfo_SeedBackup proto.InternalMessageInfo func (m *SeedDNS) Reset() { *m = SeedDNS{} } func (*SeedDNS) ProtoMessage() {} func (*SeedDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{108} + return fileDescriptor_f1caaec5647a9dbf, []int{112} } func (m *SeedDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3110,7 +3222,7 @@ var xxx_messageInfo_SeedDNS proto.InternalMessageInfo func (m *SeedDNSProvider) Reset() { *m = SeedDNSProvider{} } func (*SeedDNSProvider) ProtoMessage() {} func (*SeedDNSProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{109} + return fileDescriptor_f1caaec5647a9dbf, []int{113} } func (m *SeedDNSProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3138,7 +3250,7 @@ var xxx_messageInfo_SeedDNSProvider proto.InternalMessageInfo func (m *SeedList) Reset() { *m = SeedList{} } func (*SeedList) ProtoMessage() {} func (*SeedList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{110} + return fileDescriptor_f1caaec5647a9dbf, []int{114} } func (m *SeedList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3166,7 +3278,7 @@ var xxx_messageInfo_SeedList proto.InternalMessageInfo func (m *SeedNetworks) Reset() { *m = SeedNetworks{} } func (*SeedNetworks) ProtoMessage() {} func (*SeedNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{111} + return fileDescriptor_f1caaec5647a9dbf, []int{115} } func (m *SeedNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3194,7 +3306,7 @@ var xxx_messageInfo_SeedNetworks proto.InternalMessageInfo func (m *SeedProvider) Reset() { *m = SeedProvider{} } func (*SeedProvider) ProtoMessage() {} func (*SeedProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{112} + return fileDescriptor_f1caaec5647a9dbf, []int{116} } func (m *SeedProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3222,7 +3334,7 @@ var xxx_messageInfo_SeedProvider proto.InternalMessageInfo func (m *SeedSelector) Reset() { *m = SeedSelector{} } func (*SeedSelector) ProtoMessage() {} func (*SeedSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{113} + return fileDescriptor_f1caaec5647a9dbf, []int{117} } func (m *SeedSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3250,7 +3362,7 @@ var xxx_messageInfo_SeedSelector proto.InternalMessageInfo func (m *SeedSettingDependencyWatchdog) Reset() { *m = SeedSettingDependencyWatchdog{} } func (*SeedSettingDependencyWatchdog) ProtoMessage() {} func (*SeedSettingDependencyWatchdog) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{114} + return fileDescriptor_f1caaec5647a9dbf, []int{118} } func (m *SeedSettingDependencyWatchdog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3278,7 +3390,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdog proto.InternalMessageInfo func (m *SeedSettingDependencyWatchdogEndpoint) Reset() { *m = SeedSettingDependencyWatchdogEndpoint{} } func (*SeedSettingDependencyWatchdogEndpoint) ProtoMessage() {} func (*SeedSettingDependencyWatchdogEndpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{115} + return fileDescriptor_f1caaec5647a9dbf, []int{119} } func (m *SeedSettingDependencyWatchdogEndpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3306,7 +3418,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdogEndpoint proto.InternalMessageI func (m *SeedSettingDependencyWatchdogProbe) Reset() { *m = SeedSettingDependencyWatchdogProbe{} } func (*SeedSettingDependencyWatchdogProbe) ProtoMessage() {} func (*SeedSettingDependencyWatchdogProbe) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{116} + return fileDescriptor_f1caaec5647a9dbf, []int{120} } func (m *SeedSettingDependencyWatchdogProbe) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3334,7 +3446,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdogProbe proto.InternalMessageInfo func (m *SeedSettingExcessCapacityReservation) Reset() { *m = SeedSettingExcessCapacityReservation{} } func (*SeedSettingExcessCapacityReservation) ProtoMessage() {} func (*SeedSettingExcessCapacityReservation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{117} + return fileDescriptor_f1caaec5647a9dbf, []int{121} } func (m *SeedSettingExcessCapacityReservation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3362,7 +3474,7 @@ var xxx_messageInfo_SeedSettingExcessCapacityReservation proto.InternalMessageIn func (m *SeedSettingLoadBalancerServices) Reset() { *m = SeedSettingLoadBalancerServices{} } func (*SeedSettingLoadBalancerServices) ProtoMessage() {} func (*SeedSettingLoadBalancerServices) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{118} + return fileDescriptor_f1caaec5647a9dbf, []int{122} } func (m *SeedSettingLoadBalancerServices) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3390,7 +3502,7 @@ var xxx_messageInfo_SeedSettingLoadBalancerServices proto.InternalMessageInfo func (m *SeedSettingOwnerChecks) Reset() { *m = SeedSettingOwnerChecks{} } func (*SeedSettingOwnerChecks) ProtoMessage() {} func (*SeedSettingOwnerChecks) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{119} + return fileDescriptor_f1caaec5647a9dbf, []int{123} } func (m *SeedSettingOwnerChecks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3418,7 +3530,7 @@ var xxx_messageInfo_SeedSettingOwnerChecks proto.InternalMessageInfo func (m *SeedSettingScheduling) Reset() { *m = SeedSettingScheduling{} } func (*SeedSettingScheduling) ProtoMessage() {} func (*SeedSettingScheduling) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{120} + return fileDescriptor_f1caaec5647a9dbf, []int{124} } func (m *SeedSettingScheduling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3446,7 +3558,7 @@ var xxx_messageInfo_SeedSettingScheduling proto.InternalMessageInfo func (m *SeedSettingShootDNS) Reset() { *m = SeedSettingShootDNS{} } func (*SeedSettingShootDNS) ProtoMessage() {} func (*SeedSettingShootDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{121} + return fileDescriptor_f1caaec5647a9dbf, []int{125} } func (m *SeedSettingShootDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3474,7 +3586,7 @@ var xxx_messageInfo_SeedSettingShootDNS proto.InternalMessageInfo func (m *SeedSettingVerticalPodAutoscaler) Reset() { *m = SeedSettingVerticalPodAutoscaler{} } func (*SeedSettingVerticalPodAutoscaler) ProtoMessage() {} func (*SeedSettingVerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{122} + return fileDescriptor_f1caaec5647a9dbf, []int{126} } func (m *SeedSettingVerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3502,7 +3614,7 @@ var xxx_messageInfo_SeedSettingVerticalPodAutoscaler proto.InternalMessageInfo func (m *SeedSettings) Reset() { *m = SeedSettings{} } func (*SeedSettings) ProtoMessage() {} func (*SeedSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{123} + return fileDescriptor_f1caaec5647a9dbf, []int{127} } func (m *SeedSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3530,7 +3642,7 @@ var xxx_messageInfo_SeedSettings proto.InternalMessageInfo func (m *SeedSpec) Reset() { *m = SeedSpec{} } func (*SeedSpec) ProtoMessage() {} func (*SeedSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{124} + return fileDescriptor_f1caaec5647a9dbf, []int{128} } func (m *SeedSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3558,7 +3670,7 @@ var xxx_messageInfo_SeedSpec proto.InternalMessageInfo func (m *SeedStatus) Reset() { *m = SeedStatus{} } func (*SeedStatus) ProtoMessage() {} func (*SeedStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{125} + return fileDescriptor_f1caaec5647a9dbf, []int{129} } func (m *SeedStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3586,7 +3698,7 @@ var xxx_messageInfo_SeedStatus proto.InternalMessageInfo func (m *SeedTaint) Reset() { *m = SeedTaint{} } func (*SeedTaint) ProtoMessage() {} func (*SeedTaint) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{126} + return fileDescriptor_f1caaec5647a9dbf, []int{130} } func (m *SeedTaint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3614,7 +3726,7 @@ var xxx_messageInfo_SeedTaint proto.InternalMessageInfo func (m *SeedVolume) Reset() { *m = SeedVolume{} } func (*SeedVolume) ProtoMessage() {} func (*SeedVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{127} + return fileDescriptor_f1caaec5647a9dbf, []int{131} } func (m *SeedVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3642,7 +3754,7 @@ var xxx_messageInfo_SeedVolume proto.InternalMessageInfo func (m *SeedVolumeProvider) Reset() { *m = SeedVolumeProvider{} } func (*SeedVolumeProvider) ProtoMessage() {} func (*SeedVolumeProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{128} + return fileDescriptor_f1caaec5647a9dbf, []int{132} } func (m *SeedVolumeProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3670,7 +3782,7 @@ var xxx_messageInfo_SeedVolumeProvider proto.InternalMessageInfo func (m *ServiceAccountConfig) Reset() { *m = ServiceAccountConfig{} } func (*ServiceAccountConfig) ProtoMessage() {} func (*ServiceAccountConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{129} + return fileDescriptor_f1caaec5647a9dbf, []int{133} } func (m *ServiceAccountConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3698,7 +3810,7 @@ var xxx_messageInfo_ServiceAccountConfig proto.InternalMessageInfo func (m *Shoot) Reset() { *m = Shoot{} } func (*Shoot) ProtoMessage() {} func (*Shoot) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{130} + return fileDescriptor_f1caaec5647a9dbf, []int{134} } func (m *Shoot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3726,7 +3838,7 @@ var xxx_messageInfo_Shoot proto.InternalMessageInfo func (m *ShootAdvertisedAddress) Reset() { *m = ShootAdvertisedAddress{} } func (*ShootAdvertisedAddress) ProtoMessage() {} func (*ShootAdvertisedAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{131} + return fileDescriptor_f1caaec5647a9dbf, []int{135} } func (m *ShootAdvertisedAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3751,38 +3863,10 @@ func (m *ShootAdvertisedAddress) XXX_DiscardUnknown() { var xxx_messageInfo_ShootAdvertisedAddress proto.InternalMessageInfo -func (m *ShootCARotation) Reset() { *m = ShootCARotation{} } -func (*ShootCARotation) ProtoMessage() {} -func (*ShootCARotation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{132} -} -func (m *ShootCARotation) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ShootCARotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ShootCARotation) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShootCARotation.Merge(m, src) -} -func (m *ShootCARotation) XXX_Size() int { - return m.Size() -} -func (m *ShootCARotation) XXX_DiscardUnknown() { - xxx_messageInfo_ShootCARotation.DiscardUnknown(m) -} - -var xxx_messageInfo_ShootCARotation proto.InternalMessageInfo - func (m *ShootCredentials) Reset() { *m = ShootCredentials{} } func (*ShootCredentials) ProtoMessage() {} func (*ShootCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{133} + return fileDescriptor_f1caaec5647a9dbf, []int{136} } func (m *ShootCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3810,7 +3894,7 @@ var xxx_messageInfo_ShootCredentials proto.InternalMessageInfo func (m *ShootCredentialsRotation) Reset() { *m = ShootCredentialsRotation{} } func (*ShootCredentialsRotation) ProtoMessage() {} func (*ShootCredentialsRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{134} + return fileDescriptor_f1caaec5647a9dbf, []int{137} } func (m *ShootCredentialsRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3838,7 +3922,7 @@ var xxx_messageInfo_ShootCredentialsRotation proto.InternalMessageInfo func (m *ShootETCDEncryptionKeyRotation) Reset() { *m = ShootETCDEncryptionKeyRotation{} } func (*ShootETCDEncryptionKeyRotation) ProtoMessage() {} func (*ShootETCDEncryptionKeyRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{135} + return fileDescriptor_f1caaec5647a9dbf, []int{138} } func (m *ShootETCDEncryptionKeyRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3866,7 +3950,7 @@ var xxx_messageInfo_ShootETCDEncryptionKeyRotation proto.InternalMessageInfo func (m *ShootKubeconfigRotation) Reset() { *m = ShootKubeconfigRotation{} } func (*ShootKubeconfigRotation) ProtoMessage() {} func (*ShootKubeconfigRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{136} + return fileDescriptor_f1caaec5647a9dbf, []int{139} } func (m *ShootKubeconfigRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3894,7 +3978,7 @@ var xxx_messageInfo_ShootKubeconfigRotation proto.InternalMessageInfo func (m *ShootList) Reset() { *m = ShootList{} } func (*ShootList) ProtoMessage() {} func (*ShootList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{137} + return fileDescriptor_f1caaec5647a9dbf, []int{140} } func (m *ShootList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3922,7 +4006,7 @@ var xxx_messageInfo_ShootList proto.InternalMessageInfo func (m *ShootMachineImage) Reset() { *m = ShootMachineImage{} } func (*ShootMachineImage) ProtoMessage() {} func (*ShootMachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{138} + return fileDescriptor_f1caaec5647a9dbf, []int{141} } func (m *ShootMachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3950,7 +4034,7 @@ var xxx_messageInfo_ShootMachineImage proto.InternalMessageInfo func (m *ShootNetworks) Reset() { *m = ShootNetworks{} } func (*ShootNetworks) ProtoMessage() {} func (*ShootNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{139} + return fileDescriptor_f1caaec5647a9dbf, []int{142} } func (m *ShootNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3978,7 +4062,7 @@ var xxx_messageInfo_ShootNetworks proto.InternalMessageInfo func (m *ShootObservabilityRotation) Reset() { *m = ShootObservabilityRotation{} } func (*ShootObservabilityRotation) ProtoMessage() {} func (*ShootObservabilityRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{140} + return fileDescriptor_f1caaec5647a9dbf, []int{143} } func (m *ShootObservabilityRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4006,7 +4090,7 @@ var xxx_messageInfo_ShootObservabilityRotation proto.InternalMessageInfo func (m *ShootSSHKeypairRotation) Reset() { *m = ShootSSHKeypairRotation{} } func (*ShootSSHKeypairRotation) ProtoMessage() {} func (*ShootSSHKeypairRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{141} + return fileDescriptor_f1caaec5647a9dbf, []int{144} } func (m *ShootSSHKeypairRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4034,7 +4118,7 @@ var xxx_messageInfo_ShootSSHKeypairRotation proto.InternalMessageInfo func (m *ShootServiceAccountKeyRotation) Reset() { *m = ShootServiceAccountKeyRotation{} } func (*ShootServiceAccountKeyRotation) ProtoMessage() {} func (*ShootServiceAccountKeyRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{142} + return fileDescriptor_f1caaec5647a9dbf, []int{145} } func (m *ShootServiceAccountKeyRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4062,7 +4146,7 @@ var xxx_messageInfo_ShootServiceAccountKeyRotation proto.InternalMessageInfo func (m *ShootSpec) Reset() { *m = ShootSpec{} } func (*ShootSpec) ProtoMessage() {} func (*ShootSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{143} + return fileDescriptor_f1caaec5647a9dbf, []int{146} } func (m *ShootSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4090,7 +4174,7 @@ var xxx_messageInfo_ShootSpec proto.InternalMessageInfo func (m *ShootState) Reset() { *m = ShootState{} } func (*ShootState) ProtoMessage() {} func (*ShootState) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{144} + return fileDescriptor_f1caaec5647a9dbf, []int{147} } func (m *ShootState) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4118,7 +4202,7 @@ var xxx_messageInfo_ShootState proto.InternalMessageInfo func (m *ShootStateList) Reset() { *m = ShootStateList{} } func (*ShootStateList) ProtoMessage() {} func (*ShootStateList) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{145} + return fileDescriptor_f1caaec5647a9dbf, []int{148} } func (m *ShootStateList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4146,7 +4230,7 @@ var xxx_messageInfo_ShootStateList proto.InternalMessageInfo func (m *ShootStateSpec) Reset() { *m = ShootStateSpec{} } func (*ShootStateSpec) ProtoMessage() {} func (*ShootStateSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{146} + return fileDescriptor_f1caaec5647a9dbf, []int{149} } func (m *ShootStateSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4174,7 +4258,7 @@ var xxx_messageInfo_ShootStateSpec proto.InternalMessageInfo func (m *ShootStatus) Reset() { *m = ShootStatus{} } func (*ShootStatus) ProtoMessage() {} func (*ShootStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{147} + return fileDescriptor_f1caaec5647a9dbf, []int{150} } func (m *ShootStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4202,7 +4286,7 @@ var xxx_messageInfo_ShootStatus proto.InternalMessageInfo func (m *SystemComponents) Reset() { *m = SystemComponents{} } func (*SystemComponents) ProtoMessage() {} func (*SystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{148} + return fileDescriptor_f1caaec5647a9dbf, []int{151} } func (m *SystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4230,7 +4314,7 @@ var xxx_messageInfo_SystemComponents proto.InternalMessageInfo func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} func (*Toleration) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{149} + return fileDescriptor_f1caaec5647a9dbf, []int{152} } func (m *Toleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4258,7 +4342,7 @@ var xxx_messageInfo_Toleration proto.InternalMessageInfo func (m *VerticalPodAutoscaler) Reset() { *m = VerticalPodAutoscaler{} } func (*VerticalPodAutoscaler) ProtoMessage() {} func (*VerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{150} + return fileDescriptor_f1caaec5647a9dbf, []int{153} } func (m *VerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4286,7 +4370,7 @@ var xxx_messageInfo_VerticalPodAutoscaler proto.InternalMessageInfo func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{151} + return fileDescriptor_f1caaec5647a9dbf, []int{154} } func (m *Volume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4314,7 +4398,7 @@ var xxx_messageInfo_Volume proto.InternalMessageInfo func (m *VolumeType) Reset() { *m = VolumeType{} } func (*VolumeType) ProtoMessage() {} func (*VolumeType) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{152} + return fileDescriptor_f1caaec5647a9dbf, []int{155} } func (m *VolumeType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4342,7 +4426,7 @@ var xxx_messageInfo_VolumeType proto.InternalMessageInfo func (m *WatchCacheSizes) Reset() { *m = WatchCacheSizes{} } func (*WatchCacheSizes) ProtoMessage() {} func (*WatchCacheSizes) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{153} + return fileDescriptor_f1caaec5647a9dbf, []int{156} } func (m *WatchCacheSizes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4370,7 +4454,7 @@ var xxx_messageInfo_WatchCacheSizes proto.InternalMessageInfo func (m *Worker) Reset() { *m = Worker{} } func (*Worker) ProtoMessage() {} func (*Worker) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{154} + return fileDescriptor_f1caaec5647a9dbf, []int{157} } func (m *Worker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4398,7 +4482,7 @@ var xxx_messageInfo_Worker proto.InternalMessageInfo func (m *WorkerKubernetes) Reset() { *m = WorkerKubernetes{} } func (*WorkerKubernetes) ProtoMessage() {} func (*WorkerKubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{155} + return fileDescriptor_f1caaec5647a9dbf, []int{158} } func (m *WorkerKubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4426,7 +4510,7 @@ var xxx_messageInfo_WorkerKubernetes proto.InternalMessageInfo func (m *WorkerSystemComponents) Reset() { *m = WorkerSystemComponents{} } func (*WorkerSystemComponents) ProtoMessage() {} func (*WorkerSystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_f1caaec5647a9dbf, []int{156} + return fileDescriptor_f1caaec5647a9dbf, []int{159} } func (m *WorkerSystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4468,6 +4552,7 @@ func init() { proto.RegisterType((*BackupEntryList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.BackupEntryList") proto.RegisterType((*BackupEntrySpec)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.BackupEntrySpec") proto.RegisterType((*BackupEntryStatus)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.BackupEntryStatus") + proto.RegisterType((*CARotation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.CARotation") proto.RegisterType((*CRI)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.CRI") proto.RegisterType((*CloudProfile)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.CloudProfile") proto.RegisterType((*CloudProfileList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.CloudProfileList") @@ -4487,6 +4572,7 @@ func init() { proto.RegisterType((*ControllerRegistrationList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ControllerRegistrationList") proto.RegisterType((*ControllerRegistrationSpec)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ControllerRegistrationSpec") proto.RegisterType((*ControllerResource)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ControllerResource") + proto.RegisterType((*ControllerResourceLifecycle)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ControllerResourceLifecycle") proto.RegisterType((*CoreDNS)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.CoreDNS") proto.RegisterType((*CoreDNSAutoscaling)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.CoreDNSAutoscaling") proto.RegisterType((*CoreDNSRewriting)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.CoreDNSRewriting") @@ -4513,6 +4599,7 @@ func init() { proto.RegisterType((*IngressController)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.IngressController") proto.RegisterType((*KubeAPIServerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeAPIServerConfig") proto.RegisterMapType((map[string]bool)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeAPIServerConfig.RuntimeConfigEntry") + proto.RegisterType((*KubeAPIServerLogging)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeAPIServerLogging") proto.RegisterType((*KubeAPIServerRequests)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeAPIServerRequests") proto.RegisterType((*KubeControllerManagerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeControllerManagerConfig") proto.RegisterType((*KubeProxyConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubeProxyConfig") @@ -4528,6 +4615,7 @@ func init() { proto.RegisterType((*KubernetesDashboard)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubernetesDashboard") proto.RegisterType((*KubernetesSettings)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.KubernetesSettings") proto.RegisterType((*LastError)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.LastError") + proto.RegisterType((*LastMaintenance)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.LastMaintenance") proto.RegisterType((*LastOperation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.LastOperation") proto.RegisterType((*Machine)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.Machine") proto.RegisterType((*MachineControllerManagerSettings)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.MachineControllerManagerSettings") @@ -4593,7 +4681,6 @@ func init() { proto.RegisterType((*ServiceAccountConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ServiceAccountConfig") proto.RegisterType((*Shoot)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.Shoot") proto.RegisterType((*ShootAdvertisedAddress)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ShootAdvertisedAddress") - proto.RegisterType((*ShootCARotation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ShootCARotation") proto.RegisterType((*ShootCredentials)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ShootCredentials") proto.RegisterType((*ShootCredentialsRotation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ShootCredentialsRotation") proto.RegisterType((*ShootETCDEncryptionKeyRotation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1alpha1.ShootETCDEncryptionKeyRotation") @@ -4627,684 +4714,705 @@ func init() { } var fileDescriptor_f1caaec5647a9dbf = []byte{ - // 10825 bytes of a gzipped FileDescriptorProto + // 11164 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x6c, 0x25, 0xc9, - 0x75, 0x18, 0xac, 0xbe, 0x7c, 0x5d, 0x1e, 0x3e, 0x66, 0x58, 0xf3, 0x58, 0xee, 0xec, 0xcc, 0xdc, - 0x55, 0x6b, 0xa5, 0x6f, 0xf7, 0x93, 0xcc, 0xf1, 0x6a, 0x25, 0x7b, 0x77, 0xbd, 0xbb, 0x5a, 0xde, - 0x7b, 0x39, 0x33, 0xd7, 0x43, 0x72, 0xb8, 0x75, 0x87, 0xbb, 0x7a, 0x18, 0x96, 0x9a, 0xdd, 0xc5, - 0xcb, 0x16, 0xfb, 0x76, 0xdf, 0xed, 0xee, 0xcb, 0x21, 0x67, 0x15, 0x4b, 0x96, 0x65, 0xcb, 0x96, - 0x90, 0x20, 0x81, 0x11, 0x48, 0x58, 0x09, 0xb2, 0x2c, 0x18, 0x81, 0x02, 0xd8, 0x90, 0x20, 0xc0, - 0x0a, 0xf2, 0x40, 0x02, 0x38, 0x3f, 0x2c, 0xc8, 0x81, 0x60, 0x04, 0x4e, 0x20, 0x1b, 0x09, 0x15, - 0x31, 0x4e, 0xec, 0x04, 0x09, 0xf2, 0x42, 0x7e, 0x64, 0xe0, 0x04, 0x41, 0x3d, 0xba, 0xba, 0xfa, - 0xc5, 0x47, 0xf7, 0x0c, 0xa5, 0x8d, 0xfd, 0x8b, 0xbc, 0x75, 0xaa, 0xce, 0xa9, 0xae, 0x3a, 0x75, - 0xea, 0x9c, 0x53, 0xa7, 0x4e, 0x41, 0xab, 0x67, 0x87, 0x5b, 0xc3, 0x8d, 0x05, 0xd3, 0xeb, 0x5f, - 0xeb, 0x19, 0xbe, 0x45, 0x5c, 0xe2, 0xc7, 0xff, 0x0c, 0xb6, 0x7b, 0xd7, 0x8c, 0x81, 0x1d, 0x5c, - 0x33, 0x3d, 0x9f, 0x5c, 0xdb, 0x79, 0xda, 0x70, 0x06, 0x5b, 0xc6, 0xd3, 0xd7, 0x7a, 0x14, 0x68, - 0x84, 0xc4, 0x5a, 0x18, 0xf8, 0x5e, 0xe8, 0xa1, 0x67, 0x62, 0x24, 0x0b, 0x51, 0xdb, 0xf8, 0x9f, - 0xc1, 0x76, 0x6f, 0x81, 0x22, 0x59, 0xa0, 0x48, 0x16, 0x22, 0x24, 0x97, 0x9a, 0x27, 0xa2, 0xbc, - 0x41, 0xc2, 0x2c, 0xe1, 0x4b, 0x3f, 0xa1, 0xe2, 0xf0, 0x7a, 0xde, 0x35, 0x56, 0xbc, 0x31, 0xdc, - 0x64, 0xbf, 0xd8, 0x0f, 0xf6, 0x9f, 0xa8, 0xfe, 0xd4, 0xf6, 0xb3, 0xc1, 0x82, 0xed, 0x51, 0xc4, - 0xd7, 0x8c, 0x61, 0xe8, 0x05, 0xa6, 0xe1, 0xd8, 0x6e, 0xef, 0xda, 0x4e, 0x16, 0xb3, 0xae, 0x54, - 0x15, 0x5d, 0x38, 0xb4, 0x8e, 0xbf, 0x61, 0x98, 0x79, 0x75, 0xde, 0x17, 0xd7, 0xe9, 0x1b, 0xe6, - 0x96, 0xed, 0x12, 0x7f, 0x2f, 0xfa, 0xb8, 0x6b, 0x3e, 0x09, 0xbc, 0xa1, 0x6f, 0x92, 0x13, 0xb5, - 0x0a, 0xae, 0xf5, 0x49, 0x68, 0xe4, 0xd1, 0xba, 0x56, 0xd4, 0xca, 0x1f, 0xba, 0xa1, 0xdd, 0xcf, - 0x92, 0xf9, 0xa9, 0xa3, 0x1a, 0x04, 0xe6, 0x16, 0xe9, 0x1b, 0x99, 0x76, 0xcf, 0x14, 0xb5, 0x1b, - 0x86, 0xb6, 0x73, 0xcd, 0x76, 0xc3, 0x20, 0xf4, 0xd3, 0x8d, 0xf4, 0xf7, 0xc2, 0xd8, 0xa2, 0x65, - 0x79, 0x2e, 0x7a, 0x0a, 0x26, 0x88, 0x6b, 0x6c, 0x38, 0xc4, 0x9a, 0xd7, 0x1e, 0xd7, 0x9e, 0xac, - 0x37, 0xcf, 0x7c, 0x67, 0xbf, 0xf1, 0xb6, 0x83, 0xfd, 0xc6, 0xc4, 0x12, 0x2f, 0xc6, 0x11, 0x5c, - 0xff, 0x42, 0x0d, 0xc6, 0x59, 0xa3, 0x00, 0xfd, 0xba, 0x06, 0xe7, 0xb6, 0x87, 0x1b, 0xc4, 0x77, - 0x49, 0x48, 0x82, 0xb6, 0x11, 0x6c, 0x6d, 0x78, 0x86, 0xcf, 0x51, 0x4c, 0xbd, 0xf7, 0xe6, 0x42, - 0x09, 0x16, 0x5c, 0xb8, 0x95, 0xc5, 0xd7, 0x7c, 0xe4, 0x60, 0xbf, 0x71, 0x2e, 0x07, 0x80, 0xf3, - 0xa8, 0xa3, 0xbb, 0x30, 0xed, 0xf6, 0x6c, 0x77, 0xb7, 0xe3, 0xf6, 0x7c, 0x12, 0x04, 0xf3, 0x35, - 0xd6, 0x9b, 0xc5, 0x52, 0xbd, 0x59, 0x55, 0x10, 0x35, 0xcf, 0x1e, 0xec, 0x37, 0xa6, 0xd5, 0x12, - 0x9c, 0x20, 0xa4, 0x7f, 0x53, 0x83, 0x33, 0x8b, 0x56, 0xdf, 0x0e, 0x02, 0xdb, 0x73, 0xd7, 0x9c, - 0x61, 0xcf, 0x76, 0xd1, 0xe3, 0x30, 0xea, 0x1a, 0x7d, 0xc2, 0x86, 0x64, 0xb2, 0x39, 0x2d, 0x46, - 0x75, 0x74, 0xd5, 0xe8, 0x13, 0xcc, 0x20, 0xe8, 0x15, 0x18, 0x37, 0x3d, 0x77, 0xd3, 0xee, 0x89, - 0x8e, 0xfe, 0xc4, 0x02, 0x9f, 0xc9, 0x05, 0x75, 0x26, 0x59, 0xff, 0x04, 0x07, 0x2c, 0x60, 0xe3, - 0xee, 0xd2, 0x6e, 0x48, 0x5c, 0x4a, 0xa6, 0x09, 0x07, 0xfb, 0x8d, 0xf1, 0x16, 0x43, 0x80, 0x05, - 0x22, 0xf4, 0x24, 0xd4, 0x2d, 0x3b, 0xe0, 0xd3, 0x39, 0xc2, 0xa6, 0x73, 0xfa, 0x60, 0xbf, 0x51, - 0x6f, 0x8b, 0x32, 0x2c, 0xa1, 0xfa, 0x75, 0xa8, 0x2f, 0x3a, 0xc4, 0x0f, 0x6d, 0xb7, 0x87, 0x9e, - 0x87, 0x59, 0xd2, 0x37, 0x6c, 0x07, 0x13, 0x93, 0xd8, 0x3b, 0xc4, 0x0f, 0xe6, 0xb5, 0xc7, 0x47, - 0x9e, 0x9c, 0x6c, 0xa2, 0x83, 0xfd, 0xc6, 0xec, 0x52, 0x02, 0x82, 0x53, 0x35, 0xf5, 0x4f, 0x6b, - 0x30, 0xb5, 0x38, 0xb4, 0xec, 0x90, 0xf7, 0x04, 0x05, 0x30, 0x65, 0xd0, 0x9f, 0x6b, 0x9e, 0x63, - 0x9b, 0x7b, 0x82, 0x21, 0x5e, 0x2e, 0x35, 0x05, 0x8b, 0x31, 0x9e, 0xe6, 0x99, 0x83, 0xfd, 0xc6, - 0x94, 0x52, 0x80, 0x55, 0x2a, 0xfa, 0x16, 0xa8, 0x30, 0xf4, 0x21, 0x98, 0xe6, 0xe3, 0xb1, 0x62, - 0x0c, 0x30, 0xd9, 0x14, 0x9d, 0x78, 0x87, 0x32, 0xbc, 0x11, 0xa5, 0x85, 0xdb, 0x1b, 0x1f, 0x27, - 0x66, 0x88, 0xc9, 0x26, 0xf1, 0x89, 0x6b, 0x12, 0x3e, 0xd3, 0x2d, 0xa5, 0x31, 0x4e, 0xa0, 0xd2, - 0x7f, 0xa0, 0xc1, 0xd9, 0xc5, 0x1d, 0xc3, 0x76, 0x8c, 0x0d, 0xdb, 0xb1, 0xc3, 0xbd, 0x0f, 0x7b, - 0x2e, 0x39, 0xc6, 0x54, 0xaf, 0xc3, 0x23, 0x43, 0xd7, 0xe0, 0xed, 0x1c, 0xb2, 0xc2, 0x27, 0xf7, - 0xce, 0xde, 0x80, 0x50, 0x26, 0xa5, 0x43, 0xfd, 0xd8, 0xc1, 0x7e, 0xe3, 0x91, 0xf5, 0xfc, 0x2a, - 0xb8, 0xa8, 0x2d, 0xc2, 0x70, 0x51, 0x01, 0xbd, 0xea, 0x39, 0xc3, 0xbe, 0xc0, 0x3a, 0xc2, 0xb0, - 0x5e, 0x3a, 0xd8, 0x6f, 0x5c, 0x5c, 0xcf, 0xad, 0x81, 0x0b, 0x5a, 0xea, 0xdf, 0xad, 0xc1, 0x74, - 0xd3, 0x30, 0xb7, 0x87, 0x83, 0xe6, 0xd0, 0xdc, 0x26, 0x21, 0xfa, 0x18, 0xd4, 0xa9, 0x8c, 0xb3, - 0x8c, 0xd0, 0x10, 0x23, 0xf9, 0x93, 0x85, 0x8c, 0xca, 0x66, 0x91, 0xd6, 0x8e, 0xc7, 0x76, 0x85, - 0x84, 0x46, 0x13, 0x89, 0x31, 0x81, 0xb8, 0x0c, 0x4b, 0xac, 0xa8, 0x07, 0xa3, 0xc1, 0x80, 0x98, - 0x62, 0x19, 0x2c, 0x95, 0x62, 0x16, 0xb5, 0xcb, 0xdd, 0x01, 0x31, 0xe3, 0x69, 0xa0, 0xbf, 0x30, - 0x23, 0x80, 0x3c, 0x18, 0x0f, 0x42, 0x23, 0x1c, 0x06, 0x6c, 0x71, 0x4c, 0xbd, 0xf7, 0x46, 0x75, - 0x52, 0x0c, 0x5d, 0x73, 0x56, 0x10, 0x1b, 0xe7, 0xbf, 0xb1, 0x20, 0xa3, 0x7f, 0x5f, 0x83, 0xb3, - 0x6a, 0xf5, 0x65, 0x3b, 0x08, 0xd1, 0xcf, 0x65, 0x06, 0x74, 0xe1, 0x78, 0x03, 0x4a, 0x5b, 0xb3, - 0xe1, 0x3c, 0x2b, 0xc8, 0xd5, 0xa3, 0x12, 0x65, 0x30, 0x37, 0x61, 0xcc, 0x0e, 0x49, 0x9f, 0x33, - 0x56, 0x59, 0xe9, 0xa7, 0xf6, 0xb9, 0x39, 0x23, 0xa8, 0x8d, 0x75, 0x28, 0x5e, 0xcc, 0xd1, 0xeb, - 0x1f, 0x83, 0xf3, 0x6a, 0xad, 0x35, 0xdf, 0xdb, 0xb1, 0x2d, 0xe2, 0xd3, 0xc5, 0x10, 0xee, 0x0d, - 0x32, 0x8b, 0x81, 0x32, 0x17, 0x66, 0x10, 0xf4, 0x2e, 0x18, 0xf7, 0x49, 0xcf, 0xf6, 0x5c, 0x36, - 0xe1, 0x93, 0xf1, 0xe0, 0x61, 0x56, 0x8a, 0x05, 0x54, 0xff, 0x8f, 0xb5, 0xe4, 0xe0, 0xd1, 0x89, - 0x44, 0x77, 0xa1, 0x3e, 0x10, 0xa4, 0xc4, 0xe0, 0x75, 0x2a, 0x7f, 0x61, 0xd4, 0xf7, 0x78, 0x5c, - 0xa3, 0x12, 0x2c, 0x89, 0x21, 0x1b, 0x66, 0xa3, 0xff, 0x5b, 0x15, 0xa4, 0x36, 0x93, 0xa9, 0x6b, - 0x09, 0x44, 0x38, 0x85, 0x18, 0xdd, 0x81, 0xc9, 0x80, 0x98, 0x3e, 0xa1, 0x72, 0x49, 0x70, 0x6a, - 0xae, 0xf0, 0xea, 0x46, 0x95, 0x84, 0xf0, 0x9a, 0x13, 0xdd, 0x9f, 0x94, 0x00, 0x1c, 0x23, 0x42, - 0x97, 0x61, 0x34, 0x20, 0xc4, 0x9a, 0x1f, 0x65, 0x83, 0x5e, 0x67, 0x4b, 0x83, 0x10, 0x0b, 0xb3, - 0x52, 0xfd, 0x6b, 0xa3, 0x80, 0xb2, 0x8c, 0xad, 0x7e, 0x35, 0x2f, 0x11, 0x83, 0x5e, 0xe5, 0xab, - 0xc5, 0x1a, 0x49, 0x21, 0x46, 0x6f, 0xc0, 0x8c, 0x63, 0x04, 0xe1, 0xed, 0x01, 0x55, 0x54, 0x22, - 0xee, 0x98, 0x7a, 0x6f, 0xb3, 0xd4, 0xf4, 0x2e, 0xab, 0x98, 0x9a, 0x73, 0x07, 0xfb, 0x8d, 0x99, - 0x44, 0x11, 0x4e, 0xd2, 0x42, 0xdb, 0x30, 0x49, 0x0b, 0x96, 0x7c, 0xdf, 0xf3, 0xc5, 0x90, 0xbf, - 0x54, 0x9a, 0x30, 0xc3, 0xd2, 0x9c, 0xa1, 0x33, 0x21, 0x7f, 0xe2, 0x18, 0x3f, 0xfa, 0x59, 0x40, - 0xde, 0x46, 0x40, 0xfc, 0x1d, 0x62, 0xdd, 0xe0, 0x7a, 0x19, 0xfd, 0x5c, 0x3a, 0x2f, 0x23, 0xcd, - 0x4b, 0x62, 0x0e, 0xd1, 0xed, 0x4c, 0x0d, 0x9c, 0xd3, 0x0a, 0x6d, 0x03, 0x92, 0xba, 0x9d, 0x9c, - 0xf6, 0xf9, 0xb1, 0xe3, 0x33, 0xcd, 0x45, 0x4a, 0xec, 0x46, 0x06, 0x05, 0xce, 0x41, 0xab, 0xff, - 0x7e, 0x0d, 0xa6, 0x38, 0x93, 0x2c, 0xb9, 0xa1, 0xbf, 0x77, 0x0a, 0x5b, 0xc3, 0x66, 0x62, 0x6b, - 0x68, 0x57, 0x58, 0xea, 0xac, 0xc7, 0x85, 0x3b, 0x83, 0x9b, 0xda, 0x19, 0xae, 0x57, 0xa6, 0x74, - 0xf8, 0xc6, 0xf0, 0x2f, 0x35, 0x38, 0xa3, 0xd4, 0x3e, 0x85, 0x7d, 0x81, 0x24, 0xf7, 0x85, 0x97, - 0xab, 0x7e, 0x60, 0xc1, 0xb6, 0x60, 0x26, 0xbe, 0x8b, 0x89, 0xec, 0xf7, 0x02, 0x6c, 0x30, 0x99, - 0xb2, 0x1a, 0x2b, 0x49, 0x72, 0xd6, 0x9b, 0x12, 0x82, 0x95, 0x5a, 0x52, 0x58, 0xd5, 0x72, 0x85, - 0xd5, 0x9f, 0x8d, 0xc0, 0x5c, 0x66, 0xac, 0xb3, 0x02, 0x44, 0xfb, 0x51, 0x09, 0x90, 0xda, 0x8f, - 0x44, 0x80, 0x8c, 0x94, 0x12, 0x20, 0x4f, 0x42, 0x9d, 0x8e, 0x29, 0x9b, 0x1b, 0xbe, 0x35, 0x30, - 0x93, 0xa1, 0x2b, 0xca, 0xb0, 0x84, 0x22, 0x1f, 0x50, 0xdf, 0xee, 0xf1, 0x66, 0xdd, 0xd0, 0xf0, - 0xc3, 0x3b, 0x76, 0x9f, 0x08, 0x51, 0xf3, 0xff, 0x1f, 0x8f, 0x53, 0x69, 0x0b, 0x2e, 0x71, 0x56, - 0x32, 0x98, 0x70, 0x0e, 0x76, 0xfd, 0x9f, 0x6a, 0x30, 0xd2, 0xc2, 0x1d, 0xf4, 0xee, 0x84, 0x8a, - 0xfd, 0x88, 0xaa, 0x62, 0xdf, 0xdf, 0x6f, 0x4c, 0xb4, 0x70, 0x47, 0xd1, 0xb6, 0xff, 0x86, 0x06, - 0x73, 0xa6, 0xe7, 0x86, 0x06, 0xed, 0x05, 0xe6, 0xfb, 0x51, 0xc4, 0xf7, 0xe5, 0xb4, 0xcb, 0x56, - 0x0a, 0x5b, 0xf3, 0x51, 0xd1, 0x83, 0xb9, 0x34, 0x24, 0xc0, 0x59, 0xd2, 0xfa, 0x1f, 0x6b, 0x30, - 0xdd, 0x72, 0xbc, 0xa1, 0xb5, 0xe6, 0x7b, 0x9b, 0xb6, 0x43, 0xde, 0x22, 0x3a, 0xb5, 0xda, 0xe5, - 0x22, 0xc9, 0xc9, 0x54, 0x5c, 0xb5, 0xe2, 0x5b, 0x45, 0xc5, 0x55, 0xfb, 0x5c, 0x20, 0xcb, 0xbe, - 0x34, 0x91, 0xfc, 0x34, 0x26, 0xcd, 0x9e, 0x84, 0xba, 0x69, 0x34, 0x87, 0xae, 0xe5, 0x48, 0x1d, - 0x97, 0x76, 0xb3, 0xb5, 0xc8, 0xcb, 0xb0, 0x84, 0xa2, 0x37, 0x00, 0x62, 0x2f, 0x85, 0x98, 0x88, - 0x1b, 0x15, 0x5d, 0x23, 0x5d, 0x12, 0x52, 0x93, 0x3d, 0x88, 0x67, 0x3f, 0x86, 0x61, 0x85, 0x1c, - 0xfa, 0x05, 0x98, 0x11, 0xc3, 0xdc, 0xe9, 0x1b, 0x3d, 0x61, 0x11, 0x96, 0x1d, 0xab, 0x15, 0x05, - 0x53, 0xf3, 0x82, 0xa0, 0x3c, 0xa3, 0x96, 0x06, 0x38, 0x49, 0x0e, 0xdd, 0x83, 0xe9, 0xbe, 0x6a, - 0xe6, 0x8e, 0x56, 0xd8, 0x75, 0x14, 0x9b, 0xb7, 0x79, 0x5e, 0x50, 0x9f, 0x4e, 0x58, 0xc8, 0x09, - 0x5a, 0x39, 0xaa, 0xfa, 0xd8, 0xc3, 0x52, 0xd5, 0x37, 0x61, 0x82, 0x5b, 0x2b, 0xc1, 0xfc, 0x38, - 0xfb, 0xc2, 0x9f, 0x29, 0xf5, 0x85, 0xdc, 0xf2, 0x89, 0x7d, 0x6f, 0xfc, 0x77, 0x80, 0x23, 0xe4, - 0xe8, 0x2e, 0x4c, 0x53, 0x39, 0xdc, 0x25, 0x0e, 0x31, 0x43, 0xcf, 0x9f, 0x9f, 0xa8, 0xe0, 0xda, - 0xea, 0x2a, 0x88, 0xb8, 0xc3, 0x43, 0x2d, 0xc1, 0x09, 0x42, 0xd2, 0x9c, 0xab, 0x17, 0x9a, 0x73, - 0x3b, 0x30, 0xb5, 0xa3, 0x78, 0x1e, 0x26, 0xd9, 0x30, 0x7c, 0xa0, 0x54, 0xcf, 0x62, 0x3f, 0x44, - 0xf3, 0x9c, 0xa0, 0x34, 0xa5, 0xfa, 0x2c, 0x54, 0x42, 0xfa, 0x7e, 0x1d, 0xe6, 0x5a, 0xce, 0x30, - 0x08, 0x89, 0xbf, 0x28, 0xdc, 0xc7, 0xc4, 0x47, 0x9f, 0xd6, 0xe0, 0x22, 0xfb, 0xb7, 0xed, 0xdd, - 0x75, 0xdb, 0xc4, 0x31, 0xf6, 0x16, 0x37, 0x69, 0x0d, 0xcb, 0x3a, 0x99, 0x20, 0x6a, 0x0f, 0xc5, - 0xd6, 0xcf, 0x7c, 0x28, 0xdd, 0x5c, 0x8c, 0xb8, 0x80, 0x12, 0xfa, 0xbc, 0x06, 0x8f, 0xe6, 0x80, - 0xda, 0xc4, 0x21, 0x21, 0x11, 0x92, 0xe0, 0xa4, 0xfd, 0xb8, 0x72, 0xb0, 0xdf, 0x78, 0xb4, 0x5b, - 0x84, 0x14, 0x17, 0xd3, 0xa3, 0xdb, 0xe1, 0xa5, 0x1c, 0xe8, 0x75, 0xc3, 0x76, 0x86, 0x3e, 0x11, - 0x0a, 0xef, 0x49, 0xbb, 0x73, 0xf5, 0x60, 0xbf, 0x71, 0xa9, 0x5b, 0x88, 0x15, 0x1f, 0x42, 0x11, - 0x7d, 0x12, 0x2e, 0x48, 0xe8, 0xba, 0xeb, 0x12, 0x62, 0x11, 0x8b, 0xe9, 0x12, 0xa3, 0xa5, 0xba, - 0xf2, 0xe8, 0xc1, 0x7e, 0xe3, 0x42, 0x37, 0x0f, 0x21, 0xce, 0xa7, 0x83, 0x7a, 0x70, 0x25, 0x06, - 0x84, 0xb6, 0x63, 0xdf, 0x63, 0x98, 0xee, 0x6c, 0xf9, 0x24, 0xd8, 0xf2, 0x1c, 0x8b, 0xc9, 0x0b, - 0xad, 0xf9, 0xf6, 0x83, 0xfd, 0xc6, 0x95, 0xee, 0x61, 0x15, 0xf1, 0xe1, 0x78, 0x90, 0x05, 0xd3, - 0x81, 0x69, 0xb8, 0x1d, 0x37, 0x24, 0xfe, 0x8e, 0xe1, 0xcc, 0x8f, 0x97, 0xfa, 0x40, 0xbe, 0x46, - 0x15, 0x3c, 0x38, 0x81, 0x15, 0x3d, 0x0b, 0x75, 0xb2, 0x3b, 0x30, 0x5c, 0x8b, 0x70, 0xc1, 0x30, - 0xd9, 0xbc, 0x4c, 0xb7, 0xa4, 0x25, 0x51, 0x76, 0x7f, 0xbf, 0x31, 0x1d, 0xfd, 0xbf, 0xe2, 0x59, - 0x04, 0xcb, 0xda, 0xe8, 0x13, 0x70, 0xbe, 0x6f, 0xec, 0xae, 0x7a, 0x16, 0x61, 0x72, 0x8e, 0x8a, - 0x3d, 0x36, 0x11, 0xf5, 0x52, 0xfd, 0x9c, 0x3f, 0xd8, 0x6f, 0x9c, 0x5f, 0xc9, 0xc1, 0x87, 0x73, - 0xa9, 0xd0, 0x69, 0xe8, 0x1b, 0xbb, 0x37, 0x7c, 0xc3, 0x24, 0x9b, 0x43, 0xe7, 0x0e, 0xf1, 0xfb, - 0xb6, 0xcb, 0xf5, 0x3f, 0x62, 0x7a, 0xae, 0x45, 0x65, 0x89, 0xf6, 0xe4, 0x18, 0x9f, 0x86, 0x95, - 0xc3, 0x2a, 0xe2, 0xc3, 0xf1, 0xa0, 0xf7, 0xc1, 0xb4, 0xdd, 0x73, 0x3d, 0x9f, 0xdc, 0x31, 0x6c, - 0x37, 0x0c, 0xe6, 0x81, 0x79, 0x47, 0xd9, 0xb0, 0x76, 0x94, 0x72, 0x9c, 0xa8, 0xa5, 0xef, 0x8f, - 0xc0, 0x64, 0xcb, 0x73, 0x2d, 0x9b, 0xe9, 0xc9, 0x4f, 0x27, 0xfc, 0x5a, 0x57, 0x54, 0x41, 0x78, - 0x7f, 0xbf, 0x31, 0x23, 0x2b, 0x2a, 0x92, 0xf1, 0x39, 0x69, 0x54, 0x72, 0x33, 0xe6, 0xed, 0x49, - 0x63, 0xf0, 0xfe, 0x7e, 0xe3, 0x8c, 0x6c, 0x96, 0xb4, 0x0f, 0xd1, 0x0e, 0x20, 0xaa, 0xee, 0xdf, - 0xf1, 0x0d, 0x37, 0xe0, 0x68, 0xe9, 0xb4, 0x8c, 0x9c, 0x58, 0xd7, 0x96, 0xd6, 0xc0, 0x72, 0x06, - 0x1b, 0xce, 0xa1, 0x80, 0x3e, 0x0e, 0xb3, 0xb4, 0x74, 0x7d, 0x60, 0x19, 0x21, 0x51, 0xd6, 0xe4, - 0x89, 0xf4, 0x7b, 0x41, 0x73, 0x76, 0x39, 0x81, 0x09, 0xa7, 0x30, 0x73, 0x3f, 0xa0, 0x11, 0x78, - 0x2e, 0x5b, 0x6e, 0x09, 0x3f, 0x20, 0x2d, 0xc5, 0x02, 0x8a, 0x9e, 0x82, 0x89, 0x3e, 0x09, 0x02, - 0xa3, 0x47, 0xd8, 0xfa, 0x99, 0x8c, 0xb7, 0xc9, 0x15, 0x5e, 0x8c, 0x23, 0x38, 0x7a, 0x0f, 0x8c, - 0x99, 0x9e, 0x45, 0x82, 0xf9, 0x09, 0x36, 0xc3, 0xd4, 0xd2, 0x18, 0x6b, 0xd1, 0x82, 0xfb, 0xfb, - 0x8d, 0x49, 0x66, 0x3b, 0xd1, 0x5f, 0x98, 0x57, 0xd2, 0x7f, 0x83, 0xaa, 0xae, 0x29, 0x65, 0xbd, - 0xc8, 0x99, 0xcf, 0xa7, 0x95, 0x99, 0x17, 0xa7, 0xe7, 0x09, 0xd4, 0xbf, 0x48, 0x0d, 0x07, 0xcf, - 0x0d, 0x7d, 0xcf, 0x59, 0x73, 0x0c, 0x97, 0xa0, 0xcf, 0x6a, 0x70, 0x76, 0xcb, 0xee, 0x6d, 0xa9, - 0x67, 0x10, 0x62, 0x63, 0x2b, 0xa7, 0xe3, 0xdf, 0x4c, 0x21, 0x6b, 0x9e, 0x3f, 0xd8, 0x6f, 0x9c, - 0x4d, 0x97, 0xe2, 0x0c, 0x51, 0xfd, 0xd7, 0x6a, 0x70, 0x5e, 0x74, 0xcd, 0xa1, 0x5b, 0xcd, 0xc0, - 0xf1, 0xf6, 0xfa, 0xc4, 0x3d, 0x8d, 0xf3, 0x82, 0x48, 0x27, 0xa9, 0x15, 0xea, 0x24, 0xfd, 0xcc, - 0x14, 0x8d, 0x94, 0x99, 0x22, 0xc9, 0xc9, 0x47, 0x4c, 0xd3, 0x9f, 0x6b, 0x30, 0x9f, 0x37, 0x16, - 0xa7, 0x60, 0x0b, 0xb9, 0x49, 0x5b, 0xa8, 0x53, 0xda, 0xbc, 0x4d, 0xf7, 0xbd, 0xc0, 0x26, 0xfa, - 0xf3, 0x1a, 0x5c, 0x8c, 0xab, 0x77, 0xdc, 0x20, 0x34, 0x1c, 0x87, 0x7b, 0x12, 0x1e, 0xfe, 0xc4, - 0xbf, 0x9e, 0x30, 0x6a, 0x6f, 0x57, 0xfc, 0x56, 0xb5, 0xf3, 0x85, 0x8e, 0xc1, 0xbd, 0x94, 0x63, - 0xf0, 0x95, 0x07, 0x49, 0xf4, 0x70, 0x1f, 0xe1, 0x7f, 0xd2, 0xe0, 0x52, 0x7e, 0xc3, 0x53, 0xe0, - 0xab, 0x41, 0x92, 0xaf, 0x6e, 0x3d, 0xc0, 0xcf, 0x2e, 0xe0, 0xac, 0x6f, 0xd5, 0x8a, 0x3e, 0x97, - 0xd9, 0xdd, 0x9b, 0x70, 0x86, 0x1a, 0x43, 0x41, 0x28, 0x7c, 0x59, 0x27, 0x3b, 0xd7, 0x8d, 0x3c, - 0x46, 0x67, 0x70, 0x12, 0x07, 0x4e, 0x23, 0x45, 0xab, 0x30, 0x41, 0x0d, 0x20, 0x8a, 0xbf, 0x76, - 0x7c, 0xfc, 0x72, 0x4b, 0xea, 0xf2, 0xb6, 0x38, 0x42, 0x82, 0x7e, 0x0e, 0x66, 0x2c, 0xb9, 0xa8, - 0x8e, 0x38, 0xd0, 0x49, 0x63, 0x65, 0x6e, 0xc7, 0xb6, 0xda, 0x1a, 0x27, 0x91, 0xe9, 0xff, 0x5b, - 0x83, 0xcb, 0x87, 0x31, 0x17, 0xf2, 0x01, 0xcc, 0x48, 0xc7, 0xe0, 0xe7, 0xfa, 0x65, 0x1d, 0x93, - 0x52, 0x55, 0x89, 0x17, 0xa9, 0x2c, 0x0a, 0xb0, 0x42, 0x25, 0xe7, 0xd0, 0xa8, 0xf6, 0x90, 0x0e, - 0x8d, 0xf4, 0xff, 0xac, 0xa9, 0xe2, 0x48, 0x9d, 0xdc, 0xb7, 0x9c, 0x38, 0x52, 0x3b, 0x5f, 0xe8, - 0x6d, 0xfb, 0xa3, 0x1a, 0x3c, 0x9e, 0xdf, 0x44, 0xd9, 0x81, 0x5f, 0x86, 0xf1, 0x01, 0x0f, 0xbf, - 0x18, 0x61, 0x3b, 0xe4, 0x93, 0x54, 0xb8, 0xf0, 0xd8, 0x88, 0xfb, 0xfb, 0x8d, 0x4b, 0x79, 0xd2, - 0x5e, 0x44, 0x55, 0x88, 0x76, 0xc8, 0x4e, 0xb9, 0x1b, 0xb8, 0x12, 0xf8, 0xcc, 0x31, 0xe5, 0x8b, - 0xb1, 0x41, 0x9c, 0x63, 0x3b, 0x18, 0x3e, 0xad, 0xc1, 0x6c, 0x82, 0xa7, 0x83, 0xf9, 0x31, 0xc6, - 0xa5, 0xe5, 0xfc, 0xf6, 0x89, 0xd5, 0x12, 0x6f, 0xe0, 0x89, 0xe2, 0x00, 0xa7, 0x28, 0xa6, 0x44, - 0xad, 0x3a, 0xac, 0x6f, 0x3d, 0x51, 0xab, 0xf6, 0xbe, 0x40, 0xd4, 0x7e, 0xa5, 0x56, 0xf4, 0xb9, - 0x4c, 0xd4, 0xee, 0xc2, 0x64, 0x14, 0x0c, 0x17, 0x89, 0x8c, 0x1b, 0x95, 0x3b, 0xc5, 0xf1, 0xc5, - 0x67, 0xd4, 0x51, 0x49, 0x80, 0x63, 0x62, 0xe8, 0x97, 0x35, 0x80, 0x78, 0x6a, 0xc4, 0xc2, 0x5a, - 0x7f, 0x80, 0x03, 0xa2, 0xe8, 0x37, 0xb3, 0x74, 0x5d, 0x2b, 0x7c, 0xa1, 0x10, 0xd6, 0xbf, 0x59, - 0x03, 0x94, 0xed, 0x3c, 0x55, 0x3c, 0xb7, 0x6d, 0xd7, 0x4a, 0xdb, 0x06, 0xb7, 0x6c, 0xd7, 0xc2, - 0x0c, 0x72, 0x0c, 0xd5, 0xf4, 0x45, 0x38, 0xd3, 0x73, 0xbc, 0x0d, 0xc3, 0x71, 0xf6, 0x44, 0x84, - 0x9d, 0x88, 0xd4, 0x3a, 0x47, 0xb7, 0xa7, 0x1b, 0x49, 0x10, 0x4e, 0xd7, 0x45, 0x03, 0x38, 0xeb, - 0x53, 0xab, 0xd6, 0xb4, 0x1d, 0x66, 0x45, 0x79, 0xc3, 0xb0, 0xa4, 0xdb, 0x84, 0x29, 0xfa, 0x38, - 0x85, 0x0b, 0x67, 0xb0, 0xa3, 0x77, 0xc2, 0xc4, 0xc0, 0xb7, 0xfb, 0x86, 0xbf, 0xc7, 0xec, 0xb4, - 0x7a, 0x73, 0x8a, 0xee, 0x73, 0x6b, 0xbc, 0x08, 0x47, 0x30, 0xfd, 0x7f, 0x69, 0x30, 0xd1, 0xf2, - 0x7c, 0xd2, 0x5e, 0xed, 0xa2, 0x7b, 0x30, 0xa5, 0x44, 0x74, 0x8a, 0x25, 0x53, 0x96, 0x85, 0x18, - 0xca, 0xc5, 0x18, 0x5d, 0x14, 0x0b, 0x26, 0x0b, 0xb0, 0x4a, 0x0c, 0xf9, 0x94, 0x79, 0xef, 0xfa, - 0x76, 0x48, 0x29, 0x57, 0x3a, 0xfd, 0xe0, 0x94, 0x71, 0x84, 0x8c, 0x9f, 0xc7, 0xc9, 0x9f, 0x38, - 0x26, 0xa3, 0xaf, 0x51, 0x6e, 0x49, 0xf7, 0x13, 0x3d, 0x0f, 0xa3, 0x7d, 0xcf, 0x8a, 0x2c, 0xc9, - 0x77, 0x45, 0xbc, 0xb0, 0xe2, 0x59, 0xe4, 0xfe, 0x7e, 0xe3, 0x62, 0xb6, 0x05, 0x73, 0xce, 0xb0, - 0x36, 0xfa, 0x2a, 0xb5, 0x4c, 0x93, 0xf4, 0xd1, 0xf3, 0x30, 0x6b, 0x7a, 0xfd, 0xbe, 0xe7, 0x76, - 0x87, 0x9b, 0x9b, 0xf6, 0x2e, 0x49, 0x84, 0xe9, 0xb5, 0x12, 0x10, 0x9c, 0xaa, 0xa9, 0x7f, 0x59, - 0x83, 0x11, 0x3a, 0x33, 0x3a, 0x8c, 0x5b, 0x5e, 0xdf, 0xb0, 0x5d, 0xd1, 0x2b, 0x16, 0x44, 0xd8, - 0x66, 0x25, 0x58, 0x40, 0xd0, 0xeb, 0x30, 0x19, 0xed, 0xb2, 0xd5, 0x4e, 0x8b, 0xdb, 0xab, 0x5d, - 0x19, 0x5a, 0x23, 0xd7, 0x7d, 0x54, 0x12, 0xe0, 0x98, 0x8a, 0x6e, 0xc0, 0x5c, 0x7b, 0xb5, 0xdb, - 0x71, 0x4d, 0x67, 0x68, 0x91, 0xa5, 0x5d, 0xf6, 0x87, 0x32, 0x9e, 0xcd, 0x4b, 0xc4, 0x87, 0x32, - 0xc6, 0x13, 0x95, 0x70, 0x04, 0xa3, 0xd5, 0x08, 0x6f, 0x21, 0x62, 0xe9, 0x58, 0x35, 0x81, 0x04, - 0x47, 0x30, 0xfd, 0x4f, 0x6a, 0x30, 0xa5, 0x74, 0x08, 0xf5, 0x61, 0x82, 0x7f, 0x6f, 0x14, 0xd2, - 0x72, 0xbd, 0xec, 0x37, 0x26, 0xbb, 0xcd, 0xc9, 0xf3, 0x21, 0x0d, 0x70, 0x44, 0x43, 0x5d, 0x45, - 0xb5, 0xe2, 0x55, 0x84, 0x16, 0x00, 0x78, 0xc4, 0x0e, 0x3b, 0x8f, 0xe5, 0xdb, 0x37, 0x13, 0x54, - 0x5d, 0x59, 0x8a, 0x95, 0x1a, 0xe8, 0xb2, 0x90, 0x37, 0x4a, 0x50, 0x8f, 0x22, 0x6b, 0x7a, 0x30, - 0x76, 0xcf, 0x73, 0x49, 0x20, 0xce, 0x3f, 0x1e, 0xd4, 0x17, 0x4e, 0xd2, 0x0d, 0xe5, 0xc3, 0x14, - 0x31, 0xe6, 0xf8, 0xf5, 0xdf, 0xd4, 0x00, 0xda, 0x46, 0x68, 0x70, 0x67, 0xfd, 0x31, 0x02, 0x22, - 0x2f, 0x27, 0xe4, 0x64, 0x3d, 0x13, 0x21, 0x36, 0x1a, 0xd8, 0xf7, 0xa2, 0xef, 0x97, 0x4a, 0x18, - 0xc7, 0xde, 0xb5, 0xef, 0x11, 0xcc, 0xe0, 0xe8, 0xdd, 0x30, 0x49, 0x5c, 0xd3, 0xdf, 0x1b, 0x84, - 0x22, 0xae, 0xa9, 0xce, 0x17, 0xe9, 0x52, 0x54, 0x88, 0x63, 0xb8, 0xfe, 0x34, 0x24, 0x55, 0xe9, - 0xa3, 0x7b, 0xa9, 0xdf, 0xd7, 0xe0, 0xec, 0xd2, 0xee, 0xc0, 0xf6, 0x59, 0x90, 0x24, 0xf1, 0xa9, - 0x5a, 0x8a, 0x9e, 0x82, 0x89, 0x1d, 0xfe, 0xaf, 0x68, 0x29, 0x75, 0x7f, 0x51, 0x03, 0x47, 0x70, - 0xb4, 0x09, 0xb3, 0x84, 0x35, 0x67, 0x5b, 0x8f, 0x21, 0x7d, 0xff, 0x27, 0xf1, 0xa6, 0xf1, 0x20, - 0xdc, 0x04, 0x16, 0x9c, 0xc2, 0x8a, 0xba, 0x30, 0x6b, 0x3a, 0x46, 0x10, 0xd8, 0x9b, 0xb6, 0x19, - 0xc7, 0x02, 0x4c, 0x36, 0xdf, 0xcd, 0x24, 0x43, 0x02, 0x72, 0x7f, 0xbf, 0x71, 0x41, 0xf4, 0x33, - 0x09, 0xc0, 0x29, 0x14, 0xfa, 0x9b, 0x35, 0x98, 0x59, 0xda, 0x1d, 0x78, 0xc1, 0xd0, 0x27, 0xac, - 0xea, 0x29, 0x68, 0xd4, 0x4f, 0xc1, 0xc4, 0x96, 0xe1, 0x5a, 0x0e, 0xf1, 0x05, 0x67, 0xc8, 0xb1, - 0xbd, 0xc9, 0x8b, 0x71, 0x04, 0x47, 0x9f, 0x00, 0x08, 0xcc, 0x2d, 0x62, 0x0d, 0xd9, 0x16, 0xc3, - 0x8d, 0xaa, 0xe5, 0x52, 0x0c, 0x9e, 0xf8, 0xc8, 0xae, 0xc4, 0x29, 0xd6, 0x9d, 0xfc, 0x8d, 0x15, - 0x7a, 0xfa, 0x9f, 0x68, 0x30, 0x97, 0x68, 0x77, 0x0a, 0x7a, 0x62, 0x2f, 0xa9, 0x27, 0x36, 0xab, - 0x7f, 0x6c, 0x81, 0x7a, 0xf8, 0xb9, 0x1a, 0x3c, 0x52, 0x30, 0x28, 0x99, 0x83, 0x48, 0xed, 0xb4, - 0x0e, 0x22, 0x77, 0x60, 0x2a, 0xf4, 0x1c, 0x11, 0xb5, 0x12, 0x8d, 0x41, 0xb9, 0x63, 0xc6, 0x3b, - 0x12, 0x4f, 0x7c, 0xcc, 0x18, 0x97, 0x05, 0x58, 0x25, 0xa4, 0xff, 0x9e, 0x06, 0x93, 0xd2, 0x26, - 0x3d, 0x46, 0x74, 0xeb, 0x29, 0xc6, 0x89, 0x1e, 0x3f, 0xda, 0xff, 0x9f, 0xd5, 0xe0, 0xa2, 0xc4, - 0x1d, 0xa9, 0xb3, 0xd4, 0x84, 0x3e, 0x8e, 0x4e, 0x7b, 0x59, 0xc8, 0x49, 0x45, 0x56, 0x2b, 0x92, - 0x9c, 0x6e, 0x6c, 0x43, 0x7f, 0xe0, 0x05, 0x91, 0xb8, 0xe6, 0x1b, 0x1b, 0x2f, 0xc2, 0x11, 0x0c, - 0xad, 0xc2, 0x58, 0x40, 0xe9, 0x09, 0x65, 0xf5, 0x84, 0xa3, 0xc1, 0x76, 0x1c, 0xd6, 0x5f, 0xcc, - 0xd1, 0xa0, 0x37, 0x54, 0x1b, 0x85, 0x1b, 0x8c, 0x3f, 0x7b, 0x32, 0x66, 0x60, 0x97, 0x98, 0x16, - 0xe8, 0x97, 0x58, 0xd1, 0x88, 0xe4, 0x84, 0xd2, 0xe6, 0x99, 0x29, 0xfa, 0x32, 0x9c, 0x15, 0x67, - 0x99, 0x9c, 0x6d, 0x5c, 0x93, 0xa0, 0x67, 0x13, 0x9c, 0xf1, 0x44, 0xea, 0x7c, 0xe8, 0x7c, 0xba, - 0x7e, 0xcc, 0x31, 0x7a, 0x00, 0xf5, 0x1b, 0xa2, 0x93, 0xe8, 0x12, 0xd4, 0xec, 0x68, 0x2e, 0x40, - 0xe0, 0xa8, 0x75, 0xda, 0xb8, 0x66, 0x5b, 0x72, 0xbf, 0xaa, 0x15, 0xee, 0xaa, 0xca, 0xd6, 0x34, - 0x72, 0xf8, 0xd6, 0xa4, 0xff, 0xbb, 0x1a, 0x9c, 0x8f, 0xa8, 0x46, 0xdf, 0xd8, 0x16, 0xce, 0xf5, - 0x23, 0xf6, 0xee, 0xa3, 0x6d, 0x9c, 0xdb, 0x30, 0xca, 0x64, 0x60, 0x29, 0xa7, 0xbb, 0x44, 0x48, - 0xbb, 0x83, 0x19, 0x22, 0xf4, 0xd7, 0x60, 0xdc, 0x31, 0x36, 0x88, 0x13, 0xc5, 0x91, 0x94, 0x33, - 0x09, 0xf3, 0xbe, 0x97, 0x7b, 0x2b, 0x02, 0x1e, 0xd2, 0x28, 0x3d, 0xb1, 0xbc, 0x10, 0x0b, 0xa2, - 0x97, 0x9e, 0x83, 0x29, 0xa5, 0x1a, 0x3a, 0x0b, 0x23, 0xdb, 0x84, 0x1f, 0xbb, 0x4c, 0x62, 0xfa, - 0x2f, 0x3a, 0x0f, 0x63, 0x3b, 0x86, 0x33, 0x14, 0x63, 0x82, 0xf9, 0x8f, 0xe7, 0x6b, 0xcf, 0x6a, - 0xfa, 0x37, 0x34, 0x98, 0xba, 0x69, 0x6f, 0x10, 0x9f, 0x9f, 0x48, 0x32, 0x6d, 0x35, 0x71, 0xdf, - 0x6a, 0x2a, 0xef, 0xae, 0x15, 0xda, 0x83, 0x49, 0xb1, 0xdb, 0xc8, 0xc8, 0xb5, 0x9b, 0x25, 0xcf, - 0x77, 0x24, 0x6d, 0x21, 0xc5, 0xd5, 0x38, 0xf1, 0x88, 0x04, 0x8e, 0xa9, 0xe9, 0x6f, 0xc0, 0xb9, - 0x9c, 0x46, 0xa8, 0xc1, 0x16, 0xb0, 0x1f, 0x0a, 0xc6, 0x88, 0x56, 0xa4, 0x1f, 0x62, 0x5e, 0x8e, - 0x1e, 0x85, 0x11, 0xe2, 0x46, 0x11, 0x9b, 0x13, 0x07, 0xfb, 0x8d, 0x91, 0x25, 0xd7, 0xc2, 0xb4, - 0x8c, 0x0a, 0x2a, 0xc7, 0x4b, 0x68, 0x26, 0x4c, 0x50, 0x2d, 0x8b, 0x32, 0x2c, 0xa1, 0xfa, 0x57, - 0x35, 0xc8, 0x1c, 0x3e, 0xa1, 0xcf, 0x6b, 0x70, 0x76, 0x33, 0xb5, 0x7e, 0x2a, 0x1d, 0x7a, 0xa5, - 0x17, 0x63, 0x73, 0x5e, 0x8c, 0x48, 0x66, 0x59, 0xe3, 0x0c, 0x61, 0xfd, 0x1f, 0x8c, 0xc2, 0x95, - 0x9b, 0x9e, 0x6f, 0xdf, 0xf3, 0xdc, 0xd0, 0x70, 0xd6, 0x3c, 0x2b, 0x8e, 0x3e, 0x11, 0x72, 0xf9, - 0x97, 0x35, 0x78, 0xc4, 0x1c, 0x0c, 0x3b, 0xae, 0x1d, 0xda, 0x46, 0x14, 0x14, 0xb0, 0x46, 0x7c, - 0xdb, 0x2b, 0x1b, 0x84, 0xc2, 0xae, 0x07, 0xb5, 0xd6, 0xd6, 0xf3, 0x50, 0xe2, 0x22, 0x5a, 0x2c, - 0x16, 0xc6, 0xf2, 0xee, 0xba, 0xac, 0x73, 0xdd, 0x90, 0x0d, 0xe7, 0xbd, 0x78, 0x16, 0x4a, 0xc6, - 0xc2, 0xb4, 0x73, 0x31, 0xe2, 0x02, 0x4a, 0xe8, 0x93, 0x70, 0xc1, 0xe6, 0x9d, 0xc3, 0xc4, 0xb0, - 0x6c, 0x97, 0x04, 0x01, 0x8b, 0x08, 0xa9, 0x12, 0xec, 0xd1, 0xc9, 0x43, 0x88, 0xf3, 0xe9, 0xa0, - 0x9f, 0x07, 0x08, 0xf6, 0x5c, 0x53, 0x8c, 0xff, 0x58, 0x29, 0xaa, 0x5c, 0x15, 0x94, 0x58, 0xb0, - 0x82, 0x91, 0x1a, 0x21, 0xa1, 0xe4, 0xca, 0x71, 0x16, 0x38, 0xc2, 0x8c, 0x90, 0x98, 0x87, 0x62, - 0xb8, 0xfe, 0x3b, 0x1a, 0x4c, 0x88, 0x5b, 0x83, 0xe8, 0x5d, 0x29, 0x5b, 0x5c, 0x4a, 0x9f, 0x94, - 0x3d, 0x7e, 0x8f, 0xb9, 0xf0, 0x85, 0x2f, 0x4a, 0x68, 0x13, 0xe5, 0x4c, 0x39, 0x41, 0x39, 0xf6, - 0x6c, 0x25, 0x5c, 0xf9, 0x91, 0xb7, 0x4b, 0xa1, 0x46, 0xd7, 0xe3, 0x5c, 0xa6, 0xd5, 0x31, 0x74, - 0x86, 0x53, 0x3c, 0x23, 0xff, 0xc1, 0x14, 0xb0, 0x2b, 0xa2, 0x8b, 0x6b, 0x9d, 0x2e, 0xf1, 0x77, - 0xe4, 0x2a, 0xa4, 0x52, 0x23, 0x0e, 0x88, 0x14, 0xbd, 0xa8, 0x22, 0x35, 0x6e, 0xa5, 0x90, 0xc5, - 0x52, 0x23, 0x0d, 0xc1, 0x19, 0xc2, 0xe8, 0x73, 0x1a, 0x9c, 0x35, 0x92, 0x57, 0x44, 0x23, 0xc1, - 0x5e, 0xee, 0x56, 0x43, 0xea, 0xbe, 0x69, 0xdc, 0x99, 0x14, 0x20, 0xc0, 0x19, 0xba, 0xe8, 0x7d, - 0x30, 0x6d, 0x0c, 0xec, 0xc5, 0xa1, 0x65, 0x53, 0x65, 0x27, 0xba, 0x2d, 0xc8, 0x34, 0xf0, 0xc5, - 0xb5, 0x8e, 0x2c, 0xc7, 0x89, 0x5a, 0xf2, 0x6a, 0xa7, 0x18, 0xca, 0xd1, 0xaa, 0x57, 0x3b, 0xc5, - 0x28, 0xc6, 0x57, 0x3b, 0xc5, 0xe0, 0xa9, 0x54, 0xd0, 0x47, 0xe0, 0x51, 0xbe, 0x27, 0x36, 0x8d, - 0xc0, 0x36, 0x17, 0x87, 0xe1, 0x16, 0x71, 0xc3, 0xc8, 0xca, 0xe5, 0xfe, 0x48, 0x16, 0x19, 0xb7, - 0x54, 0x54, 0x09, 0x17, 0xb7, 0x47, 0x1e, 0x80, 0x67, 0x5b, 0xa6, 0xf8, 0x20, 0x1e, 0x9c, 0x55, - 0xce, 0xa4, 0xb8, 0xdd, 0x69, 0xb7, 0xc4, 0xf7, 0x30, 0x59, 0x11, 0xff, 0xc6, 0x0a, 0x09, 0xf4, - 0x45, 0x0d, 0x66, 0x04, 0xa3, 0x0b, 0xa2, 0x13, 0x8c, 0x05, 0x3e, 0x52, 0x9a, 0x21, 0x53, 0x5c, - 0xbf, 0x80, 0x55, 0xec, 0x5c, 0xab, 0x91, 0x01, 0xbb, 0x09, 0x18, 0x4e, 0x76, 0x04, 0x7d, 0x41, - 0x83, 0xf3, 0x01, 0xf1, 0x77, 0x6c, 0x93, 0x2c, 0x9a, 0xa6, 0x37, 0x74, 0xa3, 0x79, 0xae, 0x57, - 0xb8, 0x65, 0xd7, 0xcd, 0x41, 0xc8, 0xc3, 0xc4, 0xf2, 0x20, 0x38, 0xb7, 0x03, 0xe8, 0x97, 0x34, - 0x38, 0x73, 0xd7, 0x08, 0xcd, 0xad, 0x96, 0x61, 0x6e, 0x31, 0xf7, 0x0f, 0x8f, 0x0c, 0x2b, 0xbb, - 0x72, 0x5e, 0x4b, 0xe2, 0xe2, 0x8e, 0xf7, 0x54, 0x21, 0x4e, 0x53, 0x44, 0x21, 0xd4, 0x7d, 0xf2, - 0xfa, 0x90, 0x04, 0x2c, 0x7e, 0x4c, 0x3b, 0xb9, 0xbd, 0x91, 0x37, 0x69, 0x58, 0x60, 0xe4, 0xfa, - 0x50, 0xf4, 0x0b, 0x4b, 0x4a, 0xa8, 0x07, 0x57, 0x38, 0xfb, 0x2e, 0xba, 0x9e, 0xbb, 0xd7, 0xf7, - 0x86, 0x41, 0x6a, 0x09, 0x4c, 0xb1, 0x25, 0xc0, 0x42, 0xe4, 0x96, 0x0e, 0xab, 0x88, 0x0f, 0xc7, - 0x83, 0x3e, 0x08, 0x75, 0xb2, 0x43, 0xdc, 0xf0, 0xce, 0x9d, 0xe5, 0xf9, 0xe9, 0x52, 0x7b, 0x24, - 0xfb, 0x84, 0x25, 0x81, 0x03, 0x4b, 0x6c, 0x97, 0x5e, 0x06, 0x94, 0x65, 0xca, 0xa3, 0x74, 0xe8, - 0xba, 0xaa, 0x43, 0x7f, 0x5b, 0x83, 0x0b, 0xb9, 0xc3, 0x86, 0x30, 0x5c, 0x64, 0x91, 0x85, 0xee, - 0xca, 0x30, 0x34, 0x42, 0xdb, 0xed, 0x75, 0xdc, 0x4d, 0xc7, 0xee, 0x6d, 0x71, 0x2d, 0x75, 0x8c, - 0x2b, 0x2c, 0x2b, 0xb9, 0x35, 0x70, 0x41, 0x4b, 0xd4, 0x81, 0x73, 0x7d, 0x63, 0x37, 0x83, 0xb0, - 0xc6, 0x10, 0xb2, 0x84, 0x04, 0x2b, 0x59, 0x30, 0xce, 0x6b, 0xa3, 0x7f, 0x79, 0x0c, 0x1e, 0xa3, - 0x1d, 0x8f, 0xb7, 0xce, 0x15, 0xc3, 0x35, 0x7a, 0x3f, 0xa6, 0x5b, 0xd4, 0x37, 0x34, 0x78, 0x64, - 0x2b, 0x5f, 0xb1, 0x15, 0xbb, 0x37, 0x2e, 0x67, 0x82, 0x1c, 0xa6, 0x2c, 0x73, 0xd6, 0x3d, 0xb4, - 0x0a, 0x2e, 0xea, 0x15, 0x7a, 0x19, 0xce, 0xba, 0x9e, 0x45, 0x5a, 0x9d, 0x36, 0x5e, 0x31, 0x82, - 0xed, 0x6e, 0xe4, 0x33, 0x1e, 0xe3, 0x87, 0x5b, 0xab, 0x29, 0x18, 0xce, 0xd4, 0x46, 0x3b, 0x80, - 0x06, 0x9e, 0xb5, 0xb4, 0x63, 0x9b, 0x51, 0x08, 0x64, 0xf9, 0x03, 0x35, 0x76, 0xaf, 0x69, 0x2d, - 0x83, 0x0d, 0xe7, 0x50, 0x60, 0xaa, 0x39, 0xed, 0xcc, 0x8a, 0xe7, 0xda, 0xa1, 0xe7, 0xb3, 0xd8, - 0xd5, 0x4a, 0x1a, 0x2a, 0xe3, 0xf4, 0xd5, 0x5c, 0x8c, 0xb8, 0x80, 0x92, 0xfe, 0xdf, 0x34, 0x38, - 0x43, 0xf9, 0x62, 0xcd, 0xf7, 0x76, 0xf7, 0x7e, 0x2c, 0x59, 0xf2, 0x29, 0x71, 0x84, 0xc6, 0x8d, - 0xca, 0x0b, 0xca, 0xf1, 0xd9, 0x24, 0xeb, 0x74, 0x7c, 0x62, 0xa6, 0x1a, 0xd6, 0x23, 0xc5, 0x86, - 0xb5, 0xfe, 0xc5, 0x1a, 0xd7, 0x16, 0x23, 0xbb, 0xf6, 0xc7, 0x73, 0x29, 0xfe, 0x34, 0xcc, 0xd0, - 0xb2, 0x15, 0x63, 0x77, 0xad, 0xfd, 0xaa, 0xe7, 0x44, 0x01, 0xc4, 0x2c, 0x1e, 0xe8, 0x96, 0x0a, - 0xc0, 0xc9, 0x7a, 0xe8, 0x79, 0x98, 0x18, 0xf0, 0xcb, 0x4a, 0xc2, 0xd0, 0x7e, 0x9c, 0x1f, 0x33, - 0xb1, 0xa2, 0xfb, 0xfb, 0x8d, 0xb9, 0xd8, 0x95, 0x2b, 0x0a, 0x71, 0xd4, 0x40, 0x7f, 0xf3, 0x3c, - 0x30, 0xe4, 0x0e, 0x09, 0x7f, 0x2c, 0x07, 0xe5, 0x69, 0x98, 0x32, 0x07, 0xc3, 0xd6, 0xf5, 0xee, - 0x2b, 0x43, 0x2f, 0x34, 0xc4, 0x31, 0x1a, 0xd3, 0x1e, 0x5b, 0x6b, 0xeb, 0x51, 0x31, 0x56, 0xeb, - 0x50, 0x01, 0x61, 0x0e, 0x86, 0x42, 0xe8, 0xae, 0xa9, 0x31, 0x31, 0x4c, 0x40, 0xb4, 0xd6, 0xd6, - 0x13, 0x30, 0x9c, 0xa9, 0x8d, 0x3e, 0xa5, 0xc1, 0x34, 0x11, 0x8b, 0xf7, 0xa6, 0xe1, 0x5b, 0x42, - 0x36, 0x94, 0xdf, 0xfb, 0xe5, 0xe8, 0x46, 0x22, 0x81, 0xeb, 0xdd, 0x4b, 0x0a, 0x0d, 0x9c, 0xa0, - 0xc8, 0x54, 0x60, 0xf1, 0x9b, 0x4e, 0xb4, 0x67, 0xa5, 0xa5, 0xc5, 0x98, 0x50, 0x81, 0x8b, 0x2a, - 0xe1, 0xe2, 0xf6, 0xe8, 0xb7, 0x35, 0xb8, 0x28, 0xa1, 0xb6, 0x6b, 0xf7, 0x87, 0x7d, 0x4c, 0x4c, - 0xc7, 0xb0, 0xfb, 0x42, 0x1f, 0xfe, 0xe0, 0x83, 0xfb, 0xd2, 0x24, 0x7e, 0x2e, 0xb2, 0xf2, 0x61, - 0xb8, 0xa0, 0x4f, 0xe8, 0xab, 0x1a, 0x3c, 0x1e, 0x81, 0xd6, 0xa8, 0x55, 0x3a, 0xf4, 0x49, 0x1c, - 0xc2, 0x2e, 0xc6, 0x64, 0xa2, 0x94, 0x04, 0x7d, 0xe2, 0x60, 0xbf, 0xf1, 0xf8, 0xd2, 0x11, 0xb8, - 0xf1, 0x91, 0xd4, 0x13, 0x1c, 0xd3, 0xf5, 0x36, 0x43, 0xa1, 0x40, 0x3f, 0x34, 0x8e, 0xa1, 0x34, - 0x70, 0x82, 0x22, 0xfa, 0xa6, 0x06, 0x8f, 0xa8, 0x05, 0x2a, 0xc3, 0x70, 0xcd, 0xf9, 0x43, 0x0f, - 0xae, 0x37, 0x29, 0x02, 0xdc, 0x57, 0x55, 0x00, 0xc4, 0x45, 0xdd, 0xa2, 0xe2, 0xbb, 0xcf, 0x98, - 0x93, 0x6b, 0xd7, 0x63, 0x5c, 0x7c, 0x73, 0x7e, 0x0d, 0x70, 0x04, 0xa3, 0x96, 0xeb, 0xc0, 0xb3, - 0xd6, 0x6c, 0x2b, 0x58, 0xb6, 0xfb, 0x76, 0xc8, 0xd4, 0xdf, 0x11, 0x3e, 0x1e, 0x6b, 0x9e, 0xb5, - 0xd6, 0x69, 0xf3, 0x72, 0x9c, 0xa8, 0xc5, 0xee, 0x63, 0xd9, 0x7d, 0xa3, 0x47, 0xd6, 0x86, 0x8e, - 0xb3, 0xe6, 0x7b, 0xcc, 0x9f, 0xd1, 0x26, 0x86, 0xe5, 0xd8, 0x2e, 0x29, 0xa9, 0xee, 0xb2, 0x25, - 0xd7, 0x29, 0x42, 0x8a, 0x8b, 0xe9, 0xa1, 0x05, 0x80, 0x4d, 0xc3, 0x76, 0xba, 0x77, 0x8d, 0xc1, - 0x6d, 0x77, 0x7e, 0x86, 0x89, 0x31, 0x66, 0x34, 0x5e, 0x97, 0xa5, 0x58, 0xa9, 0xc1, 0x18, 0x8a, - 0x0a, 0x43, 0x4c, 0xf8, 0xe5, 0xed, 0xf9, 0xd9, 0x07, 0xc5, 0x50, 0x11, 0x46, 0x3e, 0x80, 0xb7, - 0x14, 0x1a, 0x38, 0x41, 0x11, 0xfd, 0x8a, 0x06, 0xb3, 0xc1, 0x5e, 0x10, 0x92, 0xbe, 0xec, 0xc4, - 0x99, 0x07, 0xde, 0x09, 0xe6, 0xec, 0xe9, 0x26, 0xa8, 0xe0, 0x14, 0x55, 0x64, 0xc0, 0x63, 0x6c, - 0x60, 0x6f, 0xb4, 0x6e, 0xda, 0xbd, 0x2d, 0x79, 0xd1, 0x6a, 0x8d, 0xf8, 0x26, 0x71, 0xc3, 0xf9, - 0xb3, 0x8c, 0x75, 0x1a, 0x07, 0xfb, 0x8d, 0xc7, 0x3a, 0xc5, 0xd5, 0xf0, 0x61, 0x38, 0xd0, 0xcf, - 0xc3, 0x25, 0x01, 0x5e, 0xf6, 0xee, 0x66, 0x28, 0xcc, 0x31, 0x0a, 0xec, 0xf6, 0x5b, 0xa7, 0xb0, - 0x16, 0x3e, 0x04, 0x03, 0xb5, 0x2f, 0x02, 0xe2, 0x33, 0x67, 0x2d, 0x91, 0xfc, 0x13, 0xcc, 0x23, - 0xc6, 0x07, 0xcc, 0xbe, 0xe8, 0x66, 0xc1, 0x38, 0xaf, 0x0d, 0x7a, 0x51, 0xc6, 0x44, 0xef, 0xd1, - 0x82, 0x57, 0xd6, 0xba, 0xf3, 0xe7, 0x58, 0xff, 0xce, 0x29, 0xa1, 0xce, 0x11, 0x08, 0xa7, 0xeb, - 0x52, 0x2d, 0x23, 0x2a, 0x6a, 0x0e, 0xfd, 0x20, 0x9c, 0x3f, 0xcf, 0x1a, 0x33, 0x2d, 0x03, 0xab, - 0x00, 0x9c, 0xac, 0x87, 0x9e, 0x87, 0xd9, 0x80, 0x98, 0xa6, 0xd7, 0x1f, 0xb4, 0xc9, 0xa6, 0x31, - 0x74, 0xc2, 0xf9, 0x0b, 0xac, 0xf7, 0x7c, 0x06, 0x13, 0x10, 0x9c, 0xaa, 0x89, 0xf6, 0xe0, 0x9c, - 0xbc, 0x20, 0xbf, 0xec, 0xf5, 0x56, 0x8c, 0x5d, 0xa6, 0xb6, 0x5f, 0x3c, 0x7a, 0x11, 0x2e, 0x44, - 0x07, 0x70, 0x0b, 0xaf, 0x0c, 0x0d, 0x37, 0xb4, 0xc3, 0x3d, 0x3e, 0x5c, 0xad, 0x2c, 0x3a, 0x9c, - 0x47, 0x03, 0x2d, 0xc3, 0xf9, 0x54, 0xf1, 0x75, 0xdb, 0x21, 0xc1, 0xfc, 0x23, 0xec, 0xb3, 0x99, - 0x5b, 0xa2, 0x95, 0x03, 0xc7, 0xb9, 0xad, 0xd0, 0x6d, 0xb8, 0x30, 0xf0, 0xbd, 0x90, 0x98, 0xe1, - 0x2d, 0xaa, 0xa7, 0x38, 0xe2, 0x03, 0x83, 0xf9, 0x79, 0x36, 0x16, 0xcc, 0x51, 0xbd, 0x96, 0x57, - 0x01, 0xe7, 0xb7, 0x43, 0x6f, 0x6a, 0x70, 0x35, 0x08, 0x7d, 0x62, 0xf4, 0x6d, 0xb7, 0xd7, 0xf2, - 0x5c, 0x97, 0x30, 0x49, 0xd9, 0xb1, 0xe2, 0x48, 0xbf, 0x47, 0x4b, 0x89, 0x2a, 0xfd, 0x60, 0xbf, - 0x71, 0xb5, 0x7b, 0x28, 0x66, 0x7c, 0x04, 0x65, 0x7d, 0xbf, 0xc6, 0x6d, 0xf0, 0x8c, 0xf8, 0xa7, - 0x4c, 0xd8, 0x27, 0x7d, 0xcf, 0xdf, 0x5b, 0x8c, 0xd2, 0x89, 0x09, 0xbf, 0x30, 0x63, 0xc2, 0x95, - 0x24, 0x08, 0xa7, 0xeb, 0x52, 0x15, 0x8d, 0x2d, 0x96, 0xeb, 0xdd, 0xb8, 0x7d, 0x2d, 0x56, 0xd1, - 0x3a, 0x29, 0x18, 0xce, 0xd4, 0x46, 0x2d, 0x98, 0x13, 0x65, 0x1d, 0x6a, 0xe8, 0x04, 0xd7, 0x7d, - 0x12, 0x69, 0xbf, 0xd4, 0x62, 0x98, 0xeb, 0xa4, 0x81, 0x38, 0x5b, 0x9f, 0x7e, 0x05, 0xfd, 0xa1, - 0xf6, 0x62, 0x34, 0xfe, 0x8a, 0xd5, 0x24, 0x08, 0xa7, 0xeb, 0x46, 0x96, 0x68, 0xa2, 0x0b, 0x63, - 0xf1, 0x57, 0xac, 0xa6, 0x60, 0x38, 0x53, 0x5b, 0xff, 0x57, 0xa3, 0xf0, 0x8e, 0x63, 0x68, 0x4d, - 0xa8, 0x9f, 0x3f, 0xdc, 0x27, 0x5f, 0x3b, 0xc7, 0x9b, 0x9e, 0x41, 0xc1, 0xf4, 0x9c, 0x9c, 0xde, - 0x71, 0xa7, 0x33, 0x28, 0x9a, 0xce, 0x93, 0x93, 0x3c, 0xfe, 0xf4, 0xf7, 0xf3, 0xa7, 0xbf, 0xe4, - 0xa8, 0x1e, 0xc9, 0x2e, 0x83, 0x02, 0x76, 0x29, 0x39, 0xaa, 0xc7, 0x60, 0xaf, 0x7f, 0x3d, 0x0a, - 0x4f, 0x1c, 0x47, 0x7d, 0x2b, 0xc9, 0x5f, 0x39, 0x52, 0xe7, 0xa1, 0xf2, 0x57, 0x51, 0x3c, 0xf3, - 0x43, 0xe4, 0xaf, 0x1c, 0x92, 0x0f, 0x9b, 0xbf, 0x8a, 0x46, 0xf5, 0x61, 0xf1, 0x57, 0xd1, 0xa8, - 0x1e, 0x83, 0xbf, 0xfe, 0x47, 0x7a, 0x7f, 0x90, 0x2a, 0x5b, 0x07, 0x46, 0xcc, 0xc1, 0xb0, 0xa4, - 0x90, 0x62, 0x71, 0x04, 0xad, 0xb5, 0x75, 0x4c, 0x71, 0x20, 0x0c, 0xe3, 0x9c, 0x7f, 0x4a, 0x8a, - 0x20, 0x16, 0xed, 0xcc, 0x59, 0x12, 0x0b, 0x4c, 0x74, 0xa8, 0xc8, 0x60, 0x8b, 0xf4, 0x89, 0x6f, - 0x38, 0xdd, 0xd0, 0xf3, 0x8d, 0x5e, 0x59, 0x69, 0xc3, 0x86, 0x6a, 0x29, 0x85, 0x0b, 0x67, 0xb0, - 0xd3, 0x01, 0x19, 0xd8, 0x56, 0x49, 0xf9, 0xc2, 0x06, 0x64, 0xad, 0xd3, 0xc6, 0x14, 0x87, 0xfe, - 0x3b, 0x93, 0xa0, 0x24, 0x80, 0x41, 0x1f, 0x81, 0x47, 0x0d, 0xc7, 0xf1, 0xee, 0xae, 0xf9, 0xf6, - 0x8e, 0xed, 0x90, 0x1e, 0xb1, 0xa4, 0x3e, 0x13, 0x88, 0x70, 0x13, 0x66, 0xb6, 0x2c, 0x16, 0x55, - 0xc2, 0xc5, 0xed, 0xa9, 0x11, 0x35, 0x67, 0xa6, 0xf3, 0x6d, 0x54, 0x3a, 0x8e, 0xce, 0x64, 0xef, - 0xe0, 0x0b, 0x2a, 0x53, 0x8c, 0xb3, 0x74, 0xd1, 0x2f, 0x6a, 0xdc, 0x45, 0x26, 0xcf, 0x04, 0xc4, - 0xa4, 0xdd, 0x7c, 0x50, 0x27, 0x69, 0xb1, 0xb3, 0x2d, 0x3e, 0x76, 0x48, 0x52, 0x44, 0xbf, 0xa9, - 0xc1, 0x85, 0xed, 0x3c, 0xf7, 0xbe, 0x98, 0xdb, 0xb5, 0xd2, 0x7d, 0x29, 0x38, 0x30, 0xe0, 0x4a, - 0x65, 0x6e, 0x05, 0x9c, 0xdf, 0x13, 0x39, 0x4e, 0xd2, 0xdf, 0x29, 0xe4, 0x40, 0xf9, 0x71, 0x4a, - 0x79, 0x4e, 0xe3, 0x71, 0x92, 0x00, 0x9c, 0xa4, 0x88, 0x5e, 0x87, 0xc9, 0xed, 0xc8, 0xcd, 0x2c, - 0xbc, 0x4a, 0xed, 0xd2, 0xe4, 0x15, 0x67, 0x35, 0x8f, 0xb3, 0x90, 0x85, 0x38, 0xa6, 0x82, 0x6c, - 0x98, 0xd8, 0xe6, 0xd2, 0x48, 0x78, 0x83, 0x9a, 0xd5, 0x0d, 0x55, 0xee, 0x92, 0x10, 0x45, 0x38, - 0xc2, 0xaf, 0x06, 0xdd, 0xd5, 0x8f, 0x88, 0x07, 0xff, 0x92, 0x06, 0x17, 0x76, 0x88, 0x1f, 0xda, - 0x66, 0xfa, 0x7c, 0x65, 0xb2, 0x82, 0x35, 0xfd, 0x6a, 0x1e, 0x46, 0xce, 0x2a, 0xb9, 0x20, 0x9c, - 0xdf, 0x07, 0x6a, 0x5b, 0x73, 0x2f, 0x79, 0x37, 0x34, 0x42, 0xdb, 0xbc, 0xe3, 0x6d, 0x13, 0x97, - 0x7e, 0xad, 0x48, 0x52, 0x0d, 0x4c, 0x7e, 0x30, 0xdb, 0x7a, 0xa9, 0xb8, 0x1a, 0x3e, 0x0c, 0x87, - 0xfe, 0x67, 0x1a, 0x64, 0x3c, 0xbd, 0xe8, 0x6f, 0x69, 0x30, 0xbd, 0x49, 0x8c, 0x70, 0xe8, 0x93, - 0x1b, 0x46, 0x28, 0xaf, 0x9c, 0xbd, 0xf6, 0x40, 0x3c, 0xcc, 0x0b, 0xd7, 0x15, 0xcc, 0xfc, 0x3c, - 0x5c, 0xa6, 0x90, 0x52, 0x41, 0x38, 0xd1, 0x85, 0x4b, 0x1f, 0x80, 0xb9, 0x4c, 0xc3, 0x13, 0x9d, - 0x59, 0xfe, 0x63, 0x0d, 0xf2, 0x12, 0x97, 0xa3, 0x8f, 0xc2, 0x98, 0x61, 0x59, 0x32, 0xbb, 0xe9, - 0xf3, 0x25, 0x63, 0x3f, 0x2c, 0xf5, 0x6e, 0x1f, 0xfb, 0x89, 0x39, 0x5e, 0x74, 0x1d, 0x90, 0x91, - 0x38, 0xda, 0x5d, 0x89, 0xef, 0x20, 0xb1, 0x13, 0xaa, 0xc5, 0x0c, 0x14, 0xe7, 0xb4, 0xd0, 0x7f, - 0x4d, 0x03, 0x94, 0xcd, 0x3b, 0x86, 0x02, 0xa8, 0x0b, 0x6e, 0x8e, 0xe6, 0x69, 0xa9, 0x6c, 0x1c, - 0x7a, 0xe2, 0x5a, 0x45, 0x1c, 0xf9, 0x2e, 0x0a, 0x02, 0x2c, 0x09, 0xe9, 0x7f, 0xa1, 0x41, 0x9c, - 0x08, 0x11, 0xbd, 0x1f, 0xa6, 0x2c, 0x12, 0x98, 0xbe, 0x3d, 0x08, 0xe3, 0x4b, 0x18, 0x32, 0x90, - 0xbb, 0x1d, 0x83, 0xb0, 0x5a, 0x0f, 0xe9, 0x30, 0x1e, 0x1a, 0xc1, 0x76, 0xa7, 0x2d, 0xcc, 0x4b, - 0xa6, 0x0c, 0xdc, 0x61, 0x25, 0x58, 0x40, 0xe2, 0xfc, 0x21, 0x23, 0xc7, 0xc8, 0x1f, 0x82, 0x36, - 0x1f, 0x40, 0xb2, 0x14, 0x74, 0x74, 0xa2, 0x14, 0xfd, 0x9f, 0xd7, 0x20, 0x99, 0x7c, 0xb2, 0xec, - 0x10, 0x64, 0xb3, 0xbb, 0xd4, 0x1e, 0x5a, 0x76, 0x97, 0xf7, 0xb0, 0x44, 0xcd, 0x3c, 0x11, 0x3f, - 0x3f, 0x93, 0x55, 0xb3, 0x2b, 0xf3, 0x2c, 0xfa, 0xb2, 0x06, 0x7a, 0x4e, 0x0d, 0x0f, 0x9f, 0x6c, - 0xbe, 0x23, 0x62, 0x6d, 0x16, 0xf3, 0x7d, 0x5f, 0xe4, 0xaf, 0x91, 0xdf, 0x9f, 0x88, 0x04, 0x7f, - 0xbf, 0x08, 0x47, 0x1e, 0x4b, 0xe4, 0xd8, 0x89, 0x02, 0xaf, 0xe7, 0x12, 0x0d, 0x95, 0xa8, 0xeb, - 0xef, 0x6a, 0x30, 0x21, 0x72, 0xc8, 0x1d, 0x23, 0xaa, 0xbf, 0x07, 0x63, 0x4c, 0xa9, 0xaf, 0xa4, - 0xef, 0x74, 0xb7, 0x3c, 0x2f, 0x4c, 0xe4, 0xd2, 0x63, 0x51, 0xb4, 0xec, 0x5f, 0xcc, 0xf1, 0xb3, - 0xd0, 0x2c, 0xdf, 0xdc, 0xb2, 0x43, 0x62, 0x86, 0x51, 0x76, 0xae, 0x28, 0x34, 0x4b, 0x29, 0xc7, - 0x89, 0x5a, 0xfa, 0x97, 0x46, 0xe1, 0x71, 0x81, 0x38, 0xa3, 0x02, 0xc8, 0xa5, 0xbb, 0x07, 0xe7, - 0xc4, 0xe4, 0xb6, 0x7d, 0xc3, 0x96, 0x87, 0xdd, 0xe5, 0xac, 0x3b, 0x11, 0x08, 0x91, 0x41, 0x87, - 0xf3, 0x68, 0xf0, 0x3c, 0x53, 0xac, 0xf8, 0x26, 0x31, 0x9c, 0x70, 0x2b, 0xa2, 0x5d, 0xab, 0x92, - 0x67, 0x2a, 0x8b, 0x0f, 0xe7, 0x52, 0x61, 0x87, 0xed, 0x02, 0xd0, 0xf2, 0x89, 0xa1, 0x9e, 0xf4, - 0x57, 0x88, 0x83, 0x5d, 0xc9, 0xc5, 0x88, 0x0b, 0x28, 0x31, 0x37, 0x99, 0xb1, 0xcb, 0xac, 0x6e, - 0x4c, 0x42, 0xdf, 0x66, 0x39, 0x11, 0xa5, 0xaf, 0x76, 0x25, 0x09, 0xc2, 0xe9, 0xba, 0xe8, 0x79, - 0x98, 0x65, 0xc1, 0x0b, 0x71, 0x2e, 0x87, 0xb1, 0xf8, 0xf2, 0xe7, 0x6a, 0x02, 0x82, 0x53, 0x35, - 0xf5, 0xaf, 0x6b, 0x30, 0xad, 0xb2, 0xdd, 0x31, 0x62, 0xfc, 0x77, 0x14, 0x31, 0x5f, 0x25, 0xfc, - 0x5c, 0x25, 0x7b, 0x1c, 0x49, 0xff, 0xbb, 0x35, 0x38, 0x97, 0xd3, 0x86, 0x9d, 0x44, 0x93, 0xd4, - 0x96, 0x51, 0xe9, 0x24, 0x3a, 0xb3, 0xff, 0xc8, 0x93, 0xe8, 0x34, 0x04, 0x67, 0x08, 0xa3, 0xd7, - 0x60, 0xc4, 0xf4, 0x6d, 0x31, 0x30, 0xcf, 0x96, 0xb3, 0x7d, 0x70, 0xa7, 0x39, 0x25, 0x48, 0x8e, - 0xb4, 0x70, 0x07, 0x53, 0x8c, 0xe8, 0xa7, 0x61, 0x46, 0x5d, 0xd7, 0xd1, 0x3e, 0xc4, 0x54, 0x6c, - 0x75, 0xf9, 0x07, 0x38, 0x59, 0x4f, 0xff, 0x2f, 0x23, 0x30, 0xa5, 0x64, 0xc4, 0x44, 0x2b, 0x55, - 0x8c, 0xee, 0xb8, 0x5f, 0x91, 0xe1, 0xbd, 0x02, 0x23, 0xbd, 0xc1, 0xb0, 0xa4, 0xd5, 0x2d, 0xd1, - 0xdd, 0xa0, 0xe8, 0x7a, 0x83, 0x21, 0x7a, 0x55, 0xda, 0xf1, 0xe5, 0x2c, 0x6d, 0x19, 0x29, 0x9d, - 0xb2, 0xe5, 0x23, 0xbe, 0x1e, 0x2d, 0xe4, 0x6b, 0x17, 0x26, 0x02, 0x61, 0xe4, 0x8f, 0x55, 0xb8, - 0x95, 0xae, 0x0c, 0xb5, 0xb0, 0xea, 0xb9, 0x71, 0x10, 0x19, 0xfd, 0x11, 0x11, 0xaa, 0x74, 0x0c, - 0xd9, 0x1d, 0x2c, 0x66, 0xf7, 0xd4, 0xb9, 0xd2, 0xb1, 0xce, 0x4a, 0xb0, 0x80, 0x64, 0x44, 0xfe, - 0xc4, 0xb1, 0x44, 0xfe, 0x67, 0x6b, 0x80, 0xb2, 0xdd, 0x40, 0xef, 0x80, 0x31, 0x76, 0x8f, 0x53, - 0xac, 0x6d, 0xa9, 0x23, 0xb2, 0x7b, 0x7c, 0x98, 0xc3, 0x50, 0x57, 0xdc, 0xaf, 0x2d, 0x37, 0x9f, - 0x2c, 0xe4, 0x42, 0xd0, 0x53, 0x2e, 0xe3, 0x46, 0x9b, 0xe8, 0x48, 0xe1, 0x26, 0xba, 0x0e, 0x13, - 0x7d, 0xdb, 0x65, 0xc7, 0x3d, 0xe5, 0x9c, 0x1f, 0xfc, 0x4c, 0x98, 0xa3, 0xc0, 0x11, 0x2e, 0xfd, - 0x07, 0x35, 0xca, 0xfb, 0xb6, 0x1b, 0x12, 0x97, 0xdd, 0xc4, 0xba, 0x07, 0x60, 0x0c, 0x43, 0x8f, - 0xeb, 0x22, 0x62, 0x09, 0xfc, 0x6c, 0xc9, 0x69, 0x96, 0x58, 0x17, 0x25, 0x46, 0x7e, 0x56, 0x1b, - 0xff, 0xc6, 0x0a, 0x35, 0x4a, 0x3b, 0xb4, 0xfb, 0xe4, 0x35, 0xdb, 0xb5, 0xbc, 0xbb, 0x62, 0x7c, - 0x2b, 0xd3, 0xbe, 0x23, 0x31, 0x72, 0xda, 0xf1, 0x6f, 0xac, 0x50, 0x43, 0x1f, 0x84, 0x79, 0x66, - 0x66, 0xb9, 0x2c, 0x51, 0xb1, 0xe8, 0x9c, 0xe7, 0x38, 0xd1, 0x3e, 0x57, 0x67, 0x69, 0x21, 0xe7, - 0x5b, 0x05, 0x75, 0x70, 0x61, 0x6b, 0xfd, 0x1b, 0x1a, 0x5c, 0xc8, 0x1d, 0x0b, 0x74, 0x03, 0xe6, - 0xe2, 0x38, 0x1d, 0x55, 0x2e, 0xd7, 0xe3, 0x14, 0xd9, 0xb7, 0xd2, 0x15, 0x70, 0xb6, 0x0d, 0x5a, - 0x91, 0xca, 0x89, 0x2a, 0xf7, 0x45, 0x90, 0xcf, 0x63, 0x02, 0x55, 0xde, 0xd6, 0x80, 0xf3, 0xda, - 0xe9, 0x1f, 0x49, 0x74, 0x38, 0x1e, 0x30, 0xba, 0x3e, 0x36, 0x48, 0x4f, 0xde, 0xb9, 0x90, 0xeb, - 0xa3, 0x49, 0x0b, 0x31, 0x87, 0xa1, 0x2b, 0xea, 0x55, 0x26, 0x29, 0xbe, 0xa2, 0xeb, 0x4c, 0xfa, - 0x10, 0x40, 0x44, 0xd3, 0xd9, 0x6e, 0x0f, 0xf5, 0xa0, 0x6e, 0x88, 0x97, 0x94, 0x04, 0xb3, 0xbd, - 0x58, 0xce, 0xa8, 0x13, 0x48, 0x78, 0x20, 0x6d, 0xf4, 0x0b, 0x4b, 0xe4, 0xfa, 0xdf, 0xd5, 0xe0, - 0x62, 0xfe, 0x75, 0xc5, 0x63, 0x6c, 0xe8, 0x7d, 0x98, 0xf2, 0xe3, 0x66, 0x82, 0x33, 0x7f, 0x4a, - 0x4d, 0x42, 0xa5, 0x24, 0xd1, 0xa0, 0xca, 0x4e, 0xcb, 0xf7, 0x82, 0x68, 0x76, 0xd2, 0x79, 0xa9, - 0xa4, 0xa5, 0xa1, 0xf4, 0x04, 0xab, 0xf8, 0xf5, 0x4f, 0xd7, 0x00, 0x56, 0x49, 0x78, 0xd7, 0xf3, - 0xb7, 0xe9, 0x18, 0xfd, 0x58, 0x5d, 0x9b, 0xbd, 0x0c, 0xa3, 0x03, 0xcf, 0x0a, 0x84, 0xa0, 0x62, - 0xf7, 0x59, 0x59, 0x90, 0x09, 0x2b, 0x45, 0x0d, 0x18, 0x63, 0x5e, 0x6d, 0xb1, 0x89, 0x30, 0x0d, - 0x9d, 0xea, 0x57, 0x01, 0xe6, 0xe5, 0x3c, 0x61, 0x3e, 0x0b, 0x53, 0x0f, 0x84, 0xcd, 0x21, 0x12, - 0xe6, 0xf3, 0x32, 0x2c, 0xa1, 0xfa, 0x67, 0x46, 0x21, 0xf1, 0x6a, 0x58, 0x6c, 0xfc, 0x8f, 0x3e, - 0x24, 0xe3, 0xff, 0x83, 0x30, 0xef, 0x78, 0x86, 0xd5, 0x34, 0x1c, 0xca, 0xf6, 0x7e, 0x97, 0xcf, - 0x87, 0xe1, 0xf6, 0x64, 0xb2, 0x10, 0x26, 0x02, 0x96, 0x0b, 0xea, 0xe0, 0xc2, 0xd6, 0x68, 0xa8, - 0x3c, 0x56, 0x46, 0xb5, 0x9e, 0x95, 0xca, 0xaf, 0xaa, 0x2d, 0xa8, 0x77, 0x14, 0xe4, 0x8e, 0x9e, - 0x7a, 0xd0, 0xec, 0x57, 0x34, 0xb8, 0x40, 0x76, 0x43, 0xe2, 0xbb, 0x86, 0x73, 0xc7, 0x37, 0x36, - 0x37, 0x6d, 0x33, 0x11, 0xc6, 0xb7, 0x76, 0xb0, 0xdf, 0xb8, 0xb0, 0x94, 0x57, 0xe1, 0xfe, 0x7e, - 0xe3, 0x99, 0xec, 0xb3, 0x81, 0xd1, 0x8d, 0x84, 0xdc, 0x26, 0x8c, 0x1d, 0xf3, 0xc9, 0x5d, 0x7a, - 0x0e, 0xa6, 0x4e, 0x10, 0xbe, 0x9e, 0xb8, 0x02, 0xfa, 0x7d, 0x0d, 0xa6, 0x29, 0x07, 0x2d, 0x7b, - 0xa6, 0xe1, 0xb4, 0x57, 0xbb, 0x27, 0x78, 0x73, 0x0f, 0x2d, 0xc3, 0xf9, 0x4d, 0xcf, 0x37, 0xc9, - 0x9d, 0xd6, 0xda, 0x1d, 0x4f, 0x38, 0xc6, 0xdb, 0xab, 0x5d, 0x21, 0x17, 0x99, 0x21, 0x74, 0x3d, - 0x07, 0x8e, 0x73, 0x5b, 0xa1, 0xdb, 0x70, 0x21, 0x2e, 0x5f, 0x1f, 0xf0, 0x23, 0x7f, 0x8a, 0x6e, - 0x24, 0x0e, 0x59, 0xb8, 0x9e, 0x57, 0x01, 0xe7, 0xb7, 0xd3, 0xbf, 0x32, 0x0e, 0xca, 0x55, 0x97, - 0x13, 0xe4, 0xc6, 0xff, 0x2d, 0x0d, 0xce, 0x9b, 0x8e, 0x4d, 0xdc, 0x30, 0x75, 0x9f, 0x81, 0xaf, - 0xfa, 0x57, 0xcb, 0x5d, 0xc2, 0x19, 0x10, 0xb7, 0xd3, 0x16, 0xf1, 0x0b, 0xad, 0x1c, 0xec, 0x22, - 0xc6, 0x23, 0x07, 0x82, 0x73, 0x7b, 0xc3, 0x3e, 0x88, 0x95, 0x77, 0xda, 0xea, 0xc5, 0xd5, 0x96, - 0x28, 0xc3, 0x12, 0x8a, 0x9e, 0x86, 0xa9, 0x9e, 0xef, 0x0d, 0x07, 0x41, 0x8b, 0xc5, 0x4e, 0x72, - 0xe1, 0xc1, 0x34, 0xa5, 0x1b, 0x71, 0x31, 0x56, 0xeb, 0x50, 0xbd, 0x8f, 0xff, 0x5c, 0xf3, 0xc9, - 0xa6, 0xbd, 0x2b, 0x84, 0x09, 0xd3, 0xfb, 0x6e, 0x28, 0xe5, 0x38, 0x51, 0x0b, 0xbd, 0x1b, 0x26, - 0xed, 0x20, 0x18, 0x12, 0x7f, 0x1d, 0x2f, 0x8b, 0x7c, 0xb8, 0xcc, 0x0d, 0xde, 0x89, 0x0a, 0x71, - 0x0c, 0x47, 0xbf, 0xae, 0xc1, 0xac, 0x4f, 0x5e, 0x1f, 0xda, 0x3e, 0xb1, 0x18, 0xd1, 0x40, 0x5c, - 0x38, 0xea, 0x56, 0xbc, 0xe5, 0xb4, 0x80, 0x13, 0x58, 0xf9, 0x22, 0x96, 0xae, 0xa1, 0x24, 0x10, - 0xa7, 0xba, 0x40, 0xc7, 0x2a, 0xb0, 0x7b, 0xae, 0xed, 0xf6, 0x16, 0x9d, 0x5e, 0x30, 0x5f, 0x67, - 0x82, 0x89, 0x6b, 0x95, 0x71, 0x31, 0x56, 0xeb, 0x50, 0xc3, 0x68, 0x18, 0xd0, 0x65, 0xd9, 0x27, - 0x7c, 0x80, 0x27, 0xe3, 0x80, 0xe8, 0x75, 0x15, 0x80, 0x93, 0xf5, 0xa8, 0xdd, 0x1c, 0x15, 0x88, - 0x61, 0x06, 0x9e, 0x54, 0x86, 0xf6, 0x73, 0x3d, 0x01, 0xc1, 0xa9, 0x9a, 0x97, 0x16, 0xe1, 0x5c, - 0xce, 0x67, 0x9e, 0x68, 0xed, 0x7f, 0xbd, 0x06, 0x6f, 0x3f, 0x92, 0x2d, 0xd1, 0x57, 0x34, 0x98, - 0x22, 0xbb, 0xa1, 0x6f, 0xc8, 0x10, 0x6b, 0x3a, 0x47, 0xbd, 0x87, 0xb3, 0x08, 0x16, 0x96, 0x62, - 0x4a, 0x7c, 0xde, 0xe4, 0x76, 0xae, 0x40, 0xb0, 0xda, 0x21, 0x6a, 0xc6, 0xf0, 0xa4, 0x43, 0xaa, - 0xef, 0x54, 0xbc, 0x0b, 0x25, 0x20, 0x97, 0x5e, 0x82, 0xb3, 0x69, 0xcc, 0x27, 0x1a, 0xaa, 0x7f, - 0x58, 0x83, 0x89, 0x35, 0xdf, 0xa3, 0x9a, 0xc6, 0x29, 0x64, 0x9a, 0xd9, 0x48, 0xe4, 0x6e, 0x2c, - 0x77, 0x8b, 0x51, 0xf4, 0xb6, 0x30, 0x77, 0xec, 0xc7, 0x53, 0xb9, 0x63, 0x9b, 0x95, 0xa8, 0x1c, - 0x9e, 0x2c, 0xf6, 0x7b, 0x1a, 0x4c, 0x89, 0x9a, 0xa7, 0x90, 0x8a, 0xc6, 0x48, 0xa6, 0xa2, 0x79, - 0xa1, 0xca, 0x87, 0x15, 0x24, 0xa1, 0x79, 0x53, 0x83, 0x19, 0x51, 0x63, 0x85, 0xf4, 0x37, 0x88, - 0x8f, 0xae, 0xc3, 0x44, 0x30, 0x64, 0x73, 0x29, 0xbe, 0xe8, 0x31, 0x55, 0x7d, 0xf5, 0x37, 0x0c, - 0x93, 0xbd, 0x6f, 0xc6, 0xab, 0x28, 0x19, 0x59, 0x79, 0x01, 0x8e, 0x1a, 0x53, 0x65, 0xd4, 0xf7, - 0x9c, 0x4c, 0xfe, 0x0a, 0xec, 0x39, 0x04, 0x33, 0x08, 0xd5, 0x01, 0xe9, 0xdf, 0xc8, 0xfd, 0xc2, - 0x74, 0x40, 0x0a, 0x0e, 0x30, 0x2f, 0xd7, 0x3f, 0x3b, 0x2a, 0x47, 0x9b, 0x65, 0x4c, 0xbc, 0x09, - 0x93, 0xa6, 0x4f, 0x8c, 0x90, 0x58, 0xcd, 0xbd, 0xe3, 0x74, 0x8e, 0x49, 0xec, 0x56, 0xd4, 0x02, - 0xc7, 0x8d, 0xa9, 0x6c, 0x54, 0x3d, 0xfb, 0xb5, 0x78, 0x1f, 0x29, 0xf4, 0xea, 0xbf, 0x00, 0x63, - 0xde, 0x5d, 0x57, 0x9e, 0x80, 0x1f, 0x4a, 0x98, 0x7d, 0xca, 0x6d, 0x5a, 0x1b, 0xf3, 0x46, 0x6a, - 0xfe, 0x96, 0xd1, 0x43, 0xf2, 0xb7, 0xf4, 0x61, 0xa2, 0xcf, 0xa6, 0xa1, 0x5a, 0x7a, 0xce, 0xc4, - 0x8c, 0xaa, 0x89, 0xdc, 0x19, 0x6a, 0x1c, 0xd1, 0xa0, 0xbb, 0x1c, 0x15, 0xc4, 0xc1, 0xc0, 0x30, - 0x89, 0xba, 0xcb, 0xad, 0x46, 0x85, 0x38, 0x86, 0xa3, 0x7b, 0xc9, 0xd4, 0x40, 0x13, 0x15, 0x1c, - 0x3b, 0xa2, 0x7f, 0x4a, 0x36, 0x20, 0x3e, 0xf8, 0x85, 0xe9, 0x81, 0x3e, 0x3f, 0x2a, 0xd9, 0x54, - 0x64, 0xdc, 0xcd, 0x7f, 0x9c, 0x4b, 0x2b, 0xf5, 0x38, 0xd7, 0x33, 0x30, 0x36, 0xd8, 0x32, 0x82, - 0x88, 0x57, 0xa3, 0x57, 0x07, 0xc6, 0xd6, 0x68, 0xe1, 0xfd, 0xfd, 0xc6, 0xb4, 0x20, 0xcd, 0x7e, - 0x63, 0x5e, 0x17, 0x0d, 0xe1, 0x5c, 0x10, 0x1a, 0x0e, 0xe9, 0xda, 0xc2, 0xf4, 0x0d, 0x42, 0xa3, - 0x3f, 0x28, 0xf1, 0x78, 0x00, 0x0f, 0x46, 0xce, 0xa2, 0xc2, 0x79, 0xf8, 0xd1, 0x67, 0x34, 0x98, - 0x67, 0xe5, 0x8b, 0xc3, 0xd0, 0xe3, 0x4f, 0x8f, 0xc4, 0xc4, 0x4f, 0x7e, 0x30, 0xc6, 0x0c, 0x95, - 0x6e, 0x01, 0x3e, 0x5c, 0x48, 0x09, 0xbd, 0x01, 0x17, 0x1c, 0x23, 0x08, 0x17, 0xcd, 0xd0, 0xde, - 0xb1, 0xc3, 0xbd, 0xb8, 0x0b, 0x27, 0x7f, 0xa8, 0x8c, 0xe9, 0xc3, 0xcb, 0x79, 0xc8, 0x70, 0x3e, - 0x0d, 0xfd, 0x7f, 0x6a, 0x80, 0xb2, 0x2c, 0x84, 0xfa, 0x50, 0xb7, 0xa2, 0xe8, 0x60, 0xed, 0xc1, - 0x24, 0xae, 0x92, 0xd2, 0x59, 0x46, 0x15, 0x4b, 0x12, 0x68, 0x00, 0x93, 0x77, 0xb7, 0xec, 0x90, - 0x38, 0x76, 0x10, 0x3e, 0xa8, 0x44, 0x59, 0x32, 0x67, 0xcc, 0x6b, 0x11, 0x66, 0x1c, 0x13, 0xd1, - 0x7f, 0x75, 0x04, 0xea, 0x27, 0x78, 0x01, 0x76, 0x08, 0xc8, 0x54, 0x5e, 0x35, 0xa8, 0x62, 0xf0, - 0xb3, 0x23, 0xed, 0x56, 0x06, 0x19, 0xce, 0x21, 0x80, 0xde, 0x80, 0xf3, 0xb6, 0xbb, 0xe9, 0x1b, - 0x41, 0xe8, 0x0f, 0x99, 0x13, 0xb5, 0xca, 0xdb, 0x00, 0xcc, 0x94, 0xe8, 0xe4, 0xa0, 0xc3, 0xb9, - 0x44, 0xd0, 0x26, 0x4c, 0xdc, 0xf5, 0xfc, 0x6d, 0x2a, 0x40, 0x47, 0x2b, 0xbc, 0x14, 0xf5, 0x1a, - 0xc3, 0x11, 0x4b, 0x4e, 0xfe, 0x3b, 0xc0, 0x11, 0x72, 0xfd, 0x0f, 0x34, 0x18, 0xe3, 0x97, 0xdf, - 0x1e, 0xbe, 0x12, 0xf5, 0xb1, 0x84, 0x12, 0x55, 0x2e, 0xad, 0x38, 0xeb, 0x6b, 0x61, 0xbe, 0xeb, - 0xef, 0x6a, 0x30, 0xc9, 0x6a, 0x9c, 0x82, 0x52, 0xf3, 0xd1, 0xa4, 0x52, 0xf3, 0x7c, 0xf9, 0xcf, - 0x29, 0x50, 0x69, 0xfe, 0x60, 0x44, 0x7c, 0x0c, 0xd3, 0x19, 0x3a, 0x70, 0x4e, 0x84, 0xb5, 0x2d, - 0xdb, 0x9b, 0x84, 0x32, 0x58, 0xdb, 0xd8, 0x0b, 0xc4, 0xc5, 0x75, 0x7e, 0xb1, 0x21, 0x0b, 0xc6, - 0x79, 0x6d, 0xd0, 0x3f, 0xd2, 0xe8, 0xee, 0x1c, 0xfa, 0xb6, 0x59, 0x2d, 0x89, 0xb4, 0xec, 0xdc, - 0xc2, 0x0a, 0xc7, 0xc6, 0xed, 0x83, 0xf5, 0x78, 0x9b, 0x66, 0xa5, 0xf7, 0xf7, 0x1b, 0x8d, 0x1c, - 0xd7, 0x4a, 0xe4, 0x0c, 0xa4, 0x43, 0xfb, 0xe9, 0x1f, 0x1c, 0x5a, 0x85, 0x39, 0x26, 0xa3, 0x2e, - 0xa3, 0x9b, 0x30, 0x16, 0x98, 0xde, 0x80, 0x9c, 0x24, 0x35, 0xbe, 0x1c, 0xe1, 0x2e, 0x6d, 0x89, - 0x39, 0x82, 0x4b, 0x1f, 0x87, 0x69, 0xb5, 0xe7, 0x39, 0xf6, 0x47, 0x5b, 0xb5, 0x3f, 0x4e, 0x7c, - 0x02, 0xa1, 0xda, 0x2b, 0xbf, 0x57, 0x03, 0xf1, 0x62, 0xf5, 0x31, 0xdc, 0xaf, 0x1f, 0x8f, 0x32, - 0xb1, 0x56, 0x79, 0x85, 0x32, 0xfd, 0xf0, 0x7c, 0x3c, 0x08, 0x6a, 0x32, 0x56, 0xe4, 0xc9, 0x64, - 0x69, 0x23, 0x15, 0x72, 0x77, 0xf3, 0x4f, 0x7b, 0xd8, 0xe9, 0xd1, 0xbe, 0xa7, 0xc1, 0x74, 0x22, - 0xfd, 0x5c, 0x1f, 0x46, 0x7c, 0xf9, 0xb4, 0x43, 0x59, 0xff, 0x74, 0x14, 0x3e, 0xf2, 0xd8, 0x21, - 0x95, 0x30, 0xa5, 0x23, 0x33, 0xd5, 0xd5, 0x1e, 0x50, 0xa6, 0x3a, 0xfd, 0x0b, 0x1a, 0x5c, 0x8c, - 0x3e, 0x28, 0x99, 0x53, 0x04, 0x3d, 0x09, 0x75, 0x63, 0x60, 0x33, 0xd7, 0x8e, 0xea, 0x1d, 0x5b, - 0x5c, 0xeb, 0xb0, 0x32, 0x2c, 0xa1, 0xe8, 0x3d, 0x50, 0x8f, 0x58, 0x4f, 0x68, 0x7e, 0x52, 0x6e, - 0x49, 0x8f, 0xbb, 0xac, 0x81, 0xde, 0xa9, 0x64, 0xcb, 0x1d, 0x8b, 0x37, 0x6a, 0x49, 0x98, 0x9f, - 0xcf, 0xe9, 0x9f, 0x1b, 0x81, 0x19, 0x6e, 0xb2, 0x37, 0x6d, 0xd7, 0xb2, 0xdd, 0xde, 0x29, 0x6c, - 0x10, 0x89, 0x97, 0xcc, 0x6b, 0x0f, 0xea, 0x25, 0xf3, 0x5b, 0x30, 0xfe, 0x3a, 0x95, 0x54, 0x11, - 0x83, 0x1f, 0x4b, 0x60, 0x48, 0xe6, 0x65, 0x42, 0x2e, 0xc0, 0x02, 0x05, 0x0a, 0x95, 0x07, 0xe5, - 0xab, 0xdc, 0xed, 0x4e, 0x0c, 0xad, 0x4c, 0x7b, 0x3d, 0x9d, 0xff, 0x9a, 0x3c, 0xcb, 0x1f, 0x9b, - 0x68, 0xf1, 0x56, 0xc9, 0x1f, 0x9b, 0xe8, 0x74, 0xc1, 0x3e, 0xf7, 0x1c, 0x5c, 0xc8, 0x1d, 0x8d, - 0xa3, 0x35, 0x43, 0xfd, 0x5b, 0x35, 0x60, 0x0f, 0x3d, 0x9f, 0x02, 0x6f, 0x7e, 0x34, 0xa1, 0xbc, - 0xbc, 0x58, 0x3e, 0x83, 0x6d, 0x91, 0xfb, 0xa7, 0x97, 0x72, 0xff, 0x7c, 0xa0, 0x3c, 0x89, 0xc3, - 0x7d, 0x3f, 0xbf, 0x51, 0x03, 0xa0, 0xd5, 0xf8, 0x93, 0xd8, 0x22, 0xf2, 0x8e, 0x73, 0xb4, 0x96, - 0x94, 0x1e, 0x59, 0x4e, 0x3c, 0xcd, 0x83, 0x37, 0x1d, 0xc6, 0xf9, 0x7b, 0xa6, 0xc2, 0x97, 0x0e, - 0xfc, 0xb1, 0x37, 0x5a, 0x82, 0x05, 0x24, 0x29, 0x31, 0x46, 0x1f, 0x90, 0xc4, 0xd0, 0xbf, 0xa5, - 0x01, 0x7b, 0x99, 0xa7, 0xbd, 0xca, 0x6e, 0xbd, 0xda, 0xfc, 0x04, 0xaa, 0xad, 0x66, 0xdf, 0x63, - 0xae, 0xe4, 0x8e, 0x0a, 0xc0, 0xc9, 0x7a, 0xc8, 0x55, 0xc6, 0xb5, 0xca, 0x7b, 0xf4, 0xa2, 0x23, - 0x47, 0xca, 0x88, 0x1f, 0xd6, 0xe0, 0x4c, 0xaa, 0xee, 0x31, 0x6c, 0xab, 0x87, 0x23, 0x72, 0x95, - 0x6c, 0xf9, 0x23, 0xa7, 0x90, 0x2d, 0x5f, 0x26, 0xae, 0x1f, 0x7d, 0xc8, 0x89, 0xeb, 0xbf, 0xa3, - 0x01, 0x7b, 0xea, 0xfc, 0x14, 0xc4, 0xef, 0xcf, 0x27, 0xc5, 0xef, 0x73, 0xa5, 0x79, 0xa7, 0x40, - 0xea, 0xfe, 0x85, 0x06, 0x2c, 0x7f, 0xb6, 0x38, 0x76, 0x57, 0x4e, 0xb2, 0xb5, 0x82, 0x93, 0xec, - 0xc7, 0xc5, 0x41, 0x78, 0xca, 0x11, 0xaa, 0x1c, 0x86, 0xbf, 0x47, 0x39, 0xeb, 0x1e, 0x49, 0x8a, - 0x92, 0xec, 0x79, 0x37, 0x7a, 0x03, 0x66, 0x82, 0x2d, 0xcf, 0x0b, 0xe5, 0x4d, 0xe8, 0xd1, 0x0a, - 0x6e, 0x6f, 0x16, 0x2c, 0x1b, 0x7d, 0x0b, 0x5f, 0x9d, 0x5d, 0x15, 0x39, 0x4e, 0xd2, 0xd2, 0xff, - 0x54, 0x7c, 0xfe, 0x09, 0x96, 0xca, 0x29, 0x8a, 0xbe, 0x77, 0xa5, 0x44, 0x9f, 0xf2, 0xd6, 0x65, - 0x42, 0xfc, 0x35, 0x62, 0xc6, 0x97, 0x9e, 0xe7, 0x04, 0xc3, 0xfe, 0x7d, 0xf1, 0x99, 0x32, 0x2f, - 0xfa, 0x00, 0x66, 0x1c, 0xf5, 0xc1, 0x25, 0xc1, 0xb9, 0xa5, 0xde, 0x6a, 0x92, 0x99, 0x02, 0x13, - 0xc5, 0x38, 0x49, 0x80, 0x0a, 0xd0, 0xe8, 0xeb, 0xf8, 0x93, 0xcf, 0xb5, 0x38, 0x48, 0x71, 0x4d, - 0x05, 0xe0, 0x64, 0x3d, 0xfd, 0xab, 0x35, 0xb8, 0xc2, 0xfb, 0xce, 0x22, 0x92, 0xdb, 0x64, 0x40, - 0x5c, 0x8b, 0xb8, 0xe6, 0x1e, 0x53, 0x94, 0x2d, 0xaf, 0x87, 0x3e, 0xa3, 0x41, 0x9d, 0xb8, 0xd6, - 0xc0, 0xb3, 0xdd, 0xc8, 0xc9, 0xff, 0xe1, 0x0a, 0xa9, 0xe5, 0x0b, 0xc8, 0x2c, 0x09, 0x0a, 0x22, - 0x65, 0x9d, 0xf8, 0x85, 0x25, 0x65, 0xb4, 0x0b, 0x63, 0x03, 0xdf, 0xdb, 0x88, 0x8c, 0xc4, 0xd7, - 0x1e, 0x7c, 0x17, 0xd6, 0x28, 0x7a, 0x3e, 0xbd, 0xec, 0x5f, 0xcc, 0x09, 0xea, 0x18, 0xde, 0x79, - 0xac, 0xae, 0x9f, 0x20, 0x86, 0x40, 0xbf, 0x0d, 0xfa, 0xd1, 0x7d, 0x39, 0x09, 0xc2, 0x57, 0xe0, - 0x09, 0x05, 0xe1, 0xd2, 0xae, 0x49, 0x82, 0xa0, 0x65, 0x0c, 0x0c, 0x93, 0x5a, 0xc8, 0xec, 0xda, - 0x27, 0xf7, 0x5e, 0x9f, 0x00, 0xe5, 0xa7, 0x6a, 0xd0, 0x50, 0x70, 0x26, 0x02, 0x54, 0x22, 0xf1, - 0xf2, 0x65, 0x0d, 0xa6, 0x0c, 0xd7, 0xf5, 0x42, 0x43, 0x7d, 0xcc, 0x8e, 0x54, 0x9d, 0x9c, 0x3c, - 0x5a, 0x0b, 0x8b, 0x31, 0x9d, 0xd4, 0x19, 0xa9, 0x02, 0xc1, 0x6a, 0x77, 0x2e, 0xbd, 0x04, 0x67, - 0xd3, 0xad, 0x4e, 0x64, 0x0a, 0xb7, 0xe0, 0xa2, 0xd2, 0x2b, 0x76, 0x46, 0xd3, 0xda, 0x22, 0xe6, - 0x76, 0x70, 0x92, 0x71, 0x6c, 0x52, 0xd5, 0x5b, 0x22, 0x51, 0xde, 0x6d, 0x78, 0x0a, 0x26, 0x76, - 0xec, 0xc0, 0x8e, 0xae, 0x73, 0x2b, 0x38, 0x5e, 0xe5, 0xc5, 0x38, 0x82, 0xeb, 0x2f, 0xc3, 0x39, - 0x15, 0x07, 0x93, 0xb2, 0x27, 0x8a, 0x5a, 0xd1, 0x57, 0xe0, 0x71, 0x05, 0x43, 0xee, 0x25, 0xb4, - 0x93, 0xa0, 0xfb, 0x5a, 0x3d, 0x92, 0x79, 0xe2, 0x26, 0xc3, 0xb7, 0x35, 0x78, 0x94, 0x14, 0xb1, - 0x9d, 0x90, 0x1b, 0x1f, 0xaa, 0xca, 0x17, 0x85, 0x7c, 0x2d, 0xb2, 0x6d, 0x15, 0x81, 0x71, 0x71, - 0xd7, 0xd0, 0xbd, 0xc4, 0xa3, 0x25, 0xb5, 0x4a, 0xe6, 0x66, 0xce, 0x2c, 0x1f, 0xf6, 0x64, 0x09, - 0xf2, 0xa1, 0x1e, 0x88, 0xb9, 0xac, 0x74, 0x57, 0x36, 0x87, 0x37, 0x44, 0x04, 0x9c, 0xf8, 0x85, - 0x25, 0x1d, 0xf4, 0x35, 0x0d, 0xce, 0x3b, 0x39, 0xeb, 0x4b, 0x68, 0x06, 0x77, 0x1e, 0xc6, 0xda, - 0xe5, 0x9e, 0xf9, 0x3c, 0x08, 0xce, 0xed, 0x0b, 0xfa, 0x3b, 0x85, 0xb7, 0x32, 0xc7, 0x2a, 0xbc, - 0x3f, 0x77, 0xd4, 0x02, 0x28, 0x71, 0x41, 0xf3, 0x17, 0x60, 0xca, 0x8b, 0xc5, 0x82, 0xb8, 0x49, - 0x7b, 0xab, 0x6a, 0xef, 0x14, 0x49, 0xc3, 0xcf, 0x3a, 0x95, 0x02, 0xac, 0x12, 0x44, 0x6f, 0x6a, - 0x80, 0xac, 0xcc, 0xf6, 0x21, 0xce, 0x5b, 0xf1, 0x83, 0xdf, 0x24, 0xf9, 0xe1, 0x4e, 0xb6, 0x1c, - 0xe7, 0xf4, 0x42, 0xff, 0xe3, 0x3a, 0xd7, 0xe4, 0x99, 0x6f, 0xdd, 0x84, 0xf1, 0x0d, 0x66, 0x0c, - 0x0b, 0x61, 0x50, 0xde, 0xf4, 0xe6, 0x36, 0x35, 0x37, 0x55, 0xf9, 0xff, 0x58, 0xa0, 0x46, 0x0b, - 0x00, 0x1b, 0x8e, 0x67, 0x6e, 0xb7, 0x3a, 0x6d, 0x1c, 0x29, 0x41, 0x6c, 0x01, 0x36, 0x65, 0x29, - 0x56, 0x6a, 0xa0, 0x8f, 0xc0, 0x88, 0x25, 0xed, 0xa7, 0x17, 0xaa, 0x98, 0x8e, 0x71, 0x4c, 0x32, - 0x5d, 0x6e, 0x14, 0x2b, 0xf2, 0xa0, 0xee, 0x0a, 0x65, 0x59, 0x2c, 0xae, 0xf2, 0x6f, 0xf2, 0x48, - 0xad, 0x5b, 0x2a, 0xfb, 0x51, 0x09, 0x96, 0x44, 0x28, 0x41, 0x69, 0x0d, 0x8f, 0x55, 0x24, 0x28, - 0x4d, 0xe1, 0xc3, 0x1c, 0x15, 0x6b, 0xaa, 0x61, 0x3b, 0x7e, 0x7c, 0xc3, 0x76, 0xa6, 0xd0, 0xa8, - 0xdd, 0x84, 0xf1, 0x90, 0x3d, 0xf5, 0x2f, 0x82, 0xe2, 0x5e, 0x2a, 0xfd, 0x01, 0x77, 0x28, 0x9a, - 0x58, 0xa9, 0x67, 0x3f, 0x03, 0x2c, 0xb0, 0x53, 0x6e, 0xdc, 0x61, 0x4f, 0x97, 0x89, 0x54, 0x80, - 0xe5, 0xb9, 0x91, 0xbf, 0x80, 0xc6, 0xb9, 0x91, 0xff, 0x8f, 0x05, 0x6a, 0xb4, 0x4d, 0x4d, 0x35, - 0xbe, 0x3f, 0x8a, 0xdb, 0xe4, 0x8b, 0x55, 0x57, 0x64, 0x10, 0x45, 0x36, 0xf3, 0x5f, 0x58, 0x12, - 0x40, 0x26, 0x4c, 0x08, 0xdf, 0x88, 0xc8, 0x85, 0xfd, 0x42, 0x95, 0xf7, 0x08, 0xa2, 0x87, 0xfd, - 0xf8, 0xa5, 0xd0, 0x08, 0x73, 0xfe, 0x5b, 0xf7, 0x53, 0x3f, 0x8a, 0xb7, 0xee, 0xff, 0x74, 0x94, - 0x3b, 0xd8, 0x7e, 0x84, 0x6f, 0x2a, 0xf7, 0xa0, 0x1e, 0x21, 0xab, 0xe4, 0xb1, 0x8c, 0xde, 0xc0, - 0xe1, 0x53, 0x2b, 0x5f, 0xc4, 0x91, 0xc8, 0x51, 0x2b, 0xef, 0x46, 0x87, 0x92, 0x4d, 0xeb, 0x58, - 0xb7, 0x39, 0xf2, 0x63, 0x60, 0x46, 0x4b, 0xc5, 0xc0, 0xbc, 0x08, 0x67, 0xc4, 0x99, 0x67, 0xc7, - 0x22, 0xec, 0x14, 0x4e, 0x44, 0xca, 0xb2, 0x8b, 0x93, 0xad, 0x24, 0x08, 0xa7, 0xeb, 0xa2, 0xaf, - 0x6b, 0xf0, 0x04, 0x8f, 0xd2, 0x6d, 0xd1, 0x4d, 0x95, 0x3d, 0x6f, 0x47, 0xe2, 0xf7, 0xf4, 0xe2, - 0xf8, 0x90, 0xf1, 0x13, 0xc7, 0x87, 0x3c, 0x79, 0xb0, 0xdf, 0x78, 0xa2, 0x75, 0x0c, 0xdc, 0xf8, - 0x58, 0x3d, 0xd0, 0x6f, 0xc1, 0xa4, 0x14, 0x26, 0xe8, 0x8a, 0x62, 0x3a, 0xc4, 0xf2, 0xfe, 0x16, - 0xd9, 0xe3, 0x76, 0x44, 0x23, 0x61, 0x47, 0x70, 0x4b, 0xf2, 0x55, 0x5a, 0x20, 0x4c, 0x0a, 0xfd, - 0x3f, 0x68, 0x9c, 0x67, 0xc5, 0x93, 0x8c, 0x06, 0x4c, 0xf5, 0x79, 0x22, 0x31, 0x76, 0xff, 0x4a, - 0x2b, 0x7f, 0xf3, 0x6b, 0x25, 0x46, 0x83, 0x55, 0x9c, 0x68, 0x37, 0xfb, 0x6e, 0xe8, 0x8d, 0x8a, - 0x92, 0xee, 0xd8, 0xcf, 0x87, 0xa2, 0x6c, 0x1b, 0x6a, 0x61, 0x44, 0x91, 0x6d, 0xa9, 0x87, 0x1a, - 0x33, 0xd1, 0x6d, 0x47, 0x3e, 0xad, 0xa5, 0x7f, 0x7b, 0x04, 0x72, 0xdf, 0x2c, 0x40, 0x3a, 0x8c, - 0xf3, 0x78, 0x6b, 0xf5, 0x45, 0x55, 0x1e, 0x8c, 0x8d, 0x05, 0x04, 0xf9, 0x70, 0x5e, 0x04, 0x33, - 0xdf, 0x22, 0x7b, 0xf1, 0x4b, 0x9e, 0x62, 0x21, 0x3f, 0x99, 0xb7, 0x8b, 0xb1, 0xcb, 0x02, 0xe9, - 0x33, 0x2c, 0x26, 0xaf, 0xba, 0x29, 0x4c, 0x38, 0x17, 0x37, 0xba, 0xcd, 0x2f, 0x4e, 0xb8, 0x16, - 0xcb, 0xc1, 0x11, 0xb3, 0x9b, 0x1a, 0xeb, 0xbf, 0x94, 0x57, 0x01, 0xe7, 0xb7, 0x43, 0x3b, 0x80, - 0xfa, 0xc6, 0x6e, 0x1a, 0x5b, 0x85, 0x54, 0xe9, 0x2b, 0x19, 0x6c, 0x38, 0x87, 0x02, 0x5d, 0xff, - 0x86, 0x69, 0x92, 0x41, 0x48, 0x2c, 0x3e, 0xac, 0xd1, 0xd5, 0x67, 0xb6, 0xfe, 0x17, 0x93, 0x20, - 0x9c, 0xae, 0xab, 0xff, 0x6e, 0x0d, 0xc6, 0x98, 0x65, 0xf2, 0x16, 0x89, 0x87, 0x61, 0x7d, 0x2d, - 0x3c, 0x53, 0xda, 0x4a, 0x9d, 0x29, 0xbd, 0x5c, 0x81, 0xc6, 0xe1, 0x87, 0x4a, 0x1f, 0x82, 0x8b, - 0xac, 0xda, 0xa2, 0xc5, 0x8c, 0x91, 0x80, 0x58, 0x8b, 0x96, 0xc5, 0xf6, 0xe5, 0xa3, 0xa3, 0x1d, - 0xae, 0xc0, 0xc8, 0xd0, 0x77, 0xd2, 0xf7, 0xe7, 0xd6, 0xf1, 0x32, 0xa6, 0xe5, 0xfa, 0x3f, 0xa9, - 0xc1, 0x19, 0x86, 0xbb, 0xb5, 0x88, 0x85, 0xbf, 0x04, 0xb5, 0xa3, 0x48, 0x47, 0x8e, 0x75, 0x21, - 0x1d, 0xe9, 0x78, 0x85, 0x37, 0xf0, 0x09, 0x93, 0xeb, 0x86, 0x13, 0x44, 0x2d, 0x13, 0xa1, 0x8f, - 0x3e, 0x20, 0xc7, 0x08, 0x42, 0xfe, 0x3e, 0x54, 0x24, 0x5c, 0x4b, 0x44, 0x3e, 0x32, 0xfe, 0x5c, - 0xce, 0x60, 0xc2, 0x39, 0xd8, 0x23, 0x9a, 0x2d, 0xaf, 0x3f, 0x70, 0x88, 0xa4, 0x59, 0x2b, 0x4f, - 0x33, 0x89, 0x09, 0xe7, 0x60, 0xd7, 0x3f, 0xaf, 0xc1, 0xd9, 0xf4, 0x80, 0xa0, 0xbb, 0x50, 0xf7, - 0xc5, 0xa0, 0x08, 0xfe, 0x5e, 0x29, 0xcf, 0x1d, 0x39, 0x23, 0x2d, 0x1e, 0x29, 0x11, 0xbf, 0xb0, - 0x24, 0xa6, 0xff, 0xf7, 0x71, 0x98, 0x2f, 0x6a, 0x84, 0xbe, 0xa8, 0xc1, 0x45, 0x33, 0xde, 0xf7, - 0x16, 0x87, 0xe1, 0x96, 0xe7, 0xdb, 0xa1, 0x4d, 0xa2, 0x77, 0x97, 0xdb, 0x15, 0x3a, 0x29, 0xf9, - 0x87, 0xa7, 0x64, 0x68, 0xe5, 0xd2, 0xc1, 0x05, 0xf4, 0xd1, 0x27, 0x00, 0xb6, 0xe3, 0xfc, 0x46, - 0xb5, 0x0a, 0x4f, 0xc8, 0xb2, 0xde, 0x28, 0x49, 0x90, 0xa2, 0x5e, 0x31, 0x73, 0x50, 0x29, 0x57, - 0xe8, 0xb1, 0x07, 0x6c, 0x83, 0xad, 0x5b, 0x64, 0x6f, 0x60, 0xd8, 0x7e, 0xa5, 0x07, 0x6c, 0xf9, - 0x72, 0xee, 0xde, 0x14, 0xb8, 0x92, 0xd4, 0x95, 0x72, 0x85, 0x1e, 0xfa, 0x55, 0x0d, 0x66, 0xb8, - 0xb2, 0x15, 0x69, 0xd6, 0x5c, 0x92, 0xdf, 0x2e, 0xdf, 0x83, 0xdb, 0x2a, 0x3a, 0xd9, 0x09, 0x76, - 0x2c, 0x90, 0x04, 0x25, 0x09, 0x53, 0x0e, 0x99, 0x4b, 0x3e, 0xfc, 0x73, 0x8b, 0xec, 0x09, 0x9b, - 0xb2, 0x5b, 0x61, 0x40, 0xd2, 0x28, 0x65, 0x97, 0x98, 0x1e, 0x9b, 0x05, 0x67, 0x3b, 0xc1, 0xba, - 0x46, 0x42, 0xd3, 0x12, 0x0f, 0x4a, 0xdb, 0x9e, 0x4b, 0xbb, 0x36, 0x5e, 0xb5, 0x6b, 0x4b, 0x77, - 0x5a, 0xed, 0x04, 0xca, 0x64, 0xd7, 0xb2, 0xe0, 0x6c, 0x27, 0xf4, 0xef, 0xd5, 0xe0, 0xea, 0xe1, - 0xc8, 0xfe, 0x4a, 0xa6, 0x9e, 0x48, 0xa6, 0xfe, 0x62, 0x0d, 0x1e, 0x29, 0x58, 0xc7, 0x05, 0x63, - 0xa0, 0xfd, 0x3f, 0x37, 0x06, 0xdf, 0xd5, 0x60, 0x92, 0x8d, 0xc1, 0x5b, 0x25, 0xdc, 0x96, 0x75, - 0xb6, 0xe0, 0x40, 0xfc, 0xf7, 0x35, 0x98, 0xcb, 0xa4, 0x5c, 0x3a, 0x86, 0xf6, 0x72, 0x8a, 0xc7, - 0xc2, 0xef, 0x4c, 0x3f, 0xd8, 0x3b, 0x95, 0xfb, 0x58, 0xef, 0x6b, 0x30, 0x93, 0x38, 0x0e, 0x97, - 0x57, 0xd8, 0xb5, 0xdc, 0x2b, 0xec, 0xea, 0x0d, 0xf5, 0xda, 0xe1, 0x37, 0xd4, 0x6b, 0x70, 0xa9, - 0x58, 0x76, 0xff, 0xa5, 0x61, 0x7b, 0xb9, 0xf4, 0xb3, 0x9b, 0xe8, 0x5f, 0x9a, 0x31, 0x90, 0xfb, - 0x49, 0xe1, 0xbe, 0xf9, 0x57, 0xfb, 0xc9, 0x89, 0x06, 0xf4, 0xdb, 0x67, 0x84, 0x2c, 0x65, 0x27, - 0x12, 0x1f, 0x85, 0x71, 0x96, 0xa2, 0x21, 0xd2, 0x7a, 0x7f, 0xa6, 0x7c, 0xee, 0x87, 0x80, 0xfb, - 0x18, 0xf8, 0xff, 0x58, 0xa0, 0x45, 0x6d, 0x38, 0x6b, 0x3a, 0xde, 0xd0, 0x12, 0xcf, 0x3a, 0xad, - 0xc6, 0xee, 0x0c, 0x99, 0xd9, 0xaa, 0x95, 0x82, 0xe3, 0x4c, 0x0b, 0xd4, 0x55, 0xcf, 0x28, 0x9e, - 0x2d, 0x1b, 0x76, 0xc5, 0xb3, 0x14, 0xcb, 0xb3, 0x09, 0x1f, 0x80, 0x44, 0x62, 0x31, 0xba, 0xfd, - 0xf2, 0x52, 0xc9, 0xac, 0x5d, 0x52, 0xba, 0x46, 0x86, 0xb8, 0x2c, 0x0a, 0xb0, 0x42, 0x05, 0x05, - 0x30, 0xb5, 0x15, 0xbf, 0x62, 0x2d, 0xb4, 0xc9, 0x97, 0xab, 0x3e, 0xa1, 0xcd, 0x3d, 0x60, 0x4a, - 0x01, 0x56, 0xa9, 0xa0, 0x80, 0x1b, 0x14, 0xdc, 0x17, 0x5a, 0xe9, 0x3d, 0xd1, 0xd8, 0xcb, 0x1a, - 0x7f, 0x69, 0x5c, 0x86, 0x15, 0x32, 0x94, 0xa8, 0x2b, 0x33, 0xad, 0x88, 0xc3, 0xb8, 0x72, 0x44, - 0xe3, 0x84, 0x2d, 0x31, 0xd1, 0xb8, 0x0c, 0x2b, 0x64, 0xe8, 0xf0, 0xf6, 0xe3, 0xfc, 0x3a, 0xe2, - 0x5c, 0xe3, 0xe5, 0xaa, 0x89, 0x8e, 0x84, 0x83, 0x31, 0x2e, 0xc0, 0x2a, 0x15, 0xe4, 0x01, 0xf4, - 0x65, 0xde, 0x1d, 0x71, 0xc8, 0x51, 0xee, 0x4b, 0xe3, 0xf4, 0x3d, 0xdc, 0x48, 0x8a, 0x7f, 0x63, - 0x85, 0x04, 0xda, 0x56, 0xce, 0xb8, 0xa0, 0x82, 0xd3, 0xfd, 0x58, 0xe7, 0x5b, 0xef, 0x8f, 0xdd, - 0x95, 0x53, 0x6c, 0xdd, 0x3e, 0xa6, 0xb8, 0x2a, 0xef, 0xef, 0x37, 0xa6, 0x99, 0x30, 0xc9, 0xb8, - 0x2e, 0xe3, 0xc8, 0xb2, 0xe9, 0x43, 0x23, 0xcb, 0x6e, 0x50, 0x23, 0x4b, 0x09, 0xca, 0x66, 0x02, - 0x62, 0x86, 0x35, 0x91, 0x99, 0x9a, 0xba, 0xe9, 0x0a, 0x38, 0xdb, 0x86, 0x6b, 0x17, 0xc4, 0x62, - 0xed, 0x67, 0x55, 0xed, 0x82, 0x97, 0x61, 0x09, 0x45, 0x77, 0x61, 0x3a, 0x50, 0x42, 0xd5, 0xc4, - 0x93, 0x41, 0x55, 0x8e, 0xa5, 0x44, 0x9c, 0x1a, 0xcb, 0x91, 0xa1, 0x96, 0xe0, 0x04, 0x21, 0xf4, - 0x09, 0x98, 0x8c, 0x9c, 0xd7, 0xc1, 0xfc, 0xd9, 0x0a, 0x17, 0xa2, 0xf2, 0xd3, 0x2d, 0xc5, 0xde, - 0xe8, 0x08, 0x14, 0xe0, 0x98, 0x20, 0xda, 0x49, 0x5e, 0x47, 0x9e, 0x7b, 0x30, 0x17, 0x30, 0x65, - 0x00, 0x52, 0xd1, 0x55, 0x64, 0xd4, 0x82, 0x39, 0xb2, 0x3b, 0xf0, 0x82, 0xa1, 0x4f, 0x58, 0xb6, - 0x37, 0x36, 0x43, 0x28, 0x3e, 0xb9, 0x59, 0x4a, 0x03, 0x71, 0xb6, 0x3e, 0x3b, 0x74, 0xe3, 0x6f, - 0x2e, 0xd1, 0xed, 0xcc, 0x73, 0x89, 0x1b, 0x06, 0xec, 0x51, 0xa1, 0xb2, 0x87, 0x6e, 0xdd, 0x14, - 0x32, 0xe1, 0xc4, 0x4e, 0x95, 0xe2, 0x0c, 0x51, 0xca, 0x3d, 0xea, 0x1d, 0x4e, 0xf6, 0x38, 0x51, - 0x59, 0xee, 0x51, 0x2f, 0x88, 0x72, 0xee, 0x51, 0x4b, 0x70, 0x82, 0x90, 0xfe, 0x2f, 0x34, 0x00, - 0xe9, 0x21, 0x25, 0xa7, 0xe0, 0x36, 0x26, 0x09, 0xb7, 0x71, 0xab, 0x9a, 0x4b, 0x97, 0x14, 0xde, - 0xa5, 0xfc, 0x23, 0x0d, 0x66, 0xe3, 0x6a, 0xa7, 0x60, 0xe1, 0x59, 0x49, 0x0b, 0xef, 0x03, 0x15, - 0x3f, 0xac, 0xc0, 0xcc, 0xfb, 0x3f, 0x35, 0xf5, 0xb3, 0x98, 0xb2, 0x75, 0x57, 0x39, 0x2c, 0xe5, - 0xc7, 0xb3, 0x9d, 0x4a, 0x87, 0xa5, 0xea, 0x0d, 0xb5, 0xf8, 0x8b, 0x73, 0x0e, 0x4f, 0x3f, 0x99, - 0xd0, 0x74, 0xaa, 0x5c, 0xc5, 0x94, 0x6a, 0x4d, 0x44, 0x9b, 0x0f, 0xc1, 0x51, 0x6a, 0x8f, 0xaf, - 0x4a, 0x3e, 0x7e, 0x3b, 0x6a, 0xb1, 0xe4, 0xf5, 0x3f, 0xe5, 0x93, 0x0f, 0x95, 0x77, 0xfa, 0x6f, - 0xcf, 0xc0, 0x94, 0x72, 0xa2, 0xf0, 0x23, 0x39, 0x1e, 0x1f, 0xc2, 0x94, 0xe9, 0xb9, 0x41, 0xe8, - 0xf3, 0x78, 0x8e, 0xda, 0x03, 0x21, 0x2a, 0x45, 0x6e, 0x2b, 0x46, 0x8d, 0x55, 0x3a, 0x54, 0x41, - 0x90, 0x8c, 0x36, 0xf2, 0x20, 0x4e, 0xe5, 0x0f, 0x63, 0xae, 0xf7, 0x01, 0x44, 0xca, 0x26, 0xe1, - 0xcf, 0x87, 0xd4, 0xe3, 0x5c, 0xf6, 0x9d, 0xe0, 0xa6, 0x84, 0x61, 0xa5, 0x1e, 0x7a, 0x03, 0x66, - 0x1c, 0x35, 0x05, 0xb6, 0x50, 0x85, 0xcb, 0x05, 0xe5, 0x27, 0x92, 0x69, 0x73, 0xd7, 0x6e, 0xa2, - 0x08, 0x27, 0x69, 0xa1, 0x6d, 0x98, 0x74, 0xa2, 0xbc, 0xed, 0x42, 0x1f, 0x7e, 0xa9, 0x34, 0x61, - 0x86, 0x85, 0x87, 0xf3, 0xc8, 0x9f, 0x38, 0xc6, 0x4f, 0xf9, 0x4e, 0xfe, 0xa8, 0x16, 0xd2, 0x13, - 0x53, 0x93, 0x7c, 0x27, 0x8b, 0x02, 0xac, 0x50, 0x29, 0x08, 0x74, 0xa8, 0x97, 0x0a, 0x74, 0x18, - 0xc2, 0x39, 0x9f, 0x84, 0xfe, 0x5e, 0x6b, 0xcf, 0x64, 0xef, 0x27, 0xf8, 0x21, 0xb3, 0x52, 0x27, - 0xcb, 0xe5, 0xed, 0xc0, 0x59, 0x54, 0x38, 0x0f, 0x3f, 0xba, 0x0c, 0xa3, 0x54, 0x79, 0x12, 0x79, - 0xb1, 0x98, 0x2f, 0x89, 0xaa, 0x56, 0x98, 0x95, 0xa2, 0xf7, 0xc3, 0x54, 0x48, 0xcc, 0x2d, 0xd7, - 0x36, 0x0d, 0xa7, 0xd3, 0x16, 0x9a, 0x69, 0xac, 0x8b, 0xc4, 0x20, 0xac, 0xd6, 0x43, 0x4d, 0x18, - 0x19, 0xda, 0x96, 0x50, 0x49, 0x7f, 0x52, 0x9e, 0x00, 0x76, 0xda, 0xf7, 0xf7, 0x1b, 0x6f, 0x8f, - 0x2f, 0x86, 0xcb, 0x2f, 0xb9, 0x36, 0xd8, 0xee, 0x5d, 0x0b, 0xf7, 0x06, 0x24, 0x58, 0x58, 0xef, - 0xb4, 0x31, 0x6d, 0x9c, 0x17, 0xf8, 0x31, 0x73, 0x82, 0xc0, 0x8f, 0x37, 0x35, 0x38, 0x67, 0xa4, - 0x0f, 0x2f, 0x49, 0x30, 0x3f, 0x5b, 0x41, 0x2a, 0xe7, 0x9f, 0x88, 0xc6, 0xf9, 0x49, 0x17, 0xb3, - 0xf4, 0x70, 0x5e, 0x27, 0x90, 0x0f, 0xa8, 0x6f, 0xf7, 0x64, 0x36, 0x7b, 0x31, 0xd5, 0x67, 0xca, - 0x39, 0x24, 0x56, 0x32, 0x98, 0x70, 0x0e, 0x76, 0xb4, 0x0b, 0x53, 0x66, 0xec, 0x9b, 0x61, 0x6f, - 0x65, 0x96, 0x56, 0xea, 0x52, 0x8e, 0x1e, 0xf1, 0x0c, 0xb3, 0xe2, 0xf9, 0x51, 0x49, 0xa1, 0xcf, - 0x69, 0x70, 0x89, 0x2e, 0x1a, 0xc5, 0x70, 0xbe, 0xe3, 0xdb, 0xbd, 0x1e, 0xf1, 0xd9, 0x67, 0xcf, - 0x9d, 0xf8, 0xb3, 0xd9, 0xfb, 0x9b, 0xcb, 0x85, 0x18, 0xf1, 0x21, 0xd4, 0xf4, 0xff, 0xaa, 0x41, - 0x46, 0xfd, 0x44, 0x26, 0x4c, 0xd0, 0x2f, 0x6c, 0xaf, 0x76, 0x85, 0x1e, 0xf4, 0x42, 0xc9, 0xbd, - 0x83, 0xe1, 0xe0, 0x6e, 0x5c, 0xf1, 0x03, 0x47, 0x98, 0xa9, 0x46, 0xeb, 0x2a, 0x79, 0x20, 0x85, - 0xbe, 0x57, 0x6e, 0x7f, 0x56, 0x13, 0x4a, 0x72, 0x8d, 0x56, 0x2d, 0xc1, 0x09, 0x42, 0xfa, 0x32, - 0x40, 0x6c, 0x35, 0x54, 0x8e, 0x2c, 0xfa, 0xf7, 0x63, 0x70, 0xa1, 0x6a, 0x4c, 0x3f, 0xcb, 0xc9, - 0xcf, 0xde, 0x02, 0x5e, 0xdc, 0x0c, 0x89, 0x7f, 0xfb, 0xf6, 0x8a, 0x7c, 0x27, 0xb5, 0xe4, 0xa3, - 0x00, 0xf1, 0x6b, 0xd2, 0x19, 0x8c, 0xb8, 0x80, 0x12, 0xb3, 0x98, 0xc4, 0x33, 0x78, 0x98, 0x6a, - 0x57, 0xec, 0x11, 0x54, 0x7e, 0x8d, 0x9e, 0x5b, 0x4c, 0x69, 0x20, 0xce, 0xd6, 0x4f, 0x23, 0xe1, - 0xef, 0x12, 0xd3, 0xdd, 0x59, 0xcb, 0x22, 0xe1, 0x8f, 0x13, 0x67, 0xeb, 0xab, 0x48, 0xf8, 0x4c, - 0xb9, 0x26, 0xcf, 0x50, 0x9e, 0x42, 0x22, 0x81, 0x38, 0x5b, 0x1f, 0x59, 0x70, 0xd9, 0x27, 0xa6, - 0xd7, 0xef, 0x13, 0xd7, 0xe2, 0x0f, 0xb9, 0x18, 0x7e, 0xcf, 0x76, 0xaf, 0xfb, 0x06, 0xab, 0xc8, - 0x36, 0x60, 0x8d, 0xbd, 0x08, 0x7f, 0x19, 0x1f, 0x52, 0x0f, 0x1f, 0x8a, 0x05, 0xf5, 0xe1, 0xcc, - 0x90, 0x25, 0x7f, 0xf6, 0x3b, 0x6e, 0x48, 0xfc, 0x1d, 0xc3, 0x29, 0xf9, 0xe0, 0x36, 0x13, 0xe3, - 0xeb, 0x49, 0x54, 0x38, 0x8d, 0x1b, 0xed, 0xd1, 0x5d, 0x51, 0x74, 0x47, 0x21, 0x59, 0x2f, 0xff, - 0x6a, 0x05, 0xce, 0xa2, 0xc3, 0x79, 0x34, 0xf4, 0xbf, 0xad, 0x81, 0x88, 0xb2, 0xa5, 0x9b, 0xa4, - 0x72, 0x6a, 0x54, 0x4f, 0x9d, 0x18, 0x5d, 0x16, 0x57, 0x0d, 0x6b, 0x31, 0x54, 0xb9, 0x66, 0xf8, - 0x2e, 0x25, 0x3f, 0xc3, 0x64, 0xac, 0x51, 0x70, 0xcc, 0x4a, 0x02, 0xf5, 0xff, 0x0f, 0x26, 0x06, - 0xbe, 0xdd, 0x37, 0xfc, 0x3d, 0xa1, 0xdc, 0x31, 0x55, 0x47, 0x1c, 0xed, 0xd2, 0xb5, 0x23, 0xa0, - 0xfa, 0xf7, 0x34, 0x10, 0xad, 0x59, 0xae, 0xff, 0x63, 0xa5, 0x7c, 0x3f, 0x32, 0xc2, 0x4d, 0x49, - 0x55, 0x3f, 0x52, 0x98, 0xaa, 0xfe, 0x21, 0x65, 0x70, 0xff, 0xb6, 0x06, 0x67, 0x92, 0xc9, 0x32, - 0x02, 0xf4, 0x4e, 0x98, 0x10, 0x09, 0xad, 0x44, 0x4a, 0x1c, 0x7e, 0x53, 0x58, 0xbc, 0x2a, 0x1c, - 0xc1, 0x92, 0xae, 0x9e, 0x2a, 0x06, 0x57, 0x7e, 0xd2, 0x8e, 0x23, 0x4c, 0x9f, 0xfd, 0x59, 0x18, - 0xe7, 0x19, 0x98, 0xd0, 0x2f, 0xe5, 0xde, 0x4e, 0x5b, 0xae, 0x90, 0xe4, 0xa9, 0xc4, 0x25, 0xb4, - 0x44, 0x06, 0xde, 0xda, 0xa1, 0x19, 0x78, 0xbb, 0xfc, 0x0d, 0x8b, 0x2a, 0x9e, 0xfe, 0x16, 0xee, - 0x88, 0x07, 0x1a, 0xa3, 0xf7, 0x2b, 0x86, 0x09, 0x07, 0xf8, 0x68, 0x05, 0x0d, 0x83, 0x0f, 0x81, - 0xe2, 0x06, 0x9f, 0x3d, 0xc4, 0x05, 0x1e, 0x67, 0xbc, 0x19, 0xab, 0x10, 0x76, 0x2a, 0x46, 0xfd, - 0x18, 0x19, 0x6f, 0xe4, 0x6a, 0x1a, 0x2f, 0x5c, 0x4d, 0x3d, 0x98, 0x10, 0xeb, 0x41, 0x48, 0xc7, - 0x17, 0xaa, 0x3c, 0x34, 0xa1, 0x64, 0x4a, 0xe4, 0x05, 0x38, 0xc2, 0x4e, 0xf7, 0xdc, 0xbe, 0xb1, - 0x6b, 0xf7, 0x87, 0x7d, 0x26, 0x13, 0xc7, 0xd4, 0xaa, 0xac, 0x18, 0x47, 0x70, 0x56, 0x95, 0xc7, - 0xeb, 0x32, 0xa3, 0x42, 0xad, 0x2a, 0xde, 0x18, 0x8e, 0xe0, 0xe8, 0xc3, 0x50, 0xef, 0x1b, 0xbb, - 0xdd, 0xa1, 0xdf, 0x23, 0xc2, 0xf3, 0x5d, 0xec, 0xf4, 0x1a, 0x86, 0xb6, 0xb3, 0x40, 0xcd, 0xe1, - 0xd0, 0x5f, 0xe8, 0xb8, 0xe1, 0x6d, 0xbf, 0x1b, 0xfa, 0x32, 0x8f, 0xfd, 0x8a, 0xc0, 0x82, 0x25, - 0x3e, 0xe4, 0xc0, 0x6c, 0xdf, 0xd8, 0x5d, 0x77, 0x0d, 0xf9, 0x14, 0xea, 0x54, 0x49, 0x0a, 0xec, - 0x88, 0x7d, 0x25, 0x81, 0x0b, 0xa7, 0x70, 0xe7, 0x9c, 0xe6, 0x4f, 0x3f, 0xac, 0xd3, 0xfc, 0x45, - 0x79, 0x9f, 0x64, 0x86, 0xb1, 0xe1, 0xa3, 0x79, 0x81, 0xbd, 0x87, 0x5f, 0x15, 0xf9, 0xa8, 0xbc, - 0x2a, 0x32, 0x5b, 0xe1, 0x98, 0xf0, 0x90, 0x6b, 0x22, 0x3b, 0x30, 0x65, 0x19, 0xa1, 0xc1, 0x4b, - 0x83, 0xf9, 0x33, 0x15, 0x3c, 0x73, 0x6d, 0x89, 0x47, 0x79, 0x7a, 0x2c, 0xc6, 0x8d, 0x55, 0x42, - 0xe8, 0x36, 0x7f, 0x2a, 0xd3, 0x21, 0x61, 0x5c, 0x85, 0x39, 0xa8, 0xcf, 0xf2, 0x23, 0x88, 0xe8, - 0x61, 0xcb, 0x4c, 0x05, 0x9c, 0xdf, 0x2e, 0xbe, 0x29, 0x3f, 0x97, 0x7f, 0x53, 0x1e, 0xfd, 0xf5, - 0x3c, 0x4f, 0x36, 0xaa, 0x70, 0x67, 0x8e, 0xcb, 0x87, 0xd2, 0xfe, 0xec, 0xbf, 0xa7, 0xc1, 0x7c, - 0xbf, 0xe0, 0x8d, 0x2e, 0xe1, 0x61, 0x5f, 0xaf, 0x22, 0x23, 0x0a, 0x1f, 0xfe, 0x6a, 0x3e, 0x71, - 0xb0, 0xdf, 0x38, 0xf2, 0x79, 0x30, 0x5c, 0xd8, 0xb9, 0xaa, 0x37, 0x9b, 0xab, 0xe4, 0x07, 0xfb, - 0x2d, 0x0d, 0xce, 0xa6, 0xb7, 0x02, 0xf5, 0x71, 0x4f, 0xed, 0x21, 0x3f, 0xee, 0xa9, 0x04, 0xe8, - 0xd4, 0x0e, 0x09, 0xd0, 0x79, 0x11, 0x2e, 0xe6, 0x73, 0x07, 0x55, 0xce, 0xd8, 0x93, 0xba, 0xc2, - 0x20, 0x8a, 0x9f, 0x6d, 0xa0, 0x85, 0x98, 0xc3, 0x9a, 0x1f, 0xfa, 0xce, 0x0f, 0xaf, 0xbe, 0xed, - 0x0f, 0x7f, 0x78, 0xf5, 0x6d, 0xdf, 0xff, 0xe1, 0xd5, 0xb7, 0x7d, 0xea, 0xe0, 0xaa, 0xf6, 0x9d, - 0x83, 0xab, 0xda, 0x1f, 0x1e, 0x5c, 0xd5, 0xbe, 0x7f, 0x70, 0x55, 0xfb, 0x37, 0x07, 0x57, 0xb5, - 0xbf, 0xf9, 0x6f, 0xaf, 0xbe, 0xed, 0xc3, 0xcf, 0xc4, 0x1f, 0x79, 0x2d, 0xfa, 0xb6, 0xf8, 0x9f, - 0xc1, 0x76, 0xef, 0x1a, 0xfd, 0xc8, 0x28, 0xd7, 0x1e, 0xff, 0xc8, 0xff, 0x1b, 0x00, 0x00, 0xff, - 0xff, 0xf0, 0x72, 0xeb, 0xdd, 0x53, 0xd2, 0x00, 0x00, + 0x75, 0x18, 0xac, 0xbe, 0x7c, 0x5d, 0x1e, 0x3e, 0x86, 0xac, 0x79, 0x2c, 0x77, 0x76, 0x77, 0xee, + 0xaa, 0xb5, 0xd2, 0xb7, 0xfb, 0x49, 0xe6, 0x78, 0x77, 0x25, 0x7b, 0x77, 0xbd, 0x2f, 0xde, 0x7b, + 0x39, 0x33, 0xd7, 0x43, 0xce, 0x70, 0xeb, 0x0e, 0x77, 0xa5, 0x95, 0x61, 0xa9, 0xd9, 0x5d, 0xbc, + 0x6c, 0xb1, 0x6f, 0xf7, 0xdd, 0xee, 0xbe, 0x1c, 0x72, 0x56, 0xb6, 0x64, 0x59, 0xb6, 0x6c, 0x09, + 0x31, 0x12, 0x08, 0x81, 0x84, 0x95, 0x20, 0xcb, 0x82, 0x13, 0x28, 0x40, 0x0c, 0x19, 0x02, 0xa4, + 0x20, 0x0f, 0xe4, 0x87, 0xf3, 0xc3, 0x8a, 0x1c, 0x28, 0x4e, 0xe0, 0x04, 0x8a, 0x91, 0x50, 0x11, + 0xe3, 0xc4, 0x4e, 0x10, 0x23, 0x09, 0x82, 0xfc, 0xc8, 0xc0, 0x09, 0x82, 0x7a, 0x74, 0x75, 0xf5, + 0x8b, 0x8f, 0xee, 0x19, 0x4a, 0x1b, 0xe7, 0x17, 0x79, 0xeb, 0x54, 0x9d, 0x53, 0x55, 0x5d, 0x75, + 0xea, 0x9c, 0x53, 0xa7, 0xce, 0x81, 0x56, 0xcf, 0x0e, 0xb7, 0x86, 0x1b, 0x8b, 0xa6, 0xd7, 0xbf, + 0xdc, 0x33, 0x7c, 0x8b, 0xb8, 0xc4, 0x8f, 0xff, 0x19, 0x6c, 0xf7, 0x2e, 0x1b, 0x03, 0x3b, 0xb8, + 0x6c, 0x7a, 0x3e, 0xb9, 0xbc, 0xf3, 0xa4, 0xe1, 0x0c, 0xb6, 0x8c, 0x27, 0x2f, 0xf7, 0x28, 0xd0, + 0x08, 0x89, 0xb5, 0x38, 0xf0, 0xbd, 0xd0, 0x43, 0x4f, 0xc7, 0x48, 0x16, 0xa3, 0xb6, 0xf1, 0x3f, + 0x83, 0xed, 0xde, 0x22, 0x45, 0xb2, 0x48, 0x91, 0x2c, 0x46, 0x48, 0x2e, 0x36, 0x4f, 0x44, 0x79, + 0x83, 0x84, 0x59, 0xc2, 0x17, 0x7f, 0x42, 0xc5, 0xe1, 0xf5, 0xbc, 0xcb, 0xac, 0x78, 0x63, 0xb8, + 0xc9, 0x7e, 0xb1, 0x1f, 0xec, 0x3f, 0x51, 0xfd, 0x89, 0xed, 0x67, 0x82, 0x45, 0xdb, 0xa3, 0x88, + 0x2f, 0x1b, 0xc3, 0xd0, 0x0b, 0x4c, 0xc3, 0xb1, 0xdd, 0xde, 0xe5, 0x9d, 0x2c, 0x66, 0x5d, 0xa9, + 0x2a, 0xba, 0x70, 0x68, 0x1d, 0x7f, 0xc3, 0x30, 0xf3, 0xea, 0xbc, 0x3f, 0xae, 0xd3, 0x37, 0xcc, + 0x2d, 0xdb, 0x25, 0xfe, 0x5e, 0x34, 0xb8, 0xcb, 0x3e, 0x09, 0xbc, 0xa1, 0x6f, 0x92, 0x13, 0xb5, + 0x0a, 0x2e, 0xf7, 0x49, 0x68, 0xe4, 0xd1, 0xba, 0x5c, 0xd4, 0xca, 0x1f, 0xba, 0xa1, 0xdd, 0xcf, + 0x92, 0xf9, 0xa9, 0xa3, 0x1a, 0x04, 0xe6, 0x16, 0xe9, 0x1b, 0x99, 0x76, 0x4f, 0x17, 0xb5, 0x1b, + 0x86, 0xb6, 0x73, 0xd9, 0x76, 0xc3, 0x20, 0xf4, 0xd3, 0x8d, 0xf4, 0xa7, 0x60, 0x6c, 0xc9, 0xb2, + 0x3c, 0x17, 0x3d, 0x01, 0x13, 0xc4, 0x35, 0x36, 0x1c, 0x62, 0x2d, 0x68, 0x8f, 0x6a, 0x8f, 0xd7, + 0x9b, 0x67, 0xbe, 0xb3, 0xdf, 0x78, 0xc7, 0xc1, 0x7e, 0x63, 0x62, 0x99, 0x17, 0xe3, 0x08, 0xae, + 0x7f, 0xa1, 0x06, 0xe3, 0xac, 0x51, 0x80, 0x3e, 0xaf, 0xc1, 0xd9, 0xed, 0xe1, 0x06, 0xf1, 0x5d, + 0x12, 0x92, 0xa0, 0x6d, 0x04, 0x5b, 0x1b, 0x9e, 0xe1, 0x73, 0x14, 0x53, 0x4f, 0x5d, 0x5b, 0x2c, + 0xb1, 0x04, 0x17, 0xaf, 0x67, 0xf1, 0x35, 0x1f, 0x38, 0xd8, 0x6f, 0x9c, 0xcd, 0x01, 0xe0, 0x3c, + 0xea, 0xe8, 0x36, 0x4c, 0xbb, 0x3d, 0xdb, 0xdd, 0xed, 0xb8, 0x3d, 0x9f, 0x04, 0xc1, 0x42, 0x8d, + 0xf5, 0x66, 0xa9, 0x54, 0x6f, 0x6e, 0x28, 0x88, 0x9a, 0x73, 0x07, 0xfb, 0x8d, 0x69, 0xb5, 0x04, + 0x27, 0x08, 0xe9, 0xbf, 0xab, 0xc1, 0x99, 0x25, 0xab, 0x6f, 0x07, 0x81, 0xed, 0xb9, 0x6b, 0xce, + 0xb0, 0x67, 0xbb, 0xe8, 0x51, 0x18, 0x75, 0x8d, 0x3e, 0x61, 0x53, 0x32, 0xd9, 0x9c, 0x16, 0xb3, + 0x3a, 0x7a, 0xc3, 0xe8, 0x13, 0xcc, 0x20, 0xe8, 0x15, 0x18, 0x37, 0x3d, 0x77, 0xd3, 0xee, 0x89, + 0x8e, 0xfe, 0xc4, 0x22, 0xff, 0x92, 0x8b, 0xea, 0x97, 0x64, 0xfd, 0x13, 0x2b, 0x60, 0x11, 0x1b, + 0xb7, 0x97, 0x77, 0x43, 0xe2, 0x52, 0x32, 0x4d, 0x38, 0xd8, 0x6f, 0x8c, 0xb7, 0x18, 0x02, 0x2c, + 0x10, 0xa1, 0xc7, 0xa1, 0x6e, 0xd9, 0x01, 0xff, 0x9c, 0x23, 0xec, 0x73, 0x4e, 0x1f, 0xec, 0x37, + 0xea, 0x6d, 0x51, 0x86, 0x25, 0x54, 0xbf, 0x02, 0xf5, 0x25, 0x87, 0xf8, 0xa1, 0xed, 0xf6, 0xd0, + 0x73, 0x30, 0x4b, 0xfa, 0x86, 0xed, 0x60, 0x62, 0x12, 0x7b, 0x87, 0xf8, 0xc1, 0x82, 0xf6, 0xe8, + 0xc8, 0xe3, 0x93, 0x4d, 0x74, 0xb0, 0xdf, 0x98, 0x5d, 0x4e, 0x40, 0x70, 0xaa, 0xa6, 0xfe, 0x29, + 0x0d, 0xa6, 0x96, 0x86, 0x96, 0x1d, 0xf2, 0x9e, 0xa0, 0x00, 0xa6, 0x0c, 0xfa, 0x73, 0xcd, 0x73, + 0x6c, 0x73, 0x4f, 0x2c, 0x88, 0x97, 0x4b, 0x7d, 0x82, 0xa5, 0x18, 0x4f, 0xf3, 0xcc, 0xc1, 0x7e, + 0x63, 0x4a, 0x29, 0xc0, 0x2a, 0x15, 0x7d, 0x0b, 0x54, 0x18, 0xfa, 0x10, 0x4c, 0xf3, 0xf9, 0x58, + 0x35, 0x06, 0x98, 0x6c, 0x8a, 0x4e, 0xbc, 0x4b, 0x99, 0xde, 0x88, 0xd2, 0xe2, 0xcd, 0x8d, 0x8f, + 0x11, 0x33, 0xc4, 0x64, 0x93, 0xf8, 0xc4, 0x35, 0x09, 0xff, 0xd2, 0x2d, 0xa5, 0x31, 0x4e, 0xa0, + 0xd2, 0x7f, 0xa0, 0xc1, 0xdc, 0xd2, 0x8e, 0x61, 0x3b, 0xc6, 0x86, 0xed, 0xd8, 0xe1, 0xde, 0xeb, + 0x9e, 0x4b, 0x8e, 0xf1, 0xa9, 0xd7, 0xe1, 0x81, 0xa1, 0x6b, 0xf0, 0x76, 0x0e, 0x59, 0xe5, 0x1f, + 0xf7, 0xd6, 0xde, 0x80, 0xd0, 0x45, 0x4a, 0xa7, 0xfa, 0xa1, 0x83, 0xfd, 0xc6, 0x03, 0xeb, 0xf9, + 0x55, 0x70, 0x51, 0x5b, 0x84, 0xe1, 0x82, 0x02, 0x7a, 0xd5, 0x73, 0x86, 0x7d, 0x81, 0x75, 0x84, + 0x61, 0xbd, 0x78, 0xb0, 0xdf, 0xb8, 0xb0, 0x9e, 0x5b, 0x03, 0x17, 0xb4, 0xd4, 0xbf, 0x5b, 0x83, + 0xe9, 0xa6, 0x61, 0x6e, 0x0f, 0x07, 0xcd, 0xa1, 0xb9, 0x4d, 0x42, 0xf4, 0x51, 0xa8, 0x53, 0x1e, + 0x67, 0x19, 0xa1, 0x21, 0x66, 0xf2, 0x27, 0x0b, 0x17, 0x2a, 0xfb, 0x8a, 0xb4, 0x76, 0x3c, 0xb7, + 0xab, 0x24, 0x34, 0x9a, 0x48, 0xcc, 0x09, 0xc4, 0x65, 0x58, 0x62, 0x45, 0x3d, 0x18, 0x0d, 0x06, + 0xc4, 0x14, 0xdb, 0x60, 0xb9, 0xd4, 0x62, 0x51, 0xbb, 0xdc, 0x1d, 0x10, 0x33, 0xfe, 0x0c, 0xf4, + 0x17, 0x66, 0x04, 0x90, 0x07, 0xe3, 0x41, 0x68, 0x84, 0xc3, 0x80, 0x6d, 0x8e, 0xa9, 0xa7, 0xae, + 0x56, 0x27, 0xc5, 0xd0, 0x35, 0x67, 0x05, 0xb1, 0x71, 0xfe, 0x1b, 0x0b, 0x32, 0xfa, 0xf7, 0x35, + 0x98, 0x53, 0xab, 0xaf, 0xd8, 0x41, 0x88, 0x7e, 0x2e, 0x33, 0xa1, 0x8b, 0xc7, 0x9b, 0x50, 0xda, + 0x9a, 0x4d, 0xe7, 0x9c, 0x20, 0x57, 0x8f, 0x4a, 0x94, 0xc9, 0xdc, 0x84, 0x31, 0x3b, 0x24, 0x7d, + 0xbe, 0xb0, 0xca, 0x72, 0x3f, 0xb5, 0xcf, 0xcd, 0x19, 0x41, 0x6d, 0xac, 0x43, 0xf1, 0x62, 0x8e, + 0x5e, 0xff, 0x28, 0x9c, 0x53, 0x6b, 0xad, 0xf9, 0xde, 0x8e, 0x6d, 0x11, 0x9f, 0x6e, 0x86, 0x70, + 0x6f, 0x90, 0xd9, 0x0c, 0x74, 0x71, 0x61, 0x06, 0x41, 0xef, 0x81, 0x71, 0x9f, 0xf4, 0x6c, 0xcf, + 0x65, 0x1f, 0x7c, 0x32, 0x9e, 0x3c, 0xcc, 0x4a, 0xb1, 0x80, 0xea, 0xff, 0xa9, 0x96, 0x9c, 0x3c, + 0xfa, 0x21, 0xd1, 0x6d, 0xa8, 0x0f, 0x04, 0x29, 0x31, 0x79, 0x9d, 0xca, 0x23, 0x8c, 0xfa, 0x1e, + 0xcf, 0x6b, 0x54, 0x82, 0x25, 0x31, 0x64, 0xc3, 0x6c, 0xf4, 0x7f, 0xab, 0x02, 0xd7, 0x66, 0x3c, + 0x75, 0x2d, 0x81, 0x08, 0xa7, 0x10, 0xa3, 0x5b, 0x30, 0x19, 0x10, 0xd3, 0x27, 0x94, 0x2f, 0x89, + 0x95, 0x9a, 0xcb, 0xbc, 0xba, 0x51, 0x25, 0xc1, 0xbc, 0xe6, 0x45, 0xf7, 0x27, 0x25, 0x00, 0xc7, + 0x88, 0xd0, 0xc3, 0x30, 0x1a, 0x10, 0x62, 0x2d, 0x8c, 0xb2, 0x49, 0xaf, 0xb3, 0xad, 0x41, 0x88, + 0x85, 0x59, 0xa9, 0xfe, 0xb5, 0x51, 0x40, 0xd9, 0x85, 0xad, 0x8e, 0x9a, 0x97, 0x88, 0x49, 0xaf, + 0x32, 0x6a, 0xb1, 0x47, 0x52, 0x88, 0xd1, 0x9b, 0x30, 0xe3, 0x18, 0x41, 0x78, 0x73, 0x40, 0x05, + 0x95, 0x68, 0x75, 0x4c, 0x3d, 0xd5, 0x2c, 0xf5, 0x79, 0x57, 0x54, 0x4c, 0xcd, 0xf9, 0x83, 0xfd, + 0xc6, 0x4c, 0xa2, 0x08, 0x27, 0x69, 0xa1, 0x6d, 0x98, 0xa4, 0x05, 0xcb, 0xbe, 0xef, 0xf9, 0x62, + 0xca, 0x5f, 0x2c, 0x4d, 0x98, 0x61, 0x69, 0xce, 0xd0, 0x2f, 0x21, 0x7f, 0xe2, 0x18, 0x3f, 0xfa, + 0x59, 0x40, 0xde, 0x46, 0x40, 0xfc, 0x1d, 0x62, 0x5d, 0xe5, 0x72, 0x19, 0x1d, 0x2e, 0xfd, 0x2e, + 0x23, 0xcd, 0x8b, 0xe2, 0x1b, 0xa2, 0x9b, 0x99, 0x1a, 0x38, 0xa7, 0x15, 0xda, 0x06, 0x24, 0x65, + 0x3b, 0xf9, 0xd9, 0x17, 0xc6, 0x8e, 0xbf, 0x68, 0x2e, 0x50, 0x62, 0x57, 0x33, 0x28, 0x70, 0x0e, + 0x5a, 0xfd, 0xf7, 0x6b, 0x30, 0xc5, 0x17, 0xc9, 0xb2, 0x1b, 0xfa, 0x7b, 0xa7, 0x70, 0x34, 0x6c, + 0x26, 0x8e, 0x86, 0x76, 0x85, 0xad, 0xce, 0x7a, 0x5c, 0x78, 0x32, 0xb8, 0xa9, 0x93, 0xe1, 0x4a, + 0x65, 0x4a, 0x87, 0x1f, 0x0c, 0xff, 0x52, 0x83, 0x33, 0x4a, 0xed, 0x53, 0x38, 0x17, 0x48, 0xf2, + 0x5c, 0x78, 0xb9, 0xea, 0x00, 0x0b, 0x8e, 0x05, 0x33, 0x31, 0x2e, 0xc6, 0xb2, 0x9f, 0x02, 0xd8, + 0x60, 0x3c, 0xe5, 0x46, 0x2c, 0x24, 0xc9, 0xaf, 0xde, 0x94, 0x10, 0xac, 0xd4, 0x92, 0xcc, 0xaa, + 0x96, 0xcb, 0xac, 0xfe, 0x74, 0x04, 0xe6, 0x33, 0x73, 0x9d, 0x65, 0x20, 0xda, 0x8f, 0x8a, 0x81, + 0xd4, 0x7e, 0x24, 0x0c, 0x64, 0xa4, 0x14, 0x03, 0x79, 0x1c, 0xea, 0x74, 0x4e, 0xd9, 0xb7, 0xe1, + 0x47, 0x03, 0x53, 0x19, 0xba, 0xa2, 0x0c, 0x4b, 0x28, 0xf2, 0x01, 0xf5, 0xed, 0x1e, 0x6f, 0xd6, + 0x0d, 0x0d, 0x3f, 0xbc, 0x65, 0xf7, 0x89, 0x60, 0x35, 0xff, 0xff, 0xf1, 0x56, 0x2a, 0x6d, 0xc1, + 0x39, 0xce, 0x6a, 0x06, 0x13, 0xce, 0xc1, 0xae, 0x7f, 0xab, 0x06, 0xd0, 0x5a, 0xc2, 0x5e, 0xc8, + 0x3b, 0xfb, 0x12, 0x8c, 0x0d, 0xb6, 0x8c, 0x20, 0x5a, 0x45, 0x4f, 0x44, 0x4b, 0x70, 0x8d, 0x16, + 0xde, 0xdd, 0x6f, 0x2c, 0xb4, 0x7c, 0x62, 0x11, 0x37, 0xb4, 0x0d, 0x27, 0x88, 0x1a, 0x31, 0x18, + 0xe6, 0xed, 0xe8, 0x18, 0xe8, 0x34, 0x76, 0x5c, 0x3b, 0xb4, 0x19, 0x94, 0x8d, 0x61, 0xa4, 0xdc, + 0x18, 0x56, 0x32, 0x98, 0x70, 0x0e, 0xf6, 0x88, 0x66, 0xcb, 0xeb, 0x0f, 0x1c, 0x22, 0x69, 0xd6, + 0xca, 0xd3, 0x4c, 0x62, 0xc2, 0x39, 0xd8, 0xf5, 0x7f, 0xa4, 0xc1, 0x48, 0x0b, 0x77, 0xd0, 0x7b, + 0x13, 0xaa, 0xc9, 0x03, 0xaa, 0x6a, 0x72, 0x77, 0xbf, 0x31, 0xd1, 0xc2, 0x1d, 0x45, 0x4b, 0xf9, + 0x0d, 0x0d, 0xe6, 0x4d, 0xcf, 0x0d, 0x0d, 0xda, 0x0b, 0xcc, 0xcf, 0xf1, 0x88, 0x5f, 0x94, 0x93, + 0xca, 0x5b, 0x29, 0x6c, 0xcd, 0x07, 0x45, 0x0f, 0xe6, 0xd3, 0x90, 0x00, 0x67, 0x49, 0xeb, 0xff, + 0x4a, 0x83, 0xe9, 0x96, 0xe3, 0x0d, 0xad, 0x35, 0xdf, 0xdb, 0xb4, 0x1d, 0xf2, 0x36, 0xd1, 0x45, + 0xd4, 0x2e, 0x17, 0x9d, 0x38, 0x4c, 0x35, 0x50, 0x2b, 0xbe, 0x5d, 0x54, 0x03, 0xb5, 0xcf, 0x05, + 0x67, 0xc0, 0x97, 0x26, 0x92, 0x43, 0x63, 0xa7, 0xc0, 0xe3, 0x50, 0x37, 0x8d, 0xe6, 0xd0, 0xb5, + 0x1c, 0xa9, 0x1b, 0xd0, 0x6e, 0xb6, 0x96, 0x78, 0x19, 0x96, 0x50, 0xf4, 0x26, 0x40, 0x6c, 0xdd, + 0x11, 0x1f, 0xe2, 0x6a, 0x45, 0x93, 0x52, 0x97, 0x84, 0xa1, 0xed, 0xf6, 0x82, 0xf8, 0xeb, 0xc7, + 0x30, 0xac, 0x90, 0x43, 0xbf, 0x08, 0x33, 0x62, 0x9a, 0x3b, 0x7d, 0xa3, 0x27, 0x34, 0xe9, 0xb2, + 0x73, 0xb5, 0xaa, 0x60, 0x6a, 0x9e, 0x17, 0x94, 0x67, 0xd4, 0xd2, 0x00, 0x27, 0xc9, 0xa1, 0x3b, + 0x30, 0xdd, 0x57, 0xcd, 0x03, 0xa3, 0x15, 0x4e, 0x6b, 0xc5, 0x56, 0xd0, 0x3c, 0x27, 0xa8, 0x4f, + 0x27, 0x2c, 0x0b, 0x09, 0x5a, 0x39, 0x2a, 0xce, 0xd8, 0xfd, 0x52, 0x71, 0x36, 0x61, 0x82, 0x6b, + 0x79, 0xc1, 0xc2, 0x38, 0x1b, 0xe1, 0xcf, 0x94, 0x1a, 0x21, 0xd7, 0x18, 0x63, 0x9b, 0x25, 0xff, + 0x1d, 0xe0, 0x08, 0x39, 0xba, 0x0d, 0xd3, 0xf4, 0xfc, 0xea, 0x12, 0x87, 0x98, 0xa1, 0xe7, 0x2f, + 0x4c, 0x54, 0x30, 0x09, 0x76, 0x15, 0x44, 0xdc, 0x50, 0xa4, 0x96, 0xe0, 0x04, 0x21, 0xa9, 0x06, + 0xd7, 0x0b, 0xd5, 0xe0, 0x1d, 0x98, 0xda, 0x51, 0x2c, 0x36, 0x93, 0x6c, 0x1a, 0x5e, 0x2a, 0xd5, + 0xb3, 0xd8, 0x7e, 0xd3, 0x3c, 0x2b, 0x28, 0x4d, 0xa9, 0xb6, 0x1e, 0x95, 0x90, 0xbe, 0x5f, 0x87, + 0xf9, 0x96, 0x33, 0x0c, 0x42, 0xe2, 0x2f, 0x09, 0xb3, 0x3b, 0xf1, 0xd1, 0xa7, 0x34, 0xb8, 0xc0, + 0xfe, 0x6d, 0x7b, 0xb7, 0xdd, 0x36, 0x71, 0x8c, 0xbd, 0xa5, 0x4d, 0x5a, 0xc3, 0xb2, 0x4e, 0xc6, + 0x88, 0xda, 0x43, 0x21, 0x32, 0x31, 0xdb, 0x53, 0x37, 0x17, 0x23, 0x2e, 0xa0, 0x84, 0x3e, 0xa7, + 0xc1, 0x83, 0x39, 0xa0, 0x36, 0x71, 0x48, 0x18, 0x9d, 0x98, 0x27, 0xed, 0xc7, 0x23, 0x07, 0xfb, + 0x8d, 0x07, 0xbb, 0x45, 0x48, 0x71, 0x31, 0x3d, 0x7a, 0x1c, 0x5e, 0xcc, 0x81, 0x5e, 0x31, 0x6c, + 0x67, 0xe8, 0x47, 0x42, 0xc3, 0x49, 0xbb, 0x73, 0xe9, 0x60, 0xbf, 0x71, 0xb1, 0x5b, 0x88, 0x15, + 0x1f, 0x42, 0x11, 0x7d, 0x02, 0xce, 0x4b, 0xe8, 0xba, 0xeb, 0x12, 0x62, 0x11, 0x8b, 0xc9, 0x12, + 0xa3, 0xa5, 0xba, 0xf2, 0xe0, 0xc1, 0x7e, 0xe3, 0x7c, 0x37, 0x0f, 0x21, 0xce, 0xa7, 0x83, 0x7a, + 0xf0, 0x48, 0x0c, 0x08, 0x6d, 0xc7, 0xbe, 0xc3, 0xa5, 0x9c, 0x2d, 0x9f, 0x04, 0x5b, 0x9e, 0x63, + 0x31, 0x7e, 0xa1, 0x35, 0xdf, 0x79, 0xb0, 0xdf, 0x78, 0xa4, 0x7b, 0x58, 0x45, 0x7c, 0x38, 0x1e, + 0x64, 0xc1, 0x74, 0x60, 0x1a, 0x6e, 0xc7, 0x0d, 0x89, 0xbf, 0x63, 0x38, 0x0b, 0xe3, 0xa5, 0x06, + 0xc8, 0xf7, 0xa8, 0x82, 0x07, 0x27, 0xb0, 0xa2, 0x67, 0xa0, 0x4e, 0x76, 0x07, 0x86, 0x6b, 0x11, + 0xce, 0x18, 0x26, 0x9b, 0x0f, 0xd3, 0x23, 0x69, 0x59, 0x94, 0xdd, 0xdd, 0x6f, 0x4c, 0x47, 0xff, + 0xaf, 0x7a, 0x16, 0xc1, 0xb2, 0x36, 0xfa, 0x38, 0x9c, 0xeb, 0x1b, 0xbb, 0x37, 0x3c, 0x8b, 0x30, + 0x3e, 0x17, 0x44, 0x42, 0x5d, 0xbd, 0x54, 0x3f, 0x17, 0x0e, 0xf6, 0x1b, 0xe7, 0x56, 0x73, 0xf0, + 0xe1, 0x5c, 0x2a, 0xf4, 0x33, 0xf4, 0x8d, 0xdd, 0xab, 0xbe, 0x61, 0x92, 0xcd, 0xa1, 0x73, 0x8b, + 0xf8, 0x7d, 0xdb, 0xe5, 0x72, 0x33, 0x31, 0x3d, 0xd7, 0xa2, 0xbc, 0x44, 0x7b, 0x7c, 0x8c, 0x7f, + 0x86, 0xd5, 0xc3, 0x2a, 0xe2, 0xc3, 0xf1, 0xa0, 0xf7, 0xc3, 0xb4, 0xdd, 0x73, 0x3d, 0x9f, 0xdc, + 0x32, 0x6c, 0x37, 0x0c, 0x16, 0x80, 0x59, 0x95, 0xd9, 0xb4, 0x76, 0x94, 0x72, 0x9c, 0xa8, 0xa5, + 0xef, 0x8f, 0xc0, 0x64, 0xcb, 0x73, 0x2d, 0x9b, 0x89, 0xec, 0x4f, 0x26, 0xec, 0x81, 0x8f, 0xa8, + 0x8c, 0xf0, 0xee, 0x7e, 0x63, 0x46, 0x56, 0x54, 0x38, 0xe3, 0xb3, 0x52, 0x19, 0xe7, 0xea, 0xdf, + 0x3b, 0x93, 0x4a, 0xf4, 0xdd, 0xfd, 0xc6, 0x19, 0xd9, 0x2c, 0xa9, 0x57, 0xa3, 0x1d, 0x2e, 0x6b, + 0xdf, 0xf2, 0x0d, 0x37, 0xb0, 0x2b, 0xc8, 0xf7, 0x52, 0x8b, 0x5a, 0xc9, 0x60, 0xc3, 0x39, 0x14, + 0xd0, 0xc7, 0x60, 0x96, 0x96, 0xae, 0x0f, 0x2c, 0x23, 0x24, 0xca, 0x9e, 0x3c, 0x91, 0x7c, 0x2f, + 0x68, 0xce, 0xae, 0x24, 0x30, 0xe1, 0x14, 0x66, 0x6e, 0x3f, 0x35, 0x02, 0xcf, 0x65, 0xdb, 0x2d, + 0x61, 0x3f, 0xa5, 0xa5, 0x58, 0x40, 0xd1, 0x13, 0x30, 0xd1, 0x27, 0x41, 0x60, 0xf4, 0x08, 0xdb, + 0x3f, 0x93, 0xf1, 0x31, 0xb9, 0xca, 0x8b, 0x71, 0x04, 0x47, 0xef, 0x83, 0x31, 0xd3, 0xb3, 0x48, + 0xb0, 0x30, 0xc1, 0xbe, 0x30, 0xd5, 0x34, 0xc6, 0x5a, 0xb4, 0xe0, 0xee, 0x7e, 0x63, 0x92, 0xe9, + 0x9c, 0xf4, 0x17, 0xe6, 0x95, 0xf4, 0xdf, 0xa4, 0xa2, 0x6b, 0x4a, 0x58, 0x2f, 0xba, 0x04, 0xe1, + 0x9f, 0x95, 0xa9, 0x17, 0xa7, 0x67, 0x41, 0xd5, 0xbf, 0x48, 0x15, 0x07, 0xcf, 0x0d, 0x7d, 0xcf, + 0x59, 0x73, 0x0c, 0x97, 0xa0, 0xcf, 0x68, 0x30, 0xb7, 0x65, 0xf7, 0xb6, 0xd4, 0xbb, 0x1b, 0x71, + 0xb0, 0x95, 0x93, 0xf1, 0xaf, 0xa5, 0x90, 0x35, 0xcf, 0x1d, 0xec, 0x37, 0xe6, 0xd2, 0xa5, 0x38, + 0x43, 0x54, 0xff, 0xf5, 0x1a, 0x9c, 0x13, 0x5d, 0x73, 0xe8, 0x51, 0x33, 0x70, 0xbc, 0xbd, 0x3e, + 0x71, 0x4f, 0xe3, 0x9e, 0x25, 0x92, 0x49, 0x6a, 0x85, 0x32, 0x49, 0x3f, 0xf3, 0x89, 0x46, 0xca, + 0x7c, 0x22, 0xb9, 0x92, 0x8f, 0xf8, 0x4c, 0x7f, 0xa6, 0xc1, 0x42, 0xde, 0x5c, 0x9c, 0x82, 0x2e, + 0xe4, 0x26, 0x75, 0xa1, 0x4e, 0x69, 0xf5, 0x36, 0xdd, 0xf7, 0x02, 0x9d, 0xe8, 0xcf, 0x6a, 0x70, + 0x21, 0xae, 0xde, 0x71, 0x83, 0xd0, 0x70, 0x1c, 0x6e, 0xd4, 0xb8, 0xff, 0x1f, 0xfe, 0x8d, 0x84, + 0x52, 0x7b, 0xb3, 0xe2, 0x58, 0xd5, 0xce, 0x17, 0x1a, 0x54, 0xf7, 0x52, 0x06, 0xd5, 0x57, 0xee, + 0x25, 0xd1, 0xc3, 0x6d, 0xab, 0xff, 0x59, 0x83, 0x8b, 0xf9, 0x0d, 0x4f, 0x61, 0x5d, 0x0d, 0x92, + 0xeb, 0xea, 0xfa, 0x3d, 0x1c, 0x76, 0xc1, 0xca, 0xfa, 0x66, 0xad, 0x68, 0xb8, 0x4c, 0xef, 0xde, + 0x84, 0x33, 0x54, 0x19, 0x0a, 0x42, 0x61, 0x03, 0x3c, 0xd9, 0x7d, 0x78, 0x64, 0x31, 0x3a, 0x83, + 0x93, 0x38, 0x70, 0x1a, 0x29, 0xba, 0x01, 0x13, 0x54, 0x01, 0xa2, 0xf8, 0x6b, 0xc7, 0xc7, 0x2f, + 0x8f, 0xa4, 0x2e, 0x6f, 0x8b, 0x23, 0x24, 0xe8, 0xe7, 0x60, 0xc6, 0x92, 0x9b, 0xea, 0x88, 0x8b, + 0xb0, 0x34, 0x56, 0x66, 0xae, 0x6d, 0xab, 0xad, 0x71, 0x12, 0x99, 0xfe, 0xbf, 0x34, 0x78, 0xf8, + 0xb0, 0xc5, 0x85, 0x7c, 0x00, 0x33, 0x92, 0x31, 0xb8, 0x3f, 0x44, 0x59, 0x83, 0xae, 0x14, 0x55, + 0xe2, 0x4d, 0x2a, 0x8b, 0x02, 0xac, 0x50, 0xc9, 0xb9, 0x6c, 0xab, 0xdd, 0xa7, 0xcb, 0x36, 0xfd, + 0xcf, 0x35, 0x95, 0x1d, 0xa9, 0x1f, 0xf7, 0x6d, 0xc7, 0x8e, 0xd4, 0xce, 0x17, 0x5a, 0xdb, 0xfe, + 0xa8, 0x06, 0x8f, 0xe6, 0x37, 0x51, 0x4e, 0xe0, 0x97, 0x61, 0x7c, 0xc0, 0xdd, 0x56, 0x46, 0xd8, + 0x09, 0xf9, 0x38, 0x65, 0x2e, 0xdc, 0xa7, 0xe4, 0xee, 0x7e, 0xe3, 0x62, 0x1e, 0xb7, 0x17, 0xde, + 0x28, 0xa2, 0x1d, 0xb2, 0x53, 0xe6, 0x06, 0x2e, 0x04, 0x3e, 0x7d, 0x4c, 0xfe, 0x62, 0x6c, 0x10, + 0xe7, 0xd8, 0x06, 0x86, 0x4f, 0x69, 0x30, 0x9b, 0x58, 0xd3, 0xc1, 0xc2, 0x18, 0x5b, 0xa5, 0xe5, + 0xee, 0x3b, 0x12, 0xbb, 0x25, 0x3e, 0xc0, 0x13, 0xc5, 0x01, 0x4e, 0x51, 0x4c, 0xb1, 0x5a, 0x75, + 0x5a, 0xdf, 0x7e, 0xac, 0x56, 0xed, 0x7d, 0x01, 0xab, 0xfd, 0x4a, 0xad, 0x68, 0xb8, 0x8c, 0xd5, + 0xee, 0xc2, 0x64, 0xe4, 0x44, 0x18, 0xb1, 0x8c, 0xab, 0x95, 0x3b, 0xc5, 0xf1, 0xc5, 0x77, 0xfb, + 0x51, 0x49, 0x80, 0x63, 0x62, 0xe8, 0x57, 0x34, 0x80, 0xf8, 0xd3, 0x88, 0x8d, 0xb5, 0x7e, 0x0f, + 0x27, 0x44, 0x91, 0x6f, 0x66, 0xe9, 0xbe, 0x56, 0xd6, 0x85, 0x42, 0x58, 0xff, 0xc6, 0x08, 0xa0, + 0x6c, 0xe7, 0xa9, 0xe0, 0xb9, 0x6d, 0xbb, 0x56, 0x5a, 0x37, 0xb8, 0x6e, 0xbb, 0x16, 0x66, 0x90, + 0x63, 0x88, 0xa6, 0x2f, 0xc0, 0x99, 0x9e, 0xe3, 0x6d, 0x18, 0x8e, 0xb3, 0x27, 0x3c, 0x13, 0x85, + 0x87, 0xdb, 0x59, 0x7a, 0x3c, 0x5d, 0x4d, 0x82, 0x70, 0xba, 0x2e, 0x1a, 0xc0, 0x9c, 0x4f, 0xb5, + 0x5a, 0xd3, 0x76, 0x98, 0x16, 0xe5, 0x0d, 0xc3, 0x92, 0x66, 0x13, 0x26, 0xe8, 0xe3, 0x14, 0x2e, + 0x9c, 0xc1, 0x8e, 0xde, 0x0d, 0x13, 0x03, 0xdf, 0xee, 0x1b, 0xfe, 0x1e, 0xd3, 0xd3, 0xea, 0xcd, + 0x29, 0x7a, 0xce, 0xad, 0xf1, 0x22, 0x1c, 0xc1, 0xd0, 0x2f, 0xc0, 0xa4, 0x63, 0x6f, 0x12, 0x73, + 0xcf, 0x74, 0x88, 0xb0, 0x73, 0xac, 0xdd, 0xa3, 0x45, 0xb3, 0x12, 0xe1, 0x15, 0x57, 0x89, 0xd1, + 0x4f, 0x1c, 0x53, 0xd4, 0x3f, 0x5b, 0x83, 0x87, 0x0e, 0x69, 0x89, 0x30, 0x5d, 0xd3, 0x62, 0x64, + 0xe2, 0xfb, 0xbd, 0x9f, 0x2f, 0x43, 0x51, 0x78, 0x77, 0xbf, 0xf1, 0xae, 0x43, 0x10, 0x74, 0xe9, + 0x02, 0x22, 0xbd, 0x3d, 0x1c, 0xa3, 0x41, 0x1d, 0x18, 0xb7, 0x62, 0x93, 0xde, 0x64, 0xf3, 0x49, + 0xca, 0x67, 0xb9, 0xd1, 0xed, 0xb8, 0xd8, 0x04, 0x02, 0xb4, 0x02, 0x13, 0xfc, 0xd6, 0x90, 0x08, + 0x9e, 0xfd, 0x14, 0xd3, 0x6f, 0x79, 0xd1, 0x71, 0x91, 0x45, 0x28, 0xf4, 0xff, 0xa9, 0xc1, 0x44, + 0xcb, 0xf3, 0x49, 0xfb, 0x46, 0x17, 0xdd, 0x81, 0x29, 0xc5, 0x2b, 0x59, 0xb0, 0xaf, 0xb2, 0xdb, + 0x99, 0xa1, 0x5c, 0x8a, 0xd1, 0x45, 0xfe, 0x8c, 0xb2, 0x00, 0xab, 0xc4, 0x90, 0x4f, 0x27, 0xfd, + 0xb6, 0x6f, 0x87, 0x94, 0x72, 0xa5, 0x9b, 0x28, 0x4e, 0x19, 0x47, 0xc8, 0xf8, 0x42, 0x90, 0x3f, + 0x71, 0x4c, 0x46, 0x5f, 0xa3, 0x3b, 0x37, 0xdd, 0x4f, 0xf4, 0x1c, 0x8c, 0xf6, 0x3d, 0x2b, 0xfa, + 0xf2, 0xef, 0x89, 0xf6, 0xe5, 0xaa, 0x67, 0xd1, 0xd9, 0xbd, 0x90, 0x6d, 0xc1, 0x0c, 0x65, 0xac, + 0x8d, 0x7e, 0x03, 0xe6, 0xd2, 0xf4, 0xd1, 0x73, 0x30, 0x6b, 0x7a, 0xfd, 0xbe, 0xe7, 0x76, 0x87, + 0x9b, 0x9b, 0xf6, 0x2e, 0x49, 0xb8, 0x9a, 0xb6, 0x12, 0x10, 0x9c, 0xaa, 0xa9, 0x7f, 0x59, 0x83, + 0x11, 0xfa, 0x65, 0x74, 0x18, 0xb7, 0xbc, 0xbe, 0x61, 0xbb, 0xa2, 0x57, 0xcc, 0x11, 0xb6, 0xcd, + 0x4a, 0xb0, 0x80, 0xa0, 0x37, 0x60, 0x32, 0x92, 0x78, 0xaa, 0x79, 0x3c, 0xb4, 0x6f, 0x74, 0xa5, + 0x7b, 0x98, 0xe4, 0xc1, 0x51, 0x49, 0x80, 0x63, 0x2a, 0xba, 0x01, 0xf3, 0xed, 0x1b, 0xdd, 0x8e, + 0x6b, 0x3a, 0x43, 0x8b, 0x2c, 0xef, 0xb2, 0x3f, 0x94, 0x09, 0xd8, 0xbc, 0x44, 0x0c, 0x94, 0x31, + 0x01, 0x51, 0x09, 0x47, 0x30, 0x5a, 0x8d, 0xf0, 0x16, 0xc2, 0x1f, 0x94, 0x55, 0x13, 0x48, 0x70, + 0x04, 0xd3, 0xff, 0xb8, 0x06, 0x53, 0x4a, 0x87, 0x50, 0x1f, 0x26, 0xf8, 0x78, 0x23, 0xb7, 0xac, + 0x2b, 0x65, 0xc7, 0x98, 0xec, 0x36, 0x27, 0xcf, 0xa7, 0x34, 0xc0, 0x11, 0x0d, 0x95, 0xa3, 0xd5, + 0x0e, 0xe1, 0x68, 0x8b, 0x00, 0xdc, 0xeb, 0x8c, 0xf9, 0x14, 0xf0, 0x6d, 0xc9, 0x0e, 0x8d, 0xae, + 0x2c, 0xc5, 0x4a, 0x0d, 0xf4, 0xb0, 0xe0, 0xfd, 0x8a, 0x63, 0x9a, 0xc2, 0xf7, 0x7b, 0x30, 0x76, + 0xc7, 0x73, 0x49, 0x20, 0xee, 0xa2, 0xee, 0xd5, 0x08, 0x27, 0xe9, 0xe1, 0xfe, 0x3a, 0x45, 0x8c, + 0x39, 0x7e, 0xfd, 0xb7, 0x34, 0x80, 0xb6, 0x11, 0x1a, 0xfc, 0xe2, 0xe4, 0x18, 0x4e, 0xbd, 0x0f, + 0x27, 0xce, 0xac, 0x7a, 0xc6, 0xcb, 0x71, 0x34, 0xb0, 0xef, 0x44, 0xe3, 0x97, 0x02, 0x31, 0xc7, + 0xde, 0xb5, 0xef, 0x10, 0xcc, 0xe0, 0xe8, 0xbd, 0x30, 0x49, 0x5c, 0xd3, 0xdf, 0x1b, 0x84, 0xc2, + 0x37, 0xaf, 0xce, 0x37, 0xe9, 0x72, 0x54, 0x88, 0x63, 0xb8, 0xfe, 0x24, 0x24, 0xd5, 0x9a, 0xa3, + 0x7b, 0xa9, 0xdf, 0xd5, 0x60, 0x6e, 0x79, 0x77, 0x60, 0xfb, 0xcc, 0xd1, 0x97, 0xf8, 0x54, 0x45, + 0x40, 0x4f, 0xc0, 0xc4, 0x0e, 0xff, 0x57, 0xb4, 0x94, 0x7a, 0x98, 0xa8, 0x81, 0x23, 0x38, 0xda, + 0x84, 0x59, 0xc2, 0x9a, 0x33, 0x31, 0xc0, 0x08, 0xcb, 0x78, 0x2e, 0x70, 0x47, 0xf2, 0x04, 0x16, + 0x9c, 0xc2, 0x8a, 0xba, 0x30, 0x6b, 0x3a, 0x46, 0x10, 0xd8, 0x9b, 0xb6, 0x19, 0xfb, 0xb3, 0x4c, + 0x36, 0xdf, 0xcb, 0x38, 0x43, 0x02, 0x72, 0x77, 0xbf, 0x71, 0x5e, 0xf4, 0x33, 0x09, 0xc0, 0x29, + 0x14, 0xfa, 0x5b, 0x35, 0x98, 0x59, 0xde, 0x1d, 0x78, 0xc1, 0xd0, 0x27, 0xac, 0xea, 0x29, 0x68, + 0x37, 0x4f, 0xc0, 0xc4, 0x96, 0xe1, 0x5a, 0x0e, 0xf1, 0xc5, 0xca, 0x90, 0x73, 0x7b, 0x8d, 0x17, + 0xe3, 0x08, 0x8e, 0x3e, 0x0e, 0x10, 0x98, 0x5b, 0xc4, 0x1a, 0xb2, 0x23, 0x86, 0x2b, 0xb8, 0x2b, + 0xa5, 0x16, 0x78, 0x62, 0x90, 0x5d, 0x89, 0x53, 0xec, 0x3b, 0xf9, 0x1b, 0x2b, 0xf4, 0xf4, 0x3f, + 0xd6, 0x60, 0x3e, 0xd1, 0xee, 0x14, 0x64, 0xf6, 0x5e, 0x52, 0x66, 0x6f, 0x56, 0x1f, 0x6c, 0x81, + 0xa8, 0xfe, 0xd9, 0x1a, 0x3c, 0x50, 0x30, 0x29, 0x99, 0x4b, 0x61, 0xed, 0xb4, 0x2e, 0x85, 0x77, + 0x60, 0x2a, 0xf4, 0x1c, 0xe1, 0x79, 0x15, 0xcd, 0x41, 0xb9, 0x2b, 0xdf, 0x5b, 0x12, 0x4f, 0x7c, + 0xe5, 0x1b, 0x97, 0x05, 0x58, 0x25, 0xa4, 0xff, 0x9e, 0x06, 0x93, 0xd2, 0x3e, 0x70, 0x0c, 0x0f, + 0xed, 0x53, 0xf4, 0x75, 0x3e, 0xfe, 0x8b, 0x95, 0x7f, 0x52, 0x83, 0x0b, 0x12, 0x77, 0x24, 0xcc, + 0x75, 0x43, 0xca, 0x3b, 0x8e, 0xd6, 0x2f, 0x1e, 0x16, 0x7c, 0x52, 0xe1, 0xd5, 0x0a, 0x27, 0xa7, + 0x07, 0xdb, 0xd0, 0x1f, 0x78, 0x41, 0xc4, 0xae, 0xf9, 0xc1, 0xc6, 0x8b, 0x70, 0x04, 0x43, 0x37, + 0x60, 0x2c, 0xa0, 0xf4, 0x84, 0xe2, 0x70, 0xc2, 0xd9, 0x60, 0x27, 0x0e, 0xeb, 0x2f, 0xe6, 0x68, + 0xd0, 0x9b, 0xaa, 0xbe, 0xc8, 0x95, 0xf7, 0x9f, 0x3d, 0xd9, 0x62, 0x60, 0x0f, 0xf1, 0x16, 0xe9, + 0x48, 0xac, 0x68, 0x46, 0x72, 0xdc, 0xc1, 0xf3, 0x54, 0x46, 0x7d, 0x05, 0xe6, 0xc4, 0xbd, 0x32, + 0x5f, 0x36, 0xae, 0x49, 0xd0, 0x33, 0x89, 0x95, 0xf1, 0x58, 0xea, 0xae, 0xee, 0x5c, 0xba, 0x7e, + 0xbc, 0x62, 0xf4, 0x00, 0xea, 0x57, 0x45, 0x27, 0xd1, 0x45, 0xa8, 0xd9, 0xd1, 0xb7, 0x00, 0x81, + 0xa3, 0xd6, 0x69, 0xe3, 0x9a, 0x6d, 0xc9, 0xf3, 0xaa, 0x56, 0x78, 0xaa, 0x2a, 0x47, 0xd3, 0xc8, + 0xe1, 0x47, 0x93, 0xfe, 0xef, 0x6b, 0x70, 0x2e, 0xa2, 0x1a, 0x8d, 0xb1, 0x2d, 0x2e, 0x3a, 0x8e, + 0x38, 0xbb, 0x8f, 0xd6, 0x37, 0x6f, 0xc2, 0x28, 0xe3, 0x81, 0xa5, 0x2e, 0x40, 0x24, 0x42, 0xda, + 0x1d, 0xcc, 0x10, 0xa1, 0x5f, 0x80, 0x71, 0xc7, 0xd8, 0x20, 0x4e, 0xe4, 0xd3, 0x53, 0x4e, 0x3d, + 0xcf, 0x1b, 0x2f, 0xb7, 0x1c, 0x05, 0xdc, 0x2d, 0x57, 0x5a, 0xc5, 0x79, 0x21, 0x16, 0x44, 0x2f, + 0x3e, 0x0b, 0x53, 0x4a, 0x35, 0x34, 0x07, 0x23, 0xdb, 0x84, 0x5f, 0x81, 0x4d, 0x62, 0xfa, 0x2f, + 0x3a, 0x07, 0x63, 0x3b, 0x86, 0x33, 0x14, 0x73, 0x82, 0xf9, 0x8f, 0xe7, 0x6a, 0xcf, 0x68, 0xfa, + 0x37, 0x34, 0x98, 0xba, 0x66, 0x6f, 0x10, 0x9f, 0xdf, 0x0e, 0x33, 0x69, 0x35, 0xf1, 0x66, 0x70, + 0x2a, 0xef, 0xbd, 0x20, 0xda, 0x83, 0x49, 0x71, 0xda, 0x48, 0x2f, 0xc2, 0x6b, 0x25, 0xef, 0xda, + 0x24, 0x6d, 0xc1, 0xc5, 0xd5, 0xb7, 0x0e, 0x11, 0x09, 0x1c, 0x53, 0xd3, 0xdf, 0x84, 0xb3, 0x39, + 0x8d, 0x50, 0x83, 0x6d, 0x60, 0x3f, 0x14, 0x0b, 0x23, 0xda, 0x91, 0x7e, 0x88, 0x79, 0x39, 0x7a, + 0x10, 0x46, 0x88, 0x1b, 0x79, 0x1d, 0x4f, 0x1c, 0xec, 0x37, 0x46, 0x96, 0x5d, 0x0b, 0xd3, 0x32, + 0xca, 0xa8, 0x1c, 0x2f, 0x21, 0x99, 0x30, 0x46, 0xb5, 0x22, 0xca, 0xb0, 0x84, 0xea, 0x5f, 0xd5, + 0x20, 0x73, 0x11, 0x88, 0x3e, 0xa7, 0xc1, 0xdc, 0x66, 0x6a, 0xff, 0x54, 0xba, 0x80, 0x4c, 0x6f, + 0xc6, 0xe6, 0x82, 0x98, 0x91, 0xcc, 0xb6, 0xc6, 0x19, 0xc2, 0xfa, 0xdf, 0x1b, 0x85, 0x47, 0xae, + 0x79, 0xbe, 0x7d, 0xc7, 0x73, 0x43, 0xc3, 0x59, 0xf3, 0xac, 0xd8, 0x13, 0x48, 0xf0, 0xe5, 0x5f, + 0xd1, 0xe0, 0x01, 0x73, 0x30, 0xe4, 0xae, 0xac, 0x91, 0x83, 0xc6, 0x1a, 0xf1, 0x6d, 0xaf, 0xac, + 0x43, 0x10, 0x7b, 0xe2, 0xd6, 0x5a, 0x5b, 0xcf, 0x43, 0x89, 0x8b, 0x68, 0x31, 0xbf, 0x24, 0xcb, + 0xbb, 0xed, 0xb2, 0xce, 0x75, 0x43, 0x36, 0x9d, 0x77, 0xe2, 0xaf, 0x50, 0xd2, 0x2f, 0xa9, 0x9d, + 0x8b, 0x11, 0x17, 0x50, 0x42, 0x9f, 0x80, 0xf3, 0x36, 0xef, 0x1c, 0x26, 0x86, 0x65, 0xbb, 0x24, + 0x08, 0x98, 0x77, 0x4e, 0x15, 0xc7, 0x9b, 0x4e, 0x1e, 0x42, 0x9c, 0x4f, 0x07, 0xfd, 0x3c, 0x40, + 0xb0, 0xe7, 0x9a, 0x62, 0xfe, 0xc7, 0x4a, 0x51, 0xe5, 0xa2, 0xa0, 0xc4, 0x82, 0x15, 0x8c, 0x54, + 0x09, 0x09, 0xe5, 0xaa, 0x1c, 0x67, 0x4e, 0x3c, 0x4c, 0x09, 0x89, 0xd7, 0x50, 0x0c, 0xd7, 0x7f, + 0x47, 0x83, 0x09, 0xf1, 0xf2, 0x15, 0xbd, 0x27, 0xa5, 0x8b, 0x4b, 0xee, 0x93, 0xd2, 0xc7, 0xef, + 0xb0, 0xeb, 0x14, 0x61, 0x89, 0x11, 0xd2, 0x44, 0x39, 0x55, 0x4e, 0x50, 0x8e, 0xed, 0x3a, 0x89, + 0x6b, 0x95, 0xc8, 0xd6, 0xa3, 0x50, 0xa3, 0xfb, 0x71, 0x3e, 0xd3, 0xea, 0x18, 0x32, 0xc3, 0x29, + 0xfa, 0x2b, 0xfc, 0xb3, 0x69, 0x60, 0xcf, 0x9c, 0x97, 0xd6, 0x3a, 0x5d, 0xe2, 0xef, 0xc8, 0x5d, + 0x48, 0xb9, 0x46, 0xec, 0x9c, 0x2a, 0x7a, 0x51, 0x85, 0x6b, 0x5c, 0x4f, 0x21, 0x8b, 0xb9, 0x46, + 0x1a, 0x82, 0x33, 0x84, 0xd1, 0x67, 0x35, 0x98, 0x33, 0x92, 0xcf, 0x9c, 0x23, 0xc6, 0x5e, 0xee, + 0x65, 0x4e, 0xea, 0xcd, 0x74, 0xdc, 0x99, 0x14, 0x20, 0xc0, 0x19, 0xba, 0xe8, 0xfd, 0x30, 0x6d, + 0x0c, 0xec, 0xa5, 0xa1, 0x65, 0x53, 0x61, 0x27, 0x7a, 0xf1, 0xca, 0x24, 0xf0, 0xa5, 0xb5, 0x8e, + 0x2c, 0xc7, 0x89, 0x5a, 0xf2, 0x79, 0xb2, 0x98, 0xca, 0xd1, 0xaa, 0xcf, 0x93, 0xc5, 0x2c, 0xc6, + 0xcf, 0x93, 0xc5, 0xe4, 0xa9, 0x54, 0xd0, 0x87, 0xe1, 0x41, 0x7e, 0x26, 0x36, 0x8d, 0xc0, 0x36, + 0x97, 0x86, 0xe1, 0x16, 0x71, 0xc3, 0x48, 0xcb, 0xe5, 0xb6, 0x61, 0xe6, 0xa5, 0xb8, 0x5c, 0x54, + 0x09, 0x17, 0xb7, 0x47, 0x1e, 0x80, 0x67, 0x5b, 0xa6, 0x18, 0x10, 0x37, 0x20, 0x97, 0x53, 0x29, + 0x6e, 0x76, 0xda, 0x2d, 0x31, 0x1e, 0xc6, 0x2b, 0xe2, 0xdf, 0x58, 0x21, 0x81, 0xbe, 0xa8, 0xc1, + 0x8c, 0x58, 0xe8, 0x82, 0xe8, 0x04, 0x5b, 0x02, 0x1f, 0x2e, 0xbd, 0x20, 0x53, 0xab, 0x7e, 0x11, + 0xab, 0xd8, 0xb9, 0x54, 0x23, 0x9d, 0xa7, 0x13, 0x30, 0x9c, 0xec, 0x08, 0xfa, 0x82, 0x06, 0xe7, + 0x02, 0xe2, 0xef, 0xd8, 0x26, 0x59, 0x32, 0x4d, 0x6f, 0xe8, 0x46, 0xdf, 0xb9, 0x5e, 0xe1, 0xa5, + 0x68, 0x37, 0x07, 0x21, 0x77, 0xd9, 0xcb, 0x83, 0xe0, 0xdc, 0x0e, 0xa0, 0x5f, 0xd6, 0xe0, 0xcc, + 0x6d, 0x23, 0x34, 0xb7, 0x5a, 0x86, 0xb9, 0xc5, 0xcc, 0x3f, 0xdc, 0x4b, 0xaf, 0xec, 0xce, 0x79, + 0x2d, 0x89, 0x8b, 0x5f, 0x82, 0xa4, 0x0a, 0x71, 0x9a, 0x22, 0x0a, 0xa1, 0xee, 0x93, 0x37, 0x86, + 0x24, 0x60, 0xbe, 0x7c, 0xda, 0xc9, 0xf5, 0x8d, 0xbc, 0x8f, 0x86, 0x05, 0x46, 0x2e, 0x0f, 0x45, + 0xbf, 0xb0, 0xa4, 0x84, 0x7a, 0xf0, 0x08, 0x5f, 0xbe, 0x4b, 0xae, 0xe7, 0xee, 0xf5, 0xbd, 0x61, + 0x90, 0xda, 0x02, 0x53, 0x6c, 0x0b, 0x30, 0x77, 0xc5, 0xe5, 0xc3, 0x2a, 0xe2, 0xc3, 0xf1, 0xa0, + 0x0f, 0x42, 0x9d, 0xec, 0x10, 0x37, 0xbc, 0x75, 0x6b, 0x65, 0x61, 0xba, 0xd4, 0x19, 0xc9, 0x86, + 0xb0, 0x2c, 0x70, 0x60, 0x89, 0x0d, 0x0d, 0x60, 0xc2, 0xf1, 0x7a, 0x3d, 0xdb, 0xed, 0x2d, 0xcc, + 0x54, 0x58, 0x4a, 0x89, 0x79, 0x5b, 0xe1, 0x08, 0xb9, 0xf0, 0x2c, 0x7e, 0xe0, 0x88, 0xcc, 0xc5, + 0x97, 0x01, 0x65, 0xb7, 0xc1, 0x51, 0x52, 0x7b, 0x5d, 0x95, 0xda, 0x7f, 0x43, 0x83, 0x73, 0x79, + 0x04, 0xe9, 0x61, 0xbf, 0x43, 0xfc, 0x0d, 0x2f, 0x88, 0x7c, 0xe0, 0xc6, 0xf8, 0x61, 0xff, 0x6a, + 0x54, 0x88, 0x63, 0x38, 0xea, 0xc0, 0xd9, 0xad, 0x30, 0x1c, 0x2c, 0x99, 0x26, 0x09, 0x02, 0x59, + 0x83, 0x51, 0x1b, 0xe3, 0xe1, 0x39, 0xae, 0xdd, 0xba, 0xb5, 0x96, 0x02, 0xe3, 0xbc, 0x36, 0xfa, + 0xb7, 0x35, 0x38, 0x9f, 0xbb, 0x72, 0x10, 0x86, 0x0b, 0xcc, 0xd1, 0xd5, 0x5d, 0x1d, 0x86, 0x46, + 0x68, 0xbb, 0xbd, 0x8e, 0xbb, 0xe9, 0xd8, 0xbd, 0xad, 0x50, 0x74, 0x8f, 0xc9, 0x6c, 0xab, 0xb9, + 0x35, 0x70, 0x41, 0x4b, 0xda, 0xf1, 0xbe, 0xb1, 0x9b, 0x41, 0xa8, 0x74, 0x7c, 0x35, 0x0b, 0xc6, + 0x79, 0x6d, 0xf4, 0x2f, 0x8f, 0xc1, 0x43, 0xb4, 0xe3, 0xb1, 0xf4, 0xb0, 0x6a, 0xb8, 0x46, 0xef, + 0xc7, 0xf4, 0x94, 0xfe, 0x86, 0x06, 0x0f, 0x6c, 0xe5, 0xcb, 0xf6, 0x42, 0x80, 0xc1, 0xe5, 0xb4, + 0xb0, 0xc3, 0xf4, 0x05, 0xbe, 0x7b, 0x0f, 0xad, 0x82, 0x8b, 0x7a, 0x85, 0x5e, 0x86, 0x39, 0xd7, + 0xb3, 0x48, 0xab, 0xd3, 0xc6, 0xab, 0x46, 0xb0, 0xdd, 0x8d, 0xcc, 0xe6, 0x63, 0xfc, 0xae, 0xf5, + 0x46, 0x0a, 0x86, 0x33, 0xb5, 0xd1, 0x0e, 0xa0, 0x81, 0x67, 0x2d, 0xef, 0xd8, 0x66, 0xe4, 0x91, + 0x5b, 0xfe, 0x7e, 0x97, 0x3d, 0xb3, 0x5b, 0xcb, 0x60, 0xc3, 0x39, 0x14, 0x98, 0x76, 0x42, 0x3b, + 0xb3, 0xea, 0xb9, 0x76, 0xe8, 0xf9, 0xcc, 0x95, 0xba, 0x92, 0x90, 0xce, 0x56, 0xfa, 0x8d, 0x5c, + 0x8c, 0xb8, 0x80, 0x92, 0xfe, 0xdf, 0x34, 0x38, 0x43, 0xd7, 0xc5, 0x9a, 0xef, 0xed, 0xee, 0xfd, + 0x58, 0x2e, 0xc9, 0x27, 0xc4, 0x2d, 0x22, 0xd7, 0xab, 0xcf, 0x2b, 0x37, 0x88, 0x93, 0xac, 0xd3, + 0xf1, 0xa5, 0xa1, 0x6a, 0x5b, 0x18, 0x29, 0xb6, 0x2d, 0xe8, 0x5f, 0xac, 0x71, 0x81, 0x39, 0x52, + 0xed, 0x7f, 0x3c, 0xb7, 0xe2, 0x4f, 0xc3, 0x0c, 0x2d, 0x5b, 0x35, 0x76, 0xd7, 0xda, 0xaf, 0x7a, + 0x4e, 0xe4, 0xcf, 0xce, 0xdc, 0xd3, 0xae, 0xab, 0x00, 0x9c, 0xac, 0x87, 0x9e, 0x83, 0x89, 0x01, + 0x7f, 0x3b, 0x27, 0x6c, 0x0d, 0x8f, 0xf2, 0x9b, 0x36, 0x56, 0x74, 0x77, 0xbf, 0x31, 0x1f, 0x5b, + 0xb3, 0x45, 0x21, 0x8e, 0x1a, 0xe8, 0x6f, 0x9d, 0x03, 0x86, 0xdc, 0x21, 0xe1, 0x8f, 0xe5, 0xa4, + 0x3c, 0x09, 0x53, 0xe6, 0x60, 0xd8, 0xba, 0xd2, 0x7d, 0x65, 0xe8, 0x85, 0x86, 0xb8, 0x49, 0x64, + 0x02, 0x74, 0x6b, 0x6d, 0x3d, 0x2a, 0xc6, 0x6a, 0x1d, 0xca, 0x20, 0xcc, 0xc1, 0x50, 0x30, 0xdd, + 0x35, 0xd5, 0x45, 0x8b, 0x31, 0x88, 0xd6, 0xda, 0x7a, 0x02, 0x86, 0x33, 0xb5, 0xd1, 0x27, 0x35, + 0x98, 0x26, 0x62, 0xf3, 0x5e, 0x33, 0x7c, 0x4b, 0xf0, 0x86, 0xf2, 0xe2, 0x8f, 0x9c, 0xdd, 0x88, + 0x25, 0x70, 0xd5, 0x63, 0x59, 0xa1, 0x81, 0x13, 0x14, 0x99, 0x16, 0x20, 0x7e, 0xd3, 0x0f, 0xed, + 0x59, 0x69, 0x6e, 0x31, 0x26, 0xb4, 0x80, 0xa2, 0x4a, 0xb8, 0xb8, 0x3d, 0xfa, 0xdb, 0x1a, 0x5c, + 0x90, 0x50, 0xdb, 0xb5, 0xfb, 0xc3, 0x3e, 0x26, 0xa6, 0x63, 0xd8, 0x7d, 0xa1, 0x12, 0x7c, 0xf0, + 0xde, 0x8d, 0x34, 0x89, 0x9f, 0xb3, 0xac, 0x7c, 0x18, 0x2e, 0xe8, 0x13, 0xfa, 0xaa, 0x06, 0x8f, + 0x46, 0xa0, 0x35, 0xaa, 0x98, 0x0f, 0x7d, 0x12, 0xbf, 0xa8, 0x10, 0x73, 0x32, 0x51, 0x8a, 0x83, + 0x3e, 0x76, 0xb0, 0xdf, 0x78, 0x74, 0xf9, 0x08, 0xdc, 0xf8, 0x48, 0xea, 0x89, 0x15, 0xd3, 0xf5, + 0x36, 0x43, 0xa1, 0x43, 0xdc, 0xb7, 0x15, 0x43, 0x69, 0xe0, 0x04, 0x45, 0xf4, 0xbb, 0x1a, 0x3c, + 0xa0, 0x16, 0xa8, 0x0b, 0x86, 0x2b, 0x0f, 0x1f, 0xba, 0x77, 0xbd, 0x49, 0x11, 0xe0, 0xe6, 0xba, + 0x02, 0x20, 0x2e, 0xea, 0x16, 0x65, 0xdf, 0x7d, 0xb6, 0x38, 0xb9, 0x82, 0x31, 0xc6, 0xd9, 0x37, + 0x5f, 0xaf, 0x01, 0x8e, 0x60, 0x54, 0x79, 0x1f, 0x78, 0xd6, 0x9a, 0x6d, 0x05, 0x2b, 0x76, 0xdf, + 0x0e, 0x99, 0x06, 0x30, 0xc2, 0xe7, 0x63, 0xcd, 0xb3, 0xd6, 0x3a, 0x6d, 0x5e, 0x8e, 0x13, 0xb5, + 0xd8, 0xf3, 0x40, 0xbb, 0x6f, 0xf4, 0xc8, 0xda, 0xd0, 0x71, 0xd6, 0x7c, 0x8f, 0x99, 0x74, 0xda, + 0xc4, 0xb0, 0x1c, 0xdb, 0x25, 0x25, 0x25, 0x7e, 0xb6, 0xe5, 0x3a, 0x45, 0x48, 0x71, 0x31, 0x3d, + 0xb4, 0x08, 0xb0, 0x69, 0xd8, 0x4e, 0xf7, 0xb6, 0x31, 0xb8, 0xe9, 0x32, 0xb5, 0xa0, 0xce, 0xf5, + 0xe6, 0x2b, 0xb2, 0x14, 0x2b, 0x35, 0xd8, 0x82, 0xa2, 0xcc, 0x10, 0x13, 0x1e, 0x83, 0x61, 0x61, + 0xf6, 0x5e, 0x2d, 0xa8, 0x08, 0x23, 0x9f, 0xc0, 0xeb, 0x0a, 0x0d, 0x9c, 0xa0, 0x88, 0x7e, 0x55, + 0x83, 0xd9, 0x60, 0x2f, 0x08, 0x49, 0x5f, 0x76, 0xe2, 0xcc, 0x3d, 0xef, 0x04, 0xb3, 0x77, 0x75, + 0x13, 0x54, 0x70, 0x8a, 0x2a, 0x32, 0xe0, 0x21, 0x36, 0xb1, 0x57, 0x5b, 0xd7, 0xec, 0xde, 0x96, + 0x7c, 0xf7, 0xb7, 0x46, 0x7c, 0x93, 0xb8, 0xe1, 0xc2, 0x1c, 0x5b, 0x3a, 0x8d, 0x83, 0xfd, 0xc6, + 0x43, 0x9d, 0xe2, 0x6a, 0xf8, 0x30, 0x1c, 0xe8, 0xe7, 0xe1, 0xa2, 0x00, 0xaf, 0x78, 0xb7, 0x33, + 0x14, 0xe6, 0x19, 0x05, 0xf6, 0x18, 0xb3, 0x53, 0x58, 0x0b, 0x1f, 0x82, 0x81, 0xea, 0x17, 0x01, + 0xf1, 0x99, 0xbd, 0x9a, 0xc8, 0xf5, 0x13, 0x2c, 0x20, 0xb6, 0x0e, 0x98, 0x7e, 0xd1, 0xcd, 0x82, + 0x71, 0x5e, 0x1b, 0xf4, 0x82, 0x74, 0xd1, 0xdf, 0xa3, 0x05, 0xaf, 0xac, 0x75, 0x17, 0xce, 0xb2, + 0xfe, 0x9d, 0x55, 0x3c, 0xef, 0x23, 0x10, 0x4e, 0xd7, 0xa5, 0x52, 0x46, 0x54, 0xd4, 0x1c, 0xfa, + 0x41, 0xb8, 0x70, 0x8e, 0x35, 0x66, 0x52, 0x06, 0x56, 0x01, 0x38, 0x59, 0x0f, 0x3d, 0x07, 0xb3, + 0x01, 0x31, 0x4d, 0xaf, 0x3f, 0x68, 0x93, 0x4d, 0x63, 0xe8, 0x84, 0x0b, 0xe7, 0x59, 0xef, 0xf9, + 0x17, 0x4c, 0x40, 0x70, 0xaa, 0x26, 0xda, 0x83, 0xb3, 0x32, 0x5e, 0xc3, 0x8a, 0xd7, 0x5b, 0x35, + 0x76, 0x99, 0xd8, 0x7e, 0xe1, 0xe8, 0x4d, 0xb8, 0x18, 0xdd, 0x41, 0x2e, 0xbe, 0x32, 0x34, 0xdc, + 0xd0, 0x0e, 0xf7, 0xf8, 0x74, 0xb5, 0xb2, 0xe8, 0x70, 0x1e, 0x0d, 0xb4, 0x02, 0xe7, 0x52, 0xc5, + 0x57, 0x6c, 0x87, 0x04, 0x0b, 0x0f, 0xb0, 0x61, 0x33, 0xcb, 0x4c, 0x2b, 0x07, 0x8e, 0x73, 0x5b, + 0xa1, 0x9b, 0x70, 0x7e, 0xe0, 0x7b, 0x21, 0x31, 0xc3, 0xeb, 0x54, 0x4e, 0x71, 0xc4, 0x00, 0x83, + 0x85, 0x05, 0x36, 0x17, 0xcc, 0x56, 0xbf, 0x96, 0x57, 0x01, 0xe7, 0xb7, 0x43, 0x6f, 0x69, 0x70, + 0x29, 0x08, 0x7d, 0x62, 0xf4, 0x6d, 0xb7, 0xd7, 0xf2, 0x5c, 0x97, 0x30, 0x4e, 0xd9, 0xb1, 0x62, + 0xc7, 0xd3, 0x07, 0x4b, 0xb1, 0x2a, 0xfd, 0x60, 0xbf, 0x71, 0xa9, 0x7b, 0x28, 0x66, 0x7c, 0x04, + 0x65, 0x7d, 0xbf, 0xc6, 0x75, 0xf0, 0x0c, 0xfb, 0xa7, 0x8b, 0xb0, 0x4f, 0xfa, 0x9e, 0xbf, 0xb7, + 0x14, 0x45, 0x05, 0x14, 0xa6, 0x71, 0xb6, 0x08, 0x57, 0x93, 0x20, 0x9c, 0xae, 0x4b, 0x45, 0x34, + 0xb6, 0x59, 0xae, 0x74, 0xe3, 0xf6, 0xb5, 0x58, 0x44, 0xeb, 0xa4, 0x60, 0x38, 0x53, 0x1b, 0xb5, + 0x60, 0x5e, 0x94, 0x75, 0xa8, 0xa2, 0x13, 0x5c, 0xf1, 0x49, 0x24, 0xfd, 0x52, 0x8d, 0x61, 0xbe, + 0x93, 0x06, 0xe2, 0x6c, 0x7d, 0x3a, 0x0a, 0xfa, 0x43, 0xed, 0xc5, 0x68, 0x3c, 0x8a, 0x1b, 0x49, + 0x10, 0x4e, 0xd7, 0x8d, 0x34, 0xd1, 0x44, 0x17, 0xc6, 0xe2, 0x51, 0xdc, 0x48, 0xc1, 0x70, 0xa6, + 0xb6, 0xfe, 0xaf, 0x47, 0xe1, 0x5d, 0xc7, 0x90, 0x9a, 0x50, 0x3f, 0x7f, 0xba, 0x4f, 0xbe, 0x77, + 0x8e, 0xf7, 0x79, 0x06, 0x05, 0x9f, 0xe7, 0xe4, 0xf4, 0x8e, 0xfb, 0x39, 0x83, 0xa2, 0xcf, 0x79, + 0x72, 0x92, 0xc7, 0xff, 0xfc, 0xfd, 0xfc, 0xcf, 0x5f, 0x72, 0x56, 0x8f, 0x5c, 0x2e, 0x83, 0x82, + 0xe5, 0x52, 0x72, 0x56, 0x8f, 0xb1, 0xbc, 0xfe, 0xcd, 0x28, 0x3c, 0x76, 0x1c, 0xf1, 0xad, 0xe4, + 0xfa, 0xca, 0xe1, 0x3a, 0xf7, 0x75, 0x7d, 0x15, 0xb9, 0xd7, 0xdf, 0xc7, 0xf5, 0x95, 0x43, 0xf2, + 0x7e, 0xaf, 0xaf, 0xa2, 0x59, 0xbd, 0x5f, 0xeb, 0xab, 0x68, 0x56, 0x8f, 0xb1, 0xbe, 0xfe, 0x7b, + 0xfa, 0x7c, 0x90, 0x22, 0x5b, 0x07, 0x46, 0xcc, 0xc1, 0xb0, 0x24, 0x93, 0x62, 0xae, 0x14, 0xad, + 0xb5, 0x75, 0x4c, 0x71, 0x20, 0x0c, 0xe3, 0x7c, 0xfd, 0x94, 0x64, 0x41, 0xcc, 0xe1, 0x9b, 0x2f, + 0x49, 0x2c, 0x30, 0xd1, 0xa9, 0x22, 0x83, 0x2d, 0xd2, 0x27, 0xbe, 0xe1, 0x74, 0x43, 0xcf, 0x37, + 0x7a, 0x65, 0xb9, 0x0d, 0x9b, 0xaa, 0xe5, 0x14, 0x2e, 0x9c, 0xc1, 0x4e, 0x27, 0x64, 0x60, 0x5b, + 0x25, 0xf9, 0x0b, 0x9b, 0x90, 0xb5, 0x4e, 0x1b, 0x53, 0x1c, 0xfa, 0xef, 0x4c, 0x82, 0x12, 0x8f, + 0x08, 0x7d, 0x18, 0x1e, 0x34, 0x1c, 0xc7, 0xbb, 0xbd, 0xe6, 0xdb, 0x3b, 0xb6, 0x43, 0x7a, 0xc4, + 0x92, 0xf2, 0x4c, 0x20, 0x3c, 0x6e, 0x98, 0xda, 0xb2, 0x54, 0x54, 0x09, 0x17, 0xb7, 0xa7, 0x4a, + 0xd4, 0xbc, 0x99, 0x0e, 0xff, 0x52, 0xe9, 0x46, 0x3e, 0x13, 0x4c, 0x86, 0x6f, 0xa8, 0x4c, 0x31, + 0xce, 0xd2, 0x45, 0xbf, 0xa4, 0x71, 0x13, 0x99, 0xbc, 0x13, 0x10, 0x1f, 0xed, 0xda, 0xbd, 0xba, + 0x4c, 0x8c, 0x8d, 0x6d, 0xf1, 0xb5, 0x43, 0x92, 0x22, 0xfa, 0x2d, 0x0d, 0xce, 0x6f, 0xe7, 0x99, + 0xf7, 0xc5, 0xb7, 0x5d, 0x2b, 0xdd, 0x97, 0x82, 0x0b, 0x03, 0x2e, 0x54, 0xe6, 0x56, 0xc0, 0xf9, + 0x3d, 0x91, 0xf3, 0x24, 0xed, 0x9d, 0x82, 0x0f, 0x94, 0x9f, 0xa7, 0x94, 0xe5, 0x34, 0x9e, 0x27, + 0x09, 0xc0, 0x49, 0x8a, 0xe8, 0x0d, 0x98, 0xdc, 0x8e, 0xcc, 0xcc, 0xc2, 0xaa, 0xd4, 0x2e, 0x4d, + 0x5e, 0x31, 0x56, 0xf3, 0xdb, 0x27, 0x59, 0x88, 0x63, 0x2a, 0xc8, 0x86, 0x89, 0x6d, 0xce, 0x8d, + 0x84, 0x35, 0xa8, 0x59, 0x5d, 0x51, 0xe5, 0x26, 0x09, 0x51, 0x84, 0x23, 0xfc, 0xaa, 0xdf, 0x61, + 0xfd, 0x08, 0x97, 0xf8, 0x2f, 0x69, 0x70, 0x7e, 0x87, 0xf8, 0xa1, 0x6d, 0xa6, 0xef, 0x57, 0x26, + 0x2b, 0x68, 0xd3, 0xaf, 0xe6, 0x61, 0xe4, 0x4b, 0x25, 0x17, 0x84, 0xf3, 0xfb, 0x40, 0x75, 0x6b, + 0x6e, 0x25, 0xef, 0x86, 0x46, 0x68, 0x9b, 0xb7, 0xbc, 0x6d, 0xe2, 0xd2, 0xd1, 0x8a, 0x58, 0xf3, + 0xc0, 0xf8, 0x07, 0xd3, 0xad, 0x97, 0x8b, 0xab, 0xe1, 0xc3, 0x70, 0xe8, 0x7f, 0xaa, 0x41, 0xc6, + 0xd2, 0x8b, 0xfe, 0x9a, 0x06, 0xd3, 0x9b, 0xc4, 0x08, 0x87, 0x3e, 0xb9, 0x6a, 0x84, 0xf2, 0x05, + 0xe4, 0x6b, 0xf7, 0xc4, 0xc2, 0xbc, 0x78, 0x45, 0xc1, 0xcc, 0x5d, 0x02, 0x64, 0x44, 0x33, 0x15, + 0x84, 0x13, 0x5d, 0xb8, 0xf8, 0x12, 0xcc, 0x67, 0x1a, 0x9e, 0xe8, 0x12, 0xf5, 0x1f, 0x6a, 0x90, + 0x97, 0x7f, 0x00, 0x7d, 0x04, 0xc6, 0x0c, 0xcb, 0x92, 0x41, 0x8a, 0x9f, 0x2b, 0xe9, 0xfe, 0x62, + 0xa9, 0x4f, 0x4d, 0xd9, 0x4f, 0xcc, 0xf1, 0xa2, 0x2b, 0x80, 0x8c, 0xc4, 0xed, 0xf6, 0x6a, 0xfc, + 0x0c, 0x8b, 0xdd, 0x50, 0x2d, 0x65, 0xa0, 0x38, 0xa7, 0x85, 0xfe, 0xeb, 0x1a, 0xa0, 0x6c, 0x18, + 0x3c, 0x14, 0x40, 0x5d, 0xac, 0xe6, 0xe8, 0x3b, 0x2d, 0x97, 0x75, 0xc5, 0x4f, 0xbc, 0x2c, 0x89, + 0x9d, 0xff, 0x45, 0x41, 0x80, 0x25, 0x21, 0xfd, 0x2f, 0x34, 0x88, 0xe3, 0x99, 0xa2, 0x0f, 0xc0, + 0x94, 0x45, 0x02, 0xd3, 0xb7, 0x07, 0x61, 0xfc, 0x0e, 0x45, 0xfa, 0xb2, 0xb7, 0x63, 0x10, 0x56, + 0xeb, 0x21, 0x1d, 0xc6, 0x43, 0x23, 0xd8, 0xee, 0xb4, 0x85, 0x7a, 0xc9, 0x84, 0x81, 0x5b, 0xac, + 0x04, 0x0b, 0x48, 0x1c, 0xce, 0x66, 0xe4, 0x18, 0xe1, 0x6c, 0xd0, 0xe6, 0x3d, 0x88, 0xdd, 0x83, + 0x8e, 0x8e, 0xdb, 0xa3, 0xff, 0x8d, 0x1a, 0x9c, 0xa1, 0x55, 0x56, 0x0d, 0xdb, 0x0d, 0x89, 0xcb, + 0x3c, 0xae, 0x4b, 0x4e, 0x42, 0x0f, 0x66, 0x42, 0xdf, 0xee, 0xf5, 0x88, 0x2f, 0x22, 0x80, 0x9d, + 0xfc, 0x4d, 0x8e, 0xf4, 0xa8, 0xb9, 0xa5, 0x22, 0xc2, 0x49, 0xbc, 0xe8, 0xd9, 0xc8, 0xe5, 0x9d, + 0x2b, 0xe2, 0xef, 0x8a, 0xd6, 0x2a, 0xf3, 0x63, 0xbf, 0x2b, 0xe2, 0x23, 0xc9, 0x28, 0xb8, 0x09, + 0xef, 0xf6, 0x9f, 0x86, 0x19, 0xe1, 0x77, 0xca, 0xe3, 0x12, 0x09, 0x45, 0x9c, 0x9d, 0x33, 0x57, + 0x54, 0x00, 0x4e, 0xd6, 0xd3, 0xff, 0x79, 0x0d, 0x92, 0xb1, 0x76, 0xcb, 0xce, 0x52, 0x36, 0x28, + 0x53, 0xed, 0xbe, 0x05, 0x65, 0x7a, 0x1f, 0x8b, 0x4b, 0xcf, 0xf3, 0x8e, 0xf0, 0xbb, 0x6b, 0x35, + 0x98, 0x3c, 0x4f, 0x1a, 0x22, 0x6b, 0xc4, 0xd3, 0x3a, 0x7a, 0xe2, 0x69, 0xfd, 0x80, 0xf0, 0x5c, + 0x1f, 0x4b, 0x84, 0xc6, 0x8a, 0x7c, 0xf4, 0xe7, 0x13, 0x0d, 0x15, 0x07, 0xfd, 0xef, 0x6a, 0x30, + 0x21, 0x42, 0x3f, 0x1e, 0xe3, 0x01, 0x48, 0x0f, 0xc6, 0x98, 0xf2, 0x53, 0x49, 0x2e, 0xec, 0x6e, + 0x79, 0x5e, 0x98, 0x08, 0x81, 0xc9, 0x1c, 0xae, 0xd9, 0xbf, 0x98, 0xe3, 0x67, 0x5e, 0x7c, 0xbe, + 0xb9, 0x65, 0x87, 0xc4, 0x0c, 0xa3, 0xa0, 0x7a, 0x91, 0x17, 0x9f, 0x52, 0x8e, 0x13, 0xb5, 0xf4, + 0x2f, 0x8d, 0xc2, 0xa3, 0x02, 0x71, 0x46, 0x54, 0x92, 0x2c, 0x6e, 0x0f, 0xce, 0x8a, 0x8f, 0xdb, + 0xf6, 0x0d, 0x5b, 0x3a, 0x05, 0x94, 0xd3, 0x82, 0x85, 0xc3, 0x48, 0x06, 0x1d, 0xce, 0xa3, 0xc1, + 0xc3, 0xc3, 0xb1, 0xe2, 0x6b, 0xc4, 0x70, 0xc2, 0xad, 0x88, 0x76, 0xad, 0x4a, 0x78, 0xb8, 0x2c, + 0x3e, 0x9c, 0x4b, 0x85, 0x39, 0x25, 0x08, 0x40, 0xcb, 0x27, 0x86, 0xea, 0x11, 0x51, 0xc1, 0x65, + 0x7a, 0x35, 0x17, 0x23, 0x2e, 0xa0, 0xc4, 0xcc, 0x89, 0xc6, 0x2e, 0xb3, 0x4e, 0x60, 0x12, 0xfa, + 0x36, 0x0b, 0x65, 0x2a, 0x6d, 0xda, 0xab, 0x49, 0x10, 0x4e, 0xd7, 0x45, 0xcf, 0xc1, 0x2c, 0x73, + 0xf2, 0x88, 0x43, 0xb0, 0x8c, 0xc5, 0xef, 0x84, 0x6f, 0x24, 0x20, 0x38, 0x55, 0x53, 0xff, 0xba, + 0x06, 0xd3, 0xea, 0xb2, 0x3b, 0xc6, 0x73, 0x90, 0x1d, 0xe5, 0x38, 0xac, 0xf2, 0x52, 0x41, 0x25, + 0x7b, 0x9c, 0x13, 0xf1, 0x5b, 0x35, 0x38, 0x9b, 0xd3, 0x86, 0xdd, 0xd8, 0x93, 0xd4, 0xd1, 0x5a, + 0xe9, 0xc6, 0x3e, 0x73, 0x4e, 0xcb, 0x1b, 0xfb, 0x34, 0x04, 0x67, 0x08, 0xa3, 0xd7, 0x60, 0xc4, + 0xf4, 0x6d, 0x31, 0x31, 0xcf, 0x94, 0xd3, 0x11, 0x71, 0xa7, 0x39, 0x25, 0x48, 0x8e, 0xb4, 0x70, + 0x07, 0x53, 0x8c, 0xf4, 0x88, 0x50, 0xf7, 0x75, 0x74, 0x5e, 0xb3, 0x23, 0x42, 0xdd, 0xfe, 0x01, + 0x4e, 0xd6, 0xd3, 0xff, 0xcb, 0x08, 0x4c, 0x29, 0x81, 0x6c, 0xd1, 0x6a, 0x15, 0xe3, 0x44, 0xdc, + 0xaf, 0xc8, 0x40, 0xb1, 0x0a, 0x23, 0xbd, 0xc1, 0xb0, 0xa4, 0x75, 0x42, 0xa2, 0xbb, 0x4a, 0xd1, + 0xf5, 0x06, 0x43, 0xf4, 0xaa, 0xb4, 0x77, 0x94, 0xb3, 0x48, 0x48, 0xa7, 0xfa, 0x94, 0xcd, 0x23, + 0x5a, 0xd7, 0xa3, 0x85, 0xeb, 0xda, 0x85, 0x89, 0x40, 0x18, 0x43, 0xc6, 0x2a, 0x04, 0x30, 0x50, + 0xa6, 0x5a, 0x58, 0x3f, 0xb8, 0x12, 0x15, 0x19, 0x47, 0x22, 0x22, 0x54, 0x38, 0x1b, 0xb2, 0xe7, + 0x7a, 0x4c, 0x3f, 0xac, 0x73, 0xe1, 0x6c, 0x9d, 0x95, 0x60, 0x01, 0xc9, 0xb0, 0xfc, 0x89, 0x63, + 0xb1, 0xfc, 0xcf, 0xd4, 0x00, 0x65, 0xbb, 0x81, 0xde, 0x05, 0x63, 0xec, 0xc9, 0xaf, 0xd8, 0xdb, + 0x52, 0x96, 0x66, 0x4f, 0x3e, 0x31, 0x87, 0xa1, 0xae, 0x78, 0x8a, 0x5d, 0xee, 0x7b, 0x32, 0xd7, + 0x14, 0x41, 0x4f, 0x79, 0xb7, 0x1d, 0x1d, 0xa2, 0x23, 0x85, 0x87, 0xe8, 0x3a, 0x4c, 0xf4, 0x6d, + 0x97, 0x5d, 0x8b, 0x95, 0x33, 0x12, 0xf1, 0xbb, 0x73, 0x8e, 0x02, 0x47, 0xb8, 0xf4, 0x1f, 0xd4, + 0xe8, 0xda, 0x8f, 0x45, 0xc8, 0x3b, 0x00, 0xc6, 0x30, 0xf4, 0xb8, 0x2c, 0x22, 0xb6, 0xc0, 0xcf, + 0x96, 0xfc, 0xcc, 0x12, 0xeb, 0x92, 0xc4, 0xc8, 0xef, 0xb4, 0xe3, 0xdf, 0x58, 0xa1, 0x46, 0x69, + 0x87, 0x76, 0x9f, 0xbc, 0x66, 0xbb, 0x96, 0x77, 0x5b, 0xcc, 0x6f, 0x65, 0xda, 0xb7, 0x24, 0x46, + 0x4e, 0x3b, 0xfe, 0x8d, 0x15, 0x6a, 0xe8, 0x83, 0xb0, 0xc0, 0xd4, 0x51, 0x97, 0xc5, 0x17, 0x17, + 0x9d, 0xf3, 0x1c, 0x27, 0x3a, 0xe7, 0xea, 0x2c, 0x9a, 0xeb, 0x42, 0xab, 0xa0, 0x0e, 0x2e, 0x6c, + 0xad, 0x7f, 0x43, 0x83, 0xf3, 0xb9, 0x73, 0x81, 0xae, 0xc2, 0x7c, 0xec, 0xcf, 0xa4, 0xf2, 0xe5, + 0x7a, 0x1c, 0xd9, 0xfe, 0x7a, 0xba, 0x02, 0xce, 0xb6, 0x41, 0xab, 0x52, 0x38, 0x51, 0xf9, 0xbe, + 0x70, 0x86, 0x7a, 0x48, 0xa0, 0xca, 0x3b, 0x1a, 0x70, 0x5e, 0x3b, 0xfd, 0xc3, 0x89, 0x0e, 0xc7, + 0x13, 0x46, 0xf7, 0xc7, 0x06, 0xe9, 0xc9, 0xe7, 0x39, 0x72, 0x7f, 0x34, 0x69, 0x21, 0xe6, 0x30, + 0xf4, 0x88, 0xfa, 0xea, 0x4d, 0xb2, 0xaf, 0xe8, 0xe5, 0x9b, 0x3e, 0x04, 0x10, 0x5e, 0x87, 0xb6, + 0xdb, 0x43, 0x3d, 0xa8, 0x1b, 0x22, 0x71, 0x9c, 0x58, 0x6c, 0x2f, 0x94, 0x53, 0x7e, 0x05, 0x12, + 0xee, 0x73, 0x1d, 0xfd, 0xc2, 0x12, 0xb9, 0xfe, 0xb7, 0x34, 0xb8, 0x90, 0xff, 0xb2, 0xf5, 0x18, + 0x07, 0x7a, 0x1f, 0xa6, 0xfc, 0xb8, 0x99, 0x58, 0x99, 0x3f, 0xa5, 0xc6, 0x8e, 0x53, 0xe2, 0xad, + 0x50, 0x61, 0xa7, 0xe5, 0x7b, 0x41, 0xf4, 0x75, 0xd2, 0xe1, 0xe4, 0xa4, 0xa6, 0xa1, 0xf4, 0x04, + 0xab, 0xf8, 0xf5, 0x4f, 0xd5, 0x00, 0x6e, 0x90, 0xf0, 0xb6, 0xe7, 0x6f, 0xd3, 0x39, 0xfa, 0xb1, + 0x7a, 0x61, 0xfd, 0x30, 0x8c, 0x0e, 0x3c, 0x2b, 0x10, 0x8c, 0x8a, 0x3d, 0x7d, 0x66, 0xce, 0x38, + 0xac, 0x14, 0x35, 0x60, 0x8c, 0x59, 0xff, 0xc5, 0x21, 0xc2, 0x24, 0x74, 0x2a, 0x5f, 0x05, 0x98, + 0x97, 0xf3, 0xfc, 0x20, 0xec, 0x45, 0x43, 0x20, 0x74, 0x0e, 0x91, 0x1f, 0x84, 0x97, 0x61, 0x09, + 0xd5, 0x3f, 0x3d, 0x0a, 0x89, 0x24, 0x89, 0xb1, 0x91, 0x64, 0xf4, 0x3e, 0x19, 0x49, 0x3e, 0x08, + 0x0b, 0x8e, 0x67, 0x58, 0x4d, 0xc3, 0xa1, 0xcb, 0xde, 0xef, 0xf2, 0xef, 0x61, 0xb8, 0x3d, 0x19, + 0x57, 0x86, 0xb1, 0x80, 0x95, 0x82, 0x3a, 0xb8, 0xb0, 0x35, 0x1a, 0x2a, 0xb9, 0x19, 0xa9, 0xd4, + 0xb3, 0x5a, 0x39, 0x89, 0xe4, 0xa2, 0xfa, 0x9c, 0x45, 0x9e, 0xe8, 0xa9, 0xfc, 0x8d, 0xbf, 0xaa, + 0xc1, 0x79, 0xb2, 0x1b, 0x12, 0xdf, 0x35, 0x9c, 0x5b, 0xbe, 0xb1, 0xb9, 0x69, 0x9b, 0x09, 0x77, + 0xc7, 0xb5, 0x83, 0xfd, 0xc6, 0xf9, 0xe5, 0xbc, 0x0a, 0x77, 0xf7, 0x1b, 0x4f, 0x67, 0xb3, 0xa4, + 0x46, 0x8f, 0x57, 0x72, 0x9b, 0xb0, 0xe5, 0x98, 0x4f, 0xee, 0xe2, 0xb3, 0x30, 0x75, 0x82, 0x77, + 0x07, 0x89, 0xd7, 0xc2, 0x7f, 0xbf, 0x06, 0xd3, 0x74, 0x05, 0xad, 0x78, 0xa6, 0xe1, 0xb4, 0x6f, + 0x74, 0x4f, 0x90, 0x62, 0x14, 0xad, 0xc0, 0xb9, 0x4d, 0xcf, 0x37, 0xc9, 0xad, 0xd6, 0xda, 0x2d, + 0x4f, 0x5c, 0x20, 0xb4, 0x6f, 0x74, 0x05, 0x5f, 0x64, 0x8a, 0xd0, 0x95, 0x1c, 0x38, 0xce, 0x6d, + 0x85, 0x6e, 0xc2, 0xf9, 0xb8, 0x7c, 0x7d, 0xc0, 0x5d, 0x23, 0x28, 0xba, 0x91, 0xd8, 0xb5, 0xe3, + 0x4a, 0x5e, 0x05, 0x9c, 0xdf, 0x0e, 0x19, 0xf0, 0x90, 0x08, 0x47, 0x70, 0xc5, 0xf3, 0x6f, 0x1b, + 0xbe, 0x95, 0x44, 0x3b, 0x1a, 0x9b, 0x56, 0xdb, 0xc5, 0xd5, 0xf0, 0x61, 0x38, 0xf4, 0xaf, 0x8c, + 0x83, 0xf2, 0xf0, 0xea, 0x04, 0x59, 0x33, 0x7e, 0x5b, 0x83, 0x73, 0xa6, 0x63, 0x13, 0x37, 0x4c, + 0xbd, 0xae, 0xe1, 0x8c, 0xe5, 0xd5, 0x72, 0x4f, 0xc2, 0x06, 0xc4, 0xed, 0xb4, 0x85, 0x2b, 0x49, + 0x2b, 0x07, 0xbb, 0x70, 0xb7, 0xc9, 0x81, 0xe0, 0xdc, 0xde, 0xb0, 0x01, 0xb1, 0xf2, 0x4e, 0x5b, + 0x7d, 0x46, 0xdd, 0x12, 0x65, 0x58, 0x42, 0xd1, 0x93, 0x30, 0xd5, 0xf3, 0xbd, 0xe1, 0x20, 0x68, + 0x31, 0x37, 0x56, 0xce, 0x9f, 0x98, 0x30, 0x76, 0x35, 0x2e, 0xc6, 0x6a, 0x1d, 0x2a, 0x5a, 0xf2, + 0x9f, 0x6b, 0x3e, 0xd9, 0xb4, 0x77, 0x05, 0xbf, 0x62, 0xa2, 0xe5, 0x55, 0xa5, 0x1c, 0x27, 0x6a, + 0xa1, 0xf7, 0xc2, 0xa4, 0x1d, 0x04, 0x43, 0xe2, 0xaf, 0xe3, 0x15, 0x11, 0x29, 0x9b, 0xdd, 0x48, + 0x74, 0xa2, 0x42, 0x1c, 0xc3, 0xd1, 0xe7, 0x35, 0x98, 0xf5, 0xc9, 0x1b, 0x43, 0xdb, 0x27, 0x16, + 0x23, 0x1a, 0x88, 0xe7, 0x6f, 0xdd, 0x8a, 0x6f, 0xee, 0x16, 0x71, 0x02, 0x2b, 0xe7, 0x13, 0xd2, + 0xfa, 0x94, 0x04, 0xe2, 0x54, 0x17, 0xe8, 0x5c, 0x05, 0x76, 0xcf, 0xb5, 0xdd, 0xde, 0x92, 0xd3, + 0x0b, 0x16, 0xea, 0x8c, 0xf7, 0x71, 0xc1, 0x35, 0x2e, 0xc6, 0x6a, 0x1d, 0xaa, 0x7b, 0x0d, 0x03, + 0xba, 0xf3, 0xfb, 0x84, 0x4f, 0xf0, 0x64, 0x6c, 0x9e, 0x5b, 0x57, 0x01, 0x38, 0x59, 0x8f, 0xaa, + 0xe6, 0x51, 0x81, 0x98, 0x66, 0xe0, 0x21, 0x8e, 0x68, 0x3f, 0xd7, 0x13, 0x10, 0x9c, 0xaa, 0x79, + 0x71, 0x09, 0xce, 0xe6, 0x0c, 0xf3, 0x44, 0xec, 0xe5, 0xeb, 0x35, 0x78, 0xe7, 0x91, 0xcb, 0x12, + 0x7d, 0x45, 0x83, 0x29, 0xb2, 0x1b, 0xfa, 0x86, 0xf4, 0x76, 0xa7, 0xdf, 0xa8, 0x77, 0x7f, 0x36, + 0xc1, 0xe2, 0x72, 0x4c, 0x89, 0x7f, 0x37, 0x29, 0x31, 0x28, 0x10, 0xac, 0x76, 0x88, 0x6a, 0x4a, + 0x3c, 0x04, 0x96, 0x6a, 0xc6, 0x16, 0x99, 0xf6, 0x04, 0xe4, 0xe2, 0x8b, 0x30, 0x97, 0xc6, 0x7c, + 0x52, 0x4e, 0x3c, 0xb1, 0xe6, 0x7b, 0x54, 0x98, 0x39, 0x85, 0xb8, 0x47, 0x1b, 0x89, 0xa8, 0xae, + 0xe5, 0xde, 0xd4, 0x8a, 0xde, 0x16, 0x46, 0x95, 0xfe, 0x58, 0x2a, 0xaa, 0x74, 0xb3, 0x12, 0x95, + 0xc3, 0xc3, 0x48, 0x7f, 0x4f, 0x83, 0x29, 0x51, 0xf3, 0x14, 0x02, 0x23, 0x19, 0xc9, 0xc0, 0x48, + 0xcf, 0x57, 0x19, 0x58, 0x41, 0x48, 0xa4, 0xb7, 0x34, 0x98, 0x11, 0x35, 0x56, 0x49, 0x7f, 0x83, + 0xf8, 0xe8, 0x0a, 0x4c, 0x04, 0x43, 0xf6, 0x2d, 0xc5, 0x88, 0x1e, 0x52, 0x25, 0x64, 0x7f, 0xc3, + 0x30, 0x59, 0xc6, 0x48, 0x5e, 0x45, 0x89, 0xd5, 0xcc, 0x0b, 0x70, 0xd4, 0x98, 0xca, 0xbb, 0xbe, + 0xe7, 0x64, 0xa2, 0xa9, 0x60, 0xcf, 0x21, 0x98, 0x41, 0xa8, 0x98, 0x49, 0xff, 0x46, 0x16, 0x1e, + 0x26, 0x66, 0x52, 0x70, 0x80, 0x79, 0xb9, 0xfe, 0x99, 0x51, 0x39, 0xdb, 0x2c, 0x96, 0xea, 0x35, + 0x98, 0x34, 0x7d, 0x62, 0x84, 0xc4, 0x6a, 0xee, 0x1d, 0xa7, 0x73, 0x8c, 0x63, 0xb7, 0xa2, 0x16, + 0x38, 0x6e, 0x4c, 0x79, 0xa3, 0x7a, 0x79, 0x50, 0x8b, 0xcf, 0x91, 0xc2, 0x8b, 0x83, 0xe7, 0x61, + 0xcc, 0xbb, 0xed, 0x4a, 0x67, 0x84, 0x43, 0x09, 0xb3, 0xa1, 0xdc, 0xa4, 0xb5, 0x31, 0x6f, 0xa4, + 0x46, 0x13, 0x1a, 0x3d, 0x24, 0x9a, 0x50, 0x1f, 0x26, 0xfa, 0xec, 0x33, 0x54, 0x0b, 0xdc, 0x9b, + 0xf8, 0xa2, 0x6a, 0x8a, 0x07, 0x86, 0x1a, 0x47, 0x34, 0xe8, 0x29, 0x47, 0x19, 0x71, 0x30, 0x30, + 0x4c, 0xa2, 0x9e, 0x72, 0x37, 0xa2, 0x42, 0x1c, 0xc3, 0xd1, 0x9d, 0x64, 0xa0, 0xaa, 0x89, 0x0a, + 0xb6, 0x23, 0xd1, 0x3f, 0x25, 0x36, 0x15, 0x9f, 0xfc, 0xc2, 0x60, 0x55, 0x9f, 0x1b, 0x95, 0xcb, + 0x54, 0xc4, 0xe2, 0xce, 0x4f, 0x77, 0xa8, 0x95, 0x4a, 0x77, 0xf8, 0x74, 0x94, 0x41, 0xb0, 0x96, + 0xc8, 0x47, 0x22, 0x33, 0x08, 0x4e, 0x0b, 0xd2, 0x89, 0xac, 0x81, 0x43, 0x38, 0x1b, 0x84, 0x86, + 0x43, 0xba, 0xb6, 0xd0, 0xae, 0x83, 0xd0, 0xe8, 0x0f, 0x4a, 0xa4, 0x15, 0xe1, 0x7e, 0xe1, 0x59, + 0x54, 0x38, 0x0f, 0x3f, 0xfa, 0xb4, 0x06, 0x0b, 0xac, 0x7c, 0x69, 0x18, 0x7a, 0x3c, 0x3e, 0x6a, + 0x4c, 0xfc, 0xe4, 0x77, 0x94, 0x4c, 0x17, 0xea, 0x16, 0xe0, 0xc3, 0x85, 0x94, 0xd0, 0x9b, 0x70, + 0xde, 0x31, 0x82, 0x70, 0xc9, 0x0c, 0xed, 0x1d, 0x3b, 0xdc, 0x8b, 0xbb, 0x70, 0xf2, 0xd4, 0x8f, + 0x4c, 0xe4, 0x5e, 0xc9, 0x43, 0x86, 0xf3, 0x69, 0xe8, 0xff, 0x43, 0x03, 0x94, 0x5d, 0x42, 0xa8, + 0x0f, 0x75, 0x2b, 0x72, 0xd4, 0xd6, 0xee, 0x4d, 0x18, 0x35, 0xc9, 0x9d, 0xa5, 0x83, 0xb7, 0x24, + 0x81, 0x06, 0x30, 0x79, 0x7b, 0xcb, 0x0e, 0x89, 0x63, 0x07, 0xe1, 0xbd, 0x0a, 0xdb, 0x26, 0x23, + 0x18, 0xbd, 0x16, 0x61, 0xc6, 0x31, 0x11, 0xfd, 0xd7, 0x46, 0xa0, 0x7e, 0x82, 0x9c, 0xda, 0x43, + 0x40, 0xa6, 0x92, 0xef, 0xa4, 0x8a, 0x4d, 0x81, 0x79, 0x17, 0xb4, 0x32, 0xc8, 0x70, 0x0e, 0x01, + 0xf4, 0x26, 0x9c, 0xb3, 0xdd, 0x4d, 0xdf, 0x08, 0x42, 0x7f, 0xc8, 0xec, 0xb4, 0x55, 0xb2, 0x86, + 0x30, 0x55, 0xa2, 0x93, 0x83, 0x0e, 0xe7, 0x12, 0x41, 0x9b, 0x30, 0x71, 0xdb, 0xf3, 0xb7, 0x29, + 0x03, 0x1d, 0xad, 0x90, 0x43, 0xee, 0x35, 0x86, 0x23, 0xe6, 0x9c, 0xfc, 0x77, 0x80, 0x23, 0xe4, + 0xfa, 0x1f, 0x68, 0x30, 0xc6, 0xdf, 0x21, 0xde, 0x7f, 0x21, 0xea, 0xa3, 0x09, 0x21, 0xaa, 0x5c, + 0xc2, 0x01, 0xd6, 0xd7, 0xc2, 0x48, 0xf8, 0xdf, 0xd5, 0x60, 0x92, 0xd5, 0x38, 0x05, 0xa1, 0xe6, + 0x23, 0x49, 0xa1, 0xe6, 0xb9, 0xf2, 0xc3, 0x29, 0x10, 0x69, 0xfe, 0x60, 0x44, 0x0c, 0x86, 0xc9, + 0x0c, 0x1d, 0x38, 0x2b, 0x3c, 0x0c, 0x57, 0xec, 0x4d, 0x42, 0x17, 0x58, 0xdb, 0xd8, 0x0b, 0x44, + 0x0c, 0x01, 0xfe, 0xc6, 0x24, 0x0b, 0xc6, 0x79, 0x6d, 0xd0, 0x3f, 0xd0, 0xe8, 0xe9, 0x1c, 0xfa, + 0xb6, 0x59, 0x2d, 0xbc, 0xbc, 0xec, 0xdc, 0xe2, 0x2a, 0xc7, 0xc6, 0xf5, 0x83, 0xf5, 0xf8, 0x98, + 0x66, 0xa5, 0x77, 0xf7, 0x1b, 0x8d, 0x1c, 0xeb, 0x4d, 0x1c, 0xb2, 0x3a, 0x08, 0x3f, 0xf5, 0x83, + 0x43, 0xab, 0x30, 0xdb, 0x67, 0xd4, 0x65, 0x74, 0x0d, 0xc6, 0x02, 0xd3, 0x1b, 0x90, 0x93, 0x24, + 0xcd, 0x90, 0x33, 0xdc, 0xa5, 0x2d, 0x31, 0x47, 0x70, 0xf1, 0x63, 0x30, 0xad, 0xf6, 0x3c, 0x47, + 0xff, 0x68, 0xab, 0xfa, 0xc7, 0x89, 0x2f, 0x39, 0x54, 0x7d, 0xe5, 0xf7, 0x6a, 0x30, 0xce, 0x33, + 0x38, 0x1e, 0xc3, 0xc2, 0xfb, 0xb1, 0x28, 0x2e, 0x70, 0x95, 0xfc, 0xb4, 0x6a, 0x88, 0xb6, 0xd7, + 0x3d, 0x57, 0x99, 0x04, 0x35, 0x34, 0x30, 0xf2, 0x64, 0xe8, 0xbe, 0x91, 0x0a, 0x51, 0xfd, 0xf9, + 0xd0, 0xee, 0x77, 0xb0, 0xbe, 0xef, 0x69, 0x30, 0x9d, 0x08, 0x86, 0xd8, 0x87, 0x11, 0x5f, 0x26, + 0x7d, 0x29, 0x6b, 0x02, 0x8f, 0x3c, 0x54, 0x1e, 0x3a, 0xa4, 0x12, 0xa6, 0x74, 0x64, 0xdc, 0xc4, + 0xda, 0x3d, 0x8a, 0x9b, 0xa8, 0x7f, 0x41, 0x83, 0x0b, 0xd1, 0x80, 0x92, 0x11, 0x6e, 0xd0, 0xe3, + 0x50, 0x37, 0x06, 0x36, 0x33, 0xed, 0xa8, 0xd6, 0xb1, 0xa5, 0xb5, 0x0e, 0x2b, 0xc3, 0x12, 0x8a, + 0xde, 0x07, 0xf5, 0x68, 0xe9, 0x09, 0xc9, 0x4f, 0xf2, 0x2d, 0x69, 0xd4, 0x97, 0x35, 0xd0, 0xbb, + 0x95, 0xd8, 0xcd, 0x63, 0xf1, 0x41, 0x2d, 0x09, 0xf3, 0x2b, 0x40, 0xfd, 0xb3, 0x23, 0x30, 0xc3, + 0x55, 0xf6, 0xa6, 0xed, 0x5a, 0xb6, 0xdb, 0x3b, 0x85, 0x03, 0xe2, 0x16, 0x4c, 0x06, 0x32, 0xcd, + 0x7f, 0xed, 0xf8, 0x69, 0xfe, 0xe3, 0x78, 0x89, 0x32, 0xc3, 0x7f, 0x8c, 0x08, 0x5d, 0x87, 0xf1, + 0x37, 0x28, 0xa7, 0x8a, 0x16, 0xf8, 0xb1, 0x18, 0x86, 0x5c, 0xbc, 0x8c, 0xc9, 0x05, 0x58, 0xa0, + 0x40, 0x21, 0x73, 0x85, 0x62, 0x92, 0x4b, 0xa5, 0x67, 0xf6, 0x89, 0xa9, 0x95, 0x41, 0xd8, 0xa7, + 0x85, 0x4b, 0x15, 0xfb, 0x85, 0x25, 0x25, 0x16, 0xcd, 0x38, 0xd1, 0xe2, 0xed, 0x12, 0xcd, 0x38, + 0xd1, 0xe9, 0x82, 0x73, 0xee, 0x59, 0x38, 0x9f, 0x3b, 0x1b, 0x47, 0x4b, 0x86, 0xfa, 0x37, 0x6b, + 0xc0, 0x52, 0xe7, 0x9f, 0xc2, 0xda, 0xfc, 0x48, 0x42, 0x78, 0x79, 0xa1, 0x7c, 0x3c, 0xe5, 0x22, + 0xf3, 0x4f, 0x2f, 0x65, 0xfe, 0x79, 0xa9, 0x3c, 0x89, 0xc3, 0x6d, 0x3f, 0xbf, 0x59, 0x03, 0xa0, + 0xd5, 0x9a, 0x86, 0xb9, 0xcd, 0xb9, 0x87, 0x5c, 0xd1, 0x5a, 0x92, 0x7b, 0x64, 0x57, 0xe2, 0x69, + 0xde, 0xed, 0xe9, 0x30, 0xce, 0x33, 0x1d, 0x0b, 0x5b, 0x3a, 0xf0, 0x34, 0x90, 0xb4, 0x04, 0x0b, + 0x48, 0x92, 0x63, 0x8c, 0xde, 0x23, 0x8e, 0xa1, 0x7f, 0x53, 0x03, 0x96, 0xb3, 0xab, 0x7d, 0x83, + 0x3d, 0x40, 0xb6, 0xf9, 0x25, 0x57, 0x5b, 0x8d, 0x05, 0xc9, 0x4c, 0xc9, 0x1d, 0x15, 0x80, 0x93, + 0xf5, 0x90, 0xab, 0xcc, 0x6b, 0xad, 0xc2, 0x83, 0x02, 0xd1, 0x91, 0x23, 0x79, 0xc4, 0x0f, 0x6b, + 0x70, 0x26, 0x55, 0xf7, 0x18, 0xba, 0xd5, 0xfd, 0x61, 0xb9, 0x4a, 0xee, 0x86, 0x91, 0x53, 0xc8, + 0xdd, 0x20, 0xd3, 0x28, 0x8c, 0xde, 0xe7, 0x34, 0x0a, 0xdf, 0xd1, 0xa0, 0x4e, 0xe7, 0xf8, 0x14, + 0xd8, 0xef, 0xcf, 0x27, 0xd9, 0xef, 0xb3, 0xa5, 0xd7, 0x4e, 0x01, 0xd7, 0xfd, 0x0b, 0x0d, 0x58, + 0x34, 0x77, 0x71, 0xb3, 0xaf, 0x5c, 0x96, 0x6b, 0x05, 0x97, 0xe5, 0x8f, 0x8a, 0xbb, 0xf6, 0x94, + 0x21, 0x54, 0xb9, 0x6f, 0x7f, 0x9f, 0x72, 0x9d, 0x3e, 0x92, 0x64, 0x25, 0xd9, 0x2b, 0x75, 0xf4, + 0x26, 0xcc, 0x04, 0x5b, 0x9e, 0x17, 0xca, 0x47, 0xe9, 0xa3, 0x15, 0xcc, 0xde, 0xcc, 0x1f, 0x37, + 0x1a, 0x0b, 0xdf, 0x9d, 0x5d, 0x15, 0x39, 0x4e, 0xd2, 0xd2, 0xff, 0x44, 0x0c, 0xff, 0x04, 0x5b, + 0xe5, 0x14, 0x59, 0xdf, 0x7b, 0x52, 0xac, 0x4f, 0xc9, 0x82, 0x9b, 0x60, 0x7f, 0x8d, 0x78, 0xe1, + 0x4b, 0xcb, 0x73, 0x62, 0xc1, 0xfe, 0x5d, 0x31, 0x4c, 0x19, 0xa5, 0x7f, 0x00, 0x33, 0x8e, 0x9a, + 0x8a, 0x4d, 0xac, 0xdc, 0x52, 0x59, 0xdc, 0xa4, 0x97, 0x7d, 0xa2, 0x18, 0x27, 0x09, 0x50, 0x06, + 0x1a, 0x8d, 0x8e, 0x27, 0x83, 0xaf, 0xc5, 0x7e, 0x90, 0x6b, 0x2a, 0x00, 0x27, 0xeb, 0xe9, 0x5f, + 0xad, 0xc1, 0x23, 0xbc, 0xef, 0xcc, 0xe9, 0xb9, 0x4d, 0x06, 0xc4, 0xb5, 0x88, 0x6b, 0xee, 0x31, + 0x41, 0xd9, 0xf2, 0x7a, 0xe8, 0xd3, 0x1a, 0xd4, 0x89, 0x6b, 0x0d, 0x3c, 0xdb, 0x8d, 0x8c, 0xfc, + 0xaf, 0x57, 0x48, 0x74, 0x50, 0x40, 0x66, 0x59, 0x50, 0x10, 0x01, 0x14, 0xc5, 0x2f, 0x2c, 0x29, + 0xa3, 0x5d, 0x18, 0x1b, 0xf8, 0xde, 0x46, 0xa4, 0x24, 0xbe, 0x76, 0xef, 0xbb, 0xb0, 0x46, 0xd1, + 0xf3, 0xcf, 0xcb, 0xfe, 0xc5, 0x9c, 0xa0, 0x8e, 0xe1, 0xdd, 0xc7, 0xea, 0xfa, 0x09, 0xdc, 0x14, + 0xf4, 0x9b, 0xa0, 0x1f, 0xdd, 0x97, 0x93, 0x20, 0x7c, 0x05, 0x1e, 0x53, 0x10, 0x2e, 0xef, 0x9a, + 0x24, 0x08, 0x5a, 0xc6, 0xc0, 0x30, 0xa9, 0x86, 0xcc, 0x5e, 0xe0, 0x72, 0xeb, 0xf5, 0x09, 0x50, + 0x7e, 0xb2, 0x06, 0x0d, 0x05, 0x67, 0xc2, 0x07, 0x26, 0x62, 0x2f, 0x5f, 0xd6, 0x60, 0xca, 0x70, + 0x5d, 0x2f, 0x34, 0xd4, 0x34, 0x97, 0xa4, 0xea, 0xc7, 0xc9, 0xa3, 0xb5, 0xb8, 0x14, 0xd3, 0x49, + 0xdd, 0x91, 0x2a, 0x10, 0xac, 0x76, 0xe7, 0xe2, 0x8b, 0x30, 0x97, 0x6e, 0x75, 0x22, 0x55, 0xb8, + 0x05, 0x17, 0x94, 0x5e, 0xb1, 0x3b, 0x9a, 0xd6, 0x16, 0x31, 0xb7, 0x83, 0x93, 0xcc, 0x63, 0x93, + 0x8a, 0xde, 0x12, 0x89, 0x92, 0x45, 0xe4, 0x09, 0x98, 0xd8, 0xb1, 0x03, 0x3b, 0x7a, 0x59, 0xaf, + 0xe0, 0x78, 0x95, 0x17, 0xe3, 0x08, 0xae, 0xbf, 0x0c, 0x67, 0x55, 0x1c, 0x8c, 0xcb, 0x9e, 0xc8, + 0x31, 0x46, 0x5f, 0x85, 0x47, 0x15, 0x0c, 0xb9, 0xef, 0x01, 0x4f, 0x82, 0xee, 0x6b, 0xf5, 0x88, + 0xe7, 0x89, 0xc7, 0x12, 0xdf, 0xd6, 0xe0, 0x41, 0x52, 0xb4, 0xec, 0x04, 0xdf, 0xf8, 0x50, 0xd5, + 0x75, 0x51, 0xb8, 0xae, 0x45, 0xe0, 0xb3, 0x22, 0x30, 0x2e, 0xee, 0x1a, 0xba, 0x93, 0x48, 0xa1, + 0x53, 0xab, 0xa4, 0x6e, 0xe6, 0x7c, 0xe5, 0xc3, 0x12, 0xe8, 0x20, 0x1f, 0xea, 0x81, 0xf8, 0x96, + 0x95, 0x9e, 0x2d, 0xe7, 0xac, 0x0d, 0xe1, 0x64, 0x27, 0x7e, 0x61, 0x49, 0x07, 0x7d, 0x4d, 0x83, + 0x73, 0x4e, 0xce, 0xfe, 0x12, 0x92, 0xc1, 0xad, 0xfb, 0xb1, 0x77, 0xb9, 0x65, 0x3e, 0x0f, 0x82, + 0x73, 0xfb, 0x82, 0xfe, 0x66, 0xe1, 0x03, 0xd9, 0xb1, 0x0a, 0x99, 0x29, 0x8f, 0xda, 0x00, 0x25, + 0xde, 0xca, 0xfe, 0x22, 0x4c, 0x79, 0x31, 0x5b, 0x10, 0x8f, 0x9a, 0xaf, 0x57, 0xed, 0x9d, 0xc2, + 0x69, 0xf8, 0x5d, 0xa7, 0x52, 0x80, 0x55, 0x82, 0xe8, 0x2d, 0x0d, 0x90, 0x95, 0x39, 0x3e, 0xc4, + 0x7d, 0x2b, 0xbe, 0xf7, 0x87, 0x24, 0xbf, 0xdc, 0xc9, 0x96, 0xe3, 0x9c, 0x5e, 0xe8, 0xff, 0x74, + 0x82, 0x4b, 0xf2, 0xcc, 0xb6, 0x6e, 0xc2, 0xf8, 0x06, 0x53, 0x86, 0x05, 0x33, 0x28, 0xaf, 0x7a, + 0x73, 0x9d, 0x9a, 0xab, 0xaa, 0xfc, 0x7f, 0x2c, 0x50, 0xa3, 0x45, 0x80, 0x0d, 0xc7, 0x33, 0xb7, + 0x5b, 0x9d, 0x36, 0x8e, 0x84, 0x20, 0xb6, 0x01, 0x9b, 0xb2, 0x14, 0x2b, 0x35, 0xd0, 0x87, 0x61, + 0xc4, 0x92, 0xfa, 0xd3, 0xf3, 0x55, 0x54, 0xc7, 0xd8, 0xed, 0x99, 0x6e, 0x37, 0x8a, 0x15, 0x79, + 0x50, 0x77, 0x85, 0xb0, 0x2c, 0x36, 0x57, 0xf9, 0x0c, 0x51, 0x52, 0xea, 0x96, 0xc2, 0x7e, 0x54, + 0x82, 0x25, 0x11, 0x4a, 0x50, 0x6a, 0xc3, 0x63, 0x15, 0x09, 0x4a, 0x55, 0xf8, 0x30, 0x43, 0xc5, + 0x9a, 0xaa, 0xd8, 0x8e, 0x1f, 0x5f, 0xb1, 0x9d, 0x29, 0x54, 0x6a, 0x37, 0x61, 0x3c, 0x34, 0x6c, + 0x37, 0x8c, 0x9c, 0xe2, 0x5e, 0x2c, 0x3d, 0x80, 0x5b, 0x14, 0x4d, 0x2c, 0xd4, 0xb3, 0x9f, 0x01, + 0x16, 0xd8, 0xe9, 0x6a, 0xdc, 0x61, 0x89, 0xf4, 0x44, 0x54, 0xc6, 0xf2, 0xab, 0x91, 0xe7, 0xe3, + 0xe3, 0xab, 0x91, 0xff, 0x8f, 0x05, 0x6a, 0xb4, 0x4d, 0x55, 0x35, 0x7e, 0x3e, 0x8a, 0x87, 0xfd, + 0x4b, 0x55, 0x77, 0x64, 0x10, 0x39, 0x4f, 0xf3, 0x5f, 0x58, 0x12, 0x40, 0x26, 0x4c, 0x08, 0xdb, + 0x88, 0x88, 0xcc, 0xfe, 0x7c, 0x95, 0xec, 0x18, 0x51, 0x9a, 0x49, 0xfe, 0xee, 0x34, 0xc2, 0xac, + 0xff, 0xc9, 0x28, 0x37, 0x6b, 0xfd, 0x08, 0x73, 0x9c, 0xf7, 0xa0, 0x1e, 0x21, 0xab, 0x64, 0x27, + 0x8c, 0xf2, 0x20, 0xf1, 0x09, 0x95, 0x59, 0x91, 0x24, 0x72, 0xd4, 0xca, 0x7b, 0xaa, 0xa1, 0x84, + 0x13, 0x3b, 0xd6, 0x33, 0x8d, 0x7c, 0xcf, 0x93, 0xd1, 0x52, 0x9e, 0x27, 0x2f, 0xc0, 0x19, 0x71, + 0xd3, 0xd8, 0xb1, 0x08, 0xbb, 0xfb, 0x12, 0xfe, 0xa9, 0xec, 0x45, 0x64, 0x2b, 0x09, 0xc2, 0xe9, + 0xba, 0xe8, 0xeb, 0x1a, 0x3c, 0xc6, 0x7d, 0x63, 0x5b, 0xf4, 0x28, 0x63, 0x29, 0x0e, 0x49, 0x9c, + 0x53, 0x31, 0xf6, 0xca, 0x18, 0x3f, 0xb1, 0x57, 0xc6, 0xe3, 0x07, 0xfb, 0x8d, 0xc7, 0x5a, 0xc7, + 0xc0, 0x8d, 0x8f, 0xd5, 0x03, 0xfd, 0x3a, 0x4c, 0xca, 0x2d, 0x8c, 0x1e, 0x51, 0x04, 0xf6, 0x98, + 0xcb, 0x5e, 0x27, 0x7b, 0x5c, 0x7a, 0x6f, 0x24, 0xa4, 0x77, 0xae, 0xbf, 0xbd, 0x4a, 0x0b, 0x84, + 0x20, 0xaf, 0xff, 0x47, 0x8d, 0xaf, 0x59, 0x91, 0x96, 0xd3, 0x80, 0xa9, 0x3e, 0x8f, 0xa4, 0xc6, + 0x1e, 0x56, 0x69, 0xe5, 0x9f, 0x74, 0xad, 0xc6, 0x68, 0xb0, 0x8a, 0x13, 0xed, 0x66, 0x73, 0xc7, + 0x5e, 0xad, 0xc8, 0x5f, 0x8e, 0x9d, 0x42, 0x16, 0x65, 0xdb, 0x50, 0xb9, 0x3e, 0xf2, 0x27, 0x4b, + 0x25, 0xeb, 0xcc, 0xf8, 0x94, 0x1d, 0x99, 0x5e, 0x4d, 0xff, 0xf6, 0x08, 0xe4, 0xe6, 0xad, 0x40, + 0x3a, 0x8c, 0x73, 0x2f, 0x67, 0x35, 0xab, 0x2e, 0x77, 0x81, 0xc6, 0x02, 0x82, 0x7c, 0x38, 0x27, + 0x5c, 0x88, 0xaf, 0x93, 0xbd, 0x38, 0x9b, 0xab, 0xd8, 0xc8, 0x8f, 0xe7, 0x9d, 0x1d, 0xec, 0x15, + 0x40, 0xfa, 0xe6, 0x88, 0x85, 0x58, 0xea, 0xa6, 0x30, 0xe1, 0x5c, 0xdc, 0xe8, 0x26, 0x7f, 0x11, + 0xe1, 0x5a, 0x2c, 0x08, 0x49, 0xbc, 0xdc, 0x54, 0x27, 0xfe, 0xe5, 0xbc, 0x0a, 0x38, 0xbf, 0x1d, + 0xda, 0x01, 0xd4, 0x37, 0x76, 0xd3, 0xd8, 0x2a, 0xc4, 0x8a, 0x5f, 0xcd, 0x60, 0xc3, 0x39, 0x14, + 0xe8, 0xfe, 0x37, 0x4c, 0x93, 0x0c, 0x42, 0x62, 0xf1, 0x69, 0x8d, 0xde, 0x34, 0xb3, 0xfd, 0xbf, + 0x94, 0x04, 0xe1, 0x74, 0x5d, 0xfd, 0x5b, 0x35, 0x18, 0x63, 0xfa, 0xc0, 0xdb, 0xc4, 0x0b, 0x85, + 0xf5, 0xb5, 0xf0, 0x26, 0x67, 0x2b, 0x75, 0x93, 0xf3, 0x72, 0x05, 0x1a, 0x87, 0x5f, 0xe5, 0x7c, + 0x08, 0x2e, 0xb0, 0x6a, 0x4b, 0x16, 0x53, 0x01, 0x02, 0x62, 0x2d, 0x59, 0x16, 0x7b, 0x9e, 0x74, + 0xb4, 0x8f, 0xc1, 0x23, 0x30, 0x32, 0xf4, 0x9d, 0xf4, 0xc3, 0xb8, 0x75, 0xbc, 0x82, 0x69, 0xb9, + 0xfe, 0x39, 0x0d, 0xe6, 0x18, 0xee, 0x96, 0x4f, 0x18, 0x9b, 0x36, 0x9c, 0x00, 0xdd, 0x86, 0xba, + 0x2f, 0x4c, 0x16, 0xe2, 0xeb, 0xac, 0x96, 0x1f, 0x9b, 0x82, 0x18, 0x0b, 0xa4, 0x22, 0xcd, 0x8a, + 0xf8, 0x85, 0x25, 0x31, 0xfd, 0xcf, 0xc7, 0x61, 0xa1, 0xa8, 0x11, 0xfa, 0xbc, 0x06, 0x17, 0xcc, + 0x98, 0x6b, 0x2f, 0x0d, 0xc3, 0x2d, 0xcf, 0xb7, 0x43, 0x9b, 0x04, 0x95, 0xe4, 0xf9, 0xd6, 0x92, + 0xec, 0x16, 0x0b, 0x12, 0xd0, 0xca, 0x25, 0x81, 0x0b, 0x48, 0xa3, 0x8f, 0x03, 0x6c, 0xc7, 0x91, + 0x89, 0x6a, 0x15, 0xf2, 0xdf, 0xb2, 0x81, 0x2b, 0xe1, 0x8b, 0xa2, 0x5e, 0x31, 0xed, 0x41, 0x29, + 0x57, 0xe8, 0xb1, 0xec, 0xbb, 0xc1, 0xd6, 0x75, 0xb2, 0x37, 0x30, 0x6c, 0xbf, 0x52, 0xf6, 0x5d, + 0xbe, 0x0e, 0xbb, 0xd7, 0x04, 0xae, 0x24, 0x75, 0xa5, 0x5c, 0xa1, 0x87, 0x7e, 0x4d, 0x83, 0x19, + 0x2e, 0x25, 0x08, 0xff, 0x13, 0xc1, 0x82, 0x6e, 0x96, 0xef, 0xc1, 0x4d, 0x15, 0x9d, 0xec, 0x04, + 0xb3, 0x22, 0x27, 0x41, 0x49, 0xc2, 0xe8, 0x8b, 0x1a, 0xcc, 0x27, 0xb3, 0x16, 0x5d, 0x27, 0x7b, + 0x42, 0x05, 0xe9, 0x56, 0x98, 0x90, 0x34, 0x4a, 0xd9, 0x25, 0x26, 0x80, 0x65, 0xc1, 0xd9, 0x4e, + 0xb0, 0xae, 0x91, 0xd0, 0xb4, 0x44, 0x36, 0x6c, 0xdb, 0x73, 0x69, 0xd7, 0xc6, 0xab, 0x76, 0x6d, + 0xf9, 0x56, 0xab, 0x9d, 0x40, 0x99, 0xec, 0x5a, 0x16, 0x9c, 0xed, 0x84, 0xfe, 0x8f, 0x6b, 0x70, + 0xe9, 0x70, 0x64, 0xe8, 0xa5, 0xc8, 0xd9, 0x98, 0xb3, 0x98, 0x27, 0xd2, 0xce, 0xc6, 0x0b, 0x39, + 0x5b, 0x35, 0xe1, 0x78, 0xec, 0x03, 0x72, 0x8c, 0x20, 0xe4, 0xb9, 0x02, 0x23, 0x21, 0xab, 0x84, + 0xdf, 0x31, 0x3b, 0xa7, 0x56, 0x32, 0x98, 0x70, 0x0e, 0xf6, 0x88, 0x66, 0xcb, 0xeb, 0x0f, 0x1c, + 0x22, 0x69, 0xd6, 0xca, 0xd3, 0x4c, 0x62, 0xc2, 0x39, 0xd8, 0xf5, 0x5f, 0xaa, 0xc1, 0x03, 0x05, + 0x5b, 0xb8, 0x60, 0x0e, 0xb4, 0xff, 0xeb, 0xe6, 0xe0, 0xbb, 0x1a, 0x4c, 0xb2, 0x39, 0x78, 0xbb, + 0x38, 0x66, 0xb2, 0xce, 0x16, 0x5c, 0x9d, 0xfe, 0xbe, 0x06, 0xf3, 0x99, 0xf8, 0x3f, 0xc7, 0x38, + 0x71, 0x4f, 0xf1, 0x02, 0xf1, 0xdd, 0xe9, 0x44, 0xc3, 0x53, 0xb9, 0x49, 0x86, 0x5f, 0x83, 0x99, + 0xc4, 0xc5, 0xa9, 0x7c, 0x4f, 0xad, 0xe5, 0xbe, 0xa7, 0x56, 0x9f, 0x4b, 0xd7, 0x0e, 0x7f, 0x2e, + 0x5d, 0x83, 0x8b, 0xc5, 0x6c, 0xfb, 0x2f, 0xcd, 0xb2, 0x97, 0x5b, 0x3f, 0x7b, 0x7e, 0xfe, 0xa5, + 0x99, 0x03, 0x79, 0x94, 0x14, 0x1e, 0x99, 0xff, 0xef, 0x28, 0x39, 0xee, 0x5c, 0x7e, 0xfb, 0x8c, + 0x60, 0xa3, 0xcc, 0x6c, 0xfd, 0x11, 0x18, 0x67, 0xa1, 0x02, 0x22, 0x31, 0xf7, 0x67, 0xca, 0xc7, + 0x20, 0x08, 0xb8, 0x4a, 0xcc, 0xff, 0xc7, 0x02, 0x2d, 0x6a, 0xc3, 0x9c, 0xe9, 0x78, 0x43, 0x4b, + 0xa4, 0x61, 0xba, 0x11, 0x6b, 0xdf, 0x32, 0xc2, 0x52, 0x2b, 0x05, 0xc7, 0x99, 0x16, 0xa8, 0xab, + 0x1a, 0xb2, 0x9f, 0x29, 0xeb, 0x9b, 0xc3, 0xa3, 0x0a, 0x4b, 0x03, 0xb6, 0x0f, 0x40, 0x22, 0x8e, + 0x18, 0x3d, 0x91, 0x78, 0xb1, 0x64, 0xf4, 0x28, 0xc9, 0x58, 0x23, 0xbd, 0x51, 0x16, 0x05, 0x58, + 0xa1, 0x82, 0x02, 0x98, 0xda, 0x8a, 0x13, 0x6f, 0x0b, 0x19, 0xf2, 0xe5, 0xaa, 0x59, 0xbf, 0xb9, + 0xc1, 0x46, 0x29, 0xc0, 0x2a, 0x15, 0x14, 0x70, 0x35, 0x82, 0x9b, 0xee, 0x2a, 0xa5, 0x40, 0x8d, + 0x8d, 0x82, 0xf1, 0x48, 0xe3, 0x32, 0xac, 0x90, 0xa1, 0x44, 0x5d, 0x19, 0xf1, 0x43, 0xdc, 0xd8, + 0x94, 0x23, 0x1a, 0x07, 0x0e, 0x89, 0x89, 0xc6, 0x65, 0x58, 0x21, 0x43, 0xa7, 0xb7, 0x1f, 0xc7, + 0x79, 0x11, 0xc6, 0xef, 0x97, 0xab, 0x06, 0xdc, 0x11, 0xf6, 0xb0, 0xb8, 0x00, 0xab, 0x54, 0x90, + 0x07, 0xd0, 0x97, 0xf1, 0x5f, 0x84, 0x25, 0xbc, 0xdc, 0x48, 0xe3, 0x30, 0x32, 0x5c, 0x35, 0x8a, + 0x7f, 0x63, 0x85, 0x04, 0xda, 0x56, 0x2e, 0x42, 0xa0, 0x82, 0x8d, 0xf8, 0x58, 0x97, 0x20, 0x1f, + 0x88, 0xad, 0x6b, 0x53, 0x6c, 0xdf, 0x3e, 0xa4, 0x58, 0xd6, 0xee, 0xee, 0x37, 0xa6, 0x19, 0x33, + 0xc9, 0x58, 0xda, 0x62, 0xf7, 0xa3, 0xe9, 0x43, 0xdd, 0x8f, 0xae, 0x52, 0xd5, 0x4a, 0xf1, 0xdc, + 0x65, 0x0c, 0x62, 0x86, 0x35, 0x91, 0x11, 0x83, 0xba, 0xe9, 0x0a, 0x38, 0xdb, 0x86, 0x0b, 0x16, + 0xc4, 0x62, 0xed, 0x67, 0x55, 0xc1, 0x82, 0x97, 0x61, 0x09, 0x45, 0xb7, 0x61, 0x3a, 0x50, 0xfc, + 0x99, 0x44, 0x8a, 0x9f, 0x2a, 0x77, 0x17, 0xc2, 0x99, 0x89, 0x05, 0x52, 0x50, 0x4b, 0x70, 0x82, + 0x10, 0xfa, 0x38, 0x4c, 0x46, 0xb6, 0xd6, 0x60, 0x61, 0xae, 0xc2, 0xab, 0x99, 0xfc, 0xb0, 0x3f, + 0xb1, 0xf1, 0x34, 0x02, 0x05, 0x38, 0x26, 0x88, 0x76, 0x92, 0x6f, 0x56, 0xe7, 0xef, 0xcd, 0x2b, + 0x3d, 0xe9, 0xa5, 0x52, 0xf4, 0x5e, 0x15, 0xb5, 0x60, 0x9e, 0xec, 0x0e, 0xbc, 0x60, 0xe8, 0x13, + 0x16, 0x75, 0x8c, 0x7d, 0x21, 0x14, 0x5f, 0x34, 0x2c, 0xa7, 0x81, 0x38, 0x5b, 0x1f, 0x7d, 0x46, + 0x83, 0x39, 0x9e, 0x23, 0x89, 0x1e, 0x67, 0x9e, 0x4b, 0xdc, 0x30, 0x60, 0x49, 0x80, 0xca, 0xbe, + 0x6c, 0xe9, 0xa6, 0x90, 0x09, 0x9b, 0x6b, 0xaa, 0x14, 0x67, 0x88, 0xd2, 0xd5, 0xa3, 0x3e, 0xf4, + 0x63, 0xc9, 0x84, 0xca, 0xae, 0x1e, 0xf5, 0x15, 0x21, 0x5f, 0x3d, 0x6a, 0x09, 0x4e, 0x10, 0xd2, + 0xff, 0x85, 0x06, 0x20, 0x0d, 0x7a, 0xe4, 0x14, 0xac, 0x9c, 0x24, 0x61, 0xe5, 0x6c, 0x55, 0xb3, + 0x40, 0x92, 0xc2, 0x07, 0x77, 0x7f, 0xa4, 0xc1, 0x6c, 0x5c, 0xed, 0x14, 0x94, 0x3b, 0x2b, 0xa9, + 0xdc, 0xbd, 0x54, 0x71, 0x60, 0x05, 0x1a, 0xde, 0xff, 0xae, 0xa9, 0xc3, 0x62, 0xc2, 0xd6, 0x6d, + 0xe5, 0x6e, 0x8f, 0xdf, 0x26, 0x76, 0x2a, 0xdd, 0xed, 0xa9, 0xcf, 0x98, 0xe2, 0x11, 0xe7, 0xdc, + 0xf5, 0x7d, 0x22, 0x21, 0xe9, 0x54, 0x79, 0xaf, 0x27, 0xc5, 0x9a, 0x88, 0x36, 0x9f, 0x82, 0xa3, + 0xc4, 0x1e, 0x5f, 0xe5, 0x7c, 0xfc, 0x09, 0xcd, 0x52, 0xc9, 0x37, 0x62, 0xca, 0x90, 0x0f, 0xe5, + 0x77, 0xfa, 0x37, 0x67, 0x61, 0x4a, 0x31, 0x80, 0xff, 0x48, 0x6e, 0x73, 0x87, 0x30, 0x65, 0x7a, + 0x6e, 0x10, 0xfa, 0xfc, 0xd2, 0xbf, 0x76, 0x4f, 0x88, 0x4a, 0x96, 0xdb, 0x8a, 0x51, 0x63, 0x95, + 0x0e, 0x15, 0x10, 0xe4, 0x42, 0x1b, 0xb9, 0x17, 0x97, 0xc8, 0x87, 0x2d, 0xae, 0xf7, 0x03, 0x44, + 0xc2, 0x26, 0xb1, 0x44, 0x8c, 0x27, 0x19, 0x7b, 0xbe, 0x13, 0x5c, 0x93, 0x30, 0xac, 0xd4, 0x43, + 0x6f, 0xc2, 0x8c, 0xa3, 0x86, 0x62, 0x16, 0xa2, 0x70, 0x39, 0xcf, 0xed, 0x44, 0x50, 0x67, 0x6e, + 0xd0, 0x4d, 0x14, 0xe1, 0x24, 0x2d, 0xb4, 0x0d, 0x93, 0x4e, 0x14, 0x67, 0x5d, 0xc8, 0xc3, 0x2f, + 0x96, 0x26, 0xcc, 0xb0, 0x70, 0x9f, 0x0f, 0xf9, 0x13, 0xc7, 0xf8, 0xe9, 0xba, 0x93, 0x3f, 0xaa, + 0xf9, 0x7d, 0xc4, 0xd4, 0xe4, 0xba, 0x93, 0x45, 0x01, 0x56, 0xa8, 0x14, 0xdc, 0xcb, 0xd7, 0x4b, + 0xdd, 0xcb, 0x0f, 0xe1, 0xac, 0x4f, 0x42, 0x7f, 0xaf, 0xb5, 0x67, 0xb2, 0x7c, 0x07, 0x7e, 0xc8, + 0xb4, 0xd4, 0xc9, 0x72, 0xc1, 0x1d, 0x70, 0x16, 0x15, 0xce, 0xc3, 0x8f, 0x1e, 0x86, 0x51, 0x2a, + 0x3c, 0x89, 0xe0, 0x49, 0xcc, 0x8c, 0x44, 0x45, 0x2b, 0xcc, 0x4a, 0xd1, 0x07, 0x60, 0x2a, 0x24, + 0xe6, 0x96, 0x6b, 0x9b, 0x86, 0xd3, 0x69, 0x0b, 0xc9, 0x34, 0x96, 0x45, 0x62, 0x10, 0x56, 0xeb, + 0xa1, 0x26, 0x8c, 0x0c, 0x6d, 0x4b, 0x88, 0xa4, 0x3f, 0x29, 0x2f, 0xac, 0x3a, 0xed, 0xbb, 0xfb, + 0x8d, 0x77, 0xc6, 0xaf, 0x87, 0xe5, 0x48, 0x2e, 0x0f, 0xb6, 0x7b, 0x97, 0xc3, 0xbd, 0x01, 0x09, + 0x16, 0xd7, 0x3b, 0x6d, 0x4c, 0x1b, 0xe7, 0xf9, 0x29, 0xcc, 0x9c, 0xc0, 0x4f, 0xe1, 0x2d, 0x0d, + 0xce, 0x1a, 0xe9, 0xbb, 0x36, 0x12, 0x2c, 0xcc, 0x56, 0xe0, 0xca, 0xf9, 0x17, 0x78, 0x71, 0x9c, + 0xcc, 0xa5, 0x2c, 0x3d, 0x9c, 0xd7, 0x09, 0xe4, 0x03, 0xea, 0xdb, 0x3d, 0x19, 0x55, 0x5d, 0x7c, + 0xea, 0x33, 0xe5, 0x0c, 0x12, 0xab, 0x19, 0x4c, 0x38, 0x07, 0x3b, 0xda, 0x85, 0x29, 0x33, 0xb6, + 0xcd, 0xb0, 0xdc, 0x96, 0xa5, 0x85, 0xba, 0xd4, 0xf5, 0x9e, 0x48, 0x9b, 0xac, 0x58, 0x7e, 0x54, + 0x52, 0xe8, 0xb3, 0x1a, 0x5c, 0xa4, 0x9b, 0x46, 0x51, 0x9c, 0x45, 0xb0, 0x7f, 0x36, 0xec, 0xf9, + 0x13, 0x0f, 0x9b, 0xe5, 0xcb, 0x5c, 0x29, 0xc4, 0x88, 0x0f, 0xa1, 0x86, 0x7e, 0x59, 0x83, 0x33, + 0x4e, 0x32, 0xfb, 0x01, 0x93, 0x92, 0xcb, 0xbe, 0xf9, 0x4a, 0x65, 0x52, 0xe0, 0xab, 0x33, 0x55, + 0x88, 0xd3, 0x14, 0xf5, 0xff, 0xaa, 0x41, 0x46, 0x08, 0x46, 0x26, 0x4c, 0x50, 0xdc, 0xed, 0x1b, + 0x5d, 0x21, 0x8d, 0x3d, 0x5f, 0xf2, 0x04, 0x63, 0x38, 0xb8, 0x1d, 0x59, 0xfc, 0xc0, 0x11, 0x66, + 0x2a, 0x57, 0xbb, 0x4a, 0x54, 0x44, 0x21, 0x75, 0x96, 0x93, 0x12, 0xd4, 0xf0, 0x8a, 0x5c, 0xae, + 0x56, 0x4b, 0x70, 0x82, 0x90, 0xbe, 0x02, 0x10, 0xeb, 0x2e, 0x95, 0xdd, 0x71, 0xfe, 0xc3, 0x18, + 0x9c, 0xaf, 0xea, 0x7e, 0xce, 0x22, 0xd4, 0xb3, 0x0c, 0xc2, 0x4b, 0x9b, 0x21, 0xf1, 0x6f, 0xde, + 0x5c, 0x95, 0xd9, 0x55, 0x4b, 0x86, 0xc8, 0x8f, 0x73, 0x50, 0x67, 0x30, 0xe2, 0x02, 0x4a, 0x4c, + 0x6f, 0x13, 0xc9, 0xf3, 0x30, 0x95, 0xf1, 0x58, 0xea, 0x54, 0xfe, 0xe2, 0x9b, 0xeb, 0x6d, 0x69, + 0x20, 0xce, 0xd6, 0x4f, 0x23, 0xe1, 0xd9, 0x8c, 0xa9, 0x8c, 0xa0, 0x65, 0x91, 0xf0, 0x94, 0xc6, + 0xd9, 0xfa, 0x2a, 0x12, 0xfe, 0xa5, 0xe8, 0xde, 0x18, 0xcb, 0x22, 0x91, 0x40, 0x9c, 0xad, 0x8f, + 0x2c, 0x78, 0xd8, 0x27, 0xa6, 0xd7, 0xef, 0x13, 0xd7, 0xe2, 0xe9, 0x5f, 0x0c, 0xbf, 0x67, 0xbb, + 0x57, 0x7c, 0x83, 0x55, 0x64, 0x62, 0x80, 0xc6, 0xf2, 0xc8, 0x3f, 0x8c, 0x0f, 0xa9, 0x87, 0x0f, + 0xc5, 0x82, 0xfa, 0x70, 0x66, 0xc8, 0x42, 0x21, 0xfb, 0x1d, 0x37, 0x24, 0xfe, 0x8e, 0xe1, 0x94, + 0x4c, 0xd3, 0xcd, 0xb6, 0xeb, 0x7a, 0x12, 0x15, 0x4e, 0xe3, 0x46, 0x7b, 0xf4, 0x6c, 0x16, 0xdd, + 0x51, 0x48, 0xd6, 0xcb, 0xe7, 0x70, 0xc0, 0x59, 0x74, 0x38, 0x8f, 0x86, 0xfe, 0xd7, 0x35, 0x10, + 0x0e, 0xa1, 0xf4, 0xa8, 0x56, 0xae, 0xad, 0xea, 0xa9, 0x2b, 0xab, 0x87, 0xc5, 0xab, 0xb8, 0x5a, + 0x0c, 0x55, 0x5e, 0xc4, 0xbd, 0x47, 0x09, 0x25, 0x30, 0x19, 0xcb, 0x35, 0x1c, 0xb3, 0x12, 0x4e, + 0xfc, 0xff, 0x83, 0x89, 0x81, 0x6f, 0xf7, 0x0d, 0x7f, 0x4f, 0x88, 0x98, 0x4c, 0xe0, 0x12, 0xd7, + 0xca, 0x74, 0xef, 0x08, 0xa8, 0xfe, 0x3d, 0x0d, 0x44, 0x6b, 0x16, 0xf9, 0xfe, 0x58, 0x01, 0xd0, + 0x8f, 0x74, 0x0b, 0x53, 0x02, 0xb7, 0x8f, 0x14, 0x06, 0x6e, 0xbf, 0x4f, 0xf1, 0xcc, 0xbf, 0xad, + 0xc1, 0x99, 0x64, 0x5c, 0x87, 0x00, 0xbd, 0x1b, 0x26, 0x44, 0xec, 0x25, 0x11, 0xbd, 0x85, 0x3f, + 0x6a, 0x15, 0xb9, 0x88, 0x23, 0x58, 0xd2, 0xe0, 0x54, 0x45, 0xed, 0xcb, 0x8f, 0x2f, 0x71, 0x84, + 0x02, 0xb6, 0x3f, 0x0b, 0xe3, 0x3c, 0x58, 0x10, 0x3d, 0xdc, 0x72, 0x1e, 0x52, 0xad, 0x54, 0x88, + 0x47, 0x54, 0xe2, 0xbd, 0x54, 0x22, 0x58, 0x6c, 0xed, 0xd0, 0x60, 0xb1, 0x5d, 0x9e, 0xd1, 0xa1, + 0xca, 0x7d, 0x43, 0x0b, 0x77, 0x44, 0x5a, 0xc7, 0x28, 0x9b, 0xc3, 0x30, 0x61, 0x86, 0x1f, 0xad, + 0x20, 0xe7, 0xf0, 0x29, 0x50, 0x8c, 0xf1, 0xb3, 0x87, 0x18, 0xe2, 0xe3, 0xe0, 0x2c, 0x63, 0x15, + 0x7c, 0x35, 0xc5, 0xac, 0x1f, 0x23, 0x38, 0x8b, 0xdc, 0x4d, 0xe3, 0x85, 0xbb, 0xa9, 0x07, 0x13, + 0x62, 0x3f, 0x08, 0xee, 0xf8, 0x7c, 0x95, 0xb4, 0x0b, 0x4a, 0x50, 0x3f, 0x5e, 0x80, 0x23, 0xec, + 0xf4, 0xcc, 0xed, 0x1b, 0xbb, 0x76, 0x7f, 0xd8, 0x67, 0x3c, 0x71, 0x4c, 0xad, 0xca, 0x8a, 0x71, + 0x04, 0x67, 0x55, 0xb9, 0x93, 0x2b, 0x53, 0x6d, 0xd4, 0xaa, 0x22, 0x33, 0x71, 0x04, 0x47, 0xaf, + 0x43, 0xbd, 0x6f, 0xec, 0x76, 0x87, 0x7e, 0x8f, 0x08, 0xfb, 0x7b, 0xb1, 0xe9, 0x6d, 0x18, 0xda, + 0xce, 0x22, 0x55, 0xca, 0x43, 0x7f, 0xb1, 0xe3, 0x86, 0x37, 0xfd, 0x6e, 0xe8, 0xcb, 0xa8, 0xee, + 0xab, 0x02, 0x0b, 0x96, 0xf8, 0x90, 0x03, 0xb3, 0x7d, 0x63, 0x77, 0xdd, 0x35, 0x64, 0x02, 0xd5, + 0xa9, 0x92, 0x14, 0xd8, 0x1d, 0xff, 0x6a, 0x02, 0x17, 0x4e, 0xe1, 0xce, 0x71, 0x27, 0x98, 0xbe, + 0x5f, 0xee, 0x04, 0x4b, 0xf2, 0xe9, 0xc3, 0x0c, 0x5b, 0x86, 0x0f, 0xe6, 0x79, 0xc3, 0x1e, 0xfe, + 0xaa, 0xe1, 0x23, 0xf2, 0x55, 0xc3, 0x6c, 0x85, 0xcb, 0xca, 0x43, 0x5e, 0x34, 0xec, 0xc0, 0x94, + 0x65, 0x84, 0x06, 0x2f, 0x0d, 0x16, 0xce, 0x54, 0xb0, 0x0f, 0xb6, 0x25, 0x1e, 0x25, 0x11, 0x57, + 0x8c, 0x1b, 0xab, 0x84, 0xd0, 0x4d, 0x9e, 0x60, 0xd3, 0x21, 0x61, 0x5c, 0x85, 0x99, 0xc9, 0xe7, + 0xf8, 0x45, 0x48, 0x94, 0x0e, 0x33, 0x53, 0x01, 0xe7, 0xb7, 0x8b, 0x1f, 0x75, 0xcf, 0xe7, 0x3f, + 0xea, 0x46, 0x7f, 0x25, 0xcf, 0x9e, 0x8e, 0x2a, 0x3c, 0xef, 0xe2, 0xfc, 0xa1, 0xb4, 0x55, 0xfd, + 0xef, 0x68, 0xb0, 0xd0, 0x2f, 0xc8, 0x58, 0x25, 0xec, 0xfc, 0xeb, 0x55, 0x78, 0x44, 0x61, 0x1a, + 0xac, 0xe6, 0x63, 0x07, 0xfb, 0x8d, 0x23, 0x93, 0x65, 0xe1, 0xc2, 0xce, 0x55, 0x7d, 0x84, 0x5b, + 0x25, 0x94, 0xd5, 0x6f, 0x6b, 0x30, 0x97, 0x3e, 0x0a, 0xd4, 0x94, 0xa0, 0xda, 0x7d, 0x4e, 0x09, + 0xaa, 0x78, 0x08, 0xd5, 0x0e, 0xf1, 0x10, 0x7a, 0x01, 0x2e, 0xe4, 0xaf, 0x0e, 0x2a, 0x9c, 0xb1, + 0x44, 0xbc, 0x42, 0x21, 0x8a, 0x93, 0x18, 0xd0, 0x42, 0xcc, 0x61, 0xcd, 0x0f, 0x7d, 0xe7, 0x87, + 0x97, 0xde, 0xf1, 0x87, 0x3f, 0xbc, 0xf4, 0x8e, 0xef, 0xff, 0xf0, 0xd2, 0x3b, 0x3e, 0x79, 0x70, + 0x49, 0xfb, 0xce, 0xc1, 0x25, 0xed, 0x0f, 0x0f, 0x2e, 0x69, 0xdf, 0x3f, 0xb8, 0xa4, 0xfd, 0xdb, + 0x83, 0x4b, 0xda, 0x5f, 0xfd, 0x77, 0x97, 0xde, 0xf1, 0xfa, 0xd3, 0xf1, 0x20, 0x2f, 0x47, 0x63, + 0x8b, 0xff, 0x19, 0x6c, 0xf7, 0x2e, 0xd3, 0x41, 0x46, 0x61, 0xe1, 0xf8, 0x20, 0xff, 0x4f, 0x00, + 0x00, 0x00, 0xff, 0xff, 0x3b, 0xd1, 0xe9, 0xab, 0x50, 0xd6, 0x00, 0x00, } func (m *Addon) Marshal() (dAtA []byte, err error) { @@ -6056,6 +6164,58 @@ func (m *BackupEntryStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *CARotation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CARotation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CARotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastInitiationTime != nil { + { + size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.LastCompletionTime != nil { + { + size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *CRI) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7096,6 +7256,18 @@ func (m *ControllerResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Lifecycle != nil { + { + size, err := m.Lifecycle.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } if m.Primary != nil { i-- if *m.Primary { @@ -7141,6 +7313,50 @@ func (m *ControllerResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ControllerResourceLifecycle) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ControllerResourceLifecycle) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ControllerResourceLifecycle) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Migrate != nil { + i -= len(*m.Migrate) + copy(dAtA[i:], *m.Migrate) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Migrate))) + i-- + dAtA[i] = 0x1a + } + if m.Delete != nil { + i -= len(*m.Delete) + copy(dAtA[i:], *m.Delete) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Delete))) + i-- + dAtA[i] = 0x12 + } + if m.Reconcile != nil { + i -= len(*m.Reconcile) + copy(dAtA[i:], *m.Reconcile) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Reconcile))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *CoreDNS) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8225,6 +8441,18 @@ func (m *KubeAPIServerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Logging != nil { + { + size, err := m.Logging.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } if m.EventTTL != nil { { size, err := m.EventTTL.MarshalToSizedBuffer(dAtA[:i]) @@ -8380,6 +8608,39 @@ func (m *KubeAPIServerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *KubeAPIServerLogging) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *KubeAPIServerLogging) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *KubeAPIServerLogging) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.HTTPAccessVerbosity != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.HTTPAccessVerbosity)) + i-- + dAtA[i] = 0x10 + } + if m.Verbosity != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Verbosity)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *KubeAPIServerRequests) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -9464,6 +9725,56 @@ func (m *LastError) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *LastMaintenance) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LastMaintenance) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LastMaintenance) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.FailureReason != nil { + i -= len(*m.FailureReason) + copy(dAtA[i:], *m.FailureReason) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailureReason))) + i-- + dAtA[i] = 0x22 + } + i -= len(m.State) + copy(dAtA[i:], m.State) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.State))) + i-- + dAtA[i] = 0x1a + { + size, err := m.TriggeredTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *LastOperation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -10233,6 +10544,16 @@ func (m *NodeLocalDNS) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.DisableForwardToUpstreamDNS != nil { + i-- + if *m.DisableForwardToUpstreamDNS { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } if m.ForceTCPToUpstreamDNS != nil { i-- if *m.ForceTCPToUpstreamDNS { @@ -12155,18 +12476,6 @@ func (m *SeedSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.HighAvailability != nil { - { - size, err := m.HighAvailability.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x5a - } if m.Ingress != nil { { size, err := m.Ingress.MarshalToSizedBuffer(dAtA[:i]) @@ -12637,58 +12946,6 @@ func (m *ShootAdvertisedAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *ShootCARotation) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ShootCARotation) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ShootCARotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LastInitiationTime != nil { - { - size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.LastCompletionTime != nil { - { - size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - i -= len(m.Phase) - copy(dAtA[i:], m.Phase) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - func (m *ShootCredentials) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -13607,6 +13864,20 @@ func (m *ShootStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.LastMaintenance != nil { + { + size, err := m.LastMaintenance.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } if m.LastHibernationTriggerTime != nil { { size, err := m.LastHibernationTriggerTime.MarshalToSizedBuffer(dAtA[:i]) @@ -14713,6 +14984,25 @@ func (m *BackupEntryStatus) Size() (n int) { return n } +func (m *CARotation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if m.LastCompletionTime != nil { + l = m.LastCompletionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastInitiationTime != nil { + l = m.LastInitiationTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *CRI) Size() (n int) { if m == nil { return 0 @@ -15105,6 +15395,31 @@ func (m *ControllerResource) Size() (n int) { if m.Primary != nil { n += 2 } + if m.Lifecycle != nil { + l = m.Lifecycle.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ControllerResourceLifecycle) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Reconcile != nil { + l = len(*m.Reconcile) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Delete != nil { + l = len(*m.Delete) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Migrate != nil { + l = len(*m.Migrate) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -15582,6 +15897,25 @@ func (m *KubeAPIServerConfig) Size() (n int) { l = m.EventTTL.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Logging != nil { + l = m.Logging.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *KubeAPIServerLogging) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Verbosity != nil { + n += 1 + sovGenerated(uint64(*m.Verbosity)) + } + if m.HTTPAccessVerbosity != nil { + n += 1 + sovGenerated(uint64(*m.HTTPAccessVerbosity)) + } return n } @@ -15986,6 +16320,25 @@ func (m *LastError) Size() (n int) { return n } +func (m *LastMaintenance) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Description) + n += 1 + l + sovGenerated(uint64(l)) + l = m.TriggeredTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.State) + n += 1 + l + sovGenerated(uint64(l)) + if m.FailureReason != nil { + l = len(*m.FailureReason) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *LastOperation) Size() (n int) { if m == nil { return 0 @@ -16281,6 +16634,9 @@ func (m *NodeLocalDNS) Size() (n int) { if m.ForceTCPToUpstreamDNS != nil { n += 2 } + if m.DisableForwardToUpstreamDNS != nil { + n += 2 + } return n } @@ -17015,10 +17371,6 @@ func (m *SeedSpec) Size() (n int) { l = m.Ingress.Size() n += 1 + l + sovGenerated(uint64(l)) } - if m.HighAvailability != nil { - l = m.HighAvailability.Size() - n += 1 + l + sovGenerated(uint64(l)) - } return n } @@ -17159,25 +17511,6 @@ func (m *ShootAdvertisedAddress) Size() (n int) { return n } -func (m *ShootCARotation) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Phase) - n += 1 + l + sovGenerated(uint64(l)) - if m.LastCompletionTime != nil { - l = m.LastCompletionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.LastInitiationTime != nil { - l = m.LastInitiationTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - func (m *ShootCredentials) Size() (n int) { if m == nil { return 0 @@ -17576,6 +17909,10 @@ func (m *ShootStatus) Size() (n int) { l = m.LastHibernationTriggerTime.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.LastMaintenance != nil { + l = m.LastMaintenance.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -18021,6 +18358,18 @@ func (this *BackupEntryStatus) String() string { }, "") return s } +func (this *CARotation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CARotation{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, + `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, + `}`, + }, "") + return s +} func (this *CRI) String() string { if this == nil { return "nil" @@ -18312,6 +18661,19 @@ func (this *ControllerResource) String() string { `GloballyEnabled:` + valueToStringGenerated(this.GloballyEnabled) + `,`, `ReconcileTimeout:` + strings.Replace(fmt.Sprintf("%v", this.ReconcileTimeout), "Duration", "v11.Duration", 1) + `,`, `Primary:` + valueToStringGenerated(this.Primary) + `,`, + `Lifecycle:` + strings.Replace(this.Lifecycle.String(), "ControllerResourceLifecycle", "ControllerResourceLifecycle", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ControllerResourceLifecycle) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ControllerResourceLifecycle{`, + `Reconcile:` + valueToStringGenerated(this.Reconcile) + `,`, + `Delete:` + valueToStringGenerated(this.Delete) + `,`, + `Migrate:` + valueToStringGenerated(this.Migrate) + `,`, `}`, }, "") return s @@ -18649,6 +19011,18 @@ func (this *KubeAPIServerConfig) String() string { `Requests:` + strings.Replace(this.Requests.String(), "KubeAPIServerRequests", "KubeAPIServerRequests", 1) + `,`, `EnableAnonymousAuthentication:` + valueToStringGenerated(this.EnableAnonymousAuthentication) + `,`, `EventTTL:` + strings.Replace(fmt.Sprintf("%v", this.EventTTL), "Duration", "v11.Duration", 1) + `,`, + `Logging:` + strings.Replace(this.Logging.String(), "KubeAPIServerLogging", "KubeAPIServerLogging", 1) + `,`, + `}`, + }, "") + return s +} +func (this *KubeAPIServerLogging) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&KubeAPIServerLogging{`, + `Verbosity:` + valueToStringGenerated(this.Verbosity) + `,`, + `HTTPAccessVerbosity:` + valueToStringGenerated(this.HTTPAccessVerbosity) + `,`, `}`, }, "") return s @@ -18869,6 +19243,19 @@ func (this *LastError) String() string { }, "") return s } +func (this *LastMaintenance) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LastMaintenance{`, + `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `TriggeredTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TriggeredTime), "Time", "v11.Time", 1), `&`, ``, 1) + `,`, + `State:` + fmt.Sprintf("%v", this.State) + `,`, + `FailureReason:` + valueToStringGenerated(this.FailureReason) + `,`, + `}`, + }, "") + return s +} func (this *LastOperation) String() string { if this == nil { return "nil" @@ -19071,6 +19458,7 @@ func (this *NodeLocalDNS) String() string { `Enabled:` + fmt.Sprintf("%v", this.Enabled) + `,`, `ForceTCPToClusterDNS:` + valueToStringGenerated(this.ForceTCPToClusterDNS) + `,`, `ForceTCPToUpstreamDNS:` + valueToStringGenerated(this.ForceTCPToUpstreamDNS) + `,`, + `DisableForwardToUpstreamDNS:` + valueToStringGenerated(this.DisableForwardToUpstreamDNS) + `,`, `}`, }, "") return s @@ -19621,7 +20009,6 @@ func (this *SeedSpec) String() string { `Volume:` + strings.Replace(this.Volume.String(), "SeedVolume", "SeedVolume", 1) + `,`, `Settings:` + strings.Replace(this.Settings.String(), "SeedSettings", "SeedSettings", 1) + `,`, `Ingress:` + strings.Replace(this.Ingress.String(), "Ingress", "Ingress", 1) + `,`, - `HighAvailability:` + strings.Replace(this.HighAvailability.String(), "HighAvailability", "HighAvailability", 1) + `,`, `}`, }, "") return s @@ -19721,18 +20108,6 @@ func (this *ShootAdvertisedAddress) String() string { }, "") return s } -func (this *ShootCARotation) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ShootCARotation{`, - `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, - `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, - `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, - `}`, - }, "") - return s -} func (this *ShootCredentials) String() string { if this == nil { return "nil" @@ -19748,7 +20123,7 @@ func (this *ShootCredentialsRotation) String() string { return "nil" } s := strings.Join([]string{`&ShootCredentialsRotation{`, - `CertificateAuthorities:` + strings.Replace(this.CertificateAuthorities.String(), "ShootCARotation", "ShootCARotation", 1) + `,`, + `CertificateAuthorities:` + strings.Replace(this.CertificateAuthorities.String(), "CARotation", "CARotation", 1) + `,`, `Kubeconfig:` + strings.Replace(this.Kubeconfig.String(), "ShootKubeconfigRotation", "ShootKubeconfigRotation", 1) + `,`, `SSHKeypair:` + strings.Replace(this.SSHKeypair.String(), "ShootSSHKeypairRotation", "ShootSSHKeypairRotation", 1) + `,`, `Observability:` + strings.Replace(this.Observability.String(), "ShootObservabilityRotation", "ShootObservabilityRotation", 1) + `,`, @@ -19994,6 +20369,7 @@ func (this *ShootStatus) String() string { `MigrationStartTime:` + strings.Replace(fmt.Sprintf("%v", this.MigrationStartTime), "Time", "v11.Time", 1) + `,`, `Credentials:` + strings.Replace(this.Credentials.String(), "ShootCredentials", "ShootCredentials", 1) + `,`, `LastHibernationTriggerTime:` + strings.Replace(fmt.Sprintf("%v", this.LastHibernationTriggerTime), "Time", "v11.Time", 1) + `,`, + `LastMaintenance:` + strings.Replace(this.LastMaintenance.String(), "LastMaintenance", "LastMaintenance", 1) + `,`, `}`, }, "") return s @@ -22266,7 +22642,7 @@ func (m *BackupEntryStatus) Unmarshal(dAtA []byte) error { } return nil } -func (m *CRI) Unmarshal(dAtA []byte) error { +func (m *CARotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -22289,15 +22665,15 @@ func (m *CRI) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CRI: wiretype end group for non-group") + return fmt.Errorf("proto: CARotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CRI: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CARotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -22325,11 +22701,11 @@ func (m *CRI) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = CRIName(dAtA[iNdEx:postIndex]) + m.Phase = CredentialsRotationPhase(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContainerRuntimes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -22356,8 +22732,162 @@ func (m *CRI) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ContainerRuntimes = append(m.ContainerRuntimes, ContainerRuntime{}) - if err := m.ContainerRuntimes[len(m.ContainerRuntimes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} + } + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} + } + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CRI) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CRI: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CRI: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = CRIName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerRuntimes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerRuntimes = append(m.ContainerRuntimes, ContainerRuntime{}) + if err := m.ContainerRuntimes[len(m.ContainerRuntimes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -25294,6 +25824,191 @@ func (m *ControllerResource) Unmarshal(dAtA []byte) error { } b := bool(v != 0) m.Primary = &b + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Lifecycle", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Lifecycle == nil { + m.Lifecycle = &ControllerResourceLifecycle{} + } + if err := m.Lifecycle.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ControllerResourceLifecycle) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ControllerResourceLifecycle: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ControllerResourceLifecycle: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reconcile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ControllerResourceLifecycleStrategy(dAtA[iNdEx:postIndex]) + m.Reconcile = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Delete", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ControllerResourceLifecycleStrategy(dAtA[iNdEx:postIndex]) + m.Delete = &s + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Migrate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ControllerResourceLifecycleStrategy(dAtA[iNdEx:postIndex]) + m.Migrate = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -28679,16 +29394,167 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.OIDCConfig == nil { - m.OIDCConfig = &OIDCConfig{} + if m.OIDCConfig == nil { + m.OIDCConfig = &OIDCConfig{} + } + if err := m.OIDCConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RuntimeConfig == nil { + m.RuntimeConfig = make(map[string]bool) + } + var mapkey string + var mapvalue bool + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapvaluetemp int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvaluetemp |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + mapvalue = bool(mapvaluetemp != 0) + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.RuntimeConfig[mapkey] = mapvalue + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ServiceAccountConfig == nil { + m.ServiceAccountConfig = &ServiceAccountConfig{} } - if err := m.OIDCConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ServiceAccountConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 7: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WatchCacheSizes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -28715,95 +29581,16 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.RuntimeConfig == nil { - m.RuntimeConfig = make(map[string]bool) + if m.WatchCacheSizes == nil { + m.WatchCacheSizes = &WatchCacheSizes{} } - var mapkey string - var mapvalue bool - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapvaluetemp int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapvaluetemp |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - mapvalue = bool(mapvaluetemp != 0) - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } + if err := m.WatchCacheSizes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.RuntimeConfig[mapkey] = mapvalue iNdEx = postIndex - case 8: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Requests", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -28830,16 +29617,37 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ServiceAccountConfig == nil { - m.ServiceAccountConfig = &ServiceAccountConfig{} + if m.Requests == nil { + m.Requests = &KubeAPIServerRequests{} } - if err := m.ServiceAccountConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Requests.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 9: + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EnableAnonymousAuthentication", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.EnableAnonymousAuthentication = &b + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WatchCacheSizes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EventTTL", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -28866,16 +29674,16 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.WatchCacheSizes == nil { - m.WatchCacheSizes = &WatchCacheSizes{} + if m.EventTTL == nil { + m.EventTTL = &v11.Duration{} } - if err := m.WatchCacheSizes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.EventTTL.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 10: + case 13: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Requests", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Logging", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -28902,18 +29710,68 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Requests == nil { - m.Requests = &KubeAPIServerRequests{} + if m.Logging == nil { + m.Logging = &KubeAPIServerLogging{} } - if err := m.Requests.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Logging.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 11: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KubeAPIServerLogging) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: KubeAPIServerLogging: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KubeAPIServerLogging: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EnableAnonymousAuthentication", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Verbosity", wireType) } - var v int + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -28923,18 +29781,17 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } } - b := bool(v != 0) - m.EnableAnonymousAuthentication = &b - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EventTTL", wireType) + m.Verbosity = &v + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HTTPAccessVerbosity", wireType) } - var msglen int + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -28944,28 +29801,12 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.EventTTL == nil { - m.EventTTL = &v11.Duration{} - } - if err := m.EventTTL.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex + m.HTTPAccessVerbosity = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -31984,11 +32825,44 @@ func (m *LastError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Description = string(dAtA[iNdEx:postIndex]) + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TaskID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.TaskID = &s iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TaskID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Codes", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -32016,12 +32890,97 @@ func (m *LastError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.TaskID = &s + m.Codes = append(m.Codes, ErrorCode(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 3: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Codes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastUpdateTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastUpdateTime == nil { + m.LastUpdateTime = &v11.Time{} + } + if err := m.LastUpdateTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LastMaintenance) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LastMaintenance: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LastMaintenance: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -32049,11 +33008,11 @@ func (m *LastError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Codes = append(m.Codes, ErrorCode(dAtA[iNdEx:postIndex])) + m.Description = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastUpdateTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TriggeredTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -32080,13 +33039,75 @@ func (m *LastError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastUpdateTime == nil { - m.LastUpdateTime = &v11.Time{} - } - if err := m.LastUpdateTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.TriggeredTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.State = LastOperationState(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailureReason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.FailureReason = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -34520,6 +35541,27 @@ func (m *NodeLocalDNS) Unmarshal(dAtA []byte) error { } b := bool(v != 0) m.ForceTCPToUpstreamDNS = &b + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DisableForwardToUpstreamDNS", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.DisableForwardToUpstreamDNS = &b default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -40308,83 +41350,13 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Provider.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SecretRef == nil { - m.SecretRef = &v1.SecretReference{} - } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Taints", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Taints = append(m.Taints, SeedTaint{}) - if err := m.Taints[len(m.Taints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Provider.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 8: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40411,16 +41383,16 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Volume == nil { - m.Volume = &SeedVolume{} + if m.SecretRef == nil { + m.SecretRef = &v1.SecretReference{} } - if err := m.Volume.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 9: + case 7: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Settings", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Taints", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40447,16 +41419,50 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Settings == nil { - m.Settings = &SeedSettings{} + m.Taints = append(m.Taints, SeedTaint{}) + if err := m.Taints[len(m.Taints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if err := m.Settings.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Volume == nil { + m.Volume = &SeedVolume{} + } + if err := m.Volume.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 10: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ingress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Settings", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40483,16 +41489,16 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Ingress == nil { - m.Ingress = &Ingress{} + if m.Settings == nil { + m.Settings = &SeedSettings{} } - if err := m.Ingress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Settings.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 11: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HighAvailability", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Ingress", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -40519,10 +41525,10 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.HighAvailability == nil { - m.HighAvailability = &HighAvailability{} + if m.Ingress == nil { + m.Ingress = &Ingress{} } - if err := m.HighAvailability.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Ingress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -41608,160 +42614,6 @@ func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootCARotation) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ShootCARotation: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ShootCARotation: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LastCompletionTime == nil { - m.LastCompletionTime = &v11.Time{} - } - if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LastInitiationTime == nil { - m.LastInitiationTime = &v11.Time{} - } - if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *ShootCredentials) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -41907,7 +42759,7 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.CertificateAuthorities == nil { - m.CertificateAuthorities = &ShootCARotation{} + m.CertificateAuthorities = &CARotation{} } if err := m.CertificateAuthorities.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -42173,7 +43025,7 @@ func (m *ShootETCDEncryptionKeyRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) + m.Phase = CredentialsRotationPhase(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -43077,7 +43929,7 @@ func (m *ShootServiceAccountKeyRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) + m.Phase = CredentialsRotationPhase(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -44874,6 +45726,42 @@ func (m *ShootStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastMaintenance", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastMaintenance == nil { + m.LastMaintenance = &LastMaintenance{} + } + if err := m.LastMaintenance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto index b710cab03..6e6a312de 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/generated.proto @@ -233,6 +233,21 @@ message BackupEntryStatus { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time migrationStartTime = 5; } +// CARotation contains information about the certificate authority credential rotation. +message CARotation { + // Phase describes the phase of the certificate authority credential rotation. + optional string phase = 1; + + // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 3; + + // LastCompletionTime is the most recent time when the certificate authority credential rotation was successfully + // completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; +} + // CRI contains information about the Container Runtimes. message CRI { // The name of the CRI library. Supported values are `docker` and `containerd`. @@ -529,10 +544,12 @@ message ControllerResource { optional string type = 2; // GloballyEnabled determines if this ControllerResource is required by all Shoot clusters. + // This field is defaulted to false when kind is "Extension". // +optional optional bool globallyEnabled = 3; // ReconcileTimeout defines how long Gardener should wait for the resource reconciliation. + // This field is defaulted to 3m0s when kind is "Extension". // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration reconcileTimeout = 4; @@ -541,6 +558,29 @@ message ControllerResource { // combination. This field is immutable. // +optional optional bool primary = 5; + + // Lifecycle defines a strategy that determines when different operations on a ControllerResource should be performed. + // This field is defaulted in the following way when kind is "Extension". + // Reconcile: "AfterKubeAPIServer" + // Delete: "BeforeKubeAPIServer" + // Migrate: "BeforeKubeAPIServer" + // +optional + optional ControllerResourceLifecycle lifecycle = 6; +} + +// ControllerResourceLifecycle defines the lifecycle of a controller resource. +message ControllerResourceLifecycle { + // Reconcile defines the strategy during reconciliation. + // +optional + optional string reconcile = 1; + + // Delete defines the strategy during deletion. + // +optional + optional string delete = 2; + + // Migrate defines the strategy during migration. + // +optional + optional string migrate = 3; } // CoreDNS contains the settings of the Core DNS components running in the data plane of the Shoot cluster. @@ -870,6 +910,8 @@ message KubeAPIServerConfig { // EnableBasicAuthentication defines whether basic authentication should be enabled for this cluster or not. // +optional + // Defaults to false. + // Deprecated: basic authentication has been removed in Kubernetes v1.19+. This field will be removed in a future version. optional bool enableBasicAuthentication = 5; // OIDCConfig contains configuration settings for the OIDC provider. @@ -909,6 +951,22 @@ message KubeAPIServerConfig { // Defaults to 1h. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration eventTTL = 12; + + // Logging contains configuration for the log level and HTTP access logs. + // +optional + optional KubeAPIServerLogging logging = 13; +} + +// KubeAPIServerLogging contains configuration for the logs level and http access logs +message KubeAPIServerLogging { + // Verbosity is the kube-apiserver log verbosity level + // Defaults to 2. + // +optional + optional int32 verbosity = 1; + + // HTTPAccessVerbosity is the kube-apiserver access logs level + // +optional + optional int32 httpAccessVerbosity = 2; } // KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. @@ -1296,6 +1354,22 @@ message LastError { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastUpdateTime = 4; } +// LastMaintenance holds information about a maintenance operation on the Shoot. +message LastMaintenance { + // A human-readable message containing details about the operations performed in the last maintenance. + optional string description = 1; + + // TriggeredTime is the time when maintenance was triggered. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time triggeredTime = 2; + + // Status of the last maintenance operation, one of Processing, Succeeded, Error. + optional string state = 3; + + // FailureReason holds the information about the last maintenance operation failure reason. + // +optional + optional string failureReason = 4; +} + // LastOperation indicates the type and the state of the last operation, along with a description // message and a progress indicator. message LastOperation { @@ -1531,6 +1605,11 @@ message NodeLocalDNS { // Default, if unspecified, is to enforce TCP. // +optional optional bool forceTCPToUpstreamDNS = 3; + + // DisableForwardToUpstreamDNS indicates whether requests from node local DNS to upstream DNS should be disabled. + // Default, if unspecified, is to forward requests for external domains to upstream DNS + // +optional + optional bool disableForwardToUpstreamDNS = 4; } // OIDCConfig contains configuration settings for the OIDC provider. @@ -2110,14 +2189,6 @@ message SeedSpec { // Ingress configures Ingress specific settings of the Seed cluster. This field is immutable. // +optional optional Ingress ingress = 10; - - // HighAvailability describes the high availability configuration for seed system components. A highly available - // seed will need at least 3 nodes or 3 availability zones (depending on the configured FailureTolerance of `node` or `zone`), - // allowing spreading of system components across the configured failure domain. - // Deprecated: This field is deprecated and not respected at all. It will be removed in a future release. Use - // `.spec.provider.zones` instead. - // +optional - optional HighAvailability highAvailability = 11; } // SeedStatus is the status of a Seed. @@ -2244,21 +2315,6 @@ message ShootAdvertisedAddress { optional string url = 2; } -// ShootCARotation contains information about the certificate authority credential rotation. -message ShootCARotation { - // Phase describes the phase of the certificate authority credential rotation. - optional string phase = 1; - - // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 3; - - // LastCompletionTime is the most recent time when the certificate authority credential rotation was successfully - // completed. - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; -} - // ShootCredentials contains information about the shoot credentials. message ShootCredentials { // Rotation contains information about the credential rotations. @@ -2270,7 +2326,7 @@ message ShootCredentials { message ShootCredentialsRotation { // CertificateAuthorities contains information about the certificate authority credential rotation. // +optional - optional ShootCARotation certificateAuthorities = 1; + optional CARotation certificateAuthorities = 1; // Kubeconfig contains information about the kubeconfig credential rotation. // +optional @@ -2592,6 +2648,10 @@ message ShootStatus { // managed to change the hibernation settings of the cluster // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastHibernationTriggerTime = 17; + + // LastMaintenance holds information about the last maintenance operations on the Shoot. + // +optional + optional LastMaintenance lastMaintenance = 18; } // SystemComponents contains the settings of system components in the control or data plane of the Shoot cluster. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_controllerregistration.go index e1c5341cb..d89393088 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_controllerregistration.go @@ -63,9 +63,11 @@ type ControllerResource struct { // Type is the resource type, for example "coreos" or "ubuntu". Type string `json:"type" protobuf:"bytes,2,opt,name=type"` // GloballyEnabled determines if this ControllerResource is required by all Shoot clusters. + // This field is defaulted to false when kind is "Extension". // +optional GloballyEnabled *bool `json:"globallyEnabled,omitempty" protobuf:"varint,3,opt,name=globallyEnabled"` // ReconcileTimeout defines how long Gardener should wait for the resource reconciliation. + // This field is defaulted to 3m0s when kind is "Extension". // +optional ReconcileTimeout *metav1.Duration `json:"reconcileTimeout,omitempty" protobuf:"bytes,4,opt,name=reconcileTimeout"` // Primary determines if the controller backed by this ControllerRegistration is responsible for the extension @@ -73,6 +75,13 @@ type ControllerResource struct { // combination. This field is immutable. // +optional Primary *bool `json:"primary,omitempty" protobuf:"varint,5,opt,name=primary"` + // Lifecycle defines a strategy that determines when different operations on a ControllerResource should be performed. + // This field is defaulted in the following way when kind is "Extension". + // Reconcile: "AfterKubeAPIServer" + // Delete: "BeforeKubeAPIServer" + // Migrate: "BeforeKubeAPIServer" + // +optional + Lifecycle *ControllerResourceLifecycle `json:"lifecycle,omitempty" protobuf:"bytes,6,opt,name=lifecycle"` } // DeploymentRef contains information about `ControllerDeployment` references. @@ -110,3 +119,26 @@ const ( // whether another resource requires it, but only when the respective seed has at least one shoot. ControllerDeploymentPolicyAlwaysExceptNoShoots ControllerDeploymentPolicy = "AlwaysExceptNoShoots" ) + +// ControllerResourceLifecycleStrategy is a string alias. +type ControllerResourceLifecycleStrategy string + +const ( + // BeforeKubeAPIServer specifies that a resource should be handled before the kube-apiserver. + BeforeKubeAPIServer ControllerResourceLifecycleStrategy = "BeforeKubeAPIServer" + // AfterKubeAPIServer specifies that a resource should be handled after the kube-apiserver. + AfterKubeAPIServer ControllerResourceLifecycleStrategy = "AfterKubeAPIServer" +) + +// ControllerResourceLifecycle defines the lifecycle of a controller resource. +type ControllerResourceLifecycle struct { + // Reconcile defines the strategy during reconciliation. + // +optional + Reconcile *ControllerResourceLifecycleStrategy `json:"reconcile,omitempty" protobuf:"bytes,1,opt,name=reconcile,casttype=ControllerResourceLifecycleStrategy"` + // Delete defines the strategy during deletion. + // +optional + Delete *ControllerResourceLifecycleStrategy `json:"delete,omitempty" protobuf:"bytes,2,opt,name=delete,casttype=ControllerResourceLifecycleStrategy"` + // Migrate defines the strategy during migration. + // +optional + Migrate *ControllerResourceLifecycleStrategy `json:"migrate,omitempty" protobuf:"bytes,3,opt,name=migrate,casttype=ControllerResourceLifecycleStrategy"` +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go index 5a4e37ca2..fc0af2d76 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_seed.go @@ -82,13 +82,6 @@ type SeedSpec struct { // Ingress configures Ingress specific settings of the Seed cluster. This field is immutable. // +optional Ingress *Ingress `json:"ingress,omitempty" protobuf:"bytes,10,opt,name=ingress"` - // HighAvailability describes the high availability configuration for seed system components. A highly available - // seed will need at least 3 nodes or 3 availability zones (depending on the configured FailureTolerance of `node` or `zone`), - // allowing spreading of system components across the configured failure domain. - // Deprecated: This field is deprecated and not respected at all. It will be removed in a future release. Use - // `.spec.provider.zones` instead. - // +optional - HighAvailability *HighAvailability `json:"highAvailability,omitempty" protobuf:"bytes,11,opt,name=highAvailability"` } // SeedStatus is the status of a Seed. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go index bed2a1163..34bc4a0be 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/types_shoot.go @@ -184,6 +184,22 @@ type ShootStatus struct { // managed to change the hibernation settings of the cluster // +optional LastHibernationTriggerTime *metav1.Time `json:"lastHibernationTriggerTime,omitempty" protobuf:"bytes,17,opt,name=lastHibernationTriggerTime"` + // LastMaintenance holds information about the last maintenance operations on the Shoot. + // +optional + LastMaintenance *LastMaintenance `json:"lastMaintenance,omitempty" protobuf:"bytes,18,opt,name=lastMaintenance"` +} + +// LastMaintenance holds information about a maintenance operation on the Shoot. +type LastMaintenance struct { + // A human-readable message containing details about the operations performed in the last maintenance. + Description string `json:"description" protobuf:"bytes,1,opt,name=description"` + // TriggeredTime is the time when maintenance was triggered. + TriggeredTime metav1.Time `json:"triggeredTime" protobuf:"bytes,2,opt,name=triggeredTime"` + // Status of the last maintenance operation, one of Processing, Succeeded, Error. + State LastOperationState `json:"state" protobuf:"bytes,3,opt,name=state,casttype=LastOperationState"` + // FailureReason holds the information about the last maintenance operation failure reason. + // +optional + FailureReason *string `json:"failureReason,omitempty" protobuf:"bytes,4,opt,name=failureReason"` } // ShootCredentials contains information about the shoot credentials. @@ -197,7 +213,7 @@ type ShootCredentials struct { type ShootCredentialsRotation struct { // CertificateAuthorities contains information about the certificate authority credential rotation. // +optional - CertificateAuthorities *ShootCARotation `json:"certificateAuthorities,omitempty" protobuf:"bytes,1,opt,name=certificateAuthorities"` + CertificateAuthorities *CARotation `json:"certificateAuthorities,omitempty" protobuf:"bytes,1,opt,name=certificateAuthorities"` // Kubeconfig contains information about the kubeconfig credential rotation. // +optional Kubeconfig *ShootKubeconfigRotation `json:"kubeconfig,omitempty" protobuf:"bytes,2,opt,name=kubeconfig"` @@ -215,10 +231,10 @@ type ShootCredentialsRotation struct { ETCDEncryptionKey *ShootETCDEncryptionKeyRotation `json:"etcdEncryptionKey,omitempty" protobuf:"bytes,6,opt,name=etcdEncryptionKey"` } -// ShootCARotation contains information about the certificate authority credential rotation. -type ShootCARotation struct { +// CARotation contains information about the certificate authority credential rotation. +type CARotation struct { // Phase describes the phase of the certificate authority credential rotation. - Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + Phase CredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. // +optional LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` @@ -261,7 +277,7 @@ type ShootObservabilityRotation struct { // ShootServiceAccountKeyRotation contains information about the service account key credential rotation. type ShootServiceAccountKeyRotation struct { // Phase describes the phase of the service account key credential rotation. - Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + Phase CredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` // LastInitiationTime is the most recent time when the service account key credential rotation was initiated. // +optional LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` @@ -274,7 +290,7 @@ type ShootServiceAccountKeyRotation struct { // ShootETCDEncryptionKeyRotation contains information about the ETCD encryption key credential rotation. type ShootETCDEncryptionKeyRotation struct { // Phase describes the phase of the ETCD encryption key credential rotation. - Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + Phase CredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` // LastInitiationTime is the most recent time when the ETCD encryption key credential rotation was initiated. // +optional LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` @@ -284,19 +300,19 @@ type ShootETCDEncryptionKeyRotation struct { LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` } -// ShootCredentialsRotationPhase is a string alias. -type ShootCredentialsRotationPhase string +// CredentialsRotationPhase is a string alias. +type CredentialsRotationPhase string const ( // RotationPreparing is a constant for the credentials rotation phase describing that the procedure is being prepared. - RotationPreparing ShootCredentialsRotationPhase = "Preparing" + RotationPreparing CredentialsRotationPhase = "Preparing" // RotationPrepared is a constant for the credentials rotation phase describing that the procedure was prepared. - RotationPrepared ShootCredentialsRotationPhase = "Prepared" + RotationPrepared CredentialsRotationPhase = "Prepared" // RotationCompleting is a constant for the credentials rotation phase describing that the procedure is being // completed. - RotationCompleting ShootCredentialsRotationPhase = "Completing" + RotationCompleting CredentialsRotationPhase = "Completing" // RotationCompleted is a constant for the credentials rotation phase describing that the procedure was completed. - RotationCompleted ShootCredentialsRotationPhase = "Completed" + RotationCompleted CredentialsRotationPhase = "Completed" ) // ShootAdvertisedAddress contains information for the shoot's Kube API server. @@ -337,6 +353,7 @@ type KubernetesDashboard struct { const ( // KubernetesDashboardAuthModeBasic uses basic authentication mode for auth. + // Deprecated: basic authentication has been removed in Kubernetes v1.19+. KubernetesDashboardAuthModeBasic = "basic" // KubernetesDashboardAuthModeToken uses token-based mode for auth. KubernetesDashboardAuthModeToken = "token" @@ -653,6 +670,8 @@ type KubeAPIServerConfig struct { AuditConfig *AuditConfig `json:"auditConfig,omitempty" protobuf:"bytes,4,opt,name=auditConfig"` // EnableBasicAuthentication defines whether basic authentication should be enabled for this cluster or not. // +optional + // Defaults to false. + // Deprecated: basic authentication has been removed in Kubernetes v1.19+. This field will be removed in a future version. EnableBasicAuthentication *bool `json:"enableBasicAuthentication,omitempty" protobuf:"varint,5,opt,name=enableBasicAuthentication"` // OIDCConfig contains configuration settings for the OIDC provider. // +optional @@ -685,6 +704,20 @@ type KubeAPIServerConfig struct { // Defaults to 1h. // +optional EventTTL *metav1.Duration `json:"eventTTL,omitempty" protobuf:"bytes,12,opt,name=eventTTL"` + // Logging contains configuration for the log level and HTTP access logs. + // +optional + Logging *KubeAPIServerLogging `json:"logging,omitempty" protobuf:"bytes,13,opt,name=logging"` +} + +// KubeAPIServerLogging contains configuration for the logs level and http access logs +type KubeAPIServerLogging struct { + // Verbosity is the kube-apiserver log verbosity level + // Defaults to 2. + // +optional + Verbosity *int32 `json:"verbosity,omitempty" protobuf:"varint,1,opt,name=verbosity"` + // HTTPAccessVerbosity is the kube-apiserver access logs level + // +optional + HTTPAccessVerbosity *int32 `json:"httpAccessVerbosity,omitempty" protobuf:"varint,2,opt,name=httpAccessVerbosity"` } // KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. @@ -1497,6 +1530,10 @@ type NodeLocalDNS struct { // Default, if unspecified, is to enforce TCP. // +optional ForceTCPToUpstreamDNS *bool `json:"forceTCPToUpstreamDNS,omitempty" protobuf:"varint,3,opt,name=forceTCPToUpstreamDNS"` + // DisableForwardToUpstreamDNS indicates whether requests from node local DNS to upstream DNS should be disabled. + // Default, if unspecified, is to forward requests for external domains to upstream DNS + // +optional + DisableForwardToUpstreamDNS *bool `json:"disableForwardToUpstreamDNS,omitempty" protobuf:"varint,4,opt,name=disableForwardToUpstreamDNS"` } ////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.conversion.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.conversion.go index 422fa95a7..663705a52 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.conversion.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.conversion.go @@ -163,6 +163,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*CARotation)(nil), (*core.CARotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_CARotation_To_core_CARotation(a.(*CARotation), b.(*core.CARotation), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.CARotation)(nil), (*CARotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_CARotation_To_v1alpha1_CARotation(a.(*core.CARotation), b.(*CARotation), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*CRI)(nil), (*core.CRI)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_CRI_To_core_CRI(a.(*CRI), b.(*core.CRI), scope) }); err != nil { @@ -353,6 +363,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ControllerResourceLifecycle)(nil), (*core.ControllerResourceLifecycle)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle(a.(*ControllerResourceLifecycle), b.(*core.ControllerResourceLifecycle), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ControllerResourceLifecycle)(nil), (*ControllerResourceLifecycle)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ControllerResourceLifecycle_To_v1alpha1_ControllerResourceLifecycle(a.(*core.ControllerResourceLifecycle), b.(*ControllerResourceLifecycle), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*CoreDNS)(nil), (*core.CoreDNS)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_CoreDNS_To_core_CoreDNS(a.(*CoreDNS), b.(*core.CoreDNS), scope) }); err != nil { @@ -593,6 +613,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*KubeAPIServerLogging)(nil), (*core.KubeAPIServerLogging)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_KubeAPIServerLogging_To_core_KubeAPIServerLogging(a.(*KubeAPIServerLogging), b.(*core.KubeAPIServerLogging), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.KubeAPIServerLogging)(nil), (*KubeAPIServerLogging)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_KubeAPIServerLogging_To_v1alpha1_KubeAPIServerLogging(a.(*core.KubeAPIServerLogging), b.(*KubeAPIServerLogging), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*KubeAPIServerRequests)(nil), (*core.KubeAPIServerRequests)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(a.(*KubeAPIServerRequests), b.(*core.KubeAPIServerRequests), scope) }); err != nil { @@ -733,6 +763,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*LastMaintenance)(nil), (*core.LastMaintenance)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha1_LastMaintenance_To_core_LastMaintenance(a.(*LastMaintenance), b.(*core.LastMaintenance), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.LastMaintenance)(nil), (*LastMaintenance)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_LastMaintenance_To_v1alpha1_LastMaintenance(a.(*core.LastMaintenance), b.(*LastMaintenance), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*LastOperation)(nil), (*core.LastOperation)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_LastOperation_To_core_LastOperation(a.(*LastOperation), b.(*core.LastOperation), scope) }); err != nil { @@ -1268,16 +1308,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*ShootCARotation)(nil), (*core.ShootCARotation)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha1_ShootCARotation_To_core_ShootCARotation(a.(*ShootCARotation), b.(*core.ShootCARotation), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*core.ShootCARotation)(nil), (*ShootCARotation)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_core_ShootCARotation_To_v1alpha1_ShootCARotation(a.(*core.ShootCARotation), b.(*ShootCARotation), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*ShootCredentials)(nil), (*core.ShootCredentials)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha1_ShootCredentials_To_core_ShootCredentials(a.(*ShootCredentials), b.(*core.ShootCredentials), scope) }); err != nil { @@ -2004,6 +2034,30 @@ func Convert_core_BackupEntryStatus_To_v1alpha1_BackupEntryStatus(in *core.Backu return autoConvert_core_BackupEntryStatus_To_v1alpha1_BackupEntryStatus(in, out, s) } +func autoConvert_v1alpha1_CARotation_To_core_CARotation(in *CARotation, out *core.CARotation, s conversion.Scope) error { + out.Phase = core.CredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_v1alpha1_CARotation_To_core_CARotation is an autogenerated conversion function. +func Convert_v1alpha1_CARotation_To_core_CARotation(in *CARotation, out *core.CARotation, s conversion.Scope) error { + return autoConvert_v1alpha1_CARotation_To_core_CARotation(in, out, s) +} + +func autoConvert_core_CARotation_To_v1alpha1_CARotation(in *core.CARotation, out *CARotation, s conversion.Scope) error { + out.Phase = CredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_core_CARotation_To_v1alpha1_CARotation is an autogenerated conversion function. +func Convert_core_CARotation_To_v1alpha1_CARotation(in *core.CARotation, out *CARotation, s conversion.Scope) error { + return autoConvert_core_CARotation_To_v1alpha1_CARotation(in, out, s) +} + func autoConvert_v1alpha1_CRI_To_core_CRI(in *CRI, out *core.CRI, s conversion.Scope) error { out.Name = core.CRIName(in.Name) out.ContainerRuntimes = *(*[]core.ContainerRuntime)(unsafe.Pointer(&in.ContainerRuntimes)) @@ -2496,6 +2550,7 @@ func autoConvert_v1alpha1_ControllerResource_To_core_ControllerResource(in *Cont out.GloballyEnabled = (*bool)(unsafe.Pointer(in.GloballyEnabled)) out.ReconcileTimeout = (*metav1.Duration)(unsafe.Pointer(in.ReconcileTimeout)) out.Primary = (*bool)(unsafe.Pointer(in.Primary)) + out.Lifecycle = (*core.ControllerResourceLifecycle)(unsafe.Pointer(in.Lifecycle)) return nil } @@ -2510,6 +2565,7 @@ func autoConvert_core_ControllerResource_To_v1alpha1_ControllerResource(in *core out.GloballyEnabled = (*bool)(unsafe.Pointer(in.GloballyEnabled)) out.ReconcileTimeout = (*metav1.Duration)(unsafe.Pointer(in.ReconcileTimeout)) out.Primary = (*bool)(unsafe.Pointer(in.Primary)) + out.Lifecycle = (*ControllerResourceLifecycle)(unsafe.Pointer(in.Lifecycle)) return nil } @@ -2518,6 +2574,30 @@ func Convert_core_ControllerResource_To_v1alpha1_ControllerResource(in *core.Con return autoConvert_core_ControllerResource_To_v1alpha1_ControllerResource(in, out, s) } +func autoConvert_v1alpha1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle(in *ControllerResourceLifecycle, out *core.ControllerResourceLifecycle, s conversion.Scope) error { + out.Reconcile = (*core.ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Reconcile)) + out.Delete = (*core.ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Delete)) + out.Migrate = (*core.ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Migrate)) + return nil +} + +// Convert_v1alpha1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle is an autogenerated conversion function. +func Convert_v1alpha1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle(in *ControllerResourceLifecycle, out *core.ControllerResourceLifecycle, s conversion.Scope) error { + return autoConvert_v1alpha1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle(in, out, s) +} + +func autoConvert_core_ControllerResourceLifecycle_To_v1alpha1_ControllerResourceLifecycle(in *core.ControllerResourceLifecycle, out *ControllerResourceLifecycle, s conversion.Scope) error { + out.Reconcile = (*ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Reconcile)) + out.Delete = (*ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Delete)) + out.Migrate = (*ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Migrate)) + return nil +} + +// Convert_core_ControllerResourceLifecycle_To_v1alpha1_ControllerResourceLifecycle is an autogenerated conversion function. +func Convert_core_ControllerResourceLifecycle_To_v1alpha1_ControllerResourceLifecycle(in *core.ControllerResourceLifecycle, out *ControllerResourceLifecycle, s conversion.Scope) error { + return autoConvert_core_ControllerResourceLifecycle_To_v1alpha1_ControllerResourceLifecycle(in, out, s) +} + func autoConvert_v1alpha1_CoreDNS_To_core_CoreDNS(in *CoreDNS, out *core.CoreDNS, s conversion.Scope) error { out.Autoscaling = (*core.CoreDNSAutoscaling)(unsafe.Pointer(in.Autoscaling)) out.Rewriting = (*core.CoreDNSRewriting)(unsafe.Pointer(in.Rewriting)) @@ -3083,6 +3163,7 @@ func autoConvert_v1alpha1_KubeAPIServerConfig_To_core_KubeAPIServerConfig(in *Ku out.Requests = (*core.KubeAPIServerRequests)(unsafe.Pointer(in.Requests)) out.EnableAnonymousAuthentication = (*bool)(unsafe.Pointer(in.EnableAnonymousAuthentication)) out.EventTTL = (*metav1.Duration)(unsafe.Pointer(in.EventTTL)) + out.Logging = (*core.KubeAPIServerLogging)(unsafe.Pointer(in.Logging)) return nil } @@ -3116,6 +3197,7 @@ func autoConvert_core_KubeAPIServerConfig_To_v1alpha1_KubeAPIServerConfig(in *co out.Requests = (*KubeAPIServerRequests)(unsafe.Pointer(in.Requests)) out.EnableAnonymousAuthentication = (*bool)(unsafe.Pointer(in.EnableAnonymousAuthentication)) out.EventTTL = (*metav1.Duration)(unsafe.Pointer(in.EventTTL)) + out.Logging = (*KubeAPIServerLogging)(unsafe.Pointer(in.Logging)) return nil } @@ -3124,6 +3206,28 @@ func Convert_core_KubeAPIServerConfig_To_v1alpha1_KubeAPIServerConfig(in *core.K return autoConvert_core_KubeAPIServerConfig_To_v1alpha1_KubeAPIServerConfig(in, out, s) } +func autoConvert_v1alpha1_KubeAPIServerLogging_To_core_KubeAPIServerLogging(in *KubeAPIServerLogging, out *core.KubeAPIServerLogging, s conversion.Scope) error { + out.Verbosity = (*int32)(unsafe.Pointer(in.Verbosity)) + out.HTTPAccessVerbosity = (*int32)(unsafe.Pointer(in.HTTPAccessVerbosity)) + return nil +} + +// Convert_v1alpha1_KubeAPIServerLogging_To_core_KubeAPIServerLogging is an autogenerated conversion function. +func Convert_v1alpha1_KubeAPIServerLogging_To_core_KubeAPIServerLogging(in *KubeAPIServerLogging, out *core.KubeAPIServerLogging, s conversion.Scope) error { + return autoConvert_v1alpha1_KubeAPIServerLogging_To_core_KubeAPIServerLogging(in, out, s) +} + +func autoConvert_core_KubeAPIServerLogging_To_v1alpha1_KubeAPIServerLogging(in *core.KubeAPIServerLogging, out *KubeAPIServerLogging, s conversion.Scope) error { + out.Verbosity = (*int32)(unsafe.Pointer(in.Verbosity)) + out.HTTPAccessVerbosity = (*int32)(unsafe.Pointer(in.HTTPAccessVerbosity)) + return nil +} + +// Convert_core_KubeAPIServerLogging_To_v1alpha1_KubeAPIServerLogging is an autogenerated conversion function. +func Convert_core_KubeAPIServerLogging_To_v1alpha1_KubeAPIServerLogging(in *core.KubeAPIServerLogging, out *KubeAPIServerLogging, s conversion.Scope) error { + return autoConvert_core_KubeAPIServerLogging_To_v1alpha1_KubeAPIServerLogging(in, out, s) +} + func autoConvert_v1alpha1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(in *KubeAPIServerRequests, out *core.KubeAPIServerRequests, s conversion.Scope) error { out.MaxNonMutatingInflight = (*int32)(unsafe.Pointer(in.MaxNonMutatingInflight)) out.MaxMutatingInflight = (*int32)(unsafe.Pointer(in.MaxMutatingInflight)) @@ -3578,6 +3682,32 @@ func Convert_core_LastError_To_v1alpha1_LastError(in *core.LastError, out *LastE return autoConvert_core_LastError_To_v1alpha1_LastError(in, out, s) } +func autoConvert_v1alpha1_LastMaintenance_To_core_LastMaintenance(in *LastMaintenance, out *core.LastMaintenance, s conversion.Scope) error { + out.Description = in.Description + out.TriggeredTime = in.TriggeredTime + out.State = core.LastOperationState(in.State) + out.FailureReason = (*string)(unsafe.Pointer(in.FailureReason)) + return nil +} + +// Convert_v1alpha1_LastMaintenance_To_core_LastMaintenance is an autogenerated conversion function. +func Convert_v1alpha1_LastMaintenance_To_core_LastMaintenance(in *LastMaintenance, out *core.LastMaintenance, s conversion.Scope) error { + return autoConvert_v1alpha1_LastMaintenance_To_core_LastMaintenance(in, out, s) +} + +func autoConvert_core_LastMaintenance_To_v1alpha1_LastMaintenance(in *core.LastMaintenance, out *LastMaintenance, s conversion.Scope) error { + out.Description = in.Description + out.TriggeredTime = in.TriggeredTime + out.State = LastOperationState(in.State) + out.FailureReason = (*string)(unsafe.Pointer(in.FailureReason)) + return nil +} + +// Convert_core_LastMaintenance_To_v1alpha1_LastMaintenance is an autogenerated conversion function. +func Convert_core_LastMaintenance_To_v1alpha1_LastMaintenance(in *core.LastMaintenance, out *LastMaintenance, s conversion.Scope) error { + return autoConvert_core_LastMaintenance_To_v1alpha1_LastMaintenance(in, out, s) +} + func autoConvert_v1alpha1_LastOperation_To_core_LastOperation(in *LastOperation, out *core.LastOperation, s conversion.Scope) error { out.Description = in.Description out.LastUpdateTime = in.LastUpdateTime @@ -3954,6 +4084,7 @@ func autoConvert_v1alpha1_NodeLocalDNS_To_core_NodeLocalDNS(in *NodeLocalDNS, ou out.Enabled = in.Enabled out.ForceTCPToClusterDNS = (*bool)(unsafe.Pointer(in.ForceTCPToClusterDNS)) out.ForceTCPToUpstreamDNS = (*bool)(unsafe.Pointer(in.ForceTCPToUpstreamDNS)) + out.DisableForwardToUpstreamDNS = (*bool)(unsafe.Pointer(in.DisableForwardToUpstreamDNS)) return nil } @@ -3966,6 +4097,7 @@ func autoConvert_core_NodeLocalDNS_To_v1alpha1_NodeLocalDNS(in *core.NodeLocalDN out.Enabled = in.Enabled out.ForceTCPToClusterDNS = (*bool)(unsafe.Pointer(in.ForceTCPToClusterDNS)) out.ForceTCPToUpstreamDNS = (*bool)(unsafe.Pointer(in.ForceTCPToUpstreamDNS)) + out.DisableForwardToUpstreamDNS = (*bool)(unsafe.Pointer(in.DisableForwardToUpstreamDNS)) return nil } @@ -4903,7 +5035,6 @@ func autoConvert_v1alpha1_SeedSpec_To_core_SeedSpec(in *SeedSpec, out *core.Seed out.Volume = (*core.SeedVolume)(unsafe.Pointer(in.Volume)) out.Settings = (*core.SeedSettings)(unsafe.Pointer(in.Settings)) out.Ingress = (*core.Ingress)(unsafe.Pointer(in.Ingress)) - out.HighAvailability = (*core.HighAvailability)(unsafe.Pointer(in.HighAvailability)) return nil } @@ -4923,7 +5054,6 @@ func autoConvert_core_SeedSpec_To_v1alpha1_SeedSpec(in *core.SeedSpec, out *Seed out.Taints = *(*[]SeedTaint)(unsafe.Pointer(&in.Taints)) out.Volume = (*SeedVolume)(unsafe.Pointer(in.Volume)) out.Ingress = (*Ingress)(unsafe.Pointer(in.Ingress)) - out.HighAvailability = (*HighAvailability)(unsafe.Pointer(in.HighAvailability)) return nil } @@ -5102,30 +5232,6 @@ func Convert_core_ShootAdvertisedAddress_To_v1alpha1_ShootAdvertisedAddress(in * return autoConvert_core_ShootAdvertisedAddress_To_v1alpha1_ShootAdvertisedAddress(in, out, s) } -func autoConvert_v1alpha1_ShootCARotation_To_core_ShootCARotation(in *ShootCARotation, out *core.ShootCARotation, s conversion.Scope) error { - out.Phase = core.ShootCredentialsRotationPhase(in.Phase) - out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) - out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) - return nil -} - -// Convert_v1alpha1_ShootCARotation_To_core_ShootCARotation is an autogenerated conversion function. -func Convert_v1alpha1_ShootCARotation_To_core_ShootCARotation(in *ShootCARotation, out *core.ShootCARotation, s conversion.Scope) error { - return autoConvert_v1alpha1_ShootCARotation_To_core_ShootCARotation(in, out, s) -} - -func autoConvert_core_ShootCARotation_To_v1alpha1_ShootCARotation(in *core.ShootCARotation, out *ShootCARotation, s conversion.Scope) error { - out.Phase = ShootCredentialsRotationPhase(in.Phase) - out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) - out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) - return nil -} - -// Convert_core_ShootCARotation_To_v1alpha1_ShootCARotation is an autogenerated conversion function. -func Convert_core_ShootCARotation_To_v1alpha1_ShootCARotation(in *core.ShootCARotation, out *ShootCARotation, s conversion.Scope) error { - return autoConvert_core_ShootCARotation_To_v1alpha1_ShootCARotation(in, out, s) -} - func autoConvert_v1alpha1_ShootCredentials_To_core_ShootCredentials(in *ShootCredentials, out *core.ShootCredentials, s conversion.Scope) error { out.Rotation = (*core.ShootCredentialsRotation)(unsafe.Pointer(in.Rotation)) return nil @@ -5147,7 +5253,7 @@ func Convert_core_ShootCredentials_To_v1alpha1_ShootCredentials(in *core.ShootCr } func autoConvert_v1alpha1_ShootCredentialsRotation_To_core_ShootCredentialsRotation(in *ShootCredentialsRotation, out *core.ShootCredentialsRotation, s conversion.Scope) error { - out.CertificateAuthorities = (*core.ShootCARotation)(unsafe.Pointer(in.CertificateAuthorities)) + out.CertificateAuthorities = (*core.CARotation)(unsafe.Pointer(in.CertificateAuthorities)) out.Kubeconfig = (*core.ShootKubeconfigRotation)(unsafe.Pointer(in.Kubeconfig)) out.SSHKeypair = (*core.ShootSSHKeypairRotation)(unsafe.Pointer(in.SSHKeypair)) out.Observability = (*core.ShootObservabilityRotation)(unsafe.Pointer(in.Observability)) @@ -5162,7 +5268,7 @@ func Convert_v1alpha1_ShootCredentialsRotation_To_core_ShootCredentialsRotation( } func autoConvert_core_ShootCredentialsRotation_To_v1alpha1_ShootCredentialsRotation(in *core.ShootCredentialsRotation, out *ShootCredentialsRotation, s conversion.Scope) error { - out.CertificateAuthorities = (*ShootCARotation)(unsafe.Pointer(in.CertificateAuthorities)) + out.CertificateAuthorities = (*CARotation)(unsafe.Pointer(in.CertificateAuthorities)) out.Kubeconfig = (*ShootKubeconfigRotation)(unsafe.Pointer(in.Kubeconfig)) out.SSHKeypair = (*ShootSSHKeypairRotation)(unsafe.Pointer(in.SSHKeypair)) out.Observability = (*ShootObservabilityRotation)(unsafe.Pointer(in.Observability)) @@ -5177,7 +5283,7 @@ func Convert_core_ShootCredentialsRotation_To_v1alpha1_ShootCredentialsRotation( } func autoConvert_v1alpha1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(in *ShootETCDEncryptionKeyRotation, out *core.ShootETCDEncryptionKeyRotation, s conversion.Scope) error { - out.Phase = core.ShootCredentialsRotationPhase(in.Phase) + out.Phase = core.CredentialsRotationPhase(in.Phase) out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) return nil @@ -5189,7 +5295,7 @@ func Convert_v1alpha1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryption } func autoConvert_core_ShootETCDEncryptionKeyRotation_To_v1alpha1_ShootETCDEncryptionKeyRotation(in *core.ShootETCDEncryptionKeyRotation, out *ShootETCDEncryptionKeyRotation, s conversion.Scope) error { - out.Phase = ShootCredentialsRotationPhase(in.Phase) + out.Phase = CredentialsRotationPhase(in.Phase) out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) return nil @@ -5359,7 +5465,7 @@ func Convert_core_ShootSSHKeypairRotation_To_v1alpha1_ShootSSHKeypairRotation(in } func autoConvert_v1alpha1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(in *ShootServiceAccountKeyRotation, out *core.ShootServiceAccountKeyRotation, s conversion.Scope) error { - out.Phase = core.ShootCredentialsRotationPhase(in.Phase) + out.Phase = core.CredentialsRotationPhase(in.Phase) out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) return nil @@ -5371,7 +5477,7 @@ func Convert_v1alpha1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccount } func autoConvert_core_ShootServiceAccountKeyRotation_To_v1alpha1_ShootServiceAccountKeyRotation(in *core.ShootServiceAccountKeyRotation, out *ShootServiceAccountKeyRotation, s conversion.Scope) error { - out.Phase = ShootCredentialsRotationPhase(in.Phase) + out.Phase = CredentialsRotationPhase(in.Phase) out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) return nil @@ -5544,6 +5650,7 @@ func autoConvert_v1alpha1_ShootStatus_To_core_ShootStatus(in *ShootStatus, out * out.MigrationStartTime = (*metav1.Time)(unsafe.Pointer(in.MigrationStartTime)) out.Credentials = (*core.ShootCredentials)(unsafe.Pointer(in.Credentials)) out.LastHibernationTriggerTime = (*metav1.Time)(unsafe.Pointer(in.LastHibernationTriggerTime)) + out.LastMaintenance = (*core.LastMaintenance)(unsafe.Pointer(in.LastMaintenance)) return nil } @@ -5566,6 +5673,7 @@ func autoConvert_core_ShootStatus_To_v1alpha1_ShootStatus(in *core.ShootStatus, out.AdvertisedAddresses = *(*[]ShootAdvertisedAddress)(unsafe.Pointer(&in.AdvertisedAddresses)) out.MigrationStartTime = (*metav1.Time)(unsafe.Pointer(in.MigrationStartTime)) out.Credentials = (*ShootCredentials)(unsafe.Pointer(in.Credentials)) + out.LastMaintenance = (*LastMaintenance)(unsafe.Pointer(in.LastMaintenance)) return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go index f773dcc1d..68260311c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1alpha1/zz_generated.deepcopy.go @@ -445,6 +445,30 @@ func (in *BackupEntryStatus) DeepCopy() *BackupEntryStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CARotation) DeepCopyInto(out *CARotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CARotation. +func (in *CARotation) DeepCopy() *CARotation { + if in == nil { + return nil + } + out := new(CARotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CRI) DeepCopyInto(out *CRI) { *out = *in @@ -1028,6 +1052,11 @@ func (in *ControllerResource) DeepCopyInto(out *ControllerResource) { *out = new(bool) **out = **in } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(ControllerResourceLifecycle) + (*in).DeepCopyInto(*out) + } return } @@ -1041,6 +1070,37 @@ func (in *ControllerResource) DeepCopy() *ControllerResource { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerResourceLifecycle) DeepCopyInto(out *ControllerResourceLifecycle) { + *out = *in + if in.Reconcile != nil { + in, out := &in.Reconcile, &out.Reconcile + *out = new(ControllerResourceLifecycleStrategy) + **out = **in + } + if in.Delete != nil { + in, out := &in.Delete, &out.Delete + *out = new(ControllerResourceLifecycleStrategy) + **out = **in + } + if in.Migrate != nil { + in, out := &in.Migrate, &out.Migrate + *out = new(ControllerResourceLifecycleStrategy) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerResourceLifecycle. +func (in *ControllerResourceLifecycle) DeepCopy() *ControllerResourceLifecycle { + if in == nil { + return nil + } + out := new(ControllerResourceLifecycle) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CoreDNS) DeepCopyInto(out *CoreDNS) { *out = *in @@ -1694,6 +1754,11 @@ func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { *out = new(metav1.Duration) **out = **in } + if in.Logging != nil { + in, out := &in.Logging, &out.Logging + *out = new(KubeAPIServerLogging) + (*in).DeepCopyInto(*out) + } return } @@ -1707,6 +1772,32 @@ func (in *KubeAPIServerConfig) DeepCopy() *KubeAPIServerConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeAPIServerLogging) DeepCopyInto(out *KubeAPIServerLogging) { + *out = *in + if in.Verbosity != nil { + in, out := &in.Verbosity, &out.Verbosity + *out = new(int32) + **out = **in + } + if in.HTTPAccessVerbosity != nil { + in, out := &in.HTTPAccessVerbosity, &out.HTTPAccessVerbosity + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeAPIServerLogging. +func (in *KubeAPIServerLogging) DeepCopy() *KubeAPIServerLogging { + if in == nil { + return nil + } + out := new(KubeAPIServerLogging) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeAPIServerRequests) DeepCopyInto(out *KubeAPIServerRequests) { *out = *in @@ -2279,6 +2370,28 @@ func (in *LastError) DeepCopy() *LastError { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LastMaintenance) DeepCopyInto(out *LastMaintenance) { + *out = *in + in.TriggeredTime.DeepCopyInto(&out.TriggeredTime) + if in.FailureReason != nil { + in, out := &in.FailureReason, &out.FailureReason + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LastMaintenance. +func (in *LastMaintenance) DeepCopy() *LastMaintenance { + if in == nil { + return nil + } + out := new(LastMaintenance) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LastOperation) DeepCopyInto(out *LastOperation) { *out = *in @@ -2659,6 +2772,11 @@ func (in *NodeLocalDNS) DeepCopyInto(out *NodeLocalDNS) { *out = new(bool) **out = **in } + if in.DisableForwardToUpstreamDNS != nil { + in, out := &in.DisableForwardToUpstreamDNS, &out.DisableForwardToUpstreamDNS + *out = new(bool) + **out = **in + } return } @@ -3709,11 +3827,6 @@ func (in *SeedSpec) DeepCopyInto(out *SeedSpec) { *out = new(Ingress) (*in).DeepCopyInto(*out) } - if in.HighAvailability != nil { - in, out := &in.HighAvailability, &out.HighAvailability - *out = new(HighAvailability) - **out = **in - } return } @@ -3917,30 +4030,6 @@ func (in *ShootAdvertisedAddress) DeepCopy() *ShootAdvertisedAddress { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ShootCARotation) DeepCopyInto(out *ShootCARotation) { - *out = *in - if in.LastInitiationTime != nil { - in, out := &in.LastInitiationTime, &out.LastInitiationTime - *out = (*in).DeepCopy() - } - if in.LastCompletionTime != nil { - in, out := &in.LastCompletionTime, &out.LastCompletionTime - *out = (*in).DeepCopy() - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootCARotation. -func (in *ShootCARotation) DeepCopy() *ShootCARotation { - if in == nil { - return nil - } - out := new(ShootCARotation) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootCredentials) DeepCopyInto(out *ShootCredentials) { *out = *in @@ -3967,7 +4056,7 @@ func (in *ShootCredentialsRotation) DeepCopyInto(out *ShootCredentialsRotation) *out = *in if in.CertificateAuthorities != nil { in, out := &in.CertificateAuthorities, &out.CertificateAuthorities - *out = new(ShootCARotation) + *out = new(CARotation) (*in).DeepCopyInto(*out) } if in.Kubeconfig != nil { @@ -4470,6 +4559,11 @@ func (in *ShootStatus) DeepCopyInto(out *ShootStatus) { in, out := &in.LastHibernationTriggerTime, &out.LastHibernationTriggerTime *out = (*in).DeepCopy() } + if in.LastMaintenance != nil { + in, out := &in.LastMaintenance, &out.LastMaintenance + *out = new(LastMaintenance) + (*in).DeepCopyInto(*out) + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go index 8ca21615d..0d64f5cfa 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/constants/types_constants.go @@ -200,10 +200,6 @@ const ( // GardenerOperationRenewKubeconfig is a constant for the value of the operation annotation to renew the gardenlet's kubeconfig secret. GardenerOperationRenewKubeconfig = "renew-kubeconfig" - // DeprecatedGardenRole is the key for an annotation on a Kubernetes object indicating what it is used for. - // - // Deprecated: Use `GardenRole` instead. - DeprecatedGardenRole = "garden.sapcloud.io/role" // GardenRole is a constant for a label that describes a role. GardenRole = "gardener.cloud/role" // GardenRoleExtension is a constant for a label that describes the 'extensions' role. @@ -295,6 +291,7 @@ const ( // high availability setup for the control plane should be enabled. // Note that this annotation is alpha and can be removed anytime without further notice. Only use it if you know // what you do. + // Deprecated: This annotation is deprecated and not respected anymore. Please use `shoot.spec.controlPlane.highAvailability` instead. ShootAlphaControlPlaneHighAvailability = "alpha.control-plane.shoot.gardener.cloud/high-availability" // ShootAlphaControlPlaneHighAvailabilitySingleZone is a specific value that can be set for the shoot control // plane high availability annotation, that allows gardener to spread the shoot control plane across @@ -302,11 +299,19 @@ const ( // This enables shoot clusters having a control plane with a higher failure tolerance as well as zero downtime maintenance, // especially for infrastructure providers that provide less than three zones in a region and thus a multi-zone setup // is not possible there. + // Deprecated: This annotation value is deprecated and not respected anymore. Please use `shoot.spec.controlPlane.highAvailability.failureTolerance.type=node` instead. ShootAlphaControlPlaneHighAvailabilitySingleZone = "single-zone" // ShootAlphaControlPlaneHighAvailabilityMultiZone is a specific value that can be set for the shoot control // plane high availability annotation, that allows gardener to spread the shoot control plane across // multiple availability zones if it is possible. + // Deprecated: This annotation value is deprecated and not respected anymore. Please use `shoot.spec.controlPlane.highAvailability.failureTolerance.type=zone` instead. ShootAlphaControlPlaneHighAvailabilityMultiZone = "multi-zone" + // ShootAlphaControlPlaneHAVPN is a constant for an annotation on the Shoot resource to enforce + // enabling/disabling the high availability setup for the VPN connection. + // By default, the HA setup for VPN connections is activated automatically if the control plane high availability is enabled. + // Note that this annotation is alpha and can be removed anytime without further notice. Only use it if you know + // what you do. + ShootAlphaControlPlaneHAVPN = "alpha.control-plane.shoot.gardener.cloud/high-availability-vpn" // ShootExpirationTimestamp is an annotation on a Shoot resource whose value represents the time when the Shoot lifetime // is expired. The lifetime can be extended, but at most by the minimal value of the 'clusterLifetimeDays' property // of referenced quotas. @@ -343,41 +348,41 @@ const ( // ShootOperationRetry is a constant for an annotation on a Shoot indicating that a failed Shoot reconciliation shall be // retried. ShootOperationRetry = "retry" - // ShootOperationRotateCredentialsStart is a constant for an annotation on a Shoot indicating that the rotation of - // all credentials shall be started. This includes CAs, certificates, kubeconfigs, SSH keypairs, observability - // credentials, and ServiceAccount signing key. - ShootOperationRotateCredentialsStart = "rotate-credentials-start" - // ShootOperationRotateCredentialsComplete is a constant for an annotation on a Shoot indicating that the rotation - // of the credentials shall be completed. - ShootOperationRotateCredentialsComplete = "rotate-credentials-complete" - // ShootOperationRotateKubeconfigCredentials is a constant for an annotation on a Shoot indicating that the credentials - // contained in the kubeconfig that is handed out to the user shall be rotated. + // OperationRotateCredentialsStart is a constant for an annotation indicating that the rotation of all credentials + // shall be started. This includes CAs, certificates, kubeconfigs, SSH keypairs, observability credentials, and + // ServiceAccount signing key. + OperationRotateCredentialsStart = "rotate-credentials-start" + // OperationRotateCredentialsComplete is a constant for an annotation indicating that the rotation of the + // credentials shall be completed. + OperationRotateCredentialsComplete = "rotate-credentials-complete" + // ShootOperationRotateKubeconfigCredentials is a constant for an annotation on a Shoot indicating that the + // credentialscontained in the kubeconfig that is handed out to the user shall be rotated. ShootOperationRotateKubeconfigCredentials = "rotate-kubeconfig-credentials" - // ShootOperationRotateSSHKeypair is a constant for an annotation on a Shoot indicating that the SSH keypair for the shoot - // nodes shall be rotated. + // ShootOperationRotateSSHKeypair is a constant for an annotation on a Shoot indicating that the SSH keypair for the + // shoot nodes shall be rotated. ShootOperationRotateSSHKeypair = "rotate-ssh-keypair" - // ShootOperationRotateCAStart is a constant for an annotation on a Shoot indicating that the rotation of the - // certificate authorities shall be started. - ShootOperationRotateCAStart = "rotate-ca-start" - // ShootOperationRotateCAComplete is a constant for an annotation on a Shoot indicating that the rotation of the - // certificate authorities shall be completed. - ShootOperationRotateCAComplete = "rotate-ca-complete" - // ShootOperationRotateObservabilityCredentials is a constant for an annotation on a Shoot indicating that the credentials - // for the observability stack secret shall be rotated. Note that this only affects the user credentials + // OperationRotateCAStart is a constant for an annotation indicating that the rotation of the certificate + // authorities shall be started. + OperationRotateCAStart = "rotate-ca-start" + // OperationRotateCAComplete is a constant for an annotation indicating that the rotation of the certificate + // authorities shall be completed. + OperationRotateCAComplete = "rotate-ca-complete" + // ShootOperationRotateObservabilityCredentials is a constant for an annotation on a Shoot indicating that the + // credentials for the observability stack secret shall be rotated. Note that this only affects the user credentials // since the operator credentials are rotated automatically each `30d`. ShootOperationRotateObservabilityCredentials = "rotate-observability-credentials" - // ShootOperationRotateServiceAccountKeyStart is a constant for an annotation on a Shoot indicating that the + // OperationRotateServiceAccountKeyStart is a constant for an annotation on a Shoot indicating that the // rotation of the service account signing key shall be started. - ShootOperationRotateServiceAccountKeyStart = "rotate-serviceaccount-key-start" - // ShootOperationRotateServiceAccountKeyComplete is a constant for an annotation on a Shoot indicating that the + OperationRotateServiceAccountKeyStart = "rotate-serviceaccount-key-start" + // OperationRotateServiceAccountKeyComplete is a constant for an annotation on a Shoot indicating that the // rotation of the service account signing key shall be completed. - ShootOperationRotateServiceAccountKeyComplete = "rotate-serviceaccount-key-complete" - // ShootOperationRotateETCDEncryptionKeyStart is a constant for an annotation on a Shoot indicating that the + OperationRotateServiceAccountKeyComplete = "rotate-serviceaccount-key-complete" + // OperationRotateETCDEncryptionKeyStart is a constant for an annotation on a Shoot indicating that the // rotation of the ETCD encryption key shall be started. - ShootOperationRotateETCDEncryptionKeyStart = "rotate-etcd-encryption-key-start" - // ShootOperationRotateETCDEncryptionKeyComplete is a constant for an annotation on a Shoot indicating that the + OperationRotateETCDEncryptionKeyStart = "rotate-etcd-encryption-key-start" + // OperationRotateETCDEncryptionKeyComplete is a constant for an annotation on a Shoot indicating that the // rotation of the ETCD encryption key shall be completed. - ShootOperationRotateETCDEncryptionKeyComplete = "rotate-etcd-encryption-key-complete" + OperationRotateETCDEncryptionKeyComplete = "rotate-etcd-encryption-key-complete" // SeedResourceManagerClass is the resource-class managed by the Gardener-Resource-Manager // instance in the garden namespace on the seeds. @@ -666,8 +671,8 @@ const ( // or the specified namespace was not present. NamespaceCreatedByProjectController = "namespace.gardener.cloud/created-by-project-controller" - // DefaultVpnRange is the default network range for the vpn between seed and shoot cluster. - DefaultVpnRange = "192.168.123.0/24" + // DefaultVPNRange is the default network range for the VPN between seed and shoot cluster. + DefaultVPNRange = "192.168.123.0/24" // BackupSecretName is the name of secret having credentials for etcd backups. BackupSecretName string = "etcd-backup" @@ -709,6 +714,25 @@ var ( // constants for well-known PriorityClass names const ( + // PriorityClassNameGardenSystemCritical is the name of a PriorityClass for Garden system components. + // Please consider the documentation in https://github.com/gardener/gardener/blob/master/docs/development/priority-classes.md + PriorityClassNameGardenSystemCritical = "gardener-garden-system-critical" + // PriorityClassNameGardenSystem500 is the name of a PriorityClass for Garden system components. + // Please consider the documentation in https://github.com/gardener/gardener/blob/master/docs/development/priority-classes.md + PriorityClassNameGardenSystem500 = "gardener-garden-system-500" + // PriorityClassNameGardenSystem400 is the name of a PriorityClass for Garden system components. + // Please consider the documentation in https://github.com/gardener/gardener/blob/master/docs/development/priority-classes.md + PriorityClassNameGardenSystem400 = "gardener-garden-system-400" + // PriorityClassNameGardenSystem300 is the name of a PriorityClass for Garden system components. + // Please consider the documentation in https://github.com/gardener/gardener/blob/master/docs/development/priority-classes.md + PriorityClassNameGardenSystem300 = "gardener-garden-system-300" + // PriorityClassNameGardenSystem200 is the name of a PriorityClass for Garden system components. + // Please consider the documentation in https://github.com/gardener/gardener/blob/master/docs/development/priority-classes.md + PriorityClassNameGardenSystem200 = "gardener-garden-system-200" + // PriorityClassNameGardenSystem100 is the name of a PriorityClass for Garden system components. + // Please consider the documentation in https://github.com/gardener/gardener/blob/master/docs/development/priority-classes.md + PriorityClassNameGardenSystem100 = "gardener-garden-system-100" + // PriorityClassNameShootSystem900 is the name of a PriorityClass for Shoot system components. // Please consider the documentation in https://github.com/gardener/gardener/blob/master/docs/development/priority-classes.md PriorityClassNameShootSystem900 = "gardener-shoot-system-900" diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/conversions.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/conversions.go index 9db970b7a..47155bf0f 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/conversions.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/conversions.go @@ -43,7 +43,7 @@ func addConversionFuncs(scheme *runtime.Scheme) error { SchemeGroupVersion.WithKind("BackupEntry"), func(label, value string) (string, string, error) { switch label { - case "metadata.name", "metadata.namespace", core.BackupEntrySeedName: + case "metadata.name", "metadata.namespace", core.BackupEntrySeedName, core.BackupEntryBucketName: return label, value, nil default: return "", "", fmt.Errorf("field label not supported: %s", label) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go index e8e76cf22..100be78d6 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/defaults.go @@ -276,6 +276,14 @@ func SetDefaults_Shoot(obj *Shoot) { obj.Spec.Kubernetes.KubeAPIServer.EnableAnonymousAuthentication = pointer.Bool(false) } + if obj.Spec.Kubernetes.KubeAPIServer.Logging == nil { + obj.Spec.Kubernetes.KubeAPIServer.Logging = &KubeAPIServerLogging{} + } + + if obj.Spec.Kubernetes.KubeAPIServer.Logging.Verbosity == nil { + obj.Spec.Kubernetes.KubeAPIServer.Logging.Verbosity = pointer.Int32(2) + } + for i, worker := range obj.Spec.Provider.Workers { kubernetesVersion := obj.Spec.Kubernetes.Version if worker.Kubernetes != nil && worker.Kubernetes.Version != nil { @@ -421,6 +429,31 @@ func SetDefaults_ControllerResource(obj *ControllerResource) { if obj.Primary == nil { obj.Primary = pointer.Bool(true) } + if obj.Kind == "Extension" { + if obj.GloballyEnabled == nil { + obj.GloballyEnabled = pointer.Bool(false) + } + + if obj.ReconcileTimeout == nil { + obj.ReconcileTimeout = &metav1.Duration{Duration: time.Minute * 3} + } + + if obj.Lifecycle == nil { + obj.Lifecycle = &ControllerResourceLifecycle{} + } + if obj.Lifecycle.Reconcile == nil { + afterKubeAPIServer := AfterKubeAPIServer + obj.Lifecycle.Reconcile = &afterKubeAPIServer + } + if obj.Lifecycle.Delete == nil { + beforeKubeAPIServer := BeforeKubeAPIServer + obj.Lifecycle.Delete = &beforeKubeAPIServer + } + if obj.Lifecycle.Migrate == nil { + beforeKubeAPIServer := BeforeKubeAPIServer + obj.Lifecycle.Migrate = &beforeKubeAPIServer + } + } } // SetDefaults_ControllerRegistrationDeployment sets default values for ControllerRegistrationDeployment objects. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go index 9681f1d0f..eb6a62162 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.pb.go @@ -501,10 +501,38 @@ func (m *BackupEntryStatus) XXX_DiscardUnknown() { var xxx_messageInfo_BackupEntryStatus proto.InternalMessageInfo +func (m *CARotation) Reset() { *m = CARotation{} } +func (*CARotation) ProtoMessage() {} +func (*CARotation) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{16} +} +func (m *CARotation) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *CARotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *CARotation) XXX_Merge(src proto.Message) { + xxx_messageInfo_CARotation.Merge(m, src) +} +func (m *CARotation) XXX_Size() int { + return m.Size() +} +func (m *CARotation) XXX_DiscardUnknown() { + xxx_messageInfo_CARotation.DiscardUnknown(m) +} + +var xxx_messageInfo_CARotation proto.InternalMessageInfo + func (m *CRI) Reset() { *m = CRI{} } func (*CRI) ProtoMessage() {} func (*CRI) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{16} + return fileDescriptor_ca37af0df9a5bbd2, []int{17} } func (m *CRI) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -532,7 +560,7 @@ var xxx_messageInfo_CRI proto.InternalMessageInfo func (m *CloudProfile) Reset() { *m = CloudProfile{} } func (*CloudProfile) ProtoMessage() {} func (*CloudProfile) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{17} + return fileDescriptor_ca37af0df9a5bbd2, []int{18} } func (m *CloudProfile) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -560,7 +588,7 @@ var xxx_messageInfo_CloudProfile proto.InternalMessageInfo func (m *CloudProfileList) Reset() { *m = CloudProfileList{} } func (*CloudProfileList) ProtoMessage() {} func (*CloudProfileList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{18} + return fileDescriptor_ca37af0df9a5bbd2, []int{19} } func (m *CloudProfileList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -588,7 +616,7 @@ var xxx_messageInfo_CloudProfileList proto.InternalMessageInfo func (m *CloudProfileSpec) Reset() { *m = CloudProfileSpec{} } func (*CloudProfileSpec) ProtoMessage() {} func (*CloudProfileSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{19} + return fileDescriptor_ca37af0df9a5bbd2, []int{20} } func (m *CloudProfileSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -616,7 +644,7 @@ var xxx_messageInfo_CloudProfileSpec proto.InternalMessageInfo func (m *ClusterAutoscaler) Reset() { *m = ClusterAutoscaler{} } func (*ClusterAutoscaler) ProtoMessage() {} func (*ClusterAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{20} + return fileDescriptor_ca37af0df9a5bbd2, []int{21} } func (m *ClusterAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -644,7 +672,7 @@ var xxx_messageInfo_ClusterAutoscaler proto.InternalMessageInfo func (m *Condition) Reset() { *m = Condition{} } func (*Condition) ProtoMessage() {} func (*Condition) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{21} + return fileDescriptor_ca37af0df9a5bbd2, []int{22} } func (m *Condition) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -672,7 +700,7 @@ var xxx_messageInfo_Condition proto.InternalMessageInfo func (m *ContainerRuntime) Reset() { *m = ContainerRuntime{} } func (*ContainerRuntime) ProtoMessage() {} func (*ContainerRuntime) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{22} + return fileDescriptor_ca37af0df9a5bbd2, []int{23} } func (m *ContainerRuntime) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -700,7 +728,7 @@ var xxx_messageInfo_ContainerRuntime proto.InternalMessageInfo func (m *ControlPlane) Reset() { *m = ControlPlane{} } func (*ControlPlane) ProtoMessage() {} func (*ControlPlane) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{23} + return fileDescriptor_ca37af0df9a5bbd2, []int{24} } func (m *ControlPlane) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -728,7 +756,7 @@ var xxx_messageInfo_ControlPlane proto.InternalMessageInfo func (m *ControllerDeployment) Reset() { *m = ControllerDeployment{} } func (*ControllerDeployment) ProtoMessage() {} func (*ControllerDeployment) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{24} + return fileDescriptor_ca37af0df9a5bbd2, []int{25} } func (m *ControllerDeployment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -756,7 +784,7 @@ var xxx_messageInfo_ControllerDeployment proto.InternalMessageInfo func (m *ControllerDeploymentList) Reset() { *m = ControllerDeploymentList{} } func (*ControllerDeploymentList) ProtoMessage() {} func (*ControllerDeploymentList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{25} + return fileDescriptor_ca37af0df9a5bbd2, []int{26} } func (m *ControllerDeploymentList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -784,7 +812,7 @@ var xxx_messageInfo_ControllerDeploymentList proto.InternalMessageInfo func (m *ControllerInstallation) Reset() { *m = ControllerInstallation{} } func (*ControllerInstallation) ProtoMessage() {} func (*ControllerInstallation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{26} + return fileDescriptor_ca37af0df9a5bbd2, []int{27} } func (m *ControllerInstallation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -812,7 +840,7 @@ var xxx_messageInfo_ControllerInstallation proto.InternalMessageInfo func (m *ControllerInstallationList) Reset() { *m = ControllerInstallationList{} } func (*ControllerInstallationList) ProtoMessage() {} func (*ControllerInstallationList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{27} + return fileDescriptor_ca37af0df9a5bbd2, []int{28} } func (m *ControllerInstallationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -840,7 +868,7 @@ var xxx_messageInfo_ControllerInstallationList proto.InternalMessageInfo func (m *ControllerInstallationSpec) Reset() { *m = ControllerInstallationSpec{} } func (*ControllerInstallationSpec) ProtoMessage() {} func (*ControllerInstallationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{28} + return fileDescriptor_ca37af0df9a5bbd2, []int{29} } func (m *ControllerInstallationSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -868,7 +896,7 @@ var xxx_messageInfo_ControllerInstallationSpec proto.InternalMessageInfo func (m *ControllerInstallationStatus) Reset() { *m = ControllerInstallationStatus{} } func (*ControllerInstallationStatus) ProtoMessage() {} func (*ControllerInstallationStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{29} + return fileDescriptor_ca37af0df9a5bbd2, []int{30} } func (m *ControllerInstallationStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -896,7 +924,7 @@ var xxx_messageInfo_ControllerInstallationStatus proto.InternalMessageInfo func (m *ControllerRegistration) Reset() { *m = ControllerRegistration{} } func (*ControllerRegistration) ProtoMessage() {} func (*ControllerRegistration) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{30} + return fileDescriptor_ca37af0df9a5bbd2, []int{31} } func (m *ControllerRegistration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -924,7 +952,7 @@ var xxx_messageInfo_ControllerRegistration proto.InternalMessageInfo func (m *ControllerRegistrationDeployment) Reset() { *m = ControllerRegistrationDeployment{} } func (*ControllerRegistrationDeployment) ProtoMessage() {} func (*ControllerRegistrationDeployment) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{31} + return fileDescriptor_ca37af0df9a5bbd2, []int{32} } func (m *ControllerRegistrationDeployment) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -952,7 +980,7 @@ var xxx_messageInfo_ControllerRegistrationDeployment proto.InternalMessageInfo func (m *ControllerRegistrationList) Reset() { *m = ControllerRegistrationList{} } func (*ControllerRegistrationList) ProtoMessage() {} func (*ControllerRegistrationList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{32} + return fileDescriptor_ca37af0df9a5bbd2, []int{33} } func (m *ControllerRegistrationList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -980,7 +1008,7 @@ var xxx_messageInfo_ControllerRegistrationList proto.InternalMessageInfo func (m *ControllerRegistrationSpec) Reset() { *m = ControllerRegistrationSpec{} } func (*ControllerRegistrationSpec) ProtoMessage() {} func (*ControllerRegistrationSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{33} + return fileDescriptor_ca37af0df9a5bbd2, []int{34} } func (m *ControllerRegistrationSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1008,7 +1036,7 @@ var xxx_messageInfo_ControllerRegistrationSpec proto.InternalMessageInfo func (m *ControllerResource) Reset() { *m = ControllerResource{} } func (*ControllerResource) ProtoMessage() {} func (*ControllerResource) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{34} + return fileDescriptor_ca37af0df9a5bbd2, []int{35} } func (m *ControllerResource) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1033,10 +1061,38 @@ func (m *ControllerResource) XXX_DiscardUnknown() { var xxx_messageInfo_ControllerResource proto.InternalMessageInfo +func (m *ControllerResourceLifecycle) Reset() { *m = ControllerResourceLifecycle{} } +func (*ControllerResourceLifecycle) ProtoMessage() {} +func (*ControllerResourceLifecycle) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{36} +} +func (m *ControllerResourceLifecycle) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ControllerResourceLifecycle) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *ControllerResourceLifecycle) XXX_Merge(src proto.Message) { + xxx_messageInfo_ControllerResourceLifecycle.Merge(m, src) +} +func (m *ControllerResourceLifecycle) XXX_Size() int { + return m.Size() +} +func (m *ControllerResourceLifecycle) XXX_DiscardUnknown() { + xxx_messageInfo_ControllerResourceLifecycle.DiscardUnknown(m) +} + +var xxx_messageInfo_ControllerResourceLifecycle proto.InternalMessageInfo + func (m *CoreDNS) Reset() { *m = CoreDNS{} } func (*CoreDNS) ProtoMessage() {} func (*CoreDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{35} + return fileDescriptor_ca37af0df9a5bbd2, []int{37} } func (m *CoreDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1064,7 +1120,7 @@ var xxx_messageInfo_CoreDNS proto.InternalMessageInfo func (m *CoreDNSAutoscaling) Reset() { *m = CoreDNSAutoscaling{} } func (*CoreDNSAutoscaling) ProtoMessage() {} func (*CoreDNSAutoscaling) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{36} + return fileDescriptor_ca37af0df9a5bbd2, []int{38} } func (m *CoreDNSAutoscaling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1092,7 +1148,7 @@ var xxx_messageInfo_CoreDNSAutoscaling proto.InternalMessageInfo func (m *CoreDNSRewriting) Reset() { *m = CoreDNSRewriting{} } func (*CoreDNSRewriting) ProtoMessage() {} func (*CoreDNSRewriting) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{37} + return fileDescriptor_ca37af0df9a5bbd2, []int{39} } func (m *CoreDNSRewriting) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1120,7 +1176,7 @@ var xxx_messageInfo_CoreDNSRewriting proto.InternalMessageInfo func (m *DNS) Reset() { *m = DNS{} } func (*DNS) ProtoMessage() {} func (*DNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{38} + return fileDescriptor_ca37af0df9a5bbd2, []int{40} } func (m *DNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1148,7 +1204,7 @@ var xxx_messageInfo_DNS proto.InternalMessageInfo func (m *DNSIncludeExclude) Reset() { *m = DNSIncludeExclude{} } func (*DNSIncludeExclude) ProtoMessage() {} func (*DNSIncludeExclude) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{39} + return fileDescriptor_ca37af0df9a5bbd2, []int{41} } func (m *DNSIncludeExclude) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1176,7 +1232,7 @@ var xxx_messageInfo_DNSIncludeExclude proto.InternalMessageInfo func (m *DNSProvider) Reset() { *m = DNSProvider{} } func (*DNSProvider) ProtoMessage() {} func (*DNSProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{40} + return fileDescriptor_ca37af0df9a5bbd2, []int{42} } func (m *DNSProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1204,7 +1260,7 @@ var xxx_messageInfo_DNSProvider proto.InternalMessageInfo func (m *DataVolume) Reset() { *m = DataVolume{} } func (*DataVolume) ProtoMessage() {} func (*DataVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{41} + return fileDescriptor_ca37af0df9a5bbd2, []int{43} } func (m *DataVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1232,7 +1288,7 @@ var xxx_messageInfo_DataVolume proto.InternalMessageInfo func (m *DeploymentRef) Reset() { *m = DeploymentRef{} } func (*DeploymentRef) ProtoMessage() {} func (*DeploymentRef) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{42} + return fileDescriptor_ca37af0df9a5bbd2, []int{44} } func (m *DeploymentRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1260,7 +1316,7 @@ var xxx_messageInfo_DeploymentRef proto.InternalMessageInfo func (m *ExpirableVersion) Reset() { *m = ExpirableVersion{} } func (*ExpirableVersion) ProtoMessage() {} func (*ExpirableVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{43} + return fileDescriptor_ca37af0df9a5bbd2, []int{45} } func (m *ExpirableVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1288,7 +1344,7 @@ var xxx_messageInfo_ExpirableVersion proto.InternalMessageInfo func (m *Extension) Reset() { *m = Extension{} } func (*Extension) ProtoMessage() {} func (*Extension) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{44} + return fileDescriptor_ca37af0df9a5bbd2, []int{46} } func (m *Extension) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1316,7 +1372,7 @@ var xxx_messageInfo_Extension proto.InternalMessageInfo func (m *FailureTolerance) Reset() { *m = FailureTolerance{} } func (*FailureTolerance) ProtoMessage() {} func (*FailureTolerance) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{45} + return fileDescriptor_ca37af0df9a5bbd2, []int{47} } func (m *FailureTolerance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1344,7 +1400,7 @@ var xxx_messageInfo_FailureTolerance proto.InternalMessageInfo func (m *Gardener) Reset() { *m = Gardener{} } func (*Gardener) ProtoMessage() {} func (*Gardener) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{46} + return fileDescriptor_ca37af0df9a5bbd2, []int{48} } func (m *Gardener) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1372,7 +1428,7 @@ var xxx_messageInfo_Gardener proto.InternalMessageInfo func (m *Hibernation) Reset() { *m = Hibernation{} } func (*Hibernation) ProtoMessage() {} func (*Hibernation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{47} + return fileDescriptor_ca37af0df9a5bbd2, []int{49} } func (m *Hibernation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1400,7 +1456,7 @@ var xxx_messageInfo_Hibernation proto.InternalMessageInfo func (m *HibernationSchedule) Reset() { *m = HibernationSchedule{} } func (*HibernationSchedule) ProtoMessage() {} func (*HibernationSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{48} + return fileDescriptor_ca37af0df9a5bbd2, []int{50} } func (m *HibernationSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1428,7 +1484,7 @@ var xxx_messageInfo_HibernationSchedule proto.InternalMessageInfo func (m *HighAvailability) Reset() { *m = HighAvailability{} } func (*HighAvailability) ProtoMessage() {} func (*HighAvailability) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{49} + return fileDescriptor_ca37af0df9a5bbd2, []int{51} } func (m *HighAvailability) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1456,7 +1512,7 @@ var xxx_messageInfo_HighAvailability proto.InternalMessageInfo func (m *HorizontalPodAutoscalerConfig) Reset() { *m = HorizontalPodAutoscalerConfig{} } func (*HorizontalPodAutoscalerConfig) ProtoMessage() {} func (*HorizontalPodAutoscalerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{50} + return fileDescriptor_ca37af0df9a5bbd2, []int{52} } func (m *HorizontalPodAutoscalerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1484,7 +1540,7 @@ var xxx_messageInfo_HorizontalPodAutoscalerConfig proto.InternalMessageInfo func (m *Ingress) Reset() { *m = Ingress{} } func (*Ingress) ProtoMessage() {} func (*Ingress) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{51} + return fileDescriptor_ca37af0df9a5bbd2, []int{53} } func (m *Ingress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1512,7 +1568,7 @@ var xxx_messageInfo_Ingress proto.InternalMessageInfo func (m *IngressController) Reset() { *m = IngressController{} } func (*IngressController) ProtoMessage() {} func (*IngressController) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{52} + return fileDescriptor_ca37af0df9a5bbd2, []int{54} } func (m *IngressController) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1540,7 +1596,7 @@ var xxx_messageInfo_IngressController proto.InternalMessageInfo func (m *KubeAPIServerConfig) Reset() { *m = KubeAPIServerConfig{} } func (*KubeAPIServerConfig) ProtoMessage() {} func (*KubeAPIServerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{53} + return fileDescriptor_ca37af0df9a5bbd2, []int{55} } func (m *KubeAPIServerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1565,10 +1621,38 @@ func (m *KubeAPIServerConfig) XXX_DiscardUnknown() { var xxx_messageInfo_KubeAPIServerConfig proto.InternalMessageInfo +func (m *KubeAPIServerLogging) Reset() { *m = KubeAPIServerLogging{} } +func (*KubeAPIServerLogging) ProtoMessage() {} +func (*KubeAPIServerLogging) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{56} +} +func (m *KubeAPIServerLogging) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *KubeAPIServerLogging) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *KubeAPIServerLogging) XXX_Merge(src proto.Message) { + xxx_messageInfo_KubeAPIServerLogging.Merge(m, src) +} +func (m *KubeAPIServerLogging) XXX_Size() int { + return m.Size() +} +func (m *KubeAPIServerLogging) XXX_DiscardUnknown() { + xxx_messageInfo_KubeAPIServerLogging.DiscardUnknown(m) +} + +var xxx_messageInfo_KubeAPIServerLogging proto.InternalMessageInfo + func (m *KubeAPIServerRequests) Reset() { *m = KubeAPIServerRequests{} } func (*KubeAPIServerRequests) ProtoMessage() {} func (*KubeAPIServerRequests) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{54} + return fileDescriptor_ca37af0df9a5bbd2, []int{57} } func (m *KubeAPIServerRequests) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1596,7 +1680,7 @@ var xxx_messageInfo_KubeAPIServerRequests proto.InternalMessageInfo func (m *KubeControllerManagerConfig) Reset() { *m = KubeControllerManagerConfig{} } func (*KubeControllerManagerConfig) ProtoMessage() {} func (*KubeControllerManagerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{55} + return fileDescriptor_ca37af0df9a5bbd2, []int{58} } func (m *KubeControllerManagerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1624,7 +1708,7 @@ var xxx_messageInfo_KubeControllerManagerConfig proto.InternalMessageInfo func (m *KubeProxyConfig) Reset() { *m = KubeProxyConfig{} } func (*KubeProxyConfig) ProtoMessage() {} func (*KubeProxyConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{56} + return fileDescriptor_ca37af0df9a5bbd2, []int{59} } func (m *KubeProxyConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1652,7 +1736,7 @@ var xxx_messageInfo_KubeProxyConfig proto.InternalMessageInfo func (m *KubeSchedulerConfig) Reset() { *m = KubeSchedulerConfig{} } func (*KubeSchedulerConfig) ProtoMessage() {} func (*KubeSchedulerConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{57} + return fileDescriptor_ca37af0df9a5bbd2, []int{60} } func (m *KubeSchedulerConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1680,7 +1764,7 @@ var xxx_messageInfo_KubeSchedulerConfig proto.InternalMessageInfo func (m *KubeletConfig) Reset() { *m = KubeletConfig{} } func (*KubeletConfig) ProtoMessage() {} func (*KubeletConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{58} + return fileDescriptor_ca37af0df9a5bbd2, []int{61} } func (m *KubeletConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1708,7 +1792,7 @@ var xxx_messageInfo_KubeletConfig proto.InternalMessageInfo func (m *KubeletConfigEviction) Reset() { *m = KubeletConfigEviction{} } func (*KubeletConfigEviction) ProtoMessage() {} func (*KubeletConfigEviction) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{59} + return fileDescriptor_ca37af0df9a5bbd2, []int{62} } func (m *KubeletConfigEviction) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1736,7 +1820,7 @@ var xxx_messageInfo_KubeletConfigEviction proto.InternalMessageInfo func (m *KubeletConfigEvictionMinimumReclaim) Reset() { *m = KubeletConfigEvictionMinimumReclaim{} } func (*KubeletConfigEvictionMinimumReclaim) ProtoMessage() {} func (*KubeletConfigEvictionMinimumReclaim) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{60} + return fileDescriptor_ca37af0df9a5bbd2, []int{63} } func (m *KubeletConfigEvictionMinimumReclaim) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1764,7 +1848,7 @@ var xxx_messageInfo_KubeletConfigEvictionMinimumReclaim proto.InternalMessageInf func (m *KubeletConfigEvictionSoftGracePeriod) Reset() { *m = KubeletConfigEvictionSoftGracePeriod{} } func (*KubeletConfigEvictionSoftGracePeriod) ProtoMessage() {} func (*KubeletConfigEvictionSoftGracePeriod) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{61} + return fileDescriptor_ca37af0df9a5bbd2, []int{64} } func (m *KubeletConfigEvictionSoftGracePeriod) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1792,7 +1876,7 @@ var xxx_messageInfo_KubeletConfigEvictionSoftGracePeriod proto.InternalMessageIn func (m *KubeletConfigReserved) Reset() { *m = KubeletConfigReserved{} } func (*KubeletConfigReserved) ProtoMessage() {} func (*KubeletConfigReserved) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{62} + return fileDescriptor_ca37af0df9a5bbd2, []int{65} } func (m *KubeletConfigReserved) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1820,7 +1904,7 @@ var xxx_messageInfo_KubeletConfigReserved proto.InternalMessageInfo func (m *Kubernetes) Reset() { *m = Kubernetes{} } func (*Kubernetes) ProtoMessage() {} func (*Kubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{63} + return fileDescriptor_ca37af0df9a5bbd2, []int{66} } func (m *Kubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1848,7 +1932,7 @@ var xxx_messageInfo_Kubernetes proto.InternalMessageInfo func (m *KubernetesConfig) Reset() { *m = KubernetesConfig{} } func (*KubernetesConfig) ProtoMessage() {} func (*KubernetesConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{64} + return fileDescriptor_ca37af0df9a5bbd2, []int{67} } func (m *KubernetesConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1876,7 +1960,7 @@ var xxx_messageInfo_KubernetesConfig proto.InternalMessageInfo func (m *KubernetesDashboard) Reset() { *m = KubernetesDashboard{} } func (*KubernetesDashboard) ProtoMessage() {} func (*KubernetesDashboard) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{65} + return fileDescriptor_ca37af0df9a5bbd2, []int{68} } func (m *KubernetesDashboard) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1904,7 +1988,7 @@ var xxx_messageInfo_KubernetesDashboard proto.InternalMessageInfo func (m *KubernetesSettings) Reset() { *m = KubernetesSettings{} } func (*KubernetesSettings) ProtoMessage() {} func (*KubernetesSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{66} + return fileDescriptor_ca37af0df9a5bbd2, []int{69} } func (m *KubernetesSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1932,7 +2016,7 @@ var xxx_messageInfo_KubernetesSettings proto.InternalMessageInfo func (m *LastError) Reset() { *m = LastError{} } func (*LastError) ProtoMessage() {} func (*LastError) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{67} + return fileDescriptor_ca37af0df9a5bbd2, []int{70} } func (m *LastError) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1957,10 +2041,38 @@ func (m *LastError) XXX_DiscardUnknown() { var xxx_messageInfo_LastError proto.InternalMessageInfo +func (m *LastMaintenance) Reset() { *m = LastMaintenance{} } +func (*LastMaintenance) ProtoMessage() {} +func (*LastMaintenance) Descriptor() ([]byte, []int) { + return fileDescriptor_ca37af0df9a5bbd2, []int{71} +} +func (m *LastMaintenance) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *LastMaintenance) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil +} +func (m *LastMaintenance) XXX_Merge(src proto.Message) { + xxx_messageInfo_LastMaintenance.Merge(m, src) +} +func (m *LastMaintenance) XXX_Size() int { + return m.Size() +} +func (m *LastMaintenance) XXX_DiscardUnknown() { + xxx_messageInfo_LastMaintenance.DiscardUnknown(m) +} + +var xxx_messageInfo_LastMaintenance proto.InternalMessageInfo + func (m *LastOperation) Reset() { *m = LastOperation{} } func (*LastOperation) ProtoMessage() {} func (*LastOperation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{68} + return fileDescriptor_ca37af0df9a5bbd2, []int{72} } func (m *LastOperation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1988,7 +2100,7 @@ var xxx_messageInfo_LastOperation proto.InternalMessageInfo func (m *Machine) Reset() { *m = Machine{} } func (*Machine) ProtoMessage() {} func (*Machine) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{69} + return fileDescriptor_ca37af0df9a5bbd2, []int{73} } func (m *Machine) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2016,7 +2128,7 @@ var xxx_messageInfo_Machine proto.InternalMessageInfo func (m *MachineControllerManagerSettings) Reset() { *m = MachineControllerManagerSettings{} } func (*MachineControllerManagerSettings) ProtoMessage() {} func (*MachineControllerManagerSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{70} + return fileDescriptor_ca37af0df9a5bbd2, []int{74} } func (m *MachineControllerManagerSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2044,7 +2156,7 @@ var xxx_messageInfo_MachineControllerManagerSettings proto.InternalMessageInfo func (m *MachineImage) Reset() { *m = MachineImage{} } func (*MachineImage) ProtoMessage() {} func (*MachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{71} + return fileDescriptor_ca37af0df9a5bbd2, []int{75} } func (m *MachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2072,7 +2184,7 @@ var xxx_messageInfo_MachineImage proto.InternalMessageInfo func (m *MachineImageVersion) Reset() { *m = MachineImageVersion{} } func (*MachineImageVersion) ProtoMessage() {} func (*MachineImageVersion) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{72} + return fileDescriptor_ca37af0df9a5bbd2, []int{76} } func (m *MachineImageVersion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2100,7 +2212,7 @@ var xxx_messageInfo_MachineImageVersion proto.InternalMessageInfo func (m *MachineType) Reset() { *m = MachineType{} } func (*MachineType) ProtoMessage() {} func (*MachineType) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{73} + return fileDescriptor_ca37af0df9a5bbd2, []int{77} } func (m *MachineType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2128,7 +2240,7 @@ var xxx_messageInfo_MachineType proto.InternalMessageInfo func (m *MachineTypeStorage) Reset() { *m = MachineTypeStorage{} } func (*MachineTypeStorage) ProtoMessage() {} func (*MachineTypeStorage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{74} + return fileDescriptor_ca37af0df9a5bbd2, []int{78} } func (m *MachineTypeStorage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2156,7 +2268,7 @@ var xxx_messageInfo_MachineTypeStorage proto.InternalMessageInfo func (m *Maintenance) Reset() { *m = Maintenance{} } func (*Maintenance) ProtoMessage() {} func (*Maintenance) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{75} + return fileDescriptor_ca37af0df9a5bbd2, []int{79} } func (m *Maintenance) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2184,7 +2296,7 @@ var xxx_messageInfo_Maintenance proto.InternalMessageInfo func (m *MaintenanceAutoUpdate) Reset() { *m = MaintenanceAutoUpdate{} } func (*MaintenanceAutoUpdate) ProtoMessage() {} func (*MaintenanceAutoUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{76} + return fileDescriptor_ca37af0df9a5bbd2, []int{80} } func (m *MaintenanceAutoUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2212,7 +2324,7 @@ var xxx_messageInfo_MaintenanceAutoUpdate proto.InternalMessageInfo func (m *MaintenanceTimeWindow) Reset() { *m = MaintenanceTimeWindow{} } func (*MaintenanceTimeWindow) ProtoMessage() {} func (*MaintenanceTimeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{77} + return fileDescriptor_ca37af0df9a5bbd2, []int{81} } func (m *MaintenanceTimeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2240,7 +2352,7 @@ var xxx_messageInfo_MaintenanceTimeWindow proto.InternalMessageInfo func (m *Monitoring) Reset() { *m = Monitoring{} } func (*Monitoring) ProtoMessage() {} func (*Monitoring) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{78} + return fileDescriptor_ca37af0df9a5bbd2, []int{82} } func (m *Monitoring) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2268,7 +2380,7 @@ var xxx_messageInfo_Monitoring proto.InternalMessageInfo func (m *NamedResourceReference) Reset() { *m = NamedResourceReference{} } func (*NamedResourceReference) ProtoMessage() {} func (*NamedResourceReference) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{79} + return fileDescriptor_ca37af0df9a5bbd2, []int{83} } func (m *NamedResourceReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2296,7 +2408,7 @@ var xxx_messageInfo_NamedResourceReference proto.InternalMessageInfo func (m *Networking) Reset() { *m = Networking{} } func (*Networking) ProtoMessage() {} func (*Networking) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{80} + return fileDescriptor_ca37af0df9a5bbd2, []int{84} } func (m *Networking) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2324,7 +2436,7 @@ var xxx_messageInfo_Networking proto.InternalMessageInfo func (m *NginxIngress) Reset() { *m = NginxIngress{} } func (*NginxIngress) ProtoMessage() {} func (*NginxIngress) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{81} + return fileDescriptor_ca37af0df9a5bbd2, []int{85} } func (m *NginxIngress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2352,7 +2464,7 @@ var xxx_messageInfo_NginxIngress proto.InternalMessageInfo func (m *NodeLocalDNS) Reset() { *m = NodeLocalDNS{} } func (*NodeLocalDNS) ProtoMessage() {} func (*NodeLocalDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{82} + return fileDescriptor_ca37af0df9a5bbd2, []int{86} } func (m *NodeLocalDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2380,7 +2492,7 @@ var xxx_messageInfo_NodeLocalDNS proto.InternalMessageInfo func (m *OIDCConfig) Reset() { *m = OIDCConfig{} } func (*OIDCConfig) ProtoMessage() {} func (*OIDCConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{83} + return fileDescriptor_ca37af0df9a5bbd2, []int{87} } func (m *OIDCConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2408,7 +2520,7 @@ var xxx_messageInfo_OIDCConfig proto.InternalMessageInfo func (m *OpenIDConnectClientAuthentication) Reset() { *m = OpenIDConnectClientAuthentication{} } func (*OpenIDConnectClientAuthentication) ProtoMessage() {} func (*OpenIDConnectClientAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{84} + return fileDescriptor_ca37af0df9a5bbd2, []int{88} } func (m *OpenIDConnectClientAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2436,7 +2548,7 @@ var xxx_messageInfo_OpenIDConnectClientAuthentication proto.InternalMessageInfo func (m *Project) Reset() { *m = Project{} } func (*Project) ProtoMessage() {} func (*Project) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{85} + return fileDescriptor_ca37af0df9a5bbd2, []int{89} } func (m *Project) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2464,7 +2576,7 @@ var xxx_messageInfo_Project proto.InternalMessageInfo func (m *ProjectList) Reset() { *m = ProjectList{} } func (*ProjectList) ProtoMessage() {} func (*ProjectList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{86} + return fileDescriptor_ca37af0df9a5bbd2, []int{90} } func (m *ProjectList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2492,7 +2604,7 @@ var xxx_messageInfo_ProjectList proto.InternalMessageInfo func (m *ProjectMember) Reset() { *m = ProjectMember{} } func (*ProjectMember) ProtoMessage() {} func (*ProjectMember) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{87} + return fileDescriptor_ca37af0df9a5bbd2, []int{91} } func (m *ProjectMember) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2520,7 +2632,7 @@ var xxx_messageInfo_ProjectMember proto.InternalMessageInfo func (m *ProjectSpec) Reset() { *m = ProjectSpec{} } func (*ProjectSpec) ProtoMessage() {} func (*ProjectSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{88} + return fileDescriptor_ca37af0df9a5bbd2, []int{92} } func (m *ProjectSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2548,7 +2660,7 @@ var xxx_messageInfo_ProjectSpec proto.InternalMessageInfo func (m *ProjectStatus) Reset() { *m = ProjectStatus{} } func (*ProjectStatus) ProtoMessage() {} func (*ProjectStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{89} + return fileDescriptor_ca37af0df9a5bbd2, []int{93} } func (m *ProjectStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2576,7 +2688,7 @@ var xxx_messageInfo_ProjectStatus proto.InternalMessageInfo func (m *ProjectTolerations) Reset() { *m = ProjectTolerations{} } func (*ProjectTolerations) ProtoMessage() {} func (*ProjectTolerations) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{90} + return fileDescriptor_ca37af0df9a5bbd2, []int{94} } func (m *ProjectTolerations) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2604,7 +2716,7 @@ var xxx_messageInfo_ProjectTolerations proto.InternalMessageInfo func (m *Provider) Reset() { *m = Provider{} } func (*Provider) ProtoMessage() {} func (*Provider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{91} + return fileDescriptor_ca37af0df9a5bbd2, []int{95} } func (m *Provider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2632,7 +2744,7 @@ var xxx_messageInfo_Provider proto.InternalMessageInfo func (m *Quota) Reset() { *m = Quota{} } func (*Quota) ProtoMessage() {} func (*Quota) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{92} + return fileDescriptor_ca37af0df9a5bbd2, []int{96} } func (m *Quota) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2660,7 +2772,7 @@ var xxx_messageInfo_Quota proto.InternalMessageInfo func (m *QuotaList) Reset() { *m = QuotaList{} } func (*QuotaList) ProtoMessage() {} func (*QuotaList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{93} + return fileDescriptor_ca37af0df9a5bbd2, []int{97} } func (m *QuotaList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2688,7 +2800,7 @@ var xxx_messageInfo_QuotaList proto.InternalMessageInfo func (m *QuotaSpec) Reset() { *m = QuotaSpec{} } func (*QuotaSpec) ProtoMessage() {} func (*QuotaSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{94} + return fileDescriptor_ca37af0df9a5bbd2, []int{98} } func (m *QuotaSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2716,7 +2828,7 @@ var xxx_messageInfo_QuotaSpec proto.InternalMessageInfo func (m *Region) Reset() { *m = Region{} } func (*Region) ProtoMessage() {} func (*Region) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{95} + return fileDescriptor_ca37af0df9a5bbd2, []int{99} } func (m *Region) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2744,7 +2856,7 @@ var xxx_messageInfo_Region proto.InternalMessageInfo func (m *ResourceWatchCacheSize) Reset() { *m = ResourceWatchCacheSize{} } func (*ResourceWatchCacheSize) ProtoMessage() {} func (*ResourceWatchCacheSize) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{96} + return fileDescriptor_ca37af0df9a5bbd2, []int{100} } func (m *ResourceWatchCacheSize) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2772,7 +2884,7 @@ var xxx_messageInfo_ResourceWatchCacheSize proto.InternalMessageInfo func (m *SecretBinding) Reset() { *m = SecretBinding{} } func (*SecretBinding) ProtoMessage() {} func (*SecretBinding) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{97} + return fileDescriptor_ca37af0df9a5bbd2, []int{101} } func (m *SecretBinding) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2800,7 +2912,7 @@ var xxx_messageInfo_SecretBinding proto.InternalMessageInfo func (m *SecretBindingList) Reset() { *m = SecretBindingList{} } func (*SecretBindingList) ProtoMessage() {} func (*SecretBindingList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{98} + return fileDescriptor_ca37af0df9a5bbd2, []int{102} } func (m *SecretBindingList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2828,7 +2940,7 @@ var xxx_messageInfo_SecretBindingList proto.InternalMessageInfo func (m *SecretBindingProvider) Reset() { *m = SecretBindingProvider{} } func (*SecretBindingProvider) ProtoMessage() {} func (*SecretBindingProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{99} + return fileDescriptor_ca37af0df9a5bbd2, []int{103} } func (m *SecretBindingProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2856,7 +2968,7 @@ var xxx_messageInfo_SecretBindingProvider proto.InternalMessageInfo func (m *Seed) Reset() { *m = Seed{} } func (*Seed) ProtoMessage() {} func (*Seed) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{100} + return fileDescriptor_ca37af0df9a5bbd2, []int{104} } func (m *Seed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2884,7 +2996,7 @@ var xxx_messageInfo_Seed proto.InternalMessageInfo func (m *SeedBackup) Reset() { *m = SeedBackup{} } func (*SeedBackup) ProtoMessage() {} func (*SeedBackup) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{101} + return fileDescriptor_ca37af0df9a5bbd2, []int{105} } func (m *SeedBackup) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2912,7 +3024,7 @@ var xxx_messageInfo_SeedBackup proto.InternalMessageInfo func (m *SeedDNS) Reset() { *m = SeedDNS{} } func (*SeedDNS) ProtoMessage() {} func (*SeedDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{102} + return fileDescriptor_ca37af0df9a5bbd2, []int{106} } func (m *SeedDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2940,7 +3052,7 @@ var xxx_messageInfo_SeedDNS proto.InternalMessageInfo func (m *SeedDNSProvider) Reset() { *m = SeedDNSProvider{} } func (*SeedDNSProvider) ProtoMessage() {} func (*SeedDNSProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{103} + return fileDescriptor_ca37af0df9a5bbd2, []int{107} } func (m *SeedDNSProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2968,7 +3080,7 @@ var xxx_messageInfo_SeedDNSProvider proto.InternalMessageInfo func (m *SeedList) Reset() { *m = SeedList{} } func (*SeedList) ProtoMessage() {} func (*SeedList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{104} + return fileDescriptor_ca37af0df9a5bbd2, []int{108} } func (m *SeedList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2996,7 +3108,7 @@ var xxx_messageInfo_SeedList proto.InternalMessageInfo func (m *SeedNetworks) Reset() { *m = SeedNetworks{} } func (*SeedNetworks) ProtoMessage() {} func (*SeedNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{105} + return fileDescriptor_ca37af0df9a5bbd2, []int{109} } func (m *SeedNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3024,7 +3136,7 @@ var xxx_messageInfo_SeedNetworks proto.InternalMessageInfo func (m *SeedProvider) Reset() { *m = SeedProvider{} } func (*SeedProvider) ProtoMessage() {} func (*SeedProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{106} + return fileDescriptor_ca37af0df9a5bbd2, []int{110} } func (m *SeedProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3052,7 +3164,7 @@ var xxx_messageInfo_SeedProvider proto.InternalMessageInfo func (m *SeedSelector) Reset() { *m = SeedSelector{} } func (*SeedSelector) ProtoMessage() {} func (*SeedSelector) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{107} + return fileDescriptor_ca37af0df9a5bbd2, []int{111} } func (m *SeedSelector) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3080,7 +3192,7 @@ var xxx_messageInfo_SeedSelector proto.InternalMessageInfo func (m *SeedSettingDependencyWatchdog) Reset() { *m = SeedSettingDependencyWatchdog{} } func (*SeedSettingDependencyWatchdog) ProtoMessage() {} func (*SeedSettingDependencyWatchdog) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{108} + return fileDescriptor_ca37af0df9a5bbd2, []int{112} } func (m *SeedSettingDependencyWatchdog) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3108,7 +3220,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdog proto.InternalMessageInfo func (m *SeedSettingDependencyWatchdogEndpoint) Reset() { *m = SeedSettingDependencyWatchdogEndpoint{} } func (*SeedSettingDependencyWatchdogEndpoint) ProtoMessage() {} func (*SeedSettingDependencyWatchdogEndpoint) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{109} + return fileDescriptor_ca37af0df9a5bbd2, []int{113} } func (m *SeedSettingDependencyWatchdogEndpoint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3136,7 +3248,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdogEndpoint proto.InternalMessageI func (m *SeedSettingDependencyWatchdogProbe) Reset() { *m = SeedSettingDependencyWatchdogProbe{} } func (*SeedSettingDependencyWatchdogProbe) ProtoMessage() {} func (*SeedSettingDependencyWatchdogProbe) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{110} + return fileDescriptor_ca37af0df9a5bbd2, []int{114} } func (m *SeedSettingDependencyWatchdogProbe) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3164,7 +3276,7 @@ var xxx_messageInfo_SeedSettingDependencyWatchdogProbe proto.InternalMessageInfo func (m *SeedSettingExcessCapacityReservation) Reset() { *m = SeedSettingExcessCapacityReservation{} } func (*SeedSettingExcessCapacityReservation) ProtoMessage() {} func (*SeedSettingExcessCapacityReservation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{111} + return fileDescriptor_ca37af0df9a5bbd2, []int{115} } func (m *SeedSettingExcessCapacityReservation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3192,7 +3304,7 @@ var xxx_messageInfo_SeedSettingExcessCapacityReservation proto.InternalMessageIn func (m *SeedSettingLoadBalancerServices) Reset() { *m = SeedSettingLoadBalancerServices{} } func (*SeedSettingLoadBalancerServices) ProtoMessage() {} func (*SeedSettingLoadBalancerServices) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{112} + return fileDescriptor_ca37af0df9a5bbd2, []int{116} } func (m *SeedSettingLoadBalancerServices) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3220,7 +3332,7 @@ var xxx_messageInfo_SeedSettingLoadBalancerServices proto.InternalMessageInfo func (m *SeedSettingOwnerChecks) Reset() { *m = SeedSettingOwnerChecks{} } func (*SeedSettingOwnerChecks) ProtoMessage() {} func (*SeedSettingOwnerChecks) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{113} + return fileDescriptor_ca37af0df9a5bbd2, []int{117} } func (m *SeedSettingOwnerChecks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3248,7 +3360,7 @@ var xxx_messageInfo_SeedSettingOwnerChecks proto.InternalMessageInfo func (m *SeedSettingScheduling) Reset() { *m = SeedSettingScheduling{} } func (*SeedSettingScheduling) ProtoMessage() {} func (*SeedSettingScheduling) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{114} + return fileDescriptor_ca37af0df9a5bbd2, []int{118} } func (m *SeedSettingScheduling) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3276,7 +3388,7 @@ var xxx_messageInfo_SeedSettingScheduling proto.InternalMessageInfo func (m *SeedSettingShootDNS) Reset() { *m = SeedSettingShootDNS{} } func (*SeedSettingShootDNS) ProtoMessage() {} func (*SeedSettingShootDNS) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{115} + return fileDescriptor_ca37af0df9a5bbd2, []int{119} } func (m *SeedSettingShootDNS) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3304,7 +3416,7 @@ var xxx_messageInfo_SeedSettingShootDNS proto.InternalMessageInfo func (m *SeedSettingVerticalPodAutoscaler) Reset() { *m = SeedSettingVerticalPodAutoscaler{} } func (*SeedSettingVerticalPodAutoscaler) ProtoMessage() {} func (*SeedSettingVerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{116} + return fileDescriptor_ca37af0df9a5bbd2, []int{120} } func (m *SeedSettingVerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3332,7 +3444,7 @@ var xxx_messageInfo_SeedSettingVerticalPodAutoscaler proto.InternalMessageInfo func (m *SeedSettings) Reset() { *m = SeedSettings{} } func (*SeedSettings) ProtoMessage() {} func (*SeedSettings) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{117} + return fileDescriptor_ca37af0df9a5bbd2, []int{121} } func (m *SeedSettings) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3360,7 +3472,7 @@ var xxx_messageInfo_SeedSettings proto.InternalMessageInfo func (m *SeedSpec) Reset() { *m = SeedSpec{} } func (*SeedSpec) ProtoMessage() {} func (*SeedSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{118} + return fileDescriptor_ca37af0df9a5bbd2, []int{122} } func (m *SeedSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3388,7 +3500,7 @@ var xxx_messageInfo_SeedSpec proto.InternalMessageInfo func (m *SeedStatus) Reset() { *m = SeedStatus{} } func (*SeedStatus) ProtoMessage() {} func (*SeedStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{119} + return fileDescriptor_ca37af0df9a5bbd2, []int{123} } func (m *SeedStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3416,7 +3528,7 @@ var xxx_messageInfo_SeedStatus proto.InternalMessageInfo func (m *SeedTaint) Reset() { *m = SeedTaint{} } func (*SeedTaint) ProtoMessage() {} func (*SeedTaint) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{120} + return fileDescriptor_ca37af0df9a5bbd2, []int{124} } func (m *SeedTaint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3444,7 +3556,7 @@ var xxx_messageInfo_SeedTaint proto.InternalMessageInfo func (m *SeedTemplate) Reset() { *m = SeedTemplate{} } func (*SeedTemplate) ProtoMessage() {} func (*SeedTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{121} + return fileDescriptor_ca37af0df9a5bbd2, []int{125} } func (m *SeedTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3472,7 +3584,7 @@ var xxx_messageInfo_SeedTemplate proto.InternalMessageInfo func (m *SeedVolume) Reset() { *m = SeedVolume{} } func (*SeedVolume) ProtoMessage() {} func (*SeedVolume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{122} + return fileDescriptor_ca37af0df9a5bbd2, []int{126} } func (m *SeedVolume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3500,7 +3612,7 @@ var xxx_messageInfo_SeedVolume proto.InternalMessageInfo func (m *SeedVolumeProvider) Reset() { *m = SeedVolumeProvider{} } func (*SeedVolumeProvider) ProtoMessage() {} func (*SeedVolumeProvider) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{123} + return fileDescriptor_ca37af0df9a5bbd2, []int{127} } func (m *SeedVolumeProvider) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3528,7 +3640,7 @@ var xxx_messageInfo_SeedVolumeProvider proto.InternalMessageInfo func (m *ServiceAccountConfig) Reset() { *m = ServiceAccountConfig{} } func (*ServiceAccountConfig) ProtoMessage() {} func (*ServiceAccountConfig) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{124} + return fileDescriptor_ca37af0df9a5bbd2, []int{128} } func (m *ServiceAccountConfig) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3556,7 +3668,7 @@ var xxx_messageInfo_ServiceAccountConfig proto.InternalMessageInfo func (m *Shoot) Reset() { *m = Shoot{} } func (*Shoot) ProtoMessage() {} func (*Shoot) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{125} + return fileDescriptor_ca37af0df9a5bbd2, []int{129} } func (m *Shoot) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3584,7 +3696,7 @@ var xxx_messageInfo_Shoot proto.InternalMessageInfo func (m *ShootAdvertisedAddress) Reset() { *m = ShootAdvertisedAddress{} } func (*ShootAdvertisedAddress) ProtoMessage() {} func (*ShootAdvertisedAddress) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{126} + return fileDescriptor_ca37af0df9a5bbd2, []int{130} } func (m *ShootAdvertisedAddress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3609,38 +3721,10 @@ func (m *ShootAdvertisedAddress) XXX_DiscardUnknown() { var xxx_messageInfo_ShootAdvertisedAddress proto.InternalMessageInfo -func (m *ShootCARotation) Reset() { *m = ShootCARotation{} } -func (*ShootCARotation) ProtoMessage() {} -func (*ShootCARotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{127} -} -func (m *ShootCARotation) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *ShootCARotation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *ShootCARotation) XXX_Merge(src proto.Message) { - xxx_messageInfo_ShootCARotation.Merge(m, src) -} -func (m *ShootCARotation) XXX_Size() int { - return m.Size() -} -func (m *ShootCARotation) XXX_DiscardUnknown() { - xxx_messageInfo_ShootCARotation.DiscardUnknown(m) -} - -var xxx_messageInfo_ShootCARotation proto.InternalMessageInfo - func (m *ShootCredentials) Reset() { *m = ShootCredentials{} } func (*ShootCredentials) ProtoMessage() {} func (*ShootCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{128} + return fileDescriptor_ca37af0df9a5bbd2, []int{131} } func (m *ShootCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3668,7 +3752,7 @@ var xxx_messageInfo_ShootCredentials proto.InternalMessageInfo func (m *ShootCredentialsRotation) Reset() { *m = ShootCredentialsRotation{} } func (*ShootCredentialsRotation) ProtoMessage() {} func (*ShootCredentialsRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{129} + return fileDescriptor_ca37af0df9a5bbd2, []int{132} } func (m *ShootCredentialsRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3696,7 +3780,7 @@ var xxx_messageInfo_ShootCredentialsRotation proto.InternalMessageInfo func (m *ShootETCDEncryptionKeyRotation) Reset() { *m = ShootETCDEncryptionKeyRotation{} } func (*ShootETCDEncryptionKeyRotation) ProtoMessage() {} func (*ShootETCDEncryptionKeyRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{130} + return fileDescriptor_ca37af0df9a5bbd2, []int{133} } func (m *ShootETCDEncryptionKeyRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3724,7 +3808,7 @@ var xxx_messageInfo_ShootETCDEncryptionKeyRotation proto.InternalMessageInfo func (m *ShootKubeconfigRotation) Reset() { *m = ShootKubeconfigRotation{} } func (*ShootKubeconfigRotation) ProtoMessage() {} func (*ShootKubeconfigRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{131} + return fileDescriptor_ca37af0df9a5bbd2, []int{134} } func (m *ShootKubeconfigRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3752,7 +3836,7 @@ var xxx_messageInfo_ShootKubeconfigRotation proto.InternalMessageInfo func (m *ShootList) Reset() { *m = ShootList{} } func (*ShootList) ProtoMessage() {} func (*ShootList) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{132} + return fileDescriptor_ca37af0df9a5bbd2, []int{135} } func (m *ShootList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3780,7 +3864,7 @@ var xxx_messageInfo_ShootList proto.InternalMessageInfo func (m *ShootMachineImage) Reset() { *m = ShootMachineImage{} } func (*ShootMachineImage) ProtoMessage() {} func (*ShootMachineImage) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{133} + return fileDescriptor_ca37af0df9a5bbd2, []int{136} } func (m *ShootMachineImage) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3808,7 +3892,7 @@ var xxx_messageInfo_ShootMachineImage proto.InternalMessageInfo func (m *ShootNetworks) Reset() { *m = ShootNetworks{} } func (*ShootNetworks) ProtoMessage() {} func (*ShootNetworks) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{134} + return fileDescriptor_ca37af0df9a5bbd2, []int{137} } func (m *ShootNetworks) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3836,7 +3920,7 @@ var xxx_messageInfo_ShootNetworks proto.InternalMessageInfo func (m *ShootObservabilityRotation) Reset() { *m = ShootObservabilityRotation{} } func (*ShootObservabilityRotation) ProtoMessage() {} func (*ShootObservabilityRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{135} + return fileDescriptor_ca37af0df9a5bbd2, []int{138} } func (m *ShootObservabilityRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3864,7 +3948,7 @@ var xxx_messageInfo_ShootObservabilityRotation proto.InternalMessageInfo func (m *ShootSSHKeypairRotation) Reset() { *m = ShootSSHKeypairRotation{} } func (*ShootSSHKeypairRotation) ProtoMessage() {} func (*ShootSSHKeypairRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{136} + return fileDescriptor_ca37af0df9a5bbd2, []int{139} } func (m *ShootSSHKeypairRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3892,7 +3976,7 @@ var xxx_messageInfo_ShootSSHKeypairRotation proto.InternalMessageInfo func (m *ShootServiceAccountKeyRotation) Reset() { *m = ShootServiceAccountKeyRotation{} } func (*ShootServiceAccountKeyRotation) ProtoMessage() {} func (*ShootServiceAccountKeyRotation) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{137} + return fileDescriptor_ca37af0df9a5bbd2, []int{140} } func (m *ShootServiceAccountKeyRotation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3920,7 +4004,7 @@ var xxx_messageInfo_ShootServiceAccountKeyRotation proto.InternalMessageInfo func (m *ShootSpec) Reset() { *m = ShootSpec{} } func (*ShootSpec) ProtoMessage() {} func (*ShootSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{138} + return fileDescriptor_ca37af0df9a5bbd2, []int{141} } func (m *ShootSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3948,7 +4032,7 @@ var xxx_messageInfo_ShootSpec proto.InternalMessageInfo func (m *ShootStatus) Reset() { *m = ShootStatus{} } func (*ShootStatus) ProtoMessage() {} func (*ShootStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{139} + return fileDescriptor_ca37af0df9a5bbd2, []int{142} } func (m *ShootStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3976,7 +4060,7 @@ var xxx_messageInfo_ShootStatus proto.InternalMessageInfo func (m *ShootTemplate) Reset() { *m = ShootTemplate{} } func (*ShootTemplate) ProtoMessage() {} func (*ShootTemplate) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{140} + return fileDescriptor_ca37af0df9a5bbd2, []int{143} } func (m *ShootTemplate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4004,7 +4088,7 @@ var xxx_messageInfo_ShootTemplate proto.InternalMessageInfo func (m *SystemComponents) Reset() { *m = SystemComponents{} } func (*SystemComponents) ProtoMessage() {} func (*SystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{141} + return fileDescriptor_ca37af0df9a5bbd2, []int{144} } func (m *SystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4032,7 +4116,7 @@ var xxx_messageInfo_SystemComponents proto.InternalMessageInfo func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} func (*Toleration) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{142} + return fileDescriptor_ca37af0df9a5bbd2, []int{145} } func (m *Toleration) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4060,7 +4144,7 @@ var xxx_messageInfo_Toleration proto.InternalMessageInfo func (m *VerticalPodAutoscaler) Reset() { *m = VerticalPodAutoscaler{} } func (*VerticalPodAutoscaler) ProtoMessage() {} func (*VerticalPodAutoscaler) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{143} + return fileDescriptor_ca37af0df9a5bbd2, []int{146} } func (m *VerticalPodAutoscaler) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4088,7 +4172,7 @@ var xxx_messageInfo_VerticalPodAutoscaler proto.InternalMessageInfo func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} func (*Volume) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{144} + return fileDescriptor_ca37af0df9a5bbd2, []int{147} } func (m *Volume) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4116,7 +4200,7 @@ var xxx_messageInfo_Volume proto.InternalMessageInfo func (m *VolumeType) Reset() { *m = VolumeType{} } func (*VolumeType) ProtoMessage() {} func (*VolumeType) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{145} + return fileDescriptor_ca37af0df9a5bbd2, []int{148} } func (m *VolumeType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4144,7 +4228,7 @@ var xxx_messageInfo_VolumeType proto.InternalMessageInfo func (m *WatchCacheSizes) Reset() { *m = WatchCacheSizes{} } func (*WatchCacheSizes) ProtoMessage() {} func (*WatchCacheSizes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{146} + return fileDescriptor_ca37af0df9a5bbd2, []int{149} } func (m *WatchCacheSizes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4172,7 +4256,7 @@ var xxx_messageInfo_WatchCacheSizes proto.InternalMessageInfo func (m *Worker) Reset() { *m = Worker{} } func (*Worker) ProtoMessage() {} func (*Worker) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{147} + return fileDescriptor_ca37af0df9a5bbd2, []int{150} } func (m *Worker) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4200,7 +4284,7 @@ var xxx_messageInfo_Worker proto.InternalMessageInfo func (m *WorkerKubernetes) Reset() { *m = WorkerKubernetes{} } func (*WorkerKubernetes) ProtoMessage() {} func (*WorkerKubernetes) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{148} + return fileDescriptor_ca37af0df9a5bbd2, []int{151} } func (m *WorkerKubernetes) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4228,7 +4312,7 @@ var xxx_messageInfo_WorkerKubernetes proto.InternalMessageInfo func (m *WorkerSystemComponents) Reset() { *m = WorkerSystemComponents{} } func (*WorkerSystemComponents) ProtoMessage() {} func (*WorkerSystemComponents) Descriptor() ([]byte, []int) { - return fileDescriptor_ca37af0df9a5bbd2, []int{149} + return fileDescriptor_ca37af0df9a5bbd2, []int{152} } func (m *WorkerSystemComponents) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4270,6 +4354,7 @@ func init() { proto.RegisterType((*BackupEntryList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.BackupEntryList") proto.RegisterType((*BackupEntrySpec)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.BackupEntrySpec") proto.RegisterType((*BackupEntryStatus)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.BackupEntryStatus") + proto.RegisterType((*CARotation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.CARotation") proto.RegisterType((*CRI)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.CRI") proto.RegisterType((*CloudProfile)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.CloudProfile") proto.RegisterType((*CloudProfileList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.CloudProfileList") @@ -4289,6 +4374,7 @@ func init() { proto.RegisterType((*ControllerRegistrationList)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ControllerRegistrationList") proto.RegisterType((*ControllerRegistrationSpec)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ControllerRegistrationSpec") proto.RegisterType((*ControllerResource)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ControllerResource") + proto.RegisterType((*ControllerResourceLifecycle)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ControllerResourceLifecycle") proto.RegisterType((*CoreDNS)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.CoreDNS") proto.RegisterType((*CoreDNSAutoscaling)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.CoreDNSAutoscaling") proto.RegisterType((*CoreDNSRewriting)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.CoreDNSRewriting") @@ -4309,6 +4395,7 @@ func init() { proto.RegisterType((*IngressController)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.IngressController") proto.RegisterType((*KubeAPIServerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeAPIServerConfig") proto.RegisterMapType((map[string]bool)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeAPIServerConfig.RuntimeConfigEntry") + proto.RegisterType((*KubeAPIServerLogging)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeAPIServerLogging") proto.RegisterType((*KubeAPIServerRequests)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeAPIServerRequests") proto.RegisterType((*KubeControllerManagerConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeControllerManagerConfig") proto.RegisterType((*KubeProxyConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubeProxyConfig") @@ -4324,6 +4411,7 @@ func init() { proto.RegisterType((*KubernetesDashboard)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubernetesDashboard") proto.RegisterType((*KubernetesSettings)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.KubernetesSettings") proto.RegisterType((*LastError)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.LastError") + proto.RegisterType((*LastMaintenance)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.LastMaintenance") proto.RegisterType((*LastOperation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.LastOperation") proto.RegisterType((*Machine)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.Machine") proto.RegisterType((*MachineControllerManagerSettings)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.MachineControllerManagerSettings") @@ -4391,7 +4479,6 @@ func init() { proto.RegisterType((*ServiceAccountConfig)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ServiceAccountConfig") proto.RegisterType((*Shoot)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.Shoot") proto.RegisterType((*ShootAdvertisedAddress)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ShootAdvertisedAddress") - proto.RegisterType((*ShootCARotation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ShootCARotation") proto.RegisterType((*ShootCredentials)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ShootCredentials") proto.RegisterType((*ShootCredentialsRotation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ShootCredentialsRotation") proto.RegisterType((*ShootETCDEncryptionKeyRotation)(nil), "github.com.gardener.gardener.pkg.apis.core.v1beta1.ShootETCDEncryptionKeyRotation") @@ -4423,666 +4510,686 @@ func init() { } var fileDescriptor_ca37af0df9a5bbd2 = []byte{ - // 10537 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x6c, 0x24, 0xc9, - 0x75, 0x18, 0xae, 0x1e, 0x7e, 0x0d, 0x1f, 0x3f, 0x96, 0xac, 0xfd, 0x38, 0x1e, 0xef, 0x76, 0xe7, - 0xd4, 0x3a, 0x09, 0xa7, 0x9f, 0x64, 0xae, 0xef, 0x24, 0x59, 0xba, 0x93, 0x4e, 0x77, 0xe4, 0x0c, - 0x77, 0x77, 0xb4, 0x24, 0x77, 0xae, 0x86, 0xbc, 0x3b, 0x9d, 0xfc, 0xbb, 0xa8, 0xd9, 0x5d, 0x1c, - 0xf6, 0xb1, 0xa7, 0x7b, 0xae, 0xbb, 0x87, 0x4b, 0x9e, 0x62, 0xc8, 0x52, 0x24, 0x2b, 0x92, 0x93, - 0x40, 0x30, 0xe0, 0x08, 0x92, 0x9c, 0x58, 0x86, 0x91, 0xd8, 0x81, 0x03, 0x5b, 0x89, 0x61, 0x01, - 0x4e, 0x10, 0xc4, 0x30, 0x12, 0x58, 0x32, 0x12, 0x43, 0x71, 0x60, 0x58, 0x01, 0xe2, 0x51, 0xc4, - 0x24, 0x4a, 0x80, 0x18, 0x46, 0x00, 0x23, 0x08, 0xb0, 0x30, 0x90, 0xa0, 0x3e, 0xba, 0xba, 0xfa, - 0x8b, 0x4b, 0xf6, 0x90, 0xab, 0xbb, 0xd8, 0x7f, 0x91, 0x53, 0xaf, 0xea, 0xbd, 0xea, 0xaa, 0x57, - 0xaf, 0xde, 0x7b, 0xf5, 0xea, 0x15, 0xac, 0x74, 0xec, 0x70, 0xb7, 0xbf, 0xbd, 0x64, 0x7a, 0xdd, - 0xeb, 0x1d, 0xc3, 0xb7, 0x88, 0x4b, 0xfc, 0xf8, 0x9f, 0xde, 0x5e, 0xe7, 0xba, 0xd1, 0xb3, 0x83, - 0xeb, 0xa6, 0xe7, 0x93, 0xeb, 0xfb, 0x4f, 0x6e, 0x93, 0xd0, 0x78, 0xf2, 0x7a, 0x87, 0xc2, 0x8c, - 0x90, 0x58, 0x4b, 0x3d, 0xdf, 0x0b, 0x3d, 0xf4, 0x54, 0x8c, 0x63, 0x29, 0x6a, 0x1a, 0xff, 0xd3, - 0xdb, 0xeb, 0x2c, 0x51, 0x1c, 0x4b, 0x14, 0xc7, 0x92, 0xc0, 0xb1, 0xf8, 0x63, 0x2a, 0x5d, 0xaf, - 0xe3, 0x5d, 0x67, 0xa8, 0xb6, 0xfb, 0x3b, 0xec, 0x17, 0xfb, 0xc1, 0xfe, 0xe3, 0x24, 0x16, 0xdf, - 0xbd, 0xf7, 0xa1, 0x60, 0xc9, 0xf6, 0x68, 0x67, 0xae, 0x1b, 0xfd, 0xd0, 0x0b, 0x4c, 0xc3, 0xb1, - 0xdd, 0xce, 0xf5, 0xfd, 0x4c, 0x6f, 0x16, 0x75, 0xa5, 0xaa, 0xe8, 0xf6, 0xb1, 0x75, 0xfc, 0x6d, - 0xc3, 0xcc, 0xab, 0xf3, 0xfe, 0xb8, 0x4e, 0xd7, 0x30, 0x77, 0x6d, 0x97, 0xf8, 0x87, 0xd1, 0x80, - 0x5c, 0xf7, 0x49, 0xe0, 0xf5, 0x7d, 0x93, 0x9c, 0xaa, 0x55, 0x70, 0xbd, 0x4b, 0x42, 0x23, 0x8f, - 0xd6, 0xf5, 0xa2, 0x56, 0x7e, 0xdf, 0x0d, 0xed, 0x6e, 0x96, 0xcc, 0x4f, 0xdc, 0xaf, 0x41, 0x60, - 0xee, 0x92, 0xae, 0x91, 0x69, 0xf7, 0xbe, 0xa2, 0x76, 0xfd, 0xd0, 0x76, 0xae, 0xdb, 0x6e, 0x18, - 0x84, 0x7e, 0xba, 0x91, 0xfe, 0x14, 0x8c, 0x2d, 0x5b, 0x96, 0xe7, 0xa2, 0x77, 0xc3, 0x04, 0x71, - 0x8d, 0x6d, 0x87, 0x58, 0x0b, 0xda, 0x63, 0xda, 0x13, 0xd5, 0x95, 0x0b, 0xdf, 0x1e, 0xd4, 0xde, - 0x76, 0x34, 0xa8, 0x4d, 0xac, 0xf2, 0x62, 0x1c, 0xc1, 0xf5, 0x9f, 0xaf, 0xc0, 0x38, 0x6b, 0x14, - 0xa0, 0x9f, 0xd3, 0xe0, 0xe2, 0x5e, 0x7f, 0x9b, 0xf8, 0x2e, 0x09, 0x49, 0xd0, 0x30, 0x82, 0xdd, - 0x6d, 0xcf, 0xf0, 0x39, 0x8a, 0xa9, 0xa7, 0x6e, 0x2e, 0x9d, 0x9e, 0x7b, 0x96, 0x6e, 0x67, 0xd1, - 0xad, 0x3c, 0x74, 0x34, 0xa8, 0x5d, 0xcc, 0x01, 0xe0, 0x3c, 0xe2, 0x68, 0x1f, 0xa6, 0xdd, 0x8e, - 0xed, 0x1e, 0x34, 0xdd, 0x8e, 0x4f, 0x82, 0x60, 0xa1, 0xc2, 0x3a, 0xf3, 0x7c, 0x99, 0xce, 0x6c, - 0x28, 0x78, 0x56, 0xe6, 0x8e, 0x06, 0xb5, 0x69, 0xb5, 0x04, 0x27, 0xe8, 0xe8, 0xdf, 0xd4, 0xe0, - 0xc2, 0xb2, 0xd5, 0xb5, 0x83, 0xc0, 0xf6, 0xdc, 0x96, 0xd3, 0xef, 0xd8, 0x2e, 0x7a, 0x0c, 0x46, - 0x5d, 0xa3, 0x4b, 0xd8, 0x80, 0x4c, 0xae, 0x4c, 0x8b, 0x31, 0x1d, 0xdd, 0x30, 0xba, 0x04, 0x33, - 0x08, 0x7a, 0x01, 0xc6, 0x4d, 0xcf, 0xdd, 0xb1, 0x3b, 0xa2, 0x9f, 0x3f, 0xb6, 0xc4, 0xe7, 0x71, - 0x49, 0x9d, 0x47, 0xd6, 0x3d, 0x31, 0xff, 0x4b, 0xd8, 0xb8, 0xbb, 0x7a, 0x10, 0x12, 0x97, 0x92, - 0x59, 0x81, 0xa3, 0x41, 0x6d, 0xbc, 0xce, 0x10, 0x60, 0x81, 0x08, 0x3d, 0x01, 0x55, 0xcb, 0x0e, - 0xf8, 0x64, 0x8e, 0xb0, 0xc9, 0x9c, 0x3e, 0x1a, 0xd4, 0xaa, 0x0d, 0x51, 0x86, 0x25, 0x54, 0xbf, - 0x01, 0xd5, 0x65, 0x87, 0xf8, 0xa1, 0xed, 0x76, 0xd0, 0x33, 0x30, 0x4b, 0xba, 0x86, 0xed, 0x60, - 0x62, 0x12, 0x7b, 0x9f, 0xf8, 0xc1, 0x82, 0xf6, 0xd8, 0xc8, 0x13, 0x93, 0x2b, 0xe8, 0x68, 0x50, - 0x9b, 0x5d, 0x4d, 0x40, 0x70, 0xaa, 0xa6, 0xfe, 0x19, 0x0d, 0xa6, 0x96, 0xfb, 0x96, 0x1d, 0xf2, - 0x9e, 0x20, 0x1f, 0xa6, 0x0c, 0xfa, 0xb3, 0xe5, 0x39, 0xb6, 0x79, 0x28, 0xd8, 0xe1, 0xb9, 0x32, - 0x33, 0xb0, 0x1c, 0xa3, 0x59, 0xb9, 0x70, 0x34, 0xa8, 0x4d, 0x29, 0x05, 0x58, 0x25, 0xa2, 0xef, - 0x82, 0x0a, 0x43, 0x1f, 0x87, 0x69, 0x3e, 0x1c, 0xeb, 0x46, 0x0f, 0x93, 0x1d, 0xd1, 0x87, 0x77, - 0x28, 0xa3, 0x1b, 0x11, 0x5a, 0xba, 0xb3, 0xfd, 0x1a, 0x31, 0x43, 0x4c, 0x76, 0x88, 0x4f, 0x5c, - 0x93, 0xf0, 0x89, 0xae, 0x2b, 0x8d, 0x71, 0x02, 0x95, 0xfe, 0x7d, 0x0d, 0xe6, 0x96, 0xf7, 0x0d, - 0xdb, 0x31, 0xb6, 0x6d, 0xc7, 0x0e, 0x0f, 0x5f, 0xf1, 0x5c, 0x72, 0x82, 0x99, 0xde, 0x82, 0x87, - 0xfa, 0xae, 0xc1, 0xdb, 0x39, 0x64, 0x9d, 0xcf, 0xed, 0xe6, 0x61, 0x8f, 0x50, 0x16, 0xa5, 0x23, - 0xfd, 0xc8, 0xd1, 0xa0, 0xf6, 0xd0, 0x56, 0x7e, 0x15, 0x5c, 0xd4, 0x16, 0x61, 0xb8, 0xa2, 0x80, - 0x5e, 0xf4, 0x9c, 0x7e, 0x57, 0x60, 0x1d, 0x61, 0x58, 0x17, 0x8f, 0x06, 0xb5, 0x2b, 0x5b, 0xb9, - 0x35, 0x70, 0x41, 0x4b, 0xfd, 0xdb, 0x15, 0x98, 0x5e, 0x31, 0xcc, 0xbd, 0x7e, 0x6f, 0xa5, 0x6f, - 0xee, 0x91, 0x10, 0x7d, 0x12, 0xaa, 0x54, 0xc0, 0x59, 0x46, 0x68, 0x88, 0x91, 0xfc, 0xf1, 0x42, - 0x3e, 0x65, 0x93, 0x48, 0x6b, 0xc7, 0x63, 0xbb, 0x4e, 0x42, 0x63, 0x05, 0x89, 0x31, 0x81, 0xb8, - 0x0c, 0x4b, 0xac, 0x68, 0x07, 0x46, 0x83, 0x1e, 0x31, 0xc5, 0x2a, 0x68, 0x94, 0xe1, 0x15, 0xb5, - 0xc7, 0xed, 0x1e, 0x31, 0xe3, 0x59, 0xa0, 0xbf, 0x30, 0xc3, 0x8f, 0x5c, 0x18, 0x0f, 0x42, 0x23, - 0xec, 0x07, 0x6c, 0x69, 0x4c, 0x3d, 0x75, 0x63, 0x68, 0x4a, 0x0c, 0xdb, 0xca, 0xac, 0xa0, 0x35, - 0xce, 0x7f, 0x63, 0x41, 0x45, 0xff, 0x63, 0x0d, 0xe6, 0xd4, 0xea, 0x6b, 0x76, 0x10, 0xa2, 0x9f, - 0xcc, 0x0c, 0xe7, 0xd2, 0xc9, 0x86, 0x93, 0xb6, 0x66, 0x83, 0x39, 0x27, 0xc8, 0x55, 0xa3, 0x12, - 0x65, 0x28, 0x09, 0x8c, 0xd9, 0x21, 0xe9, 0x72, 0xb6, 0x2a, 0x29, 0xf9, 0xd4, 0x2e, 0xaf, 0xcc, - 0x08, 0x62, 0x63, 0x4d, 0x8a, 0x16, 0x73, 0xec, 0xfa, 0x27, 0xe1, 0x92, 0x5a, 0xab, 0xe5, 0x7b, - 0xfb, 0xb6, 0x45, 0x7c, 0xba, 0x12, 0xc2, 0xc3, 0x5e, 0x66, 0x25, 0x50, 0xce, 0xc2, 0x0c, 0x82, - 0xde, 0x05, 0xe3, 0x3e, 0xe9, 0xd8, 0x9e, 0xcb, 0x66, 0x7b, 0x32, 0x1e, 0x3b, 0xcc, 0x4a, 0xb1, - 0x80, 0xea, 0xff, 0xab, 0x92, 0x1c, 0x3b, 0x3a, 0x8d, 0x68, 0x1f, 0xaa, 0x3d, 0x41, 0x4a, 0x8c, - 0xdd, 0xad, 0x61, 0x3f, 0x30, 0xea, 0x7a, 0x3c, 0xaa, 0x51, 0x09, 0x96, 0xb4, 0x90, 0x0d, 0xb3, - 0xd1, 0xff, 0xf5, 0x21, 0x04, 0x36, 0x13, 0xa7, 0xad, 0x04, 0x22, 0x9c, 0x42, 0x8c, 0x36, 0x61, - 0x32, 0x20, 0xa6, 0x4f, 0xa8, 0x4c, 0x12, 0x6c, 0x9a, 0x2b, 0xb8, 0xda, 0x51, 0x25, 0x21, 0xb8, - 0xe6, 0x45, 0xf7, 0x27, 0x25, 0x00, 0xc7, 0x88, 0xe8, 0xb6, 0x10, 0x10, 0x62, 0x51, 0x89, 0xb4, - 0x30, 0xca, 0xe7, 0x86, 0x7e, 0x6a, 0x5b, 0x94, 0x61, 0x09, 0xd5, 0xbf, 0x31, 0x0a, 0x28, 0xcb, - 0xe2, 0xea, 0x08, 0xf0, 0x12, 0x31, 0xfe, 0xc3, 0x8c, 0x80, 0x58, 0x2d, 0x29, 0xc4, 0xe8, 0x0d, - 0x98, 0x71, 0x8c, 0x20, 0xbc, 0xd3, 0xa3, 0xda, 0x4a, 0xc4, 0x28, 0x53, 0x4f, 0x2d, 0x97, 0x99, - 0xe9, 0x35, 0x15, 0xd1, 0xca, 0xfc, 0xd1, 0xa0, 0x36, 0x93, 0x28, 0xc2, 0x49, 0x52, 0xe8, 0x35, - 0x98, 0xa4, 0x05, 0xab, 0xbe, 0xef, 0xf9, 0x62, 0xf4, 0x9f, 0x2d, 0x4b, 0x97, 0x21, 0x59, 0x99, - 0xa1, 0x73, 0x22, 0x7f, 0xe2, 0x18, 0x3d, 0xfa, 0x18, 0x20, 0x6f, 0x3b, 0x20, 0xfe, 0x3e, 0xb1, - 0x6e, 0x72, 0xd5, 0x8c, 0x7e, 0x2c, 0x9d, 0x9d, 0x91, 0x95, 0x45, 0x31, 0x9b, 0xe8, 0x4e, 0xa6, - 0x06, 0xce, 0x69, 0x85, 0xf6, 0x00, 0x49, 0xf5, 0x4e, 0x32, 0xc0, 0xc2, 0xd8, 0xc9, 0xd9, 0xe7, - 0x0a, 0x25, 0x76, 0x33, 0x83, 0x02, 0xe7, 0xa0, 0xd5, 0xff, 0x75, 0x05, 0xa6, 0x38, 0x8b, 0xac, - 0xba, 0xa1, 0x7f, 0xf8, 0x00, 0x36, 0x08, 0x92, 0xd8, 0x20, 0xea, 0xe5, 0xd7, 0x3c, 0xeb, 0x70, - 0xe1, 0xfe, 0xd0, 0x4d, 0xed, 0x0f, 0xab, 0xc3, 0x12, 0x3a, 0x7e, 0x7b, 0xf8, 0x23, 0x0d, 0x2e, - 0x28, 0xb5, 0x1f, 0xc0, 0xee, 0x60, 0x25, 0x77, 0x87, 0xe7, 0x86, 0xfc, 0xbe, 0x82, 0xcd, 0xc1, - 0x4b, 0x7c, 0x16, 0x13, 0xdc, 0x4f, 0x01, 0x6c, 0x33, 0x71, 0xb2, 0x11, 0xeb, 0x49, 0x72, 0xca, - 0x57, 0x24, 0x04, 0x2b, 0xb5, 0x12, 0x32, 0xab, 0x72, 0xac, 0xcc, 0xfa, 0xaf, 0x23, 0x30, 0x9f, - 0x19, 0xf6, 0xac, 0x1c, 0xd1, 0x7e, 0x44, 0x72, 0xa4, 0xf2, 0xa3, 0x90, 0x23, 0x23, 0xa5, 0xe4, - 0xc8, 0x89, 0xf7, 0x09, 0xe4, 0x03, 0xea, 0xda, 0x1d, 0xde, 0xac, 0x1d, 0x1a, 0x7e, 0xb8, 0x69, - 0x77, 0x89, 0x90, 0x38, 0xff, 0xdf, 0xc9, 0x58, 0x96, 0xb6, 0xe0, 0x82, 0x67, 0x3d, 0x83, 0x09, - 0xe7, 0x60, 0xd7, 0x7f, 0x57, 0x83, 0x91, 0x3a, 0x6e, 0xa2, 0xf7, 0x24, 0xf4, 0xed, 0x87, 0x54, - 0x7d, 0xfb, 0xde, 0xa0, 0x36, 0x51, 0xc7, 0x4d, 0x45, 0xf5, 0xfe, 0xdb, 0x1a, 0xcc, 0x9b, 0x9e, - 0x1b, 0x1a, 0xb4, 0x17, 0x98, 0x6f, 0x4a, 0xd1, 0x02, 0x28, 0xa5, 0x6a, 0xd6, 0x53, 0xc8, 0x56, - 0x1e, 0x16, 0x1d, 0x98, 0x4f, 0x43, 0x02, 0x9c, 0xa5, 0xac, 0x7f, 0x4f, 0x83, 0xe9, 0xba, 0xe3, - 0xf5, 0xad, 0x96, 0xef, 0xed, 0xd8, 0x0e, 0x79, 0x6b, 0xe8, 0xd7, 0x6a, 0x8f, 0x8b, 0xe4, 0x27, - 0xd3, 0x77, 0xd5, 0x8a, 0x6f, 0x11, 0x7d, 0x57, 0xed, 0x72, 0x81, 0x48, 0xfb, 0xf9, 0x89, 0xe4, - 0x97, 0x31, 0xa1, 0xf6, 0x04, 0x54, 0x4d, 0x63, 0xa5, 0xef, 0x5a, 0x8e, 0x54, 0x78, 0x69, 0x2f, - 0xeb, 0xcb, 0xbc, 0x0c, 0x4b, 0x28, 0x7a, 0x03, 0x20, 0xf6, 0x56, 0x88, 0x69, 0xb8, 0x31, 0x9c, - 0x87, 0xa4, 0x4d, 0x42, 0x6a, 0xba, 0x07, 0xf1, 0xd4, 0xc7, 0x30, 0xac, 0x50, 0x43, 0x3f, 0x05, - 0x33, 0x62, 0x90, 0x9b, 0x5d, 0xa3, 0x23, 0x4c, 0xc3, 0x92, 0x23, 0xb5, 0xae, 0x20, 0x5a, 0xb9, - 0x2c, 0x08, 0xcf, 0xa8, 0xa5, 0x01, 0x4e, 0x52, 0x43, 0x87, 0x30, 0xdd, 0x55, 0xcd, 0xdd, 0xd1, - 0xf2, 0x3b, 0x8f, 0x62, 0xfa, 0xae, 0x5c, 0x12, 0xc4, 0xa7, 0x13, 0x86, 0x72, 0x82, 0x54, 0x8e, - 0xd6, 0x3e, 0x76, 0x5e, 0x5a, 0x3b, 0x81, 0x09, 0x6e, 0xb7, 0x04, 0x0b, 0xe3, 0xec, 0x03, 0x9f, - 0x29, 0xf3, 0x81, 0xdc, 0x04, 0x8a, 0xdd, 0x6f, 0xfc, 0x77, 0x80, 0x23, 0xdc, 0x68, 0x1f, 0xa6, - 0xa9, 0x00, 0x6e, 0x13, 0x87, 0x98, 0xa1, 0xe7, 0x2f, 0x4c, 0x94, 0x77, 0x6f, 0xb5, 0x15, 0x3c, - 0xdc, 0xeb, 0xa1, 0x96, 0xe0, 0x04, 0x1d, 0x69, 0xd6, 0x55, 0x0b, 0xcd, 0xba, 0x3e, 0x4c, 0xed, - 0x2b, 0xee, 0x87, 0x49, 0x36, 0x08, 0x1f, 0x2d, 0xd3, 0xb1, 0xd8, 0x17, 0xb1, 0x72, 0x51, 0x10, - 0x9a, 0x52, 0xfd, 0x16, 0x2a, 0x1d, 0x7d, 0x50, 0x85, 0xf9, 0xba, 0xd3, 0x0f, 0x42, 0xe2, 0x2f, - 0x0b, 0xff, 0x31, 0xf1, 0xd1, 0x67, 0x35, 0xb8, 0xc2, 0xfe, 0x6d, 0x78, 0x77, 0xdd, 0x06, 0x71, - 0x8c, 0xc3, 0xe5, 0x1d, 0x5a, 0xc3, 0xb2, 0x4e, 0x27, 0x81, 0x1a, 0x7d, 0xb1, 0xe1, 0x33, 0x3f, - 0x4a, 0x3b, 0x17, 0x23, 0x2e, 0xa0, 0x84, 0x7e, 0x56, 0x83, 0x87, 0x73, 0x40, 0x0d, 0xe2, 0x90, - 0x90, 0x08, 0x19, 0x70, 0xda, 0x7e, 0x5c, 0x3d, 0x1a, 0xd4, 0x1e, 0x6e, 0x17, 0x21, 0xc5, 0xc5, - 0xf4, 0xd0, 0xdf, 0xd1, 0x60, 0x31, 0x07, 0x7a, 0xc3, 0xb0, 0x9d, 0xbe, 0x4f, 0x84, 0xbe, 0x7b, - 0xda, 0xee, 0x5c, 0x3b, 0x1a, 0xd4, 0x16, 0xdb, 0x85, 0x58, 0xf1, 0x31, 0x14, 0xd1, 0xa7, 0xe1, - 0xb2, 0x84, 0x6e, 0xb9, 0x2e, 0x21, 0x16, 0xb1, 0x98, 0x0a, 0x31, 0x5a, 0xaa, 0x2b, 0x0f, 0x1f, - 0x0d, 0x6a, 0x97, 0xdb, 0x79, 0x08, 0x71, 0x3e, 0x1d, 0xd4, 0x81, 0xab, 0x31, 0x20, 0xb4, 0x1d, - 0xfb, 0x0d, 0x86, 0x69, 0x73, 0xd7, 0x27, 0xc1, 0xae, 0xe7, 0x58, 0x4c, 0x58, 0x68, 0x2b, 0x6f, - 0x3f, 0x1a, 0xd4, 0xae, 0xb6, 0x8f, 0xab, 0x88, 0x8f, 0xc7, 0x83, 0x2c, 0x98, 0x0e, 0x4c, 0xc3, - 0x6d, 0xba, 0x21, 0xf1, 0xf7, 0x0d, 0x67, 0x61, 0xbc, 0xd4, 0x07, 0xf2, 0x25, 0xaa, 0xe0, 0xc1, - 0x09, 0xac, 0xe8, 0x43, 0x50, 0x25, 0x07, 0x3d, 0xc3, 0xb5, 0x08, 0x17, 0x0b, 0x93, 0x2b, 0x8f, - 0xd2, 0xcd, 0x68, 0x55, 0x94, 0xdd, 0x1b, 0xd4, 0xa6, 0xa3, 0xff, 0xd7, 0x3d, 0x8b, 0x60, 0x59, - 0x1b, 0xfd, 0x75, 0xb8, 0xd4, 0x35, 0x0e, 0x36, 0x3c, 0x8b, 0x30, 0x21, 0x47, 0x65, 0x1e, 0x9b, - 0x88, 0x6a, 0xa9, 0x7e, 0x2e, 0x1c, 0x0d, 0x6a, 0x97, 0xd6, 0x73, 0xf0, 0xe1, 0x5c, 0x2a, 0x74, - 0x1a, 0xba, 0xc6, 0xc1, 0x4d, 0xdf, 0x30, 0xc9, 0x4e, 0xdf, 0xd9, 0x24, 0x7e, 0xd7, 0x76, 0xb9, - 0xda, 0x47, 0x4c, 0xcf, 0xb5, 0xa8, 0x28, 0xd1, 0x9e, 0x18, 0xe3, 0xd3, 0xb0, 0x7e, 0x5c, 0x45, - 0x7c, 0x3c, 0x1e, 0xf4, 0x7e, 0x98, 0xb6, 0x3b, 0xae, 0xe7, 0x93, 0x4d, 0xc3, 0x76, 0xc3, 0x60, - 0x01, 0x98, 0x87, 0x94, 0x0d, 0x6b, 0x53, 0x29, 0xc7, 0x89, 0x5a, 0xfa, 0x60, 0x04, 0x26, 0xeb, - 0x9e, 0x6b, 0xd9, 0x4c, 0x3d, 0x7e, 0x32, 0xe1, 0xde, 0xba, 0xaa, 0xca, 0xc1, 0x7b, 0x83, 0xda, - 0x8c, 0xac, 0xa8, 0x08, 0xc6, 0xa7, 0xa5, 0x4d, 0xc9, 0x6d, 0x98, 0xb7, 0x27, 0x8d, 0xc1, 0x7b, - 0x83, 0xda, 0x05, 0xd9, 0x2c, 0x69, 0x1f, 0xa2, 0x7d, 0x40, 0x54, 0xcb, 0xdf, 0xf4, 0x0d, 0x37, - 0xe0, 0x68, 0xe9, 0xb4, 0x8c, 0x9c, 0x5a, 0xc5, 0x96, 0x46, 0xc0, 0x5a, 0x06, 0x1b, 0xce, 0xa1, - 0x80, 0x5e, 0x83, 0x59, 0x5a, 0xba, 0xd5, 0xb3, 0x8c, 0x90, 0x28, 0x6b, 0xf2, 0x54, 0x6a, 0xbd, - 0xa0, 0x39, 0xbb, 0x96, 0xc0, 0x84, 0x53, 0x98, 0xb9, 0x3b, 0xd0, 0x08, 0x3c, 0x97, 0x2d, 0xb7, - 0x84, 0x3b, 0x90, 0x96, 0x62, 0x01, 0x45, 0xef, 0x86, 0x89, 0x2e, 0x09, 0x02, 0xa3, 0x43, 0xd8, - 0xfa, 0x99, 0x8c, 0x37, 0xc9, 0x75, 0x5e, 0x8c, 0x23, 0x38, 0x7a, 0x2f, 0x8c, 0x99, 0x9e, 0x45, - 0x82, 0x85, 0x09, 0x36, 0xc3, 0xd4, 0xc0, 0x18, 0xab, 0xd3, 0x82, 0x7b, 0x83, 0xda, 0x24, 0x33, - 0x99, 0xe8, 0x2f, 0xcc, 0x2b, 0xe9, 0xbf, 0x48, 0x75, 0xd6, 0x94, 0x92, 0x7e, 0x02, 0x37, 0xe6, - 0x83, 0xf3, 0x08, 0xea, 0x5f, 0xa1, 0x06, 0x83, 0xe7, 0x86, 0xbe, 0xe7, 0xb4, 0x1c, 0xc3, 0x25, - 0xe8, 0x67, 0x34, 0x98, 0xdb, 0xb5, 0x3b, 0xbb, 0xea, 0x39, 0x84, 0xd8, 0xd8, 0x4a, 0xe9, 0xf6, - 0xb7, 0x52, 0xb8, 0x56, 0x2e, 0x1d, 0x0d, 0x6a, 0x73, 0xe9, 0x52, 0x9c, 0xa1, 0xa9, 0x7f, 0xb1, - 0x02, 0x97, 0x44, 0xcf, 0x1c, 0xba, 0xd3, 0xf4, 0x1c, 0xef, 0xb0, 0x4b, 0xdc, 0x07, 0x71, 0x64, - 0x10, 0xcd, 0x50, 0xa5, 0x70, 0x86, 0xba, 0x99, 0x19, 0x1a, 0x29, 0x33, 0x43, 0x92, 0x91, 0xef, - 0x33, 0x4b, 0xff, 0x4d, 0x83, 0x85, 0xbc, 0xb1, 0x78, 0x00, 0x36, 0x50, 0x37, 0x69, 0x03, 0xdd, - 0x2a, 0x6b, 0xd4, 0xa6, 0xbb, 0x5e, 0x60, 0x0b, 0xfd, 0xb0, 0x02, 0x57, 0xe2, 0xea, 0x4d, 0x37, - 0x08, 0x0d, 0xc7, 0xe1, 0xee, 0x83, 0xf3, 0x9f, 0xf7, 0x5e, 0xc2, 0x94, 0xdd, 0x18, 0xee, 0x53, - 0xd5, 0xbe, 0x17, 0x3a, 0x05, 0x0f, 0x52, 0x4e, 0xc1, 0xd6, 0x19, 0xd2, 0x3c, 0xde, 0x3f, 0xf8, - 0x3f, 0x34, 0x58, 0xcc, 0x6f, 0xf8, 0x00, 0x98, 0xca, 0x4b, 0x32, 0xd5, 0xc7, 0xce, 0xee, 0xab, - 0x0b, 0xd8, 0xea, 0x9f, 0x56, 0x8a, 0xbe, 0x96, 0x19, 0xdb, 0x3b, 0x70, 0x81, 0x5a, 0x41, 0x41, - 0x28, 0xbc, 0x57, 0xa7, 0x3b, 0xd6, 0x8d, 0x7c, 0x44, 0x17, 0x70, 0x12, 0x07, 0x4e, 0x23, 0x45, - 0x1b, 0x30, 0x41, 0x4d, 0x1f, 0x8a, 0xbf, 0x72, 0x72, 0xfc, 0x72, 0x37, 0x6a, 0xf3, 0xb6, 0x38, - 0x42, 0x82, 0x7e, 0x12, 0x66, 0x2c, 0xb9, 0xa2, 0xee, 0x73, 0xa6, 0x93, 0xc6, 0xca, 0xfc, 0x8c, - 0x0d, 0xb5, 0x35, 0x4e, 0x22, 0xd3, 0xff, 0x42, 0x83, 0x47, 0x8f, 0xe3, 0x2d, 0xf4, 0x3a, 0x80, - 0x19, 0xa9, 0x17, 0xfc, 0x54, 0xbf, 0xa4, 0x27, 0x52, 0x2a, 0x29, 0xf1, 0x02, 0x95, 0x45, 0x01, - 0x56, 0x88, 0xe4, 0x1c, 0x15, 0x55, 0xce, 0xe9, 0xa8, 0x48, 0xff, 0x53, 0x4d, 0x15, 0x45, 0xea, - 0xdc, 0xbe, 0xd5, 0x44, 0x91, 0xda, 0xf7, 0x42, 0xff, 0xda, 0xbf, 0xaf, 0xc0, 0x63, 0xf9, 0x4d, - 0x94, 0xbd, 0xf7, 0x79, 0x18, 0xef, 0xf1, 0xd0, 0x8b, 0x11, 0xb6, 0x37, 0x3e, 0x41, 0x25, 0x0b, - 0x0f, 0x8c, 0xb8, 0x37, 0xa8, 0x2d, 0xe6, 0x09, 0x7a, 0x11, 0x52, 0x21, 0xda, 0x21, 0x3b, 0xe5, - 0x65, 0xe0, 0xda, 0xdf, 0xfb, 0x4e, 0x28, 0x5c, 0x8c, 0x6d, 0xe2, 0x9c, 0xd8, 0xb1, 0xf0, 0x19, - 0x0d, 0x66, 0x13, 0x1c, 0x1d, 0x2c, 0x8c, 0x31, 0x1e, 0x2d, 0xe5, 0xa5, 0x4f, 0x2c, 0x95, 0x78, - 0xe7, 0x4e, 0x14, 0x07, 0x38, 0x45, 0x30, 0x25, 0x66, 0xd5, 0x51, 0x7d, 0xcb, 0x89, 0x59, 0xb5, - 0xf3, 0x05, 0x62, 0xf6, 0x17, 0x2a, 0x45, 0x5f, 0xcb, 0xc4, 0xec, 0x5d, 0x98, 0x8c, 0x82, 0xe0, - 0x22, 0x71, 0x71, 0x63, 0xd8, 0x3e, 0x71, 0x74, 0xf1, 0x09, 0x75, 0x54, 0x12, 0xe0, 0x98, 0x16, - 0xfa, 0x9c, 0x06, 0x10, 0x4f, 0x8c, 0x58, 0x54, 0x9b, 0x67, 0x37, 0x1c, 0x8a, 0x5a, 0x33, 0x4b, - 0x97, 0xb4, 0xc2, 0x14, 0x0a, 0x5d, 0xfd, 0x9b, 0x15, 0x40, 0xd9, 0xbe, 0x53, 0x75, 0x73, 0xcf, - 0x76, 0xad, 0xb4, 0x41, 0x70, 0xdb, 0x76, 0x2d, 0xcc, 0x20, 0x27, 0x50, 0x48, 0x9f, 0x85, 0x0b, - 0x1d, 0xc7, 0xdb, 0x36, 0x1c, 0xe7, 0x50, 0xc4, 0xd5, 0x89, 0x08, 0xad, 0x8b, 0x74, 0x63, 0xba, - 0x99, 0x04, 0xe1, 0x74, 0x5d, 0xd4, 0x83, 0x39, 0x9f, 0x9a, 0xb2, 0xa6, 0xed, 0x30, 0xd3, 0xc9, - 0xeb, 0x87, 0x25, 0x7d, 0x25, 0x4c, 0xbd, 0xc7, 0x29, 0x5c, 0x38, 0x83, 0x1d, 0xbd, 0x13, 0x26, - 0x7a, 0xbe, 0xdd, 0x35, 0xfc, 0x43, 0x66, 0x9c, 0x55, 0x57, 0xa6, 0xe8, 0x0e, 0xd7, 0xe2, 0x45, - 0x38, 0x82, 0xe9, 0xff, 0x5b, 0x83, 0x89, 0xba, 0xe7, 0x93, 0xc6, 0x46, 0x1b, 0x1d, 0xc2, 0x94, - 0x12, 0xc7, 0x29, 0xd6, 0x4b, 0x49, 0x06, 0x62, 0x18, 0x97, 0x63, 0x6c, 0x51, 0x0c, 0x98, 0x2c, - 0xc0, 0x2a, 0x2d, 0xf4, 0x3a, 0xe5, 0xdc, 0xbb, 0xbe, 0x1d, 0x52, 0xc2, 0xc3, 0x9c, 0x74, 0x70, - 0xc2, 0x38, 0xc2, 0xc5, 0x4f, 0xde, 0xe4, 0x4f, 0x1c, 0x53, 0xd1, 0x5b, 0x94, 0x57, 0xd2, 0xdd, - 0x44, 0xcf, 0xc0, 0x68, 0xd7, 0xb3, 0x22, 0xe3, 0xf1, 0x5d, 0x11, 0x27, 0xac, 0x7b, 0x16, 0xb9, - 0x37, 0xa8, 0x5d, 0xc9, 0xb6, 0x60, 0xfe, 0x18, 0xd6, 0x46, 0xdf, 0xa0, 0xc6, 0x68, 0x92, 0x3e, - 0x7a, 0x06, 0x66, 0x4d, 0xaf, 0xdb, 0xf5, 0xdc, 0x76, 0x7f, 0x67, 0xc7, 0x3e, 0x20, 0x89, 0xe0, - 0xbc, 0x7a, 0x02, 0x82, 0x53, 0x35, 0xf5, 0xaf, 0x6b, 0x30, 0x42, 0xe7, 0x45, 0x87, 0x71, 0xcb, - 0xeb, 0x1a, 0xb6, 0x2b, 0x7a, 0xc5, 0x42, 0x07, 0x1b, 0xac, 0x04, 0x0b, 0x08, 0xea, 0xc1, 0x64, - 0xb4, 0xbd, 0x0e, 0x75, 0x40, 0xdc, 0xd8, 0x68, 0xcb, 0xa0, 0x1a, 0xb9, 0xe6, 0xa3, 0x92, 0x00, - 0xc7, 0x44, 0x74, 0x03, 0xe6, 0x1b, 0x1b, 0xed, 0xa6, 0x6b, 0x3a, 0x7d, 0x8b, 0xac, 0x1e, 0xb0, - 0x3f, 0x94, 0xeb, 0x6c, 0x5e, 0x22, 0xbe, 0x93, 0x71, 0x9d, 0xa8, 0x84, 0x23, 0x18, 0xad, 0x46, - 0x78, 0x0b, 0x11, 0x41, 0xc7, 0xaa, 0x09, 0x24, 0x38, 0x82, 0xe9, 0xdf, 0xab, 0xc0, 0x94, 0xd2, - 0x21, 0xe4, 0xc0, 0x04, 0xff, 0xdc, 0x28, 0x80, 0x65, 0xb5, 0xe4, 0x27, 0x26, 0x7b, 0xcd, 0xa9, - 0xf3, 0x01, 0x0d, 0x70, 0x44, 0x42, 0x5d, 0x41, 0x95, 0xe2, 0x15, 0x84, 0x96, 0x00, 0x78, 0xa8, - 0x0e, 0x3b, 0x77, 0xe5, 0xdb, 0x36, 0x13, 0x52, 0x6d, 0x59, 0x8a, 0x95, 0x1a, 0xe8, 0x51, 0x21, - 0x6b, 0xf8, 0x09, 0x6d, 0x35, 0x25, 0x67, 0x76, 0x60, 0xec, 0x0d, 0xcf, 0x25, 0x81, 0x38, 0xed, - 0x38, 0xa3, 0x0f, 0x9c, 0xa4, 0x3b, 0xc9, 0x2b, 0x14, 0x2f, 0xe6, 0xe8, 0xf5, 0x5f, 0xd2, 0x00, - 0x1a, 0x46, 0x68, 0x70, 0xe7, 0xfc, 0x09, 0x82, 0x20, 0x1f, 0x4d, 0x88, 0xc8, 0x6a, 0x26, 0x30, - 0x6c, 0x34, 0xb0, 0xdf, 0x88, 0x3e, 0x5f, 0xaa, 0x5e, 0x1c, 0x7b, 0xdb, 0x7e, 0x83, 0x60, 0x06, - 0x47, 0xef, 0x81, 0x49, 0xe2, 0x9a, 0xfe, 0x61, 0x2f, 0x24, 0x16, 0x1b, 0x81, 0x2a, 0x5f, 0xa1, - 0xab, 0x51, 0x21, 0x8e, 0xe1, 0xfa, 0x93, 0x90, 0xd4, 0x9f, 0xef, 0xdf, 0x4b, 0xfd, 0x9e, 0x06, - 0x73, 0xab, 0x07, 0x3d, 0xdb, 0x67, 0x81, 0x91, 0xc4, 0xa7, 0xca, 0x28, 0x7a, 0x37, 0x4c, 0xec, - 0xf3, 0x7f, 0x45, 0x4b, 0xa9, 0xf0, 0x8b, 0x1a, 0x38, 0x82, 0xa3, 0x1d, 0x98, 0x25, 0xac, 0x39, - 0xdb, 0x75, 0x0c, 0xe9, 0xeb, 0x3f, 0x8d, 0xf7, 0x8c, 0xc7, 0xdd, 0x26, 0xb0, 0xe0, 0x14, 0x56, - 0xd4, 0x86, 0x59, 0xd3, 0x31, 0x82, 0xc0, 0xde, 0xb1, 0xcd, 0xf8, 0xc8, 0x7f, 0x72, 0xe5, 0x3d, - 0x4c, 0x2c, 0x24, 0x20, 0xf7, 0x06, 0xb5, 0xcb, 0xa2, 0x9f, 0x49, 0x00, 0x4e, 0xa1, 0xd0, 0x7f, - 0x57, 0x83, 0x49, 0xa9, 0x82, 0xbf, 0xa9, 0xdc, 0x60, 0xa7, 0x88, 0x6c, 0x5e, 0x83, 0x39, 0x71, - 0xca, 0xb0, 0xe9, 0x39, 0xc4, 0x37, 0x5c, 0x93, 0xa0, 0x0f, 0x25, 0x3e, 0xe5, 0xf1, 0x94, 0xe7, - 0xf6, 0x52, 0xba, 0x7e, 0xfc, 0x89, 0x7a, 0x00, 0xd5, 0x9b, 0x62, 0xb1, 0xa0, 0x45, 0xa8, 0xd8, - 0x91, 0x12, 0x00, 0x02, 0x47, 0xa5, 0xd9, 0xc0, 0x15, 0xdb, 0x92, 0x9c, 0x55, 0x29, 0xe4, 0x7f, - 0x85, 0x89, 0x46, 0x8e, 0x67, 0x22, 0xfd, 0xd7, 0x35, 0x98, 0xba, 0x65, 0x6f, 0x13, 0x9f, 0xfb, - 0xb0, 0x99, 0xb4, 0x4b, 0x84, 0xe8, 0x4f, 0xe5, 0x85, 0xe7, 0xa3, 0x03, 0x98, 0x0c, 0xcc, 0x5d, - 0x62, 0xf5, 0x1d, 0x19, 0xe2, 0x70, 0xb3, 0x9c, 0x47, 0x50, 0x92, 0x6e, 0x0b, 0x7c, 0x4a, 0x80, - 0x61, 0x44, 0x01, 0xc7, 0xc4, 0xf4, 0x4f, 0xc1, 0xc5, 0x9c, 0x46, 0xa8, 0x06, 0x63, 0x41, 0x68, - 0xf8, 0xa1, 0x18, 0x33, 0x26, 0x44, 0x58, 0x3c, 0x07, 0xe6, 0xe5, 0xe8, 0x61, 0x18, 0x21, 0xae, - 0x25, 0x06, 0x6d, 0xe2, 0x68, 0x50, 0x1b, 0x59, 0x75, 0x2d, 0x4c, 0xcb, 0xe8, 0x84, 0x3b, 0x5e, - 0x82, 0xb5, 0xd9, 0x84, 0xaf, 0x89, 0x32, 0x2c, 0xa1, 0xcc, 0x87, 0x9b, 0x76, 0x57, 0xa2, 0x2f, - 0x69, 0x30, 0xb7, 0x93, 0x9a, 0xd6, 0x61, 0xbc, 0xa4, 0x69, 0x16, 0x59, 0x59, 0x10, 0x03, 0x92, - 0x61, 0x36, 0x9c, 0xa1, 0xab, 0xff, 0xb3, 0x51, 0xb8, 0x7a, 0xcb, 0xf3, 0xed, 0x37, 0x3c, 0x37, - 0x34, 0x9c, 0x96, 0x67, 0xc5, 0xa7, 0x95, 0x82, 0xbd, 0x3f, 0xaf, 0xc1, 0x43, 0x66, 0xaf, 0xdf, - 0x74, 0xed, 0xd0, 0x36, 0xa2, 0x43, 0xa4, 0x16, 0xf1, 0x6d, 0xaf, 0xec, 0xa1, 0x25, 0x0b, 0x29, - 0xaf, 0xb7, 0xb6, 0xf2, 0x50, 0xe2, 0x22, 0x5a, 0xec, 0xec, 0xd4, 0xf2, 0xee, 0xba, 0xac, 0x73, - 0xed, 0x90, 0x8d, 0xe6, 0x1b, 0xf1, 0x24, 0x94, 0x3c, 0x3b, 0x6d, 0xe4, 0x62, 0xc4, 0x05, 0x94, - 0xd0, 0xa7, 0xe1, 0xb2, 0xcd, 0x3b, 0x87, 0x89, 0x61, 0xd9, 0x2e, 0x09, 0x02, 0x76, 0x82, 0x38, - 0xcc, 0xe1, 0x60, 0x33, 0x0f, 0x21, 0xce, 0xa7, 0x83, 0x5e, 0x05, 0x08, 0x0e, 0x5d, 0x53, 0x8c, - 0xff, 0x58, 0x29, 0xaa, 0x7c, 0x07, 0x97, 0x58, 0xb0, 0x82, 0x91, 0x6e, 0x62, 0xa1, 0x64, 0xca, - 0x71, 0x76, 0xd0, 0xc8, 0x36, 0xb1, 0x98, 0x87, 0x62, 0xb8, 0xfe, 0x8f, 0x35, 0x98, 0x10, 0x17, - 0x4d, 0xd0, 0xbb, 0x52, 0x8a, 0x9c, 0xf4, 0x1d, 0xa6, 0x94, 0xb9, 0x43, 0xe6, 0xf7, 0x11, 0x66, - 0x8c, 0x10, 0xca, 0xa5, 0x34, 0x01, 0x41, 0x38, 0xb6, 0x89, 0x12, 0xfe, 0x9f, 0xc8, 0x4e, 0x52, - 0x88, 0xe9, 0xdf, 0xd0, 0x60, 0x3e, 0xd3, 0xea, 0x04, 0x16, 0xd4, 0x03, 0x3c, 0x52, 0xf9, 0xe3, - 0x29, 0x60, 0x77, 0x8a, 0x96, 0x5b, 0xcd, 0x36, 0xf1, 0xf7, 0xe5, 0x22, 0xa4, 0x32, 0x23, 0x0e, - 0x9d, 0x11, 0xbd, 0x18, 0x42, 0x66, 0xdc, 0x4e, 0xe1, 0x8a, 0x65, 0x46, 0x1a, 0x82, 0x33, 0x74, - 0xd1, 0x17, 0x35, 0x98, 0x33, 0x92, 0x77, 0x8a, 0x22, 0xa1, 0x5e, 0x2a, 0x02, 0x36, 0x75, 0x3f, - 0x29, 0xee, 0x4b, 0x0a, 0x10, 0xe0, 0x0c, 0x59, 0xf4, 0x7e, 0x98, 0x36, 0x7a, 0xf6, 0x72, 0xdf, - 0xb2, 0x89, 0x6b, 0xca, 0xeb, 0x25, 0xcc, 0xbb, 0xb3, 0xdc, 0x6a, 0xca, 0x72, 0x9c, 0xa8, 0x25, - 0xaf, 0x02, 0x89, 0x81, 0x1c, 0x1d, 0xf2, 0x2a, 0x90, 0x18, 0xc3, 0xf8, 0x2a, 0x90, 0x18, 0x3a, - 0x95, 0x08, 0xfa, 0x04, 0x3c, 0xcc, 0x77, 0xc3, 0x15, 0x23, 0xb0, 0xcd, 0xe5, 0x7e, 0xb8, 0x4b, - 0xdc, 0x30, 0xd2, 0x90, 0xb8, 0x19, 0xcb, 0xa2, 0x28, 0x56, 0x8b, 0x2a, 0xe1, 0xe2, 0xf6, 0xc8, - 0x05, 0xf0, 0x6c, 0xcb, 0x14, 0xdf, 0xc3, 0x0f, 0xf2, 0x4b, 0x05, 0xb9, 0xdc, 0x69, 0x36, 0xea, - 0xe2, 0x73, 0x98, 0x98, 0x88, 0x7f, 0x63, 0x85, 0x02, 0xfa, 0x8a, 0x06, 0x33, 0x82, 0xc9, 0x05, - 0xcd, 0x09, 0x36, 0xff, 0xaf, 0x94, 0x65, 0xc6, 0x14, 0xc3, 0x2f, 0x61, 0x15, 0x39, 0x8f, 0xe9, - 0x95, 0x61, 0x5d, 0x09, 0x18, 0x4e, 0xf6, 0x03, 0xfd, 0x5d, 0x0d, 0x2e, 0x05, 0xc4, 0xdf, 0xb7, - 0x4d, 0xb2, 0x6c, 0x9a, 0x5e, 0xdf, 0x8d, 0x26, 0xb9, 0x5a, 0xfe, 0x5a, 0x46, 0x3b, 0x07, 0x1f, - 0x8f, 0x27, 0xc8, 0x83, 0xe0, 0x5c, 0xfa, 0x74, 0xff, 0xba, 0x70, 0xd7, 0x08, 0xcd, 0xdd, 0xba, - 0x61, 0xee, 0x32, 0xbb, 0x81, 0x87, 0x10, 0x94, 0x5c, 0x34, 0x2f, 0x25, 0x51, 0x71, 0x5f, 0x4d, - 0xaa, 0x10, 0xa7, 0x09, 0xa2, 0x00, 0xaa, 0x3e, 0x79, 0xbd, 0x4f, 0x02, 0x16, 0x67, 0x40, 0x89, - 0x37, 0x87, 0x9e, 0x31, 0x2c, 0x10, 0x72, 0x2d, 0x28, 0xfa, 0x85, 0x25, 0x21, 0xd4, 0x81, 0xab, - 0x9c, 0x73, 0x97, 0x5d, 0xcf, 0x3d, 0xec, 0x7a, 0xfd, 0x20, 0xc5, 0xfd, 0x53, 0x8c, 0xfb, 0x59, - 0x24, 0xc5, 0xea, 0x71, 0x15, 0xf1, 0xf1, 0x78, 0xd0, 0xcb, 0x50, 0x25, 0xfb, 0xc4, 0x0d, 0x37, - 0x37, 0xd7, 0x16, 0xa6, 0x4b, 0x6d, 0x8d, 0xec, 0x13, 0x56, 0x05, 0x0e, 0x2c, 0xb1, 0x2d, 0x3e, - 0x0f, 0x28, 0xcb, 0x91, 0x68, 0x0e, 0x46, 0xf6, 0x08, 0x3f, 0xe1, 0x9e, 0xc4, 0xf4, 0x5f, 0x74, - 0x09, 0xc6, 0xf6, 0x0d, 0xa7, 0xcf, 0x95, 0xed, 0x2a, 0xe6, 0x3f, 0x9e, 0xa9, 0x7c, 0x48, 0xd3, - 0xbf, 0xa5, 0xc1, 0xe5, 0xdc, 0x61, 0x43, 0x18, 0xae, 0xb0, 0x00, 0x14, 0x77, 0xbd, 0x1f, 0x1a, - 0xa1, 0xed, 0x76, 0x9a, 0xee, 0x8e, 0x63, 0x77, 0x76, 0xb9, 0x6e, 0x3a, 0xc6, 0xf5, 0x94, 0xf5, - 0xdc, 0x1a, 0xb8, 0xa0, 0x25, 0x6a, 0xc2, 0xc5, 0xae, 0x71, 0x90, 0x41, 0x58, 0x61, 0x08, 0xd9, - 0xcd, 0xd5, 0xf5, 0x2c, 0x18, 0xe7, 0xb5, 0xd1, 0xbf, 0x36, 0x06, 0x8f, 0xd0, 0x8e, 0xc7, 0x5b, - 0xe6, 0xba, 0xe1, 0x1a, 0x9d, 0x37, 0xe7, 0xd6, 0xf4, 0xeb, 0x1a, 0x3c, 0xb4, 0x9b, 0xaf, 0xce, - 0x8a, 0x4d, 0xfb, 0x85, 0x52, 0x66, 0xc7, 0x71, 0x1a, 0x32, 0x67, 0xdc, 0x63, 0xab, 0xe0, 0xa2, - 0x4e, 0xa1, 0xe7, 0x61, 0xce, 0xf5, 0x2c, 0x52, 0x6f, 0x36, 0xf0, 0xba, 0x11, 0xec, 0xb5, 0x23, - 0x47, 0xc3, 0x18, 0x77, 0x86, 0x6e, 0xa4, 0x60, 0x38, 0x53, 0x1b, 0xed, 0x03, 0xea, 0x79, 0xd6, - 0xea, 0xbe, 0x6d, 0x46, 0x71, 0x32, 0xe5, 0x1d, 0xb0, 0x2c, 0xe6, 0xbd, 0x95, 0xc1, 0x86, 0x73, - 0x28, 0x30, 0x7d, 0x9c, 0x76, 0x66, 0xdd, 0x73, 0xed, 0xd0, 0xf3, 0x59, 0x80, 0xd3, 0x50, 0x6a, - 0x29, 0xe3, 0xf3, 0x8d, 0x5c, 0x8c, 0xb8, 0x80, 0x92, 0xfe, 0x3f, 0x35, 0xb8, 0x40, 0xd9, 0xa2, - 0xe5, 0x7b, 0x07, 0x87, 0x6f, 0x46, 0x86, 0x7c, 0xb7, 0xf0, 0xb9, 0x72, 0x3b, 0xf2, 0xb2, 0xe2, - 0x6f, 0x9d, 0x64, 0x7d, 0x8e, 0x5d, 0xac, 0xaa, 0x29, 0x3d, 0x52, 0x6c, 0x4a, 0xeb, 0x5f, 0xa9, - 0x70, 0x15, 0x31, 0x32, 0x65, 0xdf, 0x94, 0xeb, 0xf0, 0x83, 0x30, 0x43, 0xcb, 0xd6, 0x8d, 0x83, - 0x56, 0xe3, 0x45, 0xcf, 0x89, 0x62, 0xcc, 0xd8, 0xb9, 0xf1, 0x6d, 0x15, 0x80, 0x93, 0xf5, 0xd0, - 0x33, 0x30, 0xd1, 0xe3, 0x91, 0xec, 0xc2, 0xb4, 0x7e, 0x8c, 0x3b, 0x26, 0x59, 0xd1, 0xbd, 0x41, - 0x6d, 0x5e, 0x7c, 0xb6, 0xed, 0x76, 0x44, 0x21, 0x8e, 0x1a, 0xe8, 0x5f, 0xbe, 0x04, 0x0c, 0xb9, - 0x43, 0xc2, 0x37, 0xe3, 0x98, 0x3c, 0x09, 0x53, 0x66, 0xaf, 0x5f, 0xbf, 0xd1, 0x7e, 0xa1, 0xef, - 0x85, 0x86, 0xf0, 0xbb, 0x32, 0x9d, 0xb1, 0xde, 0xda, 0x8a, 0x8a, 0xb1, 0x5a, 0x87, 0x4a, 0x07, - 0xb3, 0xd7, 0x17, 0xf2, 0xb6, 0xa5, 0x1e, 0x9e, 0x32, 0xe9, 0x50, 0x6f, 0x6d, 0x25, 0x60, 0x38, - 0x53, 0x1b, 0x7d, 0x1a, 0xa6, 0x89, 0x58, 0xb8, 0xb7, 0x0c, 0xdf, 0x12, 0x72, 0xa1, 0xf4, 0xa6, - 0x2f, 0x87, 0x36, 0x92, 0x06, 0x5c, 0xd5, 0x5e, 0x55, 0x48, 0xe0, 0x04, 0x41, 0xa6, 0xf6, 0x8a, - 0xdf, 0x74, 0x96, 0x3d, 0x2b, 0x2d, 0x28, 0xc6, 0x84, 0xda, 0x5b, 0x54, 0x09, 0x17, 0xb7, 0x47, - 0xbf, 0xa6, 0xc1, 0x15, 0x09, 0xb5, 0x5d, 0xbb, 0xdb, 0xef, 0x62, 0x62, 0x3a, 0x86, 0xdd, 0x15, - 0x3a, 0xf0, 0x4b, 0x67, 0xf6, 0xa1, 0x49, 0xf4, 0x5c, 0x58, 0xe5, 0xc3, 0x70, 0x41, 0x97, 0xd0, - 0x37, 0x34, 0x78, 0x2c, 0x02, 0xb5, 0xa8, 0x15, 0xda, 0xf7, 0x49, 0x1c, 0xe1, 0x28, 0x86, 0x64, - 0xa2, 0x94, 0xec, 0x7c, 0xfc, 0x68, 0x50, 0x7b, 0x6c, 0xf5, 0x3e, 0xb8, 0xf1, 0x7d, 0xa9, 0xab, - 0xec, 0xd2, 0xf6, 0x76, 0x42, 0xa1, 0x34, 0x9f, 0x17, 0xbb, 0x50, 0x12, 0x38, 0x41, 0x10, 0xfd, - 0x86, 0x06, 0x0f, 0xa9, 0x05, 0x2a, 0xb7, 0x70, 0x6d, 0xf9, 0xe5, 0x33, 0xeb, 0x4c, 0x0a, 0x3f, - 0xf7, 0x4b, 0x15, 0x00, 0x71, 0x51, 0xaf, 0xa8, 0xd8, 0xee, 0x32, 0xc6, 0xe4, 0x1a, 0xf5, 0x18, - 0x17, 0xdb, 0x9c, 0x57, 0x03, 0x1c, 0xc1, 0xa8, 0xa1, 0xda, 0xf3, 0xac, 0x96, 0x6d, 0x05, 0x6b, - 0x76, 0xd7, 0x0e, 0x99, 0xce, 0x3b, 0xc2, 0x87, 0xa3, 0xe5, 0x59, 0xad, 0x66, 0x83, 0x97, 0xe3, - 0x44, 0x2d, 0x16, 0xab, 0x6f, 0x77, 0x8d, 0x0e, 0x69, 0xf5, 0x1d, 0xa7, 0xe5, 0x7b, 0xcc, 0x79, - 0xd1, 0x20, 0x86, 0xe5, 0xd8, 0x2e, 0x29, 0xa9, 0xe3, 0xb2, 0xe5, 0xd6, 0x2c, 0x42, 0x8a, 0x8b, - 0xe9, 0xa1, 0x25, 0x80, 0x1d, 0xc3, 0x76, 0xda, 0x77, 0x8d, 0xde, 0x1d, 0x77, 0x61, 0x86, 0x09, - 0x30, 0x66, 0x25, 0xde, 0x90, 0xa5, 0x58, 0xa9, 0x41, 0xb9, 0x89, 0x4a, 0x41, 0x4c, 0xf8, 0x75, - 0xbe, 0x85, 0xd9, 0x33, 0xe2, 0xa6, 0x08, 0x21, 0x1f, 0xbe, 0xdb, 0x0a, 0x09, 0x9c, 0x20, 0x88, - 0x3e, 0xaf, 0xc1, 0x6c, 0x70, 0x18, 0x84, 0xa4, 0x2b, 0xfb, 0x70, 0xe1, 0xac, 0xfb, 0xc0, 0xdc, - 0x3a, 0xed, 0x04, 0x11, 0x9c, 0x22, 0x8a, 0x0c, 0x78, 0x84, 0x8d, 0xea, 0xcd, 0xfa, 0x2d, 0xbb, - 0xb3, 0x2b, 0x23, 0xf0, 0x5b, 0xc4, 0x37, 0x89, 0x1b, 0x2e, 0xcc, 0x31, 0xbe, 0xa9, 0x1d, 0x0d, - 0x6a, 0x8f, 0x34, 0x8b, 0xab, 0xe1, 0xe3, 0x70, 0xa0, 0x57, 0x61, 0x51, 0x80, 0xd7, 0xbc, 0xbb, - 0x19, 0x0a, 0xf3, 0x8c, 0x02, 0xbb, 0x16, 0xd1, 0x2c, 0xac, 0x85, 0x8f, 0xc1, 0x40, 0x2d, 0x8a, - 0x80, 0xf8, 0xcc, 0x2b, 0x4b, 0x24, 0xf3, 0x04, 0x0b, 0x88, 0x31, 0x01, 0xb3, 0x28, 0xda, 0x59, - 0x30, 0xce, 0x6b, 0x83, 0x9e, 0x95, 0x11, 0x73, 0x87, 0xb4, 0xe0, 0x85, 0x56, 0x7b, 0xe1, 0x22, - 0xeb, 0xdf, 0x45, 0x25, 0x10, 0x2e, 0x02, 0xe1, 0x74, 0x5d, 0xaa, 0x5b, 0x44, 0x45, 0x2b, 0x7d, - 0x3f, 0x08, 0x17, 0x2e, 0xb1, 0xc6, 0x4c, 0xb7, 0xc0, 0x2a, 0x00, 0x27, 0xeb, 0xa1, 0x67, 0x60, - 0x36, 0x20, 0xa6, 0xe9, 0x75, 0x7b, 0x0d, 0xb2, 0x63, 0xf4, 0x9d, 0x70, 0xe1, 0x32, 0xeb, 0x3d, - 0x9f, 0xc1, 0x04, 0x04, 0xa7, 0x6a, 0xa2, 0x43, 0xb8, 0x28, 0x6f, 0x4c, 0xae, 0x79, 0x9d, 0x75, - 0xe3, 0x80, 0xa9, 0xea, 0x57, 0xee, 0xbf, 0x02, 0x97, 0xa2, 0x50, 0x92, 0xa5, 0x17, 0xfa, 0x86, - 0x1b, 0xda, 0xe1, 0x21, 0x1f, 0xae, 0x7a, 0x16, 0x1d, 0xce, 0xa3, 0x81, 0xd6, 0xe0, 0x52, 0xaa, - 0xf8, 0x86, 0xed, 0x90, 0x60, 0xe1, 0x21, 0xf6, 0xd9, 0xcc, 0x0d, 0x51, 0xcf, 0x81, 0xe3, 0xdc, - 0x56, 0xe8, 0x0e, 0x5c, 0xee, 0xf9, 0x5e, 0x48, 0xcc, 0xf0, 0x36, 0x55, 0x4f, 0x1c, 0xf1, 0x81, - 0xc1, 0xc2, 0x02, 0x1b, 0x0b, 0xe6, 0x91, 0x6e, 0xe5, 0x55, 0xc0, 0xf9, 0xed, 0xd0, 0xd7, 0x34, - 0xb8, 0x16, 0x84, 0x3e, 0x31, 0xba, 0xb6, 0xdb, 0xa9, 0x7b, 0xae, 0x4b, 0x98, 0x98, 0x6c, 0x5a, - 0x71, 0x34, 0xc8, 0xc3, 0xa5, 0xe4, 0x94, 0x7e, 0x34, 0xa8, 0x5d, 0x6b, 0x1f, 0x8b, 0x19, 0xdf, - 0x87, 0xb2, 0x3e, 0xa8, 0x70, 0xab, 0x3b, 0x23, 0xfb, 0x29, 0x13, 0x76, 0x49, 0xd7, 0xf3, 0x0f, - 0x97, 0xa3, 0x5c, 0x33, 0xc2, 0x03, 0xcc, 0x98, 0x70, 0x3d, 0x09, 0xc2, 0xe9, 0xba, 0x54, 0x33, - 0x63, 0x8b, 0xe5, 0x46, 0x3b, 0x6e, 0x5f, 0x89, 0x35, 0xb3, 0x66, 0x0a, 0x86, 0x33, 0xb5, 0x51, - 0x1d, 0xe6, 0x45, 0x59, 0x93, 0x1a, 0x37, 0xc1, 0x0d, 0x9f, 0x44, 0x3a, 0x2f, 0x35, 0x13, 0xe6, - 0x9b, 0x69, 0x20, 0xce, 0xd6, 0xa7, 0x5f, 0x41, 0x7f, 0xa8, 0xbd, 0x18, 0x8d, 0xbf, 0x62, 0x23, - 0x09, 0xc2, 0xe9, 0xba, 0x91, 0xf5, 0x99, 0xe8, 0xc2, 0x58, 0xfc, 0x15, 0x1b, 0x29, 0x18, 0xce, - 0xd4, 0xd6, 0xff, 0xe3, 0x28, 0xbc, 0xe3, 0x04, 0xfa, 0x12, 0xea, 0xe6, 0x0f, 0xf7, 0xe9, 0xd7, - 0xce, 0xc9, 0xa6, 0xa7, 0x57, 0x30, 0x3d, 0xa7, 0xa7, 0x77, 0xd2, 0xe9, 0x0c, 0x8a, 0xa6, 0xf3, - 0xf4, 0x24, 0x4f, 0x3e, 0xfd, 0xdd, 0xfc, 0xe9, 0x2f, 0x39, 0xaa, 0xf7, 0x65, 0x97, 0x5e, 0x01, - 0xbb, 0x94, 0x1c, 0xd5, 0x13, 0xb0, 0xd7, 0x9f, 0x8c, 0xc2, 0xe3, 0x27, 0xd1, 0xdd, 0x4a, 0xf2, - 0x57, 0x8e, 0xd4, 0x39, 0x57, 0xfe, 0x2a, 0x8a, 0x79, 0x3b, 0x47, 0xfe, 0xca, 0x21, 0x79, 0xde, - 0xfc, 0x55, 0x34, 0xaa, 0xe7, 0xc5, 0x5f, 0x45, 0xa3, 0x7a, 0x02, 0xfe, 0xfa, 0xf3, 0xf4, 0xfe, - 0x20, 0x55, 0xb6, 0x26, 0x8c, 0x98, 0xbd, 0x7e, 0x49, 0x21, 0xc5, 0xe2, 0x05, 0xea, 0xad, 0x2d, - 0x4c, 0x71, 0x20, 0x0c, 0xe3, 0x9c, 0x7f, 0x4a, 0x8a, 0x20, 0x16, 0x13, 0xc7, 0x59, 0x12, 0x0b, - 0x4c, 0x74, 0xa8, 0x48, 0x6f, 0x97, 0x74, 0x89, 0x6f, 0x38, 0xed, 0xd0, 0xf3, 0x8d, 0x4e, 0x59, - 0x69, 0xc3, 0x86, 0x6a, 0x35, 0x85, 0x0b, 0x67, 0xb0, 0xd3, 0x01, 0xe9, 0xd9, 0x56, 0x49, 0xf9, - 0xc2, 0x06, 0xa4, 0xd5, 0x6c, 0x60, 0x8a, 0x43, 0xff, 0x87, 0x93, 0xa0, 0x24, 0x05, 0x40, 0x9f, - 0x80, 0x87, 0x0d, 0xc7, 0xf1, 0xee, 0xb6, 0x7c, 0x7b, 0xdf, 0x76, 0x48, 0x87, 0x58, 0x52, 0x9f, - 0x09, 0x44, 0x54, 0x09, 0xb3, 0x59, 0x96, 0x8b, 0x2a, 0xe1, 0xe2, 0xf6, 0xe8, 0x4b, 0x1a, 0xcc, - 0x9b, 0xe9, 0x8b, 0xd8, 0xc3, 0x9c, 0x3b, 0x67, 0x6e, 0x75, 0xf3, 0xf5, 0x94, 0x29, 0xc6, 0x59, - 0xb2, 0xe8, 0xa7, 0x35, 0xee, 0x17, 0x93, 0x87, 0x00, 0x62, 0xce, 0x6e, 0x9e, 0xd1, 0xb1, 0x59, - 0xec, 0x60, 0x8b, 0x8f, 0x19, 0x92, 0x04, 0xd1, 0x37, 0x34, 0xb8, 0xbc, 0x97, 0xe7, 0xce, 0x17, - 0x33, 0x7b, 0xa7, 0x6c, 0x57, 0x0a, 0xce, 0x07, 0xb8, 0x46, 0x99, 0x5b, 0x01, 0xe7, 0x77, 0x44, - 0x8e, 0x92, 0xf4, 0x70, 0x0a, 0x21, 0x50, 0x7a, 0x94, 0x52, 0xae, 0xd2, 0x78, 0x94, 0x24, 0x00, - 0x27, 0x09, 0xa2, 0x1e, 0x4c, 0xee, 0x45, 0x6e, 0x65, 0xe1, 0x4a, 0xaa, 0x97, 0xa5, 0xae, 0xf8, - 0xa6, 0x79, 0x2c, 0x85, 0x2c, 0xc4, 0x31, 0x11, 0xb4, 0x0b, 0x13, 0x7b, 0x5c, 0x10, 0x09, 0x17, - 0xd0, 0xf2, 0xd0, 0x26, 0x2a, 0xf7, 0x44, 0x88, 0x22, 0x1c, 0xa1, 0x57, 0xa3, 0xbd, 0xaa, 0xf7, - 0x09, 0x19, 0xfc, 0x9a, 0x06, 0x97, 0xf7, 0x89, 0x1f, 0xda, 0x66, 0xfa, 0x30, 0x65, 0xb2, 0xbc, - 0x19, 0xfd, 0x62, 0x1e, 0x42, 0xce, 0x26, 0xb9, 0x20, 0x9c, 0xdf, 0x05, 0x6a, 0x54, 0x73, 0x9f, - 0x78, 0x3b, 0x34, 0x42, 0xdb, 0xdc, 0xf4, 0xf6, 0x88, 0x4b, 0x3f, 0x56, 0x64, 0x2e, 0x05, 0x26, - 0x38, 0x98, 0x51, 0xbd, 0x5a, 0x5c, 0x0d, 0x1f, 0x87, 0x43, 0xff, 0xa1, 0x06, 0x19, 0xcf, 0x2e, - 0xfa, 0xb2, 0x06, 0xd3, 0x3b, 0xc4, 0x08, 0xfb, 0x3e, 0xb9, 0x69, 0x84, 0xf2, 0x36, 0xc2, 0x8b, - 0x67, 0xe1, 0x50, 0x5e, 0xba, 0xa1, 0x20, 0xe6, 0xc7, 0xde, 0x32, 0xa1, 0x88, 0x0a, 0xc2, 0x89, - 0x1e, 0x2c, 0x3e, 0x07, 0xf3, 0x99, 0x86, 0xa7, 0x3a, 0x9d, 0xfc, 0x17, 0x1a, 0xe4, 0xe5, 0xb2, - 0x45, 0xaf, 0xc2, 0x98, 0x61, 0x59, 0x32, 0xd5, 0xdd, 0xd3, 0xe5, 0xc2, 0x3b, 0x2c, 0xf5, 0xd2, - 0x07, 0xfb, 0x89, 0x39, 0x5a, 0x74, 0x03, 0x90, 0x91, 0x38, 0xc3, 0x5d, 0x8f, 0x03, 0xd4, 0xd9, - 0x61, 0xd4, 0x72, 0x06, 0x8a, 0x73, 0x5a, 0xe8, 0x7f, 0x53, 0x03, 0x94, 0x4d, 0x41, 0x83, 0x7c, - 0xa8, 0x0a, 0x56, 0x8e, 0x66, 0xa9, 0x94, 0xdb, 0x3f, 0x1d, 0x75, 0x1b, 0x5f, 0x9c, 0x11, 0x05, - 0x01, 0x96, 0x74, 0xf4, 0xbf, 0xd0, 0x20, 0x4e, 0x87, 0x85, 0x3e, 0x00, 0x53, 0x16, 0x09, 0x4c, - 0xdf, 0xee, 0x85, 0x71, 0x8c, 0xae, 0x4c, 0x1f, 0xd2, 0x88, 0x41, 0x58, 0xad, 0x87, 0x74, 0x18, - 0x0f, 0x8d, 0x60, 0xaf, 0xd9, 0x10, 0x46, 0x25, 0x53, 0x01, 0x36, 0x59, 0x09, 0x16, 0x90, 0xf8, - 0x3a, 0xf9, 0xc8, 0x09, 0xae, 0x93, 0xa3, 0x9d, 0x33, 0xb8, 0x3b, 0x8f, 0xee, 0x7f, 0x6f, 0x5e, - 0xff, 0xc3, 0x0a, 0x24, 0x33, 0x90, 0x95, 0x1d, 0x82, 0xec, 0x65, 0xff, 0xca, 0xb9, 0x5d, 0xf6, - 0x7f, 0x2f, 0x4b, 0xdf, 0xc9, 0x33, 0x33, 0xf3, 0xd3, 0x57, 0x35, 0xe9, 0x26, 0xcf, 0xab, 0x2c, - 0x6b, 0xa0, 0xa7, 0x59, 0xec, 0x68, 0x18, 0x99, 0xda, 0xef, 0x88, 0x38, 0x9b, 0xca, 0x10, 0x72, - 0x4f, 0xa4, 0x33, 0x90, 0xdf, 0xcf, 0x4a, 0x31, 0x6f, 0x81, 0x3e, 0x20, 0xa2, 0x7d, 0xc7, 0x12, - 0x29, 0x17, 0xa2, 0x68, 0xdf, 0xf9, 0x44, 0x43, 0x25, 0xd4, 0xf7, 0x3b, 0x1a, 0x4c, 0x88, 0x7c, - 0x42, 0x27, 0x88, 0x7d, 0xde, 0x81, 0x31, 0xa6, 0xca, 0x0f, 0xa3, 0xe5, 0xb4, 0x77, 0x3d, 0x2f, - 0x4c, 0x64, 0x55, 0x62, 0x21, 0xb2, 0xec, 0x5f, 0xcc, 0xd1, 0xb3, 0xd8, 0x2b, 0xdf, 0xdc, 0xb5, - 0x43, 0x62, 0x86, 0x51, 0xae, 0x96, 0x28, 0xf6, 0x4a, 0x29, 0xc7, 0x89, 0x5a, 0xfa, 0xd7, 0x47, - 0xe1, 0x31, 0x81, 0x38, 0xb3, 0xf5, 0xcb, 0x85, 0x7b, 0x08, 0x17, 0xc5, 0xdc, 0x36, 0x7c, 0xc3, - 0x96, 0xa7, 0xda, 0xe5, 0x4c, 0x3a, 0x11, 0xef, 0x90, 0x41, 0x87, 0xf3, 0x68, 0xf0, 0xac, 0x23, - 0xac, 0xf8, 0x16, 0x31, 0x9c, 0x70, 0x37, 0xa2, 0x5d, 0x19, 0x26, 0xeb, 0x48, 0x16, 0x1f, 0xce, - 0xa5, 0xc2, 0x4e, 0xd5, 0x05, 0xa0, 0xee, 0x13, 0x43, 0x3d, 0xd2, 0x1f, 0x22, 0xca, 0x75, 0x3d, - 0x17, 0x23, 0x2e, 0xa0, 0xc4, 0x7c, 0x63, 0xc6, 0x01, 0x33, 0xb5, 0x31, 0x09, 0x7d, 0x9b, 0x65, - 0xc7, 0x92, 0x0e, 0xda, 0xf5, 0x24, 0x08, 0xa7, 0xeb, 0xa2, 0x67, 0x60, 0x96, 0x45, 0x29, 0xc4, - 0xd7, 0x7b, 0xc7, 0xe2, 0x7b, 0x41, 0x1b, 0x09, 0x08, 0x4e, 0xd5, 0xd4, 0x7f, 0x45, 0x83, 0x69, - 0x95, 0xed, 0x4e, 0x70, 0x7b, 0xa3, 0xaf, 0x08, 0xf9, 0x21, 0x42, 0xcb, 0x55, 0xaa, 0x27, 0x91, - 0xf3, 0xbf, 0x59, 0x81, 0x8b, 0x39, 0x6d, 0xd8, 0x99, 0x33, 0x49, 0x6d, 0x18, 0xc3, 0x9c, 0x39, - 0x67, 0x36, 0x1f, 0x79, 0xe6, 0x9c, 0x86, 0xe0, 0x0c, 0x5d, 0xf4, 0x22, 0x8c, 0x98, 0xbe, 0x2d, - 0x86, 0xe5, 0x83, 0xa5, 0xcc, 0x1d, 0xdc, 0x5c, 0x99, 0x12, 0x14, 0x47, 0xea, 0xb8, 0x89, 0x29, - 0x42, 0xf4, 0x41, 0x98, 0x51, 0x17, 0x75, 0xb4, 0x07, 0x31, 0xc5, 0x5a, 0x5d, 0xfb, 0x01, 0x4e, - 0xd6, 0xd3, 0xff, 0x6c, 0x04, 0xa6, 0x94, 0xcc, 0x68, 0x68, 0x7d, 0x18, 0x33, 0x3b, 0xee, 0x57, - 0x64, 0x6a, 0xaf, 0xc3, 0x48, 0xa7, 0xd7, 0x2f, 0x69, 0x67, 0x4b, 0x74, 0x37, 0x29, 0xba, 0x4e, - 0xaf, 0x8f, 0x5e, 0x94, 0x96, 0x7b, 0x39, 0xdb, 0x5a, 0x06, 0x41, 0xa7, 0xac, 0xf7, 0x88, 0xa9, - 0x47, 0x0b, 0x99, 0xba, 0x0b, 0x13, 0x81, 0x30, 0xeb, 0xc7, 0xca, 0xdf, 0x55, 0x54, 0x46, 0x5a, - 0x98, 0xf1, 0xdc, 0x26, 0x88, 0xac, 0xfc, 0x88, 0x06, 0xd5, 0x37, 0xfa, 0xec, 0x92, 0x0a, 0x33, - 0x76, 0xaa, 0x5c, 0xdf, 0xd8, 0x62, 0x25, 0x58, 0x40, 0x32, 0xe2, 0x7e, 0xe2, 0x44, 0xe2, 0xfe, - 0x0b, 0x15, 0x40, 0xd9, 0x6e, 0xa0, 0x77, 0xc0, 0x18, 0xbb, 0xe1, 0x23, 0xd6, 0xb5, 0xd4, 0x0e, - 0xd9, 0x35, 0x20, 0xcc, 0x61, 0xa8, 0x2d, 0x6e, 0x5e, 0x95, 0x9b, 0x4e, 0x16, 0x5a, 0x21, 0xe8, - 0x29, 0xd7, 0xb4, 0xa2, 0xfd, 0x73, 0xa4, 0x70, 0xff, 0xdc, 0x82, 0x89, 0xae, 0xed, 0xb2, 0xf3, - 0x9d, 0x72, 0xde, 0x0e, 0x7e, 0x02, 0xcc, 0x51, 0xe0, 0x08, 0x97, 0xfe, 0x27, 0x15, 0xca, 0xfa, - 0xb6, 0x1b, 0x12, 0x97, 0xdd, 0xfc, 0x39, 0x04, 0x30, 0xfa, 0xa1, 0xc7, 0xd5, 0x10, 0xb1, 0x02, - 0x9a, 0xe5, 0x66, 0x59, 0x22, 0x5d, 0x96, 0x08, 0xf9, 0xc1, 0x6c, 0xfc, 0x1b, 0x2b, 0xc4, 0x28, - 0xe9, 0xd0, 0xee, 0x92, 0x97, 0x6c, 0xd7, 0xf2, 0xee, 0x8a, 0xe1, 0x1d, 0x96, 0xf4, 0xa6, 0x44, - 0xc8, 0x49, 0xc7, 0xbf, 0xb1, 0x42, 0x0c, 0xbd, 0x0c, 0x0b, 0xcc, 0xb8, 0x72, 0x59, 0xaa, 0x4a, - 0xd1, 0x37, 0xcf, 0x71, 0xa2, 0x1d, 0xae, 0xca, 0xd2, 0x83, 0x2d, 0xd4, 0x0b, 0xea, 0xe0, 0xc2, - 0xd6, 0xfa, 0x6f, 0x68, 0x70, 0x39, 0x77, 0x28, 0xd0, 0x4d, 0x98, 0x8f, 0xa3, 0x71, 0x54, 0x91, - 0x5c, 0x8d, 0x53, 0xa4, 0xde, 0x4e, 0x57, 0xc0, 0xd9, 0x36, 0x68, 0x5d, 0xaa, 0x25, 0xaa, 0xc8, - 0x17, 0xa1, 0x3c, 0x8f, 0x08, 0x54, 0x79, 0xbb, 0x02, 0xce, 0x6b, 0xa7, 0x7f, 0x22, 0xd1, 0xe1, - 0x78, 0xc0, 0xe8, 0xea, 0xd8, 0x26, 0x1d, 0x79, 0x97, 0x42, 0xae, 0x8e, 0x15, 0x5a, 0x88, 0x39, - 0x0c, 0x5d, 0x55, 0x6f, 0x28, 0x49, 0xd9, 0x15, 0xdd, 0x52, 0xd2, 0x43, 0x00, 0x11, 0x30, 0x67, - 0xbb, 0x1d, 0xb4, 0x03, 0x55, 0x43, 0x3c, 0xaa, 0x21, 0x58, 0xed, 0x23, 0xa5, 0x6c, 0x39, 0x81, - 0x83, 0x07, 0xca, 0x46, 0xbf, 0xb0, 0xc4, 0xad, 0xff, 0x23, 0x0d, 0xae, 0x50, 0x31, 0x66, 0x45, - 0x37, 0xd4, 0x65, 0xd2, 0x90, 0x13, 0xec, 0xe4, 0x5d, 0x98, 0xf2, 0xe3, 0x66, 0x82, 0x2f, 0x7f, - 0x42, 0x4d, 0x48, 0xa2, 0xdc, 0xab, 0xa6, 0x5a, 0x4e, 0xdd, 0xf7, 0x82, 0x68, 0x72, 0xd2, 0x39, - 0x4a, 0xa4, 0x85, 0xa1, 0xf4, 0x04, 0xab, 0xf8, 0xf5, 0xcf, 0x56, 0x00, 0x36, 0x48, 0x78, 0xd7, - 0xf3, 0xf7, 0xe8, 0x10, 0xbd, 0xa9, 0x2e, 0x15, 0x3e, 0x0a, 0xa3, 0x3d, 0xcf, 0x0a, 0x84, 0x94, - 0x62, 0x57, 0x52, 0x59, 0x3c, 0x09, 0x2b, 0x45, 0x35, 0x18, 0x63, 0x3e, 0x6c, 0xb1, 0x81, 0x30, - 0xd5, 0x9c, 0x2a, 0x56, 0x01, 0xe6, 0xe5, 0x3c, 0x5d, 0x32, 0x0b, 0x42, 0x0f, 0x84, 0xad, 0x21, - 0xd2, 0x25, 0xf3, 0x32, 0x2c, 0xa1, 0xfa, 0x67, 0x47, 0x21, 0xf1, 0x7e, 0x4c, 0x6c, 0xf2, 0x6b, - 0xe7, 0x63, 0xf2, 0xbf, 0x0c, 0x0b, 0x8e, 0x67, 0x58, 0x2b, 0x86, 0x43, 0x99, 0xde, 0x6f, 0xf3, - 0xe9, 0x30, 0xdc, 0x8e, 0x7c, 0x72, 0x84, 0x09, 0x80, 0xb5, 0x82, 0x3a, 0xb8, 0xb0, 0x35, 0x0a, - 0xe5, 0xab, 0x35, 0x3c, 0x93, 0xec, 0xda, 0xb0, 0xaf, 0xeb, 0x2c, 0xa9, 0xd7, 0x0f, 0xe4, 0x5e, - 0x9e, 0x7a, 0xd8, 0xe6, 0x67, 0x34, 0xb8, 0x4c, 0x0e, 0x42, 0xe2, 0xbb, 0x86, 0xb3, 0xe9, 0x1b, - 0x3b, 0x3b, 0xb6, 0x29, 0x22, 0xf5, 0xf8, 0xe4, 0xb4, 0x8e, 0x06, 0xb5, 0xcb, 0xab, 0x79, 0x15, - 0xee, 0x0d, 0x6a, 0xef, 0xcb, 0x3e, 0x1e, 0x15, 0xdd, 0x36, 0xc8, 0x6d, 0xc2, 0x98, 0x31, 0x9f, - 0xdc, 0xe2, 0xd3, 0x30, 0x75, 0x8a, 0xe0, 0xf4, 0x49, 0xd5, 0xfd, 0xf3, 0x3d, 0x0d, 0xa6, 0x29, - 0xff, 0xac, 0x79, 0xa6, 0xe1, 0x34, 0x36, 0xda, 0xa7, 0x78, 0x79, 0x09, 0xad, 0xc1, 0xa5, 0x1d, - 0xcf, 0x37, 0xc9, 0x66, 0xbd, 0xb5, 0xe9, 0x09, 0x2f, 0x78, 0x63, 0xa3, 0x2d, 0x84, 0x22, 0xb3, - 0x7f, 0x6e, 0xe4, 0xc0, 0x71, 0x6e, 0x2b, 0x74, 0x07, 0x2e, 0xc7, 0xe5, 0x5b, 0x3d, 0x7e, 0xbc, - 0x4f, 0xd1, 0x8d, 0xc4, 0xe1, 0x09, 0x37, 0xf2, 0x2a, 0xe0, 0xfc, 0x76, 0xfa, 0x2f, 0x8c, 0x83, - 0x72, 0x89, 0xe5, 0x14, 0xa9, 0x91, 0x7f, 0x59, 0x83, 0x4b, 0xa6, 0x63, 0x13, 0x37, 0x4c, 0xdd, - 0x56, 0xe0, 0x6b, 0x7e, 0xab, 0xd4, 0xed, 0x9a, 0x1e, 0x71, 0x9b, 0x0d, 0x11, 0xaa, 0x50, 0xcf, - 0x41, 0x2e, 0xc2, 0x39, 0x72, 0x20, 0x38, 0xb7, 0x33, 0xec, 0x7b, 0x58, 0x79, 0xb3, 0xa1, 0xde, - 0x45, 0xad, 0x8b, 0x32, 0x2c, 0xa1, 0xe8, 0x49, 0x98, 0xea, 0xf8, 0x5e, 0xbf, 0x17, 0xd4, 0x59, - 0x7c, 0x24, 0x67, 0x4e, 0xa6, 0x23, 0xdd, 0x8c, 0x8b, 0xb1, 0x5a, 0x87, 0x6a, 0x7c, 0xfc, 0x67, - 0xcb, 0x27, 0x3b, 0xf6, 0x81, 0x90, 0x24, 0x4c, 0xe3, 0xbb, 0xa9, 0x94, 0xe3, 0x44, 0x2d, 0xf4, - 0x1e, 0x98, 0xb4, 0x83, 0xa0, 0x4f, 0xfc, 0x2d, 0xbc, 0x26, 0x72, 0x22, 0x32, 0xb7, 0x77, 0x33, - 0x2a, 0xc4, 0x31, 0x1c, 0xfd, 0x9c, 0x06, 0xb3, 0x3e, 0x79, 0xbd, 0x6f, 0xfb, 0xc4, 0x62, 0x44, - 0x03, 0x71, 0x93, 0x08, 0x0f, 0x77, 0x7b, 0x69, 0x09, 0x27, 0x90, 0xf2, 0x25, 0x2c, 0xdd, 0x41, - 0x49, 0x20, 0x4e, 0xf5, 0x80, 0x0e, 0x55, 0x60, 0x77, 0x5c, 0xdb, 0xed, 0x2c, 0x3b, 0x9d, 0x60, - 0xa1, 0xca, 0xa4, 0x12, 0x57, 0x27, 0xe3, 0x62, 0xac, 0xd6, 0xa1, 0x06, 0x51, 0x3f, 0xa0, 0x8b, - 0xb2, 0x4b, 0xf8, 0xf8, 0x4e, 0xc6, 0x01, 0xcf, 0x5b, 0x2a, 0x00, 0x27, 0xeb, 0x51, 0x63, 0x39, - 0x2a, 0x10, 0xa3, 0x0c, 0x3c, 0xcf, 0x00, 0xed, 0xe7, 0x56, 0x02, 0x82, 0x53, 0x35, 0x17, 0x97, - 0xe1, 0x62, 0xce, 0x67, 0x9e, 0x6a, 0xe5, 0xff, 0x4a, 0x05, 0xde, 0x7e, 0x5f, 0xae, 0x44, 0x7f, - 0x4f, 0x83, 0x29, 0x72, 0x10, 0xfa, 0x86, 0x0c, 0xa1, 0xa6, 0x53, 0xb4, 0x73, 0x2e, 0x4b, 0x60, - 0x69, 0x35, 0x26, 0xc4, 0xa7, 0x4d, 0xee, 0xe4, 0x0a, 0x04, 0xab, 0xfd, 0xa1, 0xe6, 0x0b, 0xcf, - 0x42, 0xa1, 0xba, 0x4b, 0xc5, 0xbb, 0x20, 0x02, 0xb2, 0xf8, 0x51, 0x98, 0x4b, 0x63, 0x3e, 0xd5, - 0x48, 0xfd, 0x76, 0x05, 0x26, 0x5a, 0xbe, 0x47, 0x95, 0x8c, 0x07, 0x90, 0xc3, 0xcb, 0x48, 0xe4, - 0xf0, 0x2a, 0x75, 0x35, 0x51, 0x74, 0xb6, 0x30, 0x7f, 0xa0, 0x9d, 0xca, 0x1f, 0xb8, 0x3c, 0x0c, - 0x91, 0xe3, 0x13, 0x06, 0xfe, 0x5b, 0x0d, 0xa6, 0x44, 0xcd, 0x07, 0x90, 0xba, 0xea, 0x93, 0xc9, - 0xd4, 0x55, 0x1f, 0x1e, 0xe2, 0xbb, 0x0a, 0x72, 0x55, 0x7d, 0x4d, 0x83, 0x19, 0x51, 0x63, 0x9d, - 0x74, 0xb7, 0x89, 0x8f, 0x6e, 0xc0, 0x44, 0xd0, 0x67, 0x13, 0x29, 0x3e, 0xe8, 0x11, 0x55, 0x6d, - 0xf5, 0xb7, 0x0d, 0x93, 0x3d, 0x6e, 0xc3, 0xab, 0x28, 0x59, 0xf9, 0x78, 0x01, 0x8e, 0x1a, 0x53, - 0x25, 0xd4, 0xf7, 0x9c, 0x4c, 0xb2, 0x06, 0xec, 0x39, 0x04, 0x33, 0x08, 0xd5, 0xfd, 0xe8, 0xdf, - 0xc8, 0xe5, 0xc2, 0x74, 0x3f, 0x0a, 0x0e, 0x30, 0x2f, 0xd7, 0x3f, 0x3f, 0x2a, 0x07, 0x9b, 0x65, - 0xce, 0xba, 0x05, 0x93, 0xa6, 0x4f, 0x8c, 0x90, 0x58, 0x2b, 0x87, 0x27, 0xe9, 0x1c, 0x13, 0xd6, - 0xf5, 0xa8, 0x05, 0x8e, 0x1b, 0x53, 0xb9, 0xa8, 0x7a, 0xf2, 0x2b, 0xf1, 0x16, 0x52, 0xe8, 0xc5, - 0xff, 0x08, 0x8c, 0x79, 0x77, 0x5d, 0x79, 0xd0, 0x7d, 0x2c, 0x61, 0xf6, 0x29, 0x77, 0x68, 0x6d, - 0xcc, 0x1b, 0xb1, 0x34, 0x35, 0x7d, 0xbf, 0xe7, 0x05, 0x91, 0xab, 0x84, 0xa7, 0xa9, 0xe1, 0x45, - 0x38, 0x82, 0x21, 0x07, 0x26, 0xba, 0x6c, 0x1a, 0x86, 0x4a, 0xd2, 0x96, 0x98, 0x50, 0x35, 0x8d, - 0x2f, 0xc3, 0x8c, 0x23, 0x12, 0x74, 0x7f, 0xa3, 0x32, 0x38, 0xe8, 0x19, 0x26, 0x51, 0xf7, 0xb7, - 0x8d, 0xa8, 0x10, 0xc7, 0x70, 0x74, 0x08, 0x53, 0xfc, 0xbe, 0x3c, 0x77, 0x84, 0x4e, 0x94, 0xf7, - 0xe5, 0x88, 0xee, 0x6d, 0xc6, 0xd8, 0xf8, 0xd0, 0x2b, 0x05, 0x58, 0xa5, 0xa5, 0xff, 0xec, 0xa8, - 0x64, 0x52, 0x91, 0x73, 0x31, 0xff, 0x41, 0x16, 0xad, 0xd4, 0x83, 0x2c, 0xef, 0x83, 0xb1, 0xde, - 0xae, 0x11, 0x44, 0x9c, 0x1a, 0xa5, 0x9c, 0x1e, 0x6b, 0xd1, 0xc2, 0x7b, 0x83, 0xda, 0xb4, 0x20, - 0xcd, 0x7e, 0x63, 0x5e, 0x17, 0xf5, 0xe1, 0x62, 0x10, 0x1a, 0x0e, 0x69, 0xdb, 0xc2, 0xde, 0x0d, - 0x42, 0xa3, 0xdb, 0x2b, 0x91, 0x39, 0x9a, 0x07, 0x1c, 0x67, 0x51, 0xe1, 0x3c, 0xfc, 0xe8, 0x73, - 0x1a, 0x2c, 0xb0, 0xf2, 0xe5, 0x7e, 0xe8, 0xf1, 0xbc, 0xf3, 0x31, 0xf1, 0xd3, 0x1f, 0x83, 0x31, - 0xfb, 0xa4, 0x5d, 0x80, 0x0f, 0x17, 0x52, 0x42, 0x9f, 0x82, 0xcb, 0x8e, 0x11, 0x84, 0xcb, 0x66, - 0x68, 0xef, 0xdb, 0xe1, 0x61, 0xdc, 0x85, 0xd3, 0x3f, 0x4e, 0xc3, 0xf4, 0xe0, 0xb5, 0x3c, 0x64, - 0x38, 0x9f, 0x86, 0xfe, 0xe7, 0x1a, 0xa0, 0x2c, 0x0b, 0x21, 0x07, 0xaa, 0x56, 0x14, 0x01, 0xac, - 0x95, 0x7f, 0x1b, 0x21, 0x46, 0x19, 0x4b, 0x66, 0x19, 0x38, 0x2c, 0x29, 0x20, 0x0f, 0x26, 0xef, - 0xee, 0xda, 0x21, 0x71, 0xec, 0x20, 0x14, 0xd2, 0x79, 0x58, 0x72, 0x32, 0xfb, 0xcb, 0x4b, 0x11, - 0x62, 0x1c, 0xd3, 0xd0, 0xbf, 0x30, 0x02, 0xd5, 0x53, 0xbc, 0x01, 0xd8, 0x07, 0x64, 0x2a, 0x09, - 0xad, 0x87, 0x31, 0xf2, 0xd9, 0xe9, 0x75, 0x3d, 0x83, 0x0c, 0xe7, 0x10, 0x40, 0x9f, 0x82, 0x4b, - 0xb6, 0xbb, 0xe3, 0x1b, 0x41, 0xe8, 0xf7, 0x99, 0xd7, 0x74, 0x98, 0xbc, 0xd0, 0xcc, 0x82, 0x68, - 0xe6, 0xa0, 0xc3, 0xb9, 0x44, 0x10, 0x81, 0x89, 0xbb, 0x9e, 0xbf, 0x47, 0x85, 0xe7, 0x68, 0xf9, - 0x17, 0x42, 0x5e, 0x62, 0x28, 0x62, 0xa9, 0xc9, 0x7f, 0x07, 0x38, 0xc2, 0xad, 0xff, 0xbe, 0x06, - 0x63, 0xfc, 0x52, 0xdb, 0xf9, 0x2b, 0x4f, 0x7f, 0x2d, 0xa1, 0x3c, 0x95, 0xca, 0x2a, 0xcb, 0xba, - 0x5a, 0x98, 0xef, 0xf4, 0x3b, 0x1a, 0x4c, 0xb2, 0x1a, 0x0f, 0x40, 0x9b, 0x79, 0x35, 0xa9, 0xcd, - 0x3c, 0x5d, 0xfa, 0x6b, 0x0a, 0x74, 0x99, 0xdf, 0x1f, 0x11, 0xdf, 0xc2, 0x94, 0x85, 0x26, 0x5c, - 0x14, 0x61, 0x6b, 0x6b, 0xf6, 0x0e, 0xa1, 0xdc, 0xd5, 0x30, 0x0e, 0x03, 0x71, 0x13, 0x9d, 0xdf, - 0x5b, 0xc8, 0x82, 0x71, 0x5e, 0x1b, 0xf4, 0xcf, 0x35, 0xba, 0x2d, 0x87, 0xbe, 0x6d, 0x0e, 0x95, - 0x44, 0x54, 0xf6, 0x6d, 0x69, 0x9d, 0x23, 0xe3, 0x46, 0xc1, 0x56, 0xbc, 0x3f, 0xb3, 0xd2, 0x7b, - 0x83, 0x5a, 0x2d, 0xc7, 0x99, 0x12, 0x39, 0xff, 0xe8, 0xc0, 0x7e, 0xf6, 0xfb, 0xc7, 0x56, 0x61, - 0x8e, 0xc8, 0xa8, 0xc7, 0xe8, 0x16, 0x8c, 0x05, 0xa6, 0xd7, 0x23, 0xa7, 0x49, 0x8b, 0x2c, 0x07, - 0xb8, 0x4d, 0x5b, 0x62, 0x8e, 0x60, 0xf1, 0x35, 0x98, 0x56, 0x7b, 0x9e, 0x63, 0x74, 0x34, 0x54, - 0xa3, 0xe3, 0xd4, 0xc7, 0x0d, 0xaa, 0x91, 0xf2, 0x3b, 0x15, 0x10, 0xef, 0x95, 0x9e, 0xc0, 0xdd, - 0x6a, 0x47, 0xf9, 0xf8, 0x86, 0x78, 0x73, 0x2c, 0xfd, 0xe4, 0x70, 0x3c, 0x06, 0x6a, 0x4a, 0x3e, - 0xe4, 0xc2, 0xb8, 0x63, 0x6c, 0x13, 0x27, 0x7a, 0xe4, 0xe9, 0x46, 0xf9, 0x57, 0x88, 0x78, 0x22, - 0xdf, 0x20, 0xe5, 0x94, 0xe3, 0x85, 0x58, 0x50, 0x59, 0x7c, 0x1a, 0xa6, 0x94, 0x6a, 0xa7, 0xb2, - 0xf3, 0xbe, 0xa2, 0xc1, 0x95, 0x88, 0x25, 0x92, 0xf9, 0x34, 0xd0, 0x13, 0x50, 0x35, 0x7a, 0x36, - 0x73, 0x7d, 0xa8, 0xce, 0xa3, 0xe5, 0x56, 0x93, 0x95, 0x61, 0x09, 0x45, 0xef, 0x85, 0x6a, 0x34, - 0x4f, 0x42, 0x41, 0x92, 0x4b, 0x5c, 0xba, 0xa3, 0x65, 0x0d, 0xf4, 0x4e, 0x25, 0xc3, 0xe0, 0x58, - 0xbc, 0xa3, 0x49, 0xc2, 0xfc, 0xe4, 0x4a, 0xff, 0xe2, 0x08, 0xcc, 0x70, 0xa3, 0x76, 0xc5, 0x76, - 0x2d, 0xdb, 0xed, 0x3c, 0x00, 0x51, 0x9a, 0x78, 0xf5, 0xb5, 0x72, 0x56, 0xaf, 0xbe, 0xde, 0x86, - 0xf1, 0xd7, 0xe9, 0xb2, 0x8e, 0xd8, 0xe1, 0x44, 0xab, 0x4b, 0xce, 0x35, 0x93, 0x08, 0x01, 0x16, - 0x28, 0x50, 0xa0, 0xbc, 0xbd, 0x3b, 0xc4, 0xf5, 0xe6, 0xc4, 0xc8, 0xca, 0x3c, 0xa1, 0xd3, 0xf9, - 0x0f, 0xef, 0xea, 0xff, 0x41, 0x83, 0xf9, 0x44, 0x8b, 0x07, 0xb0, 0x13, 0xec, 0x24, 0x77, 0x82, - 0xe5, 0xa1, 0xbf, 0xb2, 0x60, 0x47, 0x78, 0x1a, 0x2e, 0xe7, 0x0e, 0xc6, 0xfd, 0x15, 0x28, 0xfd, - 0x9b, 0x15, 0x18, 0x6d, 0x13, 0x62, 0x3d, 0x00, 0xce, 0x7c, 0x35, 0xb1, 0xc9, 0x7f, 0xa4, 0xf4, - 0x53, 0x63, 0x45, 0xee, 0x91, 0x9d, 0x94, 0x7b, 0xe4, 0xa3, 0xa5, 0x29, 0x1c, 0xef, 0x1b, 0xf9, - 0xc5, 0x0a, 0x00, 0xad, 0xc6, 0xdf, 0x09, 0x15, 0xa1, 0x68, 0xf1, 0x4b, 0xd2, 0x93, 0x6f, 0x96, - 0xf7, 0x9f, 0x75, 0xf9, 0x3e, 0xf6, 0x48, 0xec, 0x63, 0x4b, 0xbe, 0x8d, 0x9d, 0x94, 0x16, 0xa3, - 0x67, 0x24, 0x2d, 0xf4, 0x7f, 0xa2, 0x01, 0x7b, 0xbe, 0xa0, 0xb1, 0xc1, 0x2e, 0x7f, 0xda, 0xfc, - 0x70, 0xa6, 0xa1, 0x66, 0x9b, 0x63, 0x7e, 0xd6, 0xa6, 0x0a, 0xc0, 0xc9, 0x7a, 0xa8, 0xab, 0x8c, - 0xeb, 0x10, 0xaf, 0xf5, 0x8a, 0x7e, 0xdc, 0x57, 0x3e, 0x7c, 0xbf, 0x02, 0x17, 0x52, 0x75, 0x4f, - 0x60, 0x7f, 0x9c, 0x8f, 0xb4, 0x55, 0x52, 0x0b, 0x8f, 0x9c, 0x7f, 0x6a, 0x61, 0x99, 0xe5, 0x77, - 0xf4, 0x7c, 0xb3, 0xfc, 0xfe, 0x9e, 0x06, 0xec, 0xf9, 0xd7, 0x07, 0x20, 0x78, 0xff, 0xff, 0xa4, - 0xe0, 0xfd, 0x50, 0x59, 0xc6, 0x29, 0x90, 0xb7, 0xbf, 0x56, 0x01, 0xf6, 0x14, 0x81, 0x38, 0x8b, - 0x56, 0x8e, 0x77, 0xb5, 0x82, 0xe3, 0xdd, 0xc7, 0xc4, 0xe9, 0x70, 0xca, 0x4b, 0xa8, 0x9c, 0x10, - 0xbf, 0x57, 0x39, 0x00, 0x1e, 0x49, 0x8a, 0x91, 0xec, 0x21, 0x30, 0x7a, 0x03, 0x66, 0x82, 0x5d, - 0xcf, 0x0b, 0xe5, 0x65, 0xe0, 0xd1, 0xf2, 0x1e, 0x61, 0x16, 0x39, 0x1a, 0x7d, 0x0a, 0x5f, 0x98, - 0x6d, 0x15, 0x37, 0x4e, 0x92, 0x42, 0x4b, 0x00, 0xdb, 0x8e, 0x67, 0xee, 0xd5, 0x9b, 0x0d, 0x1c, - 0x45, 0x0a, 0xb2, 0x00, 0x92, 0x15, 0x59, 0x8a, 0x95, 0x1a, 0xfa, 0x7f, 0xd1, 0xf8, 0x68, 0x9d, - 0x62, 0x59, 0x3d, 0x40, 0x29, 0xf9, 0xae, 0x94, 0x94, 0x54, 0x9e, 0x0d, 0x4b, 0x48, 0xca, 0x5a, - 0xbc, 0x4a, 0xa4, 0x17, 0x37, 0xc1, 0xde, 0xbf, 0x2d, 0x3e, 0x53, 0xbe, 0x48, 0xd1, 0x83, 0x19, - 0x47, 0x7d, 0xc2, 0x42, 0xf0, 0x79, 0xa9, 0xd7, 0x2f, 0x64, 0x2a, 0xbd, 0x44, 0x31, 0x4e, 0x12, - 0xa0, 0xb2, 0x36, 0xfa, 0x3a, 0xfe, 0x78, 0x66, 0x25, 0x0e, 0xf2, 0x6b, 0xa9, 0x00, 0x9c, 0xac, - 0xa7, 0xff, 0xfd, 0x0a, 0x5c, 0xe5, 0x7d, 0x67, 0xe1, 0xbc, 0x0d, 0xd2, 0x23, 0xae, 0x45, 0x5c, - 0xf3, 0x90, 0xe9, 0xd3, 0x96, 0xd7, 0x41, 0x7f, 0x43, 0x83, 0x2a, 0x71, 0xad, 0x9e, 0x67, 0xbb, - 0x91, 0xc3, 0xfc, 0xe3, 0xe5, 0x1f, 0x0b, 0x2d, 0xa0, 0xb2, 0x2a, 0x08, 0x88, 0xac, 0x6e, 0xe2, - 0x17, 0x96, 0x84, 0xd1, 0x5d, 0x18, 0xeb, 0xf9, 0xde, 0x76, 0x64, 0x77, 0xbd, 0x78, 0xe6, 0x3d, - 0x68, 0x51, 0xec, 0x7c, 0x72, 0xd9, 0xbf, 0x98, 0xd3, 0xd3, 0x31, 0xbc, 0xf3, 0x44, 0x3d, 0x3f, - 0xc5, 0x39, 0xbc, 0x7e, 0x07, 0xf4, 0xfb, 0xf7, 0xe5, 0x34, 0x08, 0x5f, 0x80, 0xc7, 0x15, 0x84, - 0xab, 0x07, 0x26, 0x09, 0x82, 0xba, 0xd1, 0x33, 0x4c, 0x6a, 0x73, 0xb2, 0x6b, 0x92, 0xdc, 0x13, - 0x7c, 0x0a, 0x94, 0xff, 0x47, 0x83, 0x9a, 0x82, 0x33, 0x11, 0xe3, 0x11, 0xc9, 0xa2, 0xaf, 0x6b, - 0x30, 0x65, 0xb8, 0xae, 0x17, 0x1a, 0xea, 0xd3, 0x40, 0xd6, 0x90, 0x73, 0x93, 0x47, 0x6a, 0x69, - 0x39, 0x26, 0x93, 0x3a, 0x69, 0x54, 0x20, 0x58, 0xed, 0xcd, 0xe2, 0x47, 0x61, 0x2e, 0xdd, 0xea, - 0x54, 0xd6, 0x65, 0x1d, 0xae, 0x28, 0xbd, 0x62, 0x87, 0x1d, 0xf5, 0x5d, 0x62, 0xee, 0x05, 0xa7, - 0x19, 0xc6, 0x15, 0xaa, 0xa0, 0x4b, 0x24, 0x71, 0x46, 0x2c, 0x76, 0xb5, 0xcb, 0x0e, 0xec, 0xe8, - 0xf6, 0xb3, 0x82, 0xe3, 0x45, 0x5e, 0x8c, 0x23, 0xb8, 0xfe, 0x3c, 0x5c, 0x54, 0x71, 0x30, 0x91, - 0x7c, 0xaa, 0xc0, 0x0f, 0x7d, 0x1d, 0x1e, 0x53, 0x30, 0xe4, 0x5e, 0xdd, 0x3a, 0x0d, 0xba, 0xaf, - 0x57, 0x23, 0x81, 0x27, 0xee, 0x00, 0xfc, 0x96, 0x06, 0x0f, 0x93, 0x22, 0xae, 0x13, 0x42, 0xe3, - 0xe5, 0x21, 0xd9, 0xa2, 0x90, 0xab, 0x45, 0x52, 0xaa, 0x22, 0x30, 0x2e, 0xee, 0x19, 0x3a, 0x04, - 0x08, 0xe4, 0x94, 0x0c, 0x13, 0x5c, 0x99, 0x3b, 0xc7, 0x22, 0x7b, 0xb3, 0xfc, 0x8d, 0x15, 0x62, - 0xe8, 0x75, 0xa8, 0x06, 0x62, 0x26, 0x87, 0xb9, 0x59, 0x9a, 0xc3, 0x18, 0x22, 0x7e, 0x4c, 0xfc, - 0xc2, 0x92, 0x0c, 0xfa, 0x25, 0x0d, 0x2e, 0x39, 0x39, 0x8b, 0x4b, 0xa8, 0x10, 0xed, 0x73, 0x58, - 0xb7, 0xdc, 0xc5, 0x9d, 0x07, 0xc1, 0xb9, 0x5d, 0x41, 0xff, 0xa0, 0xf0, 0x1a, 0xe3, 0x58, 0xf9, - 0xd7, 0x7c, 0xee, 0xc7, 0xfb, 0x25, 0x6e, 0x34, 0xfe, 0x14, 0x4c, 0x79, 0xb1, 0x44, 0x10, 0xf7, - 0x4e, 0x3f, 0x36, 0x64, 0xe7, 0x14, 0x19, 0xc3, 0x0f, 0x0c, 0x95, 0x02, 0xac, 0xd2, 0x43, 0x5f, - 0xd5, 0x00, 0x59, 0x99, 0x7d, 0x43, 0x9c, 0x59, 0xbe, 0x70, 0xe6, 0x9b, 0x23, 0x3f, 0x22, 0xc9, - 0x96, 0xe3, 0x9c, 0x4e, 0xe8, 0xdf, 0xa8, 0x72, 0x6d, 0x9f, 0x39, 0xa9, 0xb7, 0x61, 0x7c, 0x9b, - 0x59, 0xcb, 0x42, 0x0a, 0x94, 0x36, 0xcd, 0xb9, 0xcd, 0xcd, 0x4d, 0x59, 0xfe, 0x3f, 0x16, 0x98, - 0xd1, 0x2b, 0x30, 0x62, 0xb9, 0xd1, 0x0b, 0x71, 0x1f, 0x1e, 0xc2, 0x54, 0x8c, 0x43, 0x73, 0xe9, - 0xc2, 0xa1, 0x48, 0x91, 0x0b, 0x55, 0x57, 0x28, 0xc8, 0x62, 0x99, 0x96, 0x7e, 0x29, 0x5d, 0x2a, - 0xda, 0x52, 0xbd, 0x8f, 0x4a, 0xb0, 0xa4, 0x41, 0xe9, 0xa5, 0x3c, 0x64, 0xa5, 0xe9, 0x49, 0xc3, - 0xf7, 0x38, 0xaf, 0x44, 0x4b, 0x35, 0x63, 0xc7, 0x4e, 0x6e, 0xc6, 0xce, 0x14, 0x9a, 0xb0, 0x04, - 0xc6, 0x43, 0xfe, 0x3a, 0xf2, 0x78, 0xf9, 0x97, 0x02, 0x69, 0xff, 0xd9, 0xeb, 0xc9, 0xb1, 0x56, - 0x2e, 0x9e, 0x56, 0x16, 0xc8, 0x29, 0x63, 0xf1, 0x47, 0xdc, 0x05, 0xd3, 0x97, 0x66, 0x2c, 0xfe, - 0x38, 0x0c, 0x67, 0x2c, 0xfe, 0x3f, 0x16, 0x98, 0xd1, 0x6b, 0xd4, 0x32, 0xe3, 0x5b, 0x9c, 0x48, - 0xaf, 0xf7, 0xfc, 0x90, 0x4b, 0x2b, 0x88, 0x82, 0x7b, 0xf9, 0x2f, 0x2c, 0xf1, 0xa3, 0x6d, 0x98, - 0x10, 0x5e, 0x10, 0x71, 0x61, 0xfb, 0xc3, 0x43, 0x64, 0xda, 0x8f, 0xde, 0x3b, 0xe2, 0xd7, 0x21, - 0x23, 0xc4, 0xf9, 0x8f, 0xfe, 0xc2, 0x8f, 0xe0, 0xd1, 0xdf, 0x7f, 0x37, 0xc9, 0x1d, 0x69, 0x22, - 0xd8, 0x61, 0x07, 0xaa, 0x11, 0xa5, 0x61, 0x22, 0xde, 0xa3, 0x27, 0x56, 0xf8, 0x18, 0x47, 0xbf, - 0xb0, 0xc4, 0x8d, 0xea, 0x79, 0x97, 0x0b, 0xe2, 0x74, 0xaf, 0x27, 0xbb, 0x58, 0x90, 0x7c, 0x0d, - 0x73, 0xe4, 0x41, 0xbc, 0x86, 0x99, 0x1f, 0x0c, 0x32, 0x5a, 0x2a, 0x18, 0xe4, 0x59, 0xb8, 0x20, - 0x4e, 0x00, 0x9b, 0x16, 0x61, 0x87, 0x52, 0x22, 0x56, 0x94, 0x5d, 0x18, 0xac, 0x27, 0x41, 0x38, - 0x5d, 0x17, 0xfd, 0x8e, 0x06, 0x55, 0x53, 0x68, 0x52, 0x62, 0x81, 0xaf, 0x0d, 0xe7, 0x6d, 0x5d, - 0x8a, 0x14, 0x33, 0xae, 0xd7, 0xbf, 0x18, 0x09, 0xab, 0xa8, 0xf8, 0x8c, 0x4e, 0x0b, 0x65, 0xaf, - 0xd1, 0xbf, 0xa1, 0x56, 0x8b, 0xc3, 0x1e, 0x7e, 0x61, 0xd7, 0xa8, 0x78, 0x10, 0xeb, 0x9d, 0x21, - 0xbf, 0x62, 0x39, 0xc6, 0xc8, 0x3f, 0xe4, 0xe3, 0xd2, 0x40, 0x89, 0x21, 0x67, 0xf4, 0x2d, 0x6a, - 0xf7, 0xd1, 0xaf, 0x6a, 0xf0, 0x38, 0x8f, 0x1c, 0xae, 0x53, 0x4d, 0x85, 0x3d, 0xc3, 0x44, 0xe2, - 0x77, 0x9f, 0xe2, 0xd0, 0x95, 0xea, 0xa9, 0x43, 0x57, 0x9e, 0x38, 0x1a, 0xd4, 0x1e, 0xaf, 0x9f, - 0x00, 0x37, 0x3e, 0x51, 0x0f, 0x16, 0xf7, 0x60, 0x26, 0x31, 0xd9, 0xe7, 0x79, 0xbe, 0xba, 0xe8, - 0xc2, 0x5c, 0x7a, 0x4e, 0xce, 0xf5, 0x3c, 0xf7, 0x36, 0x4c, 0xca, 0x5d, 0x0b, 0x5d, 0x55, 0x08, - 0xc5, 0x5a, 0xc5, 0x6d, 0x72, 0xc8, 0xa9, 0xd6, 0x12, 0x46, 0x27, 0xf7, 0x3a, 0xbc, 0x48, 0x0b, - 0x04, 0x42, 0xfd, 0xbb, 0xc2, 0xa5, 0xb4, 0x49, 0xba, 0x3d, 0xc7, 0x08, 0xc9, 0x5b, 0xff, 0x90, - 0x46, 0xff, 0xef, 0x1a, 0x97, 0xf9, 0xe2, 0xa9, 0x37, 0x03, 0xa6, 0xba, 0x3c, 0xef, 0x1c, 0xbb, - 0xbd, 0xa7, 0x95, 0xbf, 0x37, 0xb8, 0x1e, 0xa3, 0xc1, 0x2a, 0x4e, 0x74, 0x37, 0xfb, 0x18, 0xe1, - 0x8d, 0xe1, 0xb4, 0x84, 0x13, 0xbf, 0x49, 0x88, 0xb2, 0x6d, 0xa8, 0x81, 0x1d, 0x45, 0x48, 0xa6, - 0xde, 0x7f, 0xcb, 0x44, 0x49, 0xde, 0xf7, 0x1d, 0x30, 0xfd, 0x5b, 0x23, 0x90, 0xfb, 0xa2, 0x05, - 0xd2, 0x61, 0x9c, 0x87, 0xec, 0xab, 0xaf, 0x34, 0xf2, 0x78, 0x7e, 0x2c, 0x20, 0xc8, 0x87, 0x4b, - 0x22, 0x20, 0xfe, 0x36, 0x39, 0x8c, 0xdf, 0x07, 0x14, 0x53, 0xff, 0x44, 0x9e, 0xfe, 0xc7, 0xae, - 0x9b, 0xa4, 0x8f, 0x79, 0xd9, 0x76, 0xdf, 0x4e, 0x61, 0xc2, 0xb9, 0xb8, 0xd1, 0x1d, 0x7e, 0xf5, - 0xc6, 0xb5, 0x58, 0xe2, 0x96, 0x58, 0x3a, 0xa8, 0xb7, 0x45, 0x56, 0xf3, 0x2a, 0xe0, 0xfc, 0x76, - 0x68, 0x1f, 0x50, 0xd7, 0x38, 0x48, 0x63, 0x1b, 0x22, 0x99, 0xfe, 0x7a, 0x06, 0x1b, 0xce, 0xa1, - 0x40, 0x37, 0x50, 0xc3, 0x34, 0x49, 0x2f, 0x24, 0x16, 0x1f, 0xd6, 0xc8, 0x13, 0xce, 0x36, 0xd0, - 0xe5, 0x24, 0x08, 0xa7, 0xeb, 0xea, 0xbf, 0x59, 0x81, 0x31, 0x66, 0x9b, 0xbf, 0x35, 0x82, 0xab, - 0x58, 0x57, 0x0b, 0x0f, 0x5e, 0x3b, 0xa9, 0x83, 0xd7, 0xe7, 0xca, 0x93, 0x38, 0xfe, 0xe4, 0xf5, - 0xe3, 0x70, 0x85, 0x55, 0x5b, 0xb6, 0x98, 0x39, 0x1e, 0x10, 0x6b, 0xd9, 0xb2, 0x98, 0x4e, 0x7b, - 0xff, 0xd8, 0x99, 0xab, 0x30, 0xd2, 0xf7, 0x9d, 0xf4, 0xe5, 0xcb, 0x2d, 0xbc, 0x86, 0x69, 0xb9, - 0xfe, 0x2f, 0x2b, 0x70, 0x81, 0xe1, 0xae, 0x2f, 0x63, 0xe1, 0x2c, 0xa4, 0xbb, 0x02, 0x8f, 0x98, - 0xe5, 0x58, 0x97, 0xd2, 0x11, 0xb3, 0x57, 0x79, 0x03, 0x9f, 0x30, 0xb5, 0xc8, 0x70, 0x82, 0xa8, - 0x65, 0x22, 0x84, 0xd6, 0x07, 0xe4, 0x18, 0x41, 0xc8, 0x1f, 0x0d, 0x8b, 0x76, 0xc2, 0x12, 0x11, - 0xb4, 0x8c, 0x3b, 0xd7, 0x32, 0x98, 0x70, 0x0e, 0xf6, 0x88, 0x66, 0xdd, 0xeb, 0xf6, 0x1c, 0x22, - 0x69, 0x56, 0xca, 0xd3, 0x4c, 0x62, 0xc2, 0x39, 0xd8, 0xf5, 0x2f, 0x69, 0x30, 0x97, 0x1e, 0x10, - 0xb4, 0x0f, 0x55, 0x5f, 0x0c, 0x8a, 0xe0, 0xee, 0xb5, 0xd2, 0xcc, 0x91, 0x33, 0xd0, 0xe2, 0x05, - 0x1b, 0xf1, 0x0b, 0x4b, 0x5a, 0xfa, 0x9f, 0x8e, 0xc3, 0x42, 0x51, 0x23, 0xf4, 0x15, 0x0d, 0xae, - 0x98, 0xb1, 0x8e, 0xb2, 0xdc, 0x0f, 0x77, 0x3d, 0xdf, 0x0e, 0x6d, 0x12, 0xbd, 0xe4, 0x5a, 0x2f, - 0xdf, 0x47, 0xc9, 0x3d, 0x3c, 0x8f, 0x47, 0x3d, 0x97, 0x0c, 0x2e, 0x20, 0x8f, 0x3e, 0x05, 0xb0, - 0x17, 0x27, 0xc4, 0xe2, 0xf3, 0x75, 0xbb, 0x74, 0x67, 0x94, 0xa4, 0x59, 0x51, 0xa7, 0x98, 0x2f, - 0x52, 0x29, 0x57, 0xc8, 0x51, 0xe2, 0x41, 0xb0, 0x7b, 0x9b, 0x1c, 0xf6, 0x0c, 0x3b, 0x0a, 0xff, - 0x2f, 0x4f, 0xbc, 0xdd, 0xbe, 0x25, 0x50, 0x25, 0x89, 0x2b, 0xe5, 0x0a, 0x39, 0xf4, 0x05, 0x0d, - 0x66, 0xb8, 0x9d, 0x12, 0x59, 0xa4, 0xa3, 0xe5, 0x1f, 0xc3, 0x67, 0x1d, 0xb8, 0xa3, 0x62, 0x93, - 0x7d, 0x60, 0x67, 0x61, 0x49, 0x50, 0x92, 0x2e, 0xe5, 0x8e, 0xf9, 0xe4, 0x7b, 0x50, 0xb7, 0xc9, - 0xa1, 0x70, 0x8a, 0xe0, 0xf2, 0xc3, 0x91, 0xc6, 0x28, 0x7b, 0xc4, 0x6c, 0xce, 0x2c, 0x38, 0xdb, - 0x07, 0xd6, 0x33, 0x12, 0x9a, 0x96, 0x78, 0x9f, 0xd6, 0xf6, 0x5c, 0xda, 0xb3, 0xf1, 0x21, 0x7b, - 0xb6, 0xba, 0x59, 0x6f, 0x24, 0x30, 0x26, 0x7b, 0x96, 0x05, 0x67, 0xfb, 0xa0, 0xff, 0x41, 0x05, - 0xae, 0x1d, 0x8f, 0xec, 0xaf, 0x84, 0xe9, 0xa9, 0x84, 0xe9, 0x67, 0x2a, 0xf0, 0x50, 0xc1, 0x1a, - 0x2e, 0x18, 0x03, 0xed, 0xff, 0xb9, 0x31, 0xf8, 0x8e, 0x06, 0x93, 0x6c, 0x0c, 0xde, 0x22, 0x31, - 0xdb, 0xac, 0xaf, 0x05, 0x11, 0x23, 0xbf, 0xa7, 0xc1, 0x7c, 0x26, 0x43, 0xd7, 0x89, 0x22, 0x7e, - 0x1f, 0x58, 0x20, 0xc4, 0x3b, 0xd3, 0x6f, 0x0a, 0x4f, 0xe5, 0xbe, 0x27, 0xfc, 0x12, 0xcc, 0x24, - 0x02, 0x46, 0x64, 0xe2, 0x03, 0x2d, 0x37, 0xf1, 0x81, 0x9a, 0xd7, 0xa0, 0x72, 0x6c, 0x5e, 0x83, - 0xcf, 0x55, 0x60, 0xb1, 0x58, 0x70, 0xff, 0xa5, 0xe1, 0x7a, 0xb9, 0xf2, 0xb3, 0x1b, 0xe8, 0x5f, - 0x9a, 0x31, 0x90, 0xdb, 0x49, 0xe1, 0xae, 0xf9, 0x57, 0xdb, 0xc9, 0xa9, 0x06, 0xf4, 0x57, 0x2f, - 0x08, 0x51, 0xca, 0x4e, 0xe3, 0x5e, 0x85, 0x71, 0x96, 0xd9, 0x23, 0x52, 0x77, 0x9f, 0x29, 0x9d, - 0x31, 0x24, 0xe0, 0x8e, 0x05, 0xfe, 0x3f, 0x16, 0x58, 0x51, 0x03, 0xe6, 0x4c, 0xc7, 0xeb, 0x5b, - 0xe2, 0xbd, 0xaf, 0x8d, 0xd8, 0x87, 0x21, 0x33, 0xa1, 0xd5, 0x53, 0x70, 0x9c, 0x69, 0x81, 0x30, - 0x3f, 0xcf, 0xe3, 0x93, 0xf1, 0xc1, 0x92, 0x41, 0x89, 0x3c, 0x8f, 0xb5, 0x3c, 0xc7, 0x7b, 0x1d, - 0x80, 0x44, 0x42, 0x31, 0xba, 0x3d, 0xf5, 0x6c, 0xb9, 0x1c, 0x6f, 0x52, 0xb4, 0x46, 0xb6, 0xb7, - 0x2c, 0x0a, 0xb0, 0x42, 0x04, 0xf9, 0x30, 0xb5, 0x1b, 0x3f, 0x67, 0x2e, 0xf4, 0xc8, 0xe7, 0x86, - 0x7c, 0x4a, 0x9d, 0xbb, 0xbc, 0x94, 0x02, 0xac, 0x12, 0x41, 0x3e, 0x37, 0x23, 0xf8, 0x89, 0xc5, - 0x30, 0x8f, 0xcb, 0xc6, 0x47, 0x21, 0xf1, 0x77, 0xc6, 0x65, 0x58, 0xa1, 0x42, 0x69, 0xba, 0x32, - 0x35, 0xcf, 0x30, 0xa7, 0x71, 0x71, 0x82, 0x9f, 0x98, 0x66, 0x5c, 0x86, 0x15, 0x2a, 0x74, 0x6c, - 0xbb, 0x71, 0x3a, 0x26, 0xe1, 0xda, 0x7e, 0x6e, 0xc8, 0xb4, 0x58, 0xc2, 0x9d, 0x18, 0x17, 0x60, - 0x95, 0x08, 0x72, 0x01, 0xba, 0x32, 0x4b, 0x93, 0x38, 0xa4, 0x2b, 0xf5, 0x9d, 0x71, 0xae, 0x27, - 0x6e, 0x18, 0xc5, 0xbf, 0xb1, 0x42, 0x01, 0xbd, 0xa6, 0x1c, 0x05, 0x43, 0x79, 0xa7, 0xec, 0x89, - 0x8e, 0x81, 0x3f, 0x10, 0xfb, 0x26, 0xa7, 0xd8, 0x7a, 0x7d, 0x44, 0xf1, 0x4b, 0xde, 0x1b, 0xd4, - 0xa6, 0x99, 0x0c, 0xc9, 0xf8, 0x29, 0xe3, 0x10, 0xca, 0xe9, 0x63, 0x43, 0x28, 0x6f, 0x52, 0xc3, - 0x4a, 0xb9, 0xa6, 0xc0, 0x04, 0xc3, 0x0c, 0x6b, 0x22, 0xb3, 0x7a, 0xb5, 0xd3, 0x15, 0x70, 0xb6, - 0x0d, 0x57, 0x2a, 0x88, 0xc5, 0xda, 0xcf, 0xaa, 0x4a, 0x05, 0x2f, 0xc3, 0x12, 0x8a, 0xf6, 0x61, - 0x3a, 0x50, 0x62, 0x32, 0xc5, 0x63, 0x52, 0x43, 0x9c, 0xdf, 0x8a, 0x78, 0x4c, 0x96, 0x52, 0x45, - 0x2d, 0xc1, 0x09, 0x3a, 0xe8, 0x53, 0x30, 0x19, 0xf9, 0xa9, 0x83, 0x85, 0xb9, 0xf2, 0x77, 0xe9, - 0xf2, 0x33, 0x73, 0xc5, 0x8e, 0xe7, 0x08, 0x14, 0xe0, 0x98, 0x1e, 0xea, 0x27, 0xaf, 0xb0, 0xcf, - 0x9f, 0xc9, 0xb5, 0x5d, 0x19, 0x69, 0x57, 0x74, 0x7d, 0x1d, 0xd5, 0x61, 0x9e, 0x1c, 0xf4, 0xbc, - 0xa0, 0xef, 0x13, 0x96, 0x14, 0x90, 0x4d, 0x0f, 0x8a, 0xcf, 0x55, 0x57, 0xd3, 0x40, 0x9c, 0xad, - 0xcf, 0x0e, 0xa7, 0xf9, 0x5b, 0x5c, 0x74, 0x0b, 0xf3, 0x5c, 0xe2, 0x86, 0x01, 0x7b, 0x6c, 0xaa, - 0xe4, 0xe1, 0x74, 0x3b, 0x85, 0x4b, 0x78, 0xab, 0x53, 0xa5, 0x38, 0x43, 0x93, 0x72, 0x8e, 0x7a, - 0xf1, 0x97, 0xbd, 0x59, 0x55, 0x92, 0x73, 0xd4, 0x4b, 0xc5, 0x9c, 0x73, 0xd4, 0x12, 0x9c, 0xa0, - 0xa3, 0xff, 0xab, 0x69, 0x98, 0x52, 0x7c, 0xa1, 0xa9, 0x83, 0x66, 0xed, 0x41, 0x1c, 0x34, 0x87, - 0x30, 0x65, 0x7a, 0x6e, 0x10, 0xfa, 0x3c, 0x80, 0xa3, 0x72, 0x16, 0x34, 0x25, 0xfb, 0xd4, 0x63, - 0xcc, 0x58, 0x25, 0x43, 0x05, 0x9d, 0x3c, 0xfe, 0x1f, 0x39, 0x83, 0xe3, 0x7f, 0x29, 0xe8, 0x72, - 0x42, 0x00, 0xde, 0x0f, 0x10, 0xed, 0x97, 0x84, 0xbf, 0x90, 0x51, 0x8d, 0xd3, 0xb6, 0x37, 0x83, - 0x5b, 0x12, 0x86, 0x95, 0x7a, 0xe8, 0x0d, 0x98, 0x71, 0xd4, 0x7c, 0xcf, 0x62, 0x33, 0x2f, 0x15, - 0x74, 0x9f, 0x48, 0x1c, 0xcd, 0xbd, 0x52, 0x89, 0x22, 0x9c, 0x24, 0x45, 0xd9, 0xc0, 0x89, 0x72, - 0x94, 0x0f, 0x15, 0x53, 0x23, 0x33, 0x9d, 0xc7, 0x6c, 0x20, 0x8b, 0x02, 0xac, 0x10, 0x29, 0x88, - 0x37, 0x98, 0x28, 0x15, 0x6f, 0xd0, 0x87, 0x8b, 0x3e, 0x09, 0xfd, 0xc3, 0xfa, 0xa1, 0xc9, 0x52, - 0xf7, 0xfb, 0x21, 0xd3, 0x7a, 0xab, 0xe5, 0xf2, 0x48, 0xe0, 0x2c, 0x2a, 0x9c, 0x87, 0x3f, 0xb1, - 0x51, 0x4c, 0x1e, 0xbb, 0x51, 0x7c, 0x00, 0xa6, 0x42, 0x62, 0xee, 0xba, 0xb6, 0x69, 0x38, 0xcd, - 0x86, 0x48, 0xe9, 0x14, 0xcb, 0xbc, 0x18, 0x84, 0xd5, 0x7a, 0x68, 0x05, 0x46, 0xfa, 0xb6, 0x25, - 0x76, 0xcb, 0x1f, 0x97, 0xa7, 0x0a, 0xcd, 0xc6, 0xbd, 0x41, 0xed, 0xed, 0xf1, 0x01, 0xbe, 0xfc, - 0xaa, 0xeb, 0xbd, 0xbd, 0xce, 0xf5, 0xf0, 0xb0, 0x47, 0x82, 0xa5, 0xad, 0x66, 0x03, 0xd3, 0xc6, - 0x79, 0xb1, 0x18, 0xd3, 0xa7, 0x88, 0xc5, 0xf8, 0xaa, 0x06, 0x17, 0x8d, 0xf4, 0x81, 0x08, 0x09, - 0x16, 0x66, 0xca, 0xef, 0x3a, 0xf9, 0x87, 0x2c, 0x71, 0xbe, 0xcc, 0xe5, 0x2c, 0x39, 0x9c, 0xd7, - 0x07, 0x6a, 0xeb, 0x74, 0xed, 0x8e, 0x4c, 0xab, 0x2e, 0x66, 0x7d, 0xb6, 0x9c, 0xad, 0xb3, 0x9e, - 0xc1, 0x84, 0x73, 0xb0, 0xa3, 0xbb, 0x30, 0x65, 0xc6, 0x66, 0x9f, 0xd8, 0xf1, 0x1b, 0x67, 0x71, - 0xea, 0x20, 0xde, 0xfe, 0x55, 0x6c, 0x4a, 0x95, 0x12, 0xfa, 0x92, 0x06, 0x8b, 0x74, 0xf9, 0x28, - 0x6a, 0xf9, 0xa6, 0x6f, 0x77, 0x3a, 0xc4, 0x67, 0x5f, 0x3d, 0x77, 0xea, 0xaf, 0x66, 0xaf, 0x3f, - 0xae, 0x15, 0x62, 0xc4, 0xc7, 0x50, 0xd3, 0xff, 0x50, 0x13, 0x7e, 0x9a, 0x07, 0x18, 0x3b, 0x70, - 0xde, 0x07, 0x8d, 0xfa, 0x9f, 0x69, 0x90, 0xd9, 0xba, 0xd1, 0x36, 0x4c, 0x50, 0x14, 0x8d, 0x8d, - 0xb6, 0xf8, 0xac, 0x0f, 0x97, 0xdb, 0xa9, 0x18, 0x0a, 0xee, 0xf4, 0x12, 0x3f, 0x70, 0x84, 0x98, - 0x2a, 0x03, 0xae, 0x92, 0x6d, 0x51, 0x7c, 0x61, 0x29, 0x65, 0x40, 0xcd, 0xda, 0xc8, 0x95, 0x01, - 0xb5, 0x04, 0x27, 0xe8, 0xe8, 0x6b, 0x00, 0xb1, 0xba, 0x35, 0x74, 0x38, 0xc9, 0x0f, 0xc7, 0xe0, - 0xf2, 0xb0, 0x51, 0xff, 0x2c, 0xdf, 0x3d, 0x7b, 0x59, 0x77, 0x79, 0x27, 0x24, 0xfe, 0x9d, 0x3b, - 0xeb, 0xf2, 0xe1, 0xd1, 0x92, 0x09, 0xf7, 0xe3, 0x87, 0x99, 0x33, 0x18, 0x71, 0x01, 0x25, 0xa6, - 0x6a, 0x8a, 0x77, 0xe5, 0xb0, 0x11, 0x12, 0xfe, 0xaa, 0x28, 0xbf, 0x8c, 0xcf, 0x55, 0xcd, 0x34, - 0x10, 0x67, 0xeb, 0xa7, 0x91, 0xf0, 0x57, 0x7e, 0xa9, 0x2e, 0xa0, 0x65, 0x91, 0xf0, 0xa7, 0x7e, - 0xb3, 0xf5, 0x55, 0x24, 0x7c, 0xa6, 0xa8, 0x21, 0x3a, 0x96, 0x45, 0x22, 0x81, 0x38, 0x5b, 0x1f, - 0x59, 0xf0, 0xa8, 0x4f, 0x4c, 0xaf, 0xdb, 0x25, 0xae, 0xc5, 0x9f, 0x48, 0x31, 0xfc, 0x8e, 0xed, - 0xde, 0xf0, 0x0d, 0x56, 0x91, 0x59, 0xf0, 0x1a, 0x7b, 0x58, 0xfd, 0x51, 0x7c, 0x4c, 0x3d, 0x7c, - 0x2c, 0x16, 0xd4, 0x85, 0x0b, 0x7d, 0x96, 0x5e, 0xd9, 0x6f, 0xba, 0x21, 0xf1, 0xf7, 0x0d, 0xa7, - 0xe4, 0xdb, 0xd5, 0x6c, 0x5f, 0xda, 0x4a, 0xa2, 0xc2, 0x69, 0xdc, 0xe8, 0x90, 0x6e, 0xf9, 0xa2, - 0x3b, 0x0a, 0xc9, 0x6a, 0xf9, 0x17, 0x21, 0x70, 0x16, 0x1d, 0xce, 0xa3, 0xa1, 0x7f, 0x55, 0x03, - 0x11, 0xc4, 0x8b, 0x1e, 0x4d, 0xb8, 0xd8, 0xab, 0x29, 0xf7, 0xfa, 0xa3, 0xe2, 0x26, 0x62, 0x25, - 0x86, 0x2a, 0xb7, 0x10, 0xdf, 0xa5, 0x64, 0x79, 0x98, 0x8c, 0x65, 0x1f, 0xc7, 0xac, 0x24, 0x28, - 0x7f, 0x0f, 0x4c, 0x12, 0x7e, 0xe6, 0x25, 0x95, 0x49, 0x16, 0x18, 0xbd, 0x1a, 0x15, 0xe2, 0x18, - 0xae, 0xff, 0x81, 0x06, 0x02, 0x03, 0x4b, 0xa7, 0x7f, 0xa2, 0xb4, 0xea, 0xf7, 0x0d, 0x04, 0x52, - 0xd2, 0xc1, 0x8f, 0x14, 0xa6, 0x83, 0x3f, 0xa7, 0x2c, 0xe9, 0xbf, 0xa5, 0xc1, 0x85, 0x64, 0xda, - 0x8d, 0x00, 0xbd, 0x13, 0x26, 0x44, 0x0a, 0x29, 0x91, 0x88, 0x86, 0xdf, 0x3c, 0x16, 0x4f, 0xf5, - 0x46, 0xb0, 0xa4, 0x95, 0x3c, 0x44, 0xc6, 0x99, 0xfc, 0xec, 0x1f, 0xc7, 0x5b, 0xc9, 0xfa, 0x1f, - 0xcd, 0xc2, 0x38, 0x4f, 0x7a, 0x44, 0x65, 0x5a, 0xce, 0x0d, 0xb6, 0xdb, 0xe5, 0xd3, 0x2a, 0x95, - 0xb8, 0xa8, 0x96, 0x48, 0x74, 0x5b, 0x39, 0x36, 0xd1, 0x2d, 0xe6, 0x6f, 0x44, 0x0c, 0xe1, 0x19, - 0xad, 0xe3, 0xa6, 0x78, 0xf2, 0x30, 0x7a, 0x1f, 0x22, 0x4c, 0xb8, 0x0c, 0x47, 0xcb, 0x2b, 0x4d, - 0x7c, 0x00, 0x14, 0xc7, 0xe1, 0xec, 0x31, 0x4e, 0xc3, 0x38, 0xcb, 0xcc, 0x58, 0xf9, 0xc0, 0x3c, - 0x31, 0xe4, 0x27, 0xc8, 0x32, 0x23, 0x17, 0xd2, 0x78, 0xe1, 0x42, 0xda, 0x81, 0x09, 0xb1, 0x14, - 0x84, 0x70, 0xfc, 0xf0, 0x10, 0xcf, 0x38, 0x28, 0x39, 0x09, 0x79, 0x01, 0x8e, 0x90, 0xd3, 0x1d, - 0xb7, 0x6b, 0x1c, 0xd8, 0xdd, 0x7e, 0x97, 0x49, 0xc4, 0x31, 0xb5, 0x2a, 0x2b, 0xc6, 0x11, 0x9c, - 0x55, 0xe5, 0xf1, 0x8c, 0xcc, 0x86, 0x51, 0xab, 0x8a, 0x27, 0x7b, 0x23, 0x38, 0x7a, 0x05, 0xaa, - 0x5d, 0xe3, 0xa0, 0xdd, 0xf7, 0x3b, 0x44, 0x38, 0x0b, 0x8b, 0x75, 0xbc, 0x7e, 0x68, 0x3b, 0x4b, - 0xd4, 0xf2, 0x0e, 0xfd, 0xa5, 0xa6, 0x1b, 0xde, 0xf1, 0xdb, 0xa1, 0x2f, 0x13, 0xc5, 0xaf, 0x0b, - 0x2c, 0x58, 0xe2, 0x43, 0x0e, 0xcc, 0x76, 0x8d, 0x83, 0x2d, 0xd7, 0x90, 0x2f, 0x8b, 0x4e, 0x95, - 0xa4, 0xc0, 0x4e, 0x23, 0xd7, 0x13, 0xb8, 0x70, 0x0a, 0x77, 0xce, 0xc1, 0xe7, 0xf4, 0x79, 0x1d, - 0x7c, 0x2e, 0xcb, 0xab, 0x2a, 0xdc, 0x64, 0x7a, 0x38, 0x2f, 0xf2, 0xf1, 0xf8, 0x6b, 0x28, 0xaf, - 0xca, 0x6b, 0x28, 0xb3, 0xe5, 0x4f, 0x54, 0x8e, 0xb9, 0x82, 0xd2, 0x87, 0x29, 0xaa, 0x61, 0xf3, - 0x52, 0x6a, 0xd3, 0x94, 0xf6, 0xe8, 0x35, 0x24, 0x1a, 0xe5, 0x45, 0xaf, 0x18, 0x35, 0x56, 0xe9, - 0xa0, 0x3b, 0xfc, 0xe5, 0x49, 0x87, 0x84, 0x71, 0x15, 0x66, 0x4b, 0xcf, 0x71, 0xa7, 0x6d, 0xf4, - 0x50, 0x64, 0xa6, 0x02, 0xce, 0x6f, 0x17, 0x5f, 0xa2, 0x9f, 0xcf, 0xbf, 0x44, 0x8f, 0xfe, 0x56, - 0x9e, 0xfb, 0x0f, 0x95, 0xbf, 0x56, 0xc7, 0x65, 0x43, 0x69, 0x27, 0xe0, 0xb7, 0x34, 0x58, 0xe8, - 0x16, 0x3c, 0x7d, 0x25, 0xbc, 0x92, 0x9b, 0x43, 0xc8, 0x87, 0xc2, 0xe7, 0xb4, 0x56, 0x1e, 0x3f, - 0x1a, 0xd4, 0xee, 0xfb, 0xe8, 0x16, 0x2e, 0xec, 0xdb, 0xb0, 0xb7, 0x9e, 0x87, 0x49, 0xc7, 0xf5, - 0xcb, 0x1a, 0xcc, 0xa5, 0x37, 0x01, 0xf5, 0xb1, 0x4c, 0xed, 0x7c, 0x1f, 0xcb, 0x54, 0xc2, 0x18, - 0x2a, 0xc7, 0x84, 0x31, 0x3c, 0x0b, 0x57, 0xf2, 0x79, 0x83, 0x6a, 0x64, 0xec, 0x71, 0x5a, 0x61, - 0x09, 0xc5, 0x6f, 0x22, 0xd0, 0x42, 0xcc, 0x61, 0x2b, 0x2f, 0x7f, 0xfb, 0x07, 0xd7, 0xde, 0xf6, - 0xdd, 0x1f, 0x5c, 0x7b, 0xdb, 0xf7, 0x7e, 0x70, 0xed, 0x6d, 0x3f, 0x7d, 0x74, 0x4d, 0xfb, 0xf6, - 0xd1, 0x35, 0xed, 0xbb, 0x47, 0xd7, 0xb4, 0xef, 0x1d, 0x5d, 0xd3, 0xfe, 0xd3, 0xd1, 0x35, 0xed, - 0xcb, 0xff, 0xf9, 0xda, 0xdb, 0x5e, 0x79, 0x2a, 0xfe, 0xc6, 0xeb, 0xd1, 0xa7, 0xc5, 0xff, 0xf4, - 0xf6, 0x3a, 0xd7, 0xe9, 0x37, 0x46, 0xb7, 0x3b, 0xd8, 0x37, 0xfe, 0xdf, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xbf, 0xc7, 0x64, 0x62, 0x70, 0xcb, 0x00, 0x00, + // 10854 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x6c, 0x24, 0xc9, + 0x75, 0x98, 0x7a, 0xf8, 0x35, 0x7c, 0xfc, 0x58, 0xb2, 0xf6, 0xe3, 0x78, 0xbc, 0xbb, 0x9d, 0x53, + 0xeb, 0x24, 0xdc, 0x45, 0x32, 0xd7, 0x77, 0x92, 0x2c, 0xdd, 0x49, 0xa7, 0x3b, 0x72, 0x86, 0xbb, + 0x3b, 0x5a, 0x92, 0xcb, 0xab, 0xe1, 0xee, 0x9d, 0x4e, 0xce, 0x45, 0xcd, 0xee, 0xe2, 0xb0, 0x8f, + 0x3d, 0xdd, 0x73, 0xdd, 0x3d, 0x5c, 0xf2, 0x64, 0x43, 0x96, 0xa2, 0x8f, 0x48, 0x4e, 0x0c, 0x41, + 0x80, 0x73, 0x90, 0xe4, 0xc4, 0x32, 0x0c, 0xc7, 0x0e, 0x1c, 0xc8, 0x4e, 0x0c, 0x09, 0x70, 0x8c, + 0x00, 0x86, 0x81, 0xc0, 0x3a, 0x23, 0x09, 0x14, 0x07, 0x46, 0x14, 0x20, 0xa6, 0x22, 0x26, 0x91, + 0x03, 0x24, 0x30, 0x02, 0x18, 0x41, 0x80, 0x85, 0x81, 0x04, 0xf5, 0xd1, 0xd5, 0xd5, 0x5f, 0xb3, + 0xc3, 0x1e, 0x72, 0x7d, 0x17, 0xe7, 0x17, 0x39, 0xf5, 0xaa, 0xde, 0xab, 0xae, 0x8f, 0x57, 0xef, + 0xbd, 0x7a, 0xf5, 0x1e, 0xac, 0xb4, 0xed, 0x70, 0xb7, 0xb7, 0xbd, 0x64, 0x7a, 0x9d, 0x2b, 0x6d, + 0xc3, 0xb7, 0x88, 0x4b, 0xfc, 0xf8, 0x9f, 0xee, 0x5e, 0xfb, 0x8a, 0xd1, 0xb5, 0x83, 0x2b, 0xa6, + 0xe7, 0x93, 0x2b, 0xfb, 0x4f, 0x6e, 0x93, 0xd0, 0x78, 0xf2, 0x4a, 0x9b, 0xc2, 0x8c, 0x90, 0x58, + 0x4b, 0x5d, 0xdf, 0x0b, 0x3d, 0xf4, 0x54, 0x8c, 0x63, 0x29, 0x6a, 0x1a, 0xff, 0xd3, 0xdd, 0x6b, + 0x2f, 0x51, 0x1c, 0x4b, 0x14, 0xc7, 0x92, 0xc0, 0xb1, 0xf8, 0x13, 0x2a, 0x5d, 0xaf, 0xed, 0x5d, + 0x61, 0xa8, 0xb6, 0x7b, 0x3b, 0xec, 0x17, 0xfb, 0xc1, 0xfe, 0xe3, 0x24, 0x16, 0x9f, 0xd8, 0xfb, + 0x70, 0xb0, 0x64, 0x7b, 0xb4, 0x33, 0x57, 0x8c, 0x5e, 0xe8, 0x05, 0xa6, 0xe1, 0xd8, 0x6e, 0xfb, + 0xca, 0x7e, 0xa6, 0x37, 0x8b, 0xba, 0x52, 0x55, 0x74, 0xbb, 0x6f, 0x1d, 0x7f, 0xdb, 0x30, 0xf3, + 0xea, 0x7c, 0x20, 0xae, 0xd3, 0x31, 0xcc, 0x5d, 0xdb, 0x25, 0xfe, 0x61, 0x34, 0x20, 0x57, 0x7c, + 0x12, 0x78, 0x3d, 0xdf, 0x24, 0x27, 0x6a, 0x15, 0x5c, 0xe9, 0x90, 0xd0, 0xc8, 0xa3, 0x75, 0xa5, + 0xa8, 0x95, 0xdf, 0x73, 0x43, 0xbb, 0x93, 0x25, 0xf3, 0x53, 0xf7, 0x6a, 0x10, 0x98, 0xbb, 0xa4, + 0x63, 0x64, 0xda, 0xbd, 0xbf, 0xa8, 0x5d, 0x2f, 0xb4, 0x9d, 0x2b, 0xb6, 0x1b, 0x06, 0xa1, 0x9f, + 0x6e, 0xa4, 0x3f, 0x05, 0x63, 0xcb, 0x96, 0xe5, 0xb9, 0xe8, 0x09, 0x98, 0x20, 0xae, 0xb1, 0xed, + 0x10, 0x6b, 0x41, 0x7b, 0x54, 0x7b, 0xbc, 0xba, 0x72, 0xee, 0x7b, 0x47, 0xb5, 0x77, 0x1c, 0x1f, + 0xd5, 0x26, 0x56, 0x79, 0x31, 0x8e, 0xe0, 0xfa, 0x2f, 0x56, 0x60, 0x9c, 0x35, 0x0a, 0xd0, 0xd7, + 0x34, 0x38, 0xbf, 0xd7, 0xdb, 0x26, 0xbe, 0x4b, 0x42, 0x12, 0x34, 0x8c, 0x60, 0x77, 0xdb, 0x33, + 0x7c, 0x8e, 0x62, 0xea, 0xa9, 0x6b, 0x4b, 0x27, 0x5f, 0x3d, 0x4b, 0x37, 0xb2, 0xe8, 0x56, 0x1e, + 0x38, 0x3e, 0xaa, 0x9d, 0xcf, 0x01, 0xe0, 0x3c, 0xe2, 0x68, 0x1f, 0xa6, 0xdd, 0xb6, 0xed, 0x1e, + 0x34, 0xdd, 0xb6, 0x4f, 0x82, 0x60, 0xa1, 0xc2, 0x3a, 0xf3, 0x7c, 0x99, 0xce, 0x6c, 0x28, 0x78, + 0x56, 0xe6, 0x8e, 0x8f, 0x6a, 0xd3, 0x6a, 0x09, 0x4e, 0xd0, 0xd1, 0x7f, 0x5b, 0x83, 0x73, 0xcb, + 0x56, 0xc7, 0x0e, 0x02, 0xdb, 0x73, 0x37, 0x9d, 0x5e, 0xdb, 0x76, 0xd1, 0xa3, 0x30, 0xea, 0x1a, + 0x1d, 0xc2, 0x06, 0x64, 0x72, 0x65, 0x5a, 0x8c, 0xe9, 0xe8, 0x86, 0xd1, 0x21, 0x98, 0x41, 0xd0, + 0x0b, 0x30, 0x6e, 0x7a, 0xee, 0x8e, 0xdd, 0x16, 0xfd, 0xfc, 0x89, 0x25, 0x3e, 0x8f, 0x4b, 0xea, + 0x3c, 0xb2, 0xee, 0x89, 0xf9, 0x5f, 0xc2, 0xc6, 0x9d, 0xd5, 0x83, 0x90, 0xb8, 0x94, 0xcc, 0x0a, + 0x1c, 0x1f, 0xd5, 0xc6, 0xeb, 0x0c, 0x01, 0x16, 0x88, 0xd0, 0xe3, 0x50, 0xb5, 0xec, 0x80, 0x4f, + 0xe6, 0x08, 0x9b, 0xcc, 0xe9, 0xe3, 0xa3, 0x5a, 0xb5, 0x21, 0xca, 0xb0, 0x84, 0xea, 0x57, 0xa1, + 0xba, 0xec, 0x10, 0x3f, 0xb4, 0xdd, 0x36, 0x7a, 0x06, 0x66, 0x49, 0xc7, 0xb0, 0x1d, 0x4c, 0x4c, + 0x62, 0xef, 0x13, 0x3f, 0x58, 0xd0, 0x1e, 0x1d, 0x79, 0x7c, 0x72, 0x05, 0x1d, 0x1f, 0xd5, 0x66, + 0x57, 0x13, 0x10, 0x9c, 0xaa, 0xa9, 0x7f, 0x56, 0x83, 0xa9, 0xe5, 0x9e, 0x65, 0x87, 0xbc, 0x27, + 0xc8, 0x87, 0x29, 0x83, 0xfe, 0xdc, 0xf4, 0x1c, 0xdb, 0x3c, 0x14, 0xcb, 0xe1, 0xb9, 0x32, 0x33, + 0xb0, 0x1c, 0xa3, 0x59, 0x39, 0x77, 0x7c, 0x54, 0x9b, 0x52, 0x0a, 0xb0, 0x4a, 0x44, 0xdf, 0x05, + 0x15, 0x86, 0x3e, 0x01, 0xd3, 0x7c, 0x38, 0xd6, 0x8d, 0x2e, 0x26, 0x3b, 0xa2, 0x0f, 0xef, 0x52, + 0x46, 0x37, 0x22, 0xb4, 0x74, 0x73, 0xfb, 0x55, 0x62, 0x86, 0x98, 0xec, 0x10, 0x9f, 0xb8, 0x26, + 0xe1, 0x13, 0x5d, 0x57, 0x1a, 0xe3, 0x04, 0x2a, 0xfd, 0x87, 0x1a, 0xcc, 0x2d, 0xef, 0x1b, 0xb6, + 0x63, 0x6c, 0xdb, 0x8e, 0x1d, 0x1e, 0xbe, 0xec, 0xb9, 0x64, 0x80, 0x99, 0xbe, 0x05, 0x0f, 0xf4, + 0x5c, 0x83, 0xb7, 0x73, 0xc8, 0x3a, 0x9f, 0xdb, 0xad, 0xc3, 0x2e, 0xa1, 0x4b, 0x94, 0x8e, 0xf4, + 0x43, 0xc7, 0x47, 0xb5, 0x07, 0x6e, 0xe5, 0x57, 0xc1, 0x45, 0x6d, 0x11, 0x86, 0x4b, 0x0a, 0xe8, + 0xb6, 0xe7, 0xf4, 0x3a, 0x02, 0xeb, 0x08, 0xc3, 0xba, 0x78, 0x7c, 0x54, 0xbb, 0x74, 0x2b, 0xb7, + 0x06, 0x2e, 0x68, 0xa9, 0x7f, 0xaf, 0x02, 0xd3, 0x2b, 0x86, 0xb9, 0xd7, 0xeb, 0xae, 0xf4, 0xcc, + 0x3d, 0x12, 0xa2, 0x4f, 0x41, 0x95, 0x32, 0x38, 0xcb, 0x08, 0x0d, 0x31, 0x92, 0x3f, 0x59, 0xb8, + 0x4e, 0xd9, 0x24, 0xd2, 0xda, 0xf1, 0xd8, 0xae, 0x93, 0xd0, 0x58, 0x41, 0x62, 0x4c, 0x20, 0x2e, + 0xc3, 0x12, 0x2b, 0xda, 0x81, 0xd1, 0xa0, 0x4b, 0x4c, 0xb1, 0x0b, 0x1a, 0x65, 0xd6, 0x8a, 0xda, + 0xe3, 0x56, 0x97, 0x98, 0xf1, 0x2c, 0xd0, 0x5f, 0x98, 0xe1, 0x47, 0x2e, 0x8c, 0x07, 0xa1, 0x11, + 0xf6, 0x02, 0xb6, 0x35, 0xa6, 0x9e, 0xba, 0x3a, 0x34, 0x25, 0x86, 0x6d, 0x65, 0x56, 0xd0, 0x1a, + 0xe7, 0xbf, 0xb1, 0xa0, 0xa2, 0xff, 0x7b, 0x0d, 0xe6, 0xd4, 0xea, 0x6b, 0x76, 0x10, 0xa2, 0x9f, + 0xce, 0x0c, 0xe7, 0xd2, 0x60, 0xc3, 0x49, 0x5b, 0xb3, 0xc1, 0x9c, 0x13, 0xe4, 0xaa, 0x51, 0x89, + 0x32, 0x94, 0x04, 0xc6, 0xec, 0x90, 0x74, 0xf8, 0xb2, 0x2a, 0xc9, 0xf9, 0xd4, 0x2e, 0xaf, 0xcc, + 0x08, 0x62, 0x63, 0x4d, 0x8a, 0x16, 0x73, 0xec, 0xfa, 0xa7, 0xe0, 0x82, 0x5a, 0x6b, 0xd3, 0xf7, + 0xf6, 0x6d, 0x8b, 0xf8, 0x74, 0x27, 0x84, 0x87, 0xdd, 0xcc, 0x4e, 0xa0, 0x2b, 0x0b, 0x33, 0x08, + 0x7a, 0x0f, 0x8c, 0xfb, 0xa4, 0x6d, 0x7b, 0x2e, 0x9b, 0xed, 0xc9, 0x78, 0xec, 0x30, 0x2b, 0xc5, + 0x02, 0xaa, 0xff, 0xaf, 0x4a, 0x72, 0xec, 0xe8, 0x34, 0xa2, 0x7d, 0xa8, 0x76, 0x05, 0x29, 0x31, + 0x76, 0xd7, 0x87, 0xfd, 0xc0, 0xa8, 0xeb, 0xf1, 0xa8, 0x46, 0x25, 0x58, 0xd2, 0x42, 0x36, 0xcc, + 0x46, 0xff, 0xd7, 0x87, 0x60, 0xd8, 0x8c, 0x9d, 0x6e, 0x26, 0x10, 0xe1, 0x14, 0x62, 0xb4, 0x05, + 0x93, 0x01, 0x31, 0x7d, 0x42, 0x79, 0x92, 0x58, 0xa6, 0xb9, 0x8c, 0xab, 0x15, 0x55, 0x12, 0x8c, + 0x6b, 0x5e, 0x74, 0x7f, 0x52, 0x02, 0x70, 0x8c, 0x88, 0x1e, 0x0b, 0x01, 0x21, 0x16, 0xe5, 0x48, + 0x0b, 0xa3, 0x7c, 0x6e, 0xe8, 0xa7, 0xb6, 0x44, 0x19, 0x96, 0x50, 0xfd, 0x5b, 0xa3, 0x80, 0xb2, + 0x4b, 0x5c, 0x1d, 0x01, 0x5e, 0x22, 0xc6, 0x7f, 0x98, 0x11, 0x10, 0xbb, 0x25, 0x85, 0x18, 0xbd, + 0x0e, 0x33, 0x8e, 0x11, 0x84, 0x37, 0xbb, 0x54, 0x5a, 0x89, 0x16, 0xca, 0xd4, 0x53, 0xcb, 0x65, + 0x66, 0x7a, 0x4d, 0x45, 0xb4, 0x32, 0x7f, 0x7c, 0x54, 0x9b, 0x49, 0x14, 0xe1, 0x24, 0x29, 0xf4, + 0x2a, 0x4c, 0xd2, 0x82, 0x55, 0xdf, 0xf7, 0x7c, 0x31, 0xfa, 0xcf, 0x96, 0xa5, 0xcb, 0x90, 0xac, + 0xcc, 0xd0, 0x39, 0x91, 0x3f, 0x71, 0x8c, 0x1e, 0x7d, 0x1c, 0x90, 0xb7, 0x1d, 0x10, 0x7f, 0x9f, + 0x58, 0xd7, 0xb8, 0x68, 0x46, 0x3f, 0x96, 0xce, 0xce, 0xc8, 0xca, 0xa2, 0x98, 0x4d, 0x74, 0x33, + 0x53, 0x03, 0xe7, 0xb4, 0x42, 0x7b, 0x80, 0xa4, 0x78, 0x27, 0x17, 0xc0, 0xc2, 0xd8, 0xe0, 0xcb, + 0xe7, 0x12, 0x25, 0x76, 0x2d, 0x83, 0x02, 0xe7, 0xa0, 0xd5, 0xff, 0x65, 0x05, 0xa6, 0xf8, 0x12, + 0x59, 0x75, 0x43, 0xff, 0xf0, 0x3e, 0x1c, 0x10, 0x24, 0x71, 0x40, 0xd4, 0xcb, 0xef, 0x79, 0xd6, + 0xe1, 0xc2, 0xf3, 0xa1, 0x93, 0x3a, 0x1f, 0x56, 0x87, 0x25, 0xd4, 0xff, 0x78, 0xf8, 0x13, 0x0d, + 0xce, 0x29, 0xb5, 0xef, 0xc3, 0xe9, 0x60, 0x25, 0x4f, 0x87, 0xe7, 0x86, 0xfc, 0xbe, 0x82, 0xc3, + 0xc1, 0x4b, 0x7c, 0x16, 0x63, 0xdc, 0x4f, 0x01, 0x6c, 0x33, 0x76, 0xb2, 0x11, 0xcb, 0x49, 0x72, + 0xca, 0x57, 0x24, 0x04, 0x2b, 0xb5, 0x12, 0x3c, 0xab, 0xd2, 0x97, 0x67, 0xfd, 0xd7, 0x11, 0x98, + 0xcf, 0x0c, 0x7b, 0x96, 0x8f, 0x68, 0x7f, 0x45, 0x7c, 0xa4, 0xf2, 0x57, 0xc1, 0x47, 0x46, 0x4a, + 0xf1, 0x91, 0x81, 0xcf, 0x09, 0xe4, 0x03, 0xea, 0xd8, 0x6d, 0xde, 0xac, 0x15, 0x1a, 0x7e, 0xb8, + 0x65, 0x77, 0x88, 0xe0, 0x38, 0x7f, 0x63, 0xb0, 0x25, 0x4b, 0x5b, 0x70, 0xc6, 0xb3, 0x9e, 0xc1, + 0x84, 0x73, 0xb0, 0xeb, 0xdf, 0xa9, 0x00, 0xd4, 0x97, 0xb1, 0x17, 0xf2, 0xce, 0x3e, 0x07, 0x63, + 0xdd, 0x5d, 0x23, 0x88, 0xd6, 0xd3, 0x13, 0xd1, 0x62, 0xdc, 0xa4, 0x85, 0x77, 0x8f, 0x6a, 0x0b, + 0x75, 0x9f, 0x58, 0xc4, 0x0d, 0x6d, 0xc3, 0x09, 0xa2, 0x46, 0x0c, 0x86, 0x79, 0x3b, 0xfa, 0x0d, + 0x74, 0x18, 0x9b, 0xae, 0x1d, 0xda, 0x0c, 0xca, 0xbe, 0x61, 0xa4, 0xdc, 0x37, 0xac, 0x65, 0x30, + 0xe1, 0x1c, 0xec, 0x11, 0xcd, 0xba, 0xd7, 0xe9, 0x3a, 0x44, 0xd2, 0xac, 0x94, 0xa7, 0x99, 0xc4, + 0x84, 0x73, 0xb0, 0xeb, 0x7f, 0xa0, 0xc1, 0x48, 0x1d, 0x37, 0xd1, 0x7b, 0x13, 0x7a, 0xca, 0x03, + 0xaa, 0x9e, 0x72, 0xf7, 0xa8, 0x36, 0x51, 0xc7, 0x4d, 0x45, 0x65, 0xf9, 0x7b, 0x1a, 0xcc, 0x9b, + 0x9e, 0x1b, 0x1a, 0xb4, 0x17, 0x98, 0x1f, 0xe6, 0x11, 0xe3, 0x28, 0x25, 0xa2, 0xd7, 0x53, 0xc8, + 0x56, 0x1e, 0x14, 0x1d, 0x98, 0x4f, 0x43, 0x02, 0x9c, 0xa5, 0xac, 0xff, 0x40, 0x83, 0xe9, 0xba, + 0xe3, 0xf5, 0xac, 0x4d, 0xdf, 0xdb, 0xb1, 0x1d, 0xf2, 0xf6, 0xd0, 0x4b, 0xd4, 0x1e, 0x17, 0x9d, + 0x3b, 0x4c, 0x4f, 0x50, 0x2b, 0xbe, 0x4d, 0xf4, 0x04, 0xb5, 0xcb, 0x05, 0x47, 0xc1, 0x2f, 0x4e, + 0x24, 0xbf, 0x8c, 0x1d, 0x06, 0x8f, 0x43, 0xd5, 0x34, 0x56, 0x7a, 0xae, 0xe5, 0x48, 0x45, 0x81, + 0xf6, 0xb2, 0xbe, 0xcc, 0xcb, 0xb0, 0x84, 0xa2, 0xd7, 0x01, 0x62, 0x2b, 0x8f, 0x98, 0x86, 0xab, + 0xc3, 0x59, 0x96, 0x5a, 0x24, 0x0c, 0x6d, 0xb7, 0x1d, 0xc4, 0x53, 0x1f, 0xc3, 0xb0, 0x42, 0x0d, + 0xfd, 0x2c, 0xcc, 0x88, 0x41, 0x6e, 0x76, 0x8c, 0xb6, 0x50, 0xa9, 0x4b, 0x8e, 0xd4, 0xba, 0x82, + 0x68, 0xe5, 0xa2, 0x20, 0x3c, 0xa3, 0x96, 0x06, 0x38, 0x49, 0x0d, 0x1d, 0xc2, 0x74, 0x47, 0x35, + 0x13, 0x8c, 0x96, 0x3f, 0xb1, 0x15, 0x93, 0xc1, 0xca, 0x05, 0x41, 0x7c, 0x3a, 0x61, 0x60, 0x48, + 0x90, 0xca, 0xd1, 0x76, 0xc6, 0xce, 0x4a, 0xdb, 0x21, 0x30, 0xc1, 0xf5, 0xbd, 0x60, 0x61, 0x9c, + 0x7d, 0xe0, 0x33, 0x65, 0x3e, 0x90, 0xab, 0x8e, 0xb1, 0xd9, 0x92, 0xff, 0x0e, 0x70, 0x84, 0x1b, + 0xed, 0xc3, 0x34, 0x3d, 0xb8, 0x5a, 0xc4, 0x21, 0x66, 0xe8, 0xf9, 0x0b, 0x13, 0xe5, 0xcd, 0x82, + 0x2d, 0x05, 0x0f, 0xb7, 0x16, 0xa9, 0x25, 0x38, 0x41, 0x47, 0xaa, 0xc3, 0xd5, 0x42, 0x75, 0xb8, + 0x07, 0x53, 0xfb, 0x8a, 0xd9, 0x66, 0x92, 0x0d, 0xc2, 0xc7, 0xca, 0x74, 0x2c, 0xb6, 0xe1, 0xac, + 0x9c, 0x17, 0x84, 0xa6, 0x54, 0x7b, 0x8f, 0x4a, 0x47, 0x3f, 0xaa, 0xc2, 0x7c, 0xdd, 0xe9, 0x05, + 0x21, 0xf1, 0x97, 0x85, 0xdd, 0x9d, 0xf8, 0xe8, 0x73, 0x1a, 0x5c, 0x62, 0xff, 0x36, 0xbc, 0x3b, + 0x6e, 0x83, 0x38, 0xc6, 0xe1, 0xf2, 0x0e, 0xad, 0x61, 0x59, 0x27, 0xe3, 0x40, 0x8d, 0x9e, 0x10, + 0x94, 0x98, 0xfd, 0xa9, 0x95, 0x8b, 0x11, 0x17, 0x50, 0x42, 0x3f, 0xaf, 0xc1, 0x83, 0x39, 0xa0, + 0x06, 0x71, 0x48, 0x18, 0x1d, 0x94, 0x27, 0xed, 0xc7, 0x23, 0xc7, 0x47, 0xb5, 0x07, 0x5b, 0x45, + 0x48, 0x71, 0x31, 0x3d, 0xf4, 0x0b, 0x1a, 0x2c, 0xe6, 0x40, 0xaf, 0x1a, 0xb6, 0xd3, 0xf3, 0x23, + 0x59, 0xe1, 0xa4, 0xdd, 0xb9, 0x7c, 0x7c, 0x54, 0x5b, 0x6c, 0x15, 0x62, 0xc5, 0x7d, 0x28, 0xa2, + 0xcf, 0xc0, 0x45, 0x09, 0xbd, 0xe5, 0xba, 0x84, 0x58, 0xc4, 0x62, 0x22, 0xc4, 0x68, 0xa9, 0xae, + 0x3c, 0x78, 0x7c, 0x54, 0xbb, 0xd8, 0xca, 0x43, 0x88, 0xf3, 0xe9, 0xa0, 0x36, 0x3c, 0x12, 0x03, + 0x42, 0xdb, 0xb1, 0x5f, 0xe7, 0xc2, 0xcd, 0xae, 0x4f, 0x82, 0x5d, 0xcf, 0xb1, 0x18, 0xb3, 0xd0, + 0x56, 0xde, 0x79, 0x7c, 0x54, 0x7b, 0xa4, 0xd5, 0xaf, 0x22, 0xee, 0x8f, 0x07, 0x59, 0x30, 0x1d, + 0x98, 0x86, 0xdb, 0x74, 0x43, 0xe2, 0xef, 0x1b, 0xce, 0xc2, 0x78, 0xa9, 0x0f, 0xe4, 0x5b, 0x54, + 0xc1, 0x83, 0x13, 0x58, 0xd1, 0x87, 0xa1, 0x4a, 0x0e, 0xba, 0x86, 0x6b, 0x11, 0xce, 0x16, 0x26, + 0x57, 0x1e, 0xa6, 0x87, 0xd1, 0xaa, 0x28, 0xbb, 0x7b, 0x54, 0x9b, 0x8e, 0xfe, 0x5f, 0xf7, 0x2c, + 0x82, 0x65, 0x6d, 0xf4, 0x33, 0x70, 0xa1, 0x63, 0x1c, 0x6c, 0x78, 0x16, 0x61, 0x4c, 0x2e, 0x88, + 0x64, 0xb9, 0x6a, 0xa9, 0x7e, 0x2e, 0x1c, 0x1f, 0xd5, 0x2e, 0xac, 0xe7, 0xe0, 0xc3, 0xb9, 0x54, + 0xe8, 0x34, 0x74, 0x8c, 0x83, 0x6b, 0xbe, 0x61, 0x92, 0x9d, 0x9e, 0xb3, 0x45, 0xfc, 0x8e, 0xed, + 0x72, 0x71, 0x99, 0x98, 0x9e, 0x6b, 0x51, 0x56, 0xa2, 0x3d, 0x3e, 0xc6, 0xa7, 0x61, 0xbd, 0x5f, + 0x45, 0xdc, 0x1f, 0x0f, 0xfa, 0x00, 0x4c, 0xdb, 0x6d, 0xd7, 0xf3, 0xc9, 0x96, 0x61, 0xbb, 0x61, + 0xb0, 0x00, 0xcc, 0xb2, 0xcc, 0x86, 0xb5, 0xa9, 0x94, 0xe3, 0x44, 0x2d, 0xfd, 0x68, 0x04, 0x26, + 0xeb, 0x9e, 0x6b, 0xd9, 0x4c, 0x52, 0x7f, 0x32, 0x61, 0x16, 0x7c, 0x44, 0xe5, 0x83, 0x77, 0x8f, + 0x6a, 0x33, 0xb2, 0xa2, 0xc2, 0x18, 0x9f, 0x96, 0xba, 0x38, 0xd7, 0xfd, 0xde, 0x99, 0x54, 0xa2, + 0xef, 0x1e, 0xd5, 0xce, 0xc9, 0x66, 0x49, 0xbd, 0x1a, 0xed, 0x73, 0x11, 0x7b, 0xcb, 0x37, 0xdc, + 0xc0, 0x1e, 0x42, 0xac, 0x97, 0xca, 0xd3, 0x5a, 0x06, 0x1b, 0xce, 0xa1, 0x80, 0x5e, 0x85, 0x59, + 0x5a, 0x7a, 0xab, 0x6b, 0x19, 0x21, 0x51, 0xf6, 0xe4, 0x89, 0xc4, 0x7a, 0x41, 0x73, 0x76, 0x2d, + 0x81, 0x09, 0xa7, 0x30, 0x73, 0x33, 0xaa, 0x11, 0x78, 0x2e, 0xdb, 0x6e, 0x09, 0x33, 0x2a, 0x2d, + 0xc5, 0x02, 0x8a, 0x9e, 0x80, 0x89, 0x0e, 0x09, 0x02, 0xa3, 0x4d, 0xd8, 0xfe, 0x99, 0x8c, 0x0f, + 0xc9, 0x75, 0x5e, 0x8c, 0x23, 0x38, 0x7a, 0x1f, 0x8c, 0x99, 0x9e, 0x45, 0x82, 0x85, 0x09, 0x36, + 0xc3, 0x54, 0xc1, 0x18, 0xab, 0xd3, 0x82, 0xbb, 0x47, 0xb5, 0x49, 0xa6, 0x6a, 0xd2, 0x5f, 0x98, + 0x57, 0xd2, 0x7f, 0x99, 0xca, 0xac, 0x29, 0x21, 0x7d, 0x00, 0xf3, 0xef, 0xfd, 0xb3, 0xa4, 0xea, + 0x6f, 0x50, 0x85, 0xc1, 0x73, 0x43, 0xdf, 0x73, 0x36, 0x1d, 0xc3, 0x25, 0xe8, 0x8b, 0x1a, 0xcc, + 0xed, 0xda, 0xed, 0x5d, 0xf5, 0xfe, 0x46, 0x1c, 0x6c, 0xa5, 0x64, 0xfb, 0xeb, 0x29, 0x5c, 0x2b, + 0x17, 0x8e, 0x8f, 0x6a, 0x73, 0xe9, 0x52, 0x9c, 0xa1, 0xa9, 0x7f, 0xb9, 0x02, 0x17, 0x44, 0xcf, + 0x1c, 0x7a, 0xd2, 0x74, 0x1d, 0xef, 0xb0, 0x43, 0xdc, 0xfb, 0x71, 0xd5, 0x12, 0xcd, 0x50, 0xa5, + 0x70, 0x86, 0x3a, 0x99, 0x19, 0x1a, 0x29, 0x33, 0x43, 0x72, 0x21, 0xdf, 0x63, 0x96, 0xfe, 0x4c, + 0x83, 0x85, 0xbc, 0xb1, 0xb8, 0x0f, 0x3a, 0x50, 0x27, 0xa9, 0x03, 0x5d, 0x2f, 0xab, 0xd4, 0xa6, + 0xbb, 0x5e, 0xa0, 0x0b, 0xfd, 0xb8, 0x02, 0x97, 0xe2, 0xea, 0x4d, 0x37, 0x08, 0x0d, 0xc7, 0xe1, + 0x96, 0x8c, 0xb3, 0x9f, 0xf7, 0x6e, 0x42, 0x95, 0xdd, 0x18, 0xee, 0x53, 0xd5, 0xbe, 0x17, 0x1a, + 0x53, 0x0f, 0x52, 0xc6, 0xd4, 0xcd, 0x53, 0xa4, 0xd9, 0xdf, 0xae, 0xfa, 0xdf, 0x35, 0x58, 0xcc, + 0x6f, 0x78, 0x1f, 0x16, 0x95, 0x97, 0x5c, 0x54, 0x1f, 0x3f, 0xbd, 0xaf, 0x2e, 0x58, 0x56, 0xff, + 0xac, 0x52, 0xf4, 0xb5, 0x4c, 0xd9, 0xde, 0x81, 0x73, 0x54, 0x0b, 0x0a, 0x42, 0x61, 0xf5, 0x3b, + 0xd9, 0x75, 0x78, 0x64, 0x23, 0x3a, 0x87, 0x93, 0x38, 0x70, 0x1a, 0x29, 0xda, 0x80, 0x09, 0xaa, + 0xfa, 0x50, 0xfc, 0x95, 0xc1, 0xf1, 0xcb, 0xd3, 0xa8, 0xc5, 0xdb, 0xe2, 0x08, 0x09, 0xfa, 0x69, + 0x98, 0xb1, 0xe4, 0x8e, 0xba, 0xc7, 0x5d, 0x58, 0x1a, 0x2b, 0xb3, 0xcf, 0x36, 0xd4, 0xd6, 0x38, + 0x89, 0x4c, 0xff, 0x4b, 0x0d, 0x1e, 0xee, 0xb7, 0xb6, 0xd0, 0x6b, 0x00, 0x66, 0x24, 0x5e, 0x70, + 0x6f, 0x88, 0x92, 0x16, 0x5c, 0x29, 0xa4, 0xc4, 0x1b, 0x54, 0x16, 0x05, 0x58, 0x21, 0x92, 0x73, + 0xc5, 0x56, 0x39, 0xa3, 0x2b, 0x36, 0xfd, 0x7f, 0x68, 0x2a, 0x2b, 0x52, 0xe7, 0xf6, 0xed, 0xc6, + 0x8a, 0xd4, 0xbe, 0x17, 0xda, 0xd7, 0xfe, 0x5d, 0x05, 0x1e, 0xcd, 0x6f, 0xa2, 0x9c, 0xbd, 0xcf, + 0xc3, 0x78, 0x97, 0xbb, 0xac, 0x8c, 0xb0, 0xb3, 0xf1, 0x71, 0xca, 0x59, 0xb8, 0x43, 0xc9, 0xdd, + 0xa3, 0xda, 0x62, 0x1e, 0xa3, 0x17, 0xae, 0x28, 0xa2, 0x1d, 0xb2, 0x53, 0x56, 0x06, 0x2e, 0xfd, + 0xbd, 0x7f, 0x40, 0xe6, 0x62, 0x6c, 0x13, 0x67, 0x60, 0xc3, 0xc2, 0x67, 0x35, 0x98, 0x4d, 0xac, + 0xe8, 0x60, 0x61, 0x8c, 0xad, 0xd1, 0x52, 0xb7, 0x1b, 0x89, 0xad, 0x12, 0x9f, 0xdc, 0x89, 0xe2, + 0x00, 0xa7, 0x08, 0xa6, 0xd8, 0xac, 0x3a, 0xaa, 0x6f, 0x3b, 0x36, 0xab, 0x76, 0xbe, 0x80, 0xcd, + 0xfe, 0x52, 0xa5, 0xe8, 0x6b, 0x19, 0x9b, 0xbd, 0x03, 0x93, 0x91, 0xf3, 0x60, 0xc4, 0x2e, 0xae, + 0x0e, 0xdb, 0x27, 0x8e, 0x2e, 0xbe, 0xd9, 0x8f, 0x4a, 0x02, 0x1c, 0xd3, 0x42, 0x9f, 0xd7, 0x00, + 0xe2, 0x89, 0x11, 0x9b, 0x6a, 0xeb, 0xf4, 0x86, 0x43, 0x11, 0x6b, 0x66, 0xe9, 0x96, 0x56, 0x16, + 0x85, 0x42, 0x57, 0xff, 0xf6, 0x08, 0xa0, 0x6c, 0xdf, 0xa9, 0xb8, 0xb9, 0x67, 0xbb, 0x56, 0x5a, + 0x21, 0xb8, 0x61, 0xbb, 0x16, 0x66, 0x90, 0x01, 0x04, 0xd2, 0x67, 0xe1, 0x5c, 0xdb, 0xf1, 0xb6, + 0x0d, 0xc7, 0x39, 0x14, 0xfe, 0x88, 0xc2, 0xb3, 0xed, 0x3c, 0x3d, 0x98, 0xae, 0x25, 0x41, 0x38, + 0x5d, 0x17, 0x75, 0x61, 0xce, 0xa7, 0xaa, 0xac, 0x69, 0x3b, 0x4c, 0x75, 0xf2, 0x7a, 0x61, 0x49, + 0x5b, 0x09, 0x13, 0xef, 0x71, 0x0a, 0x17, 0xce, 0x60, 0x47, 0xef, 0x86, 0x89, 0xae, 0x6f, 0x77, + 0x0c, 0xff, 0x90, 0x29, 0x67, 0xd5, 0x95, 0x29, 0x7a, 0xc2, 0x6d, 0xf2, 0x22, 0x1c, 0xc1, 0xd0, + 0xcf, 0xc0, 0xa4, 0x63, 0xef, 0x10, 0xf3, 0xd0, 0x74, 0x88, 0x30, 0x6e, 0xdc, 0x3c, 0x9d, 0x25, + 0xb3, 0x16, 0xa1, 0x15, 0xb7, 0x86, 0xd1, 0x4f, 0x1c, 0x13, 0xd4, 0xbf, 0x52, 0x81, 0x87, 0xfa, + 0xb4, 0x44, 0x98, 0x2e, 0x68, 0xf1, 0x61, 0x62, 0xfa, 0x3e, 0xc0, 0x17, 0xa1, 0x28, 0xbc, 0x7b, + 0x54, 0x7b, 0x57, 0x1f, 0x04, 0x2d, 0xba, 0x7e, 0x48, 0xfb, 0x10, 0xc7, 0x68, 0x50, 0x13, 0xc6, + 0xad, 0xd8, 0x8c, 0x37, 0xb9, 0xf2, 0x24, 0x65, 0xb1, 0xdc, 0xd0, 0x36, 0x28, 0x36, 0x81, 0x00, + 0xad, 0xc1, 0x04, 0xbf, 0x20, 0x24, 0x82, 0x5d, 0x3f, 0xc5, 0x74, 0x5a, 0x5e, 0x34, 0x28, 0xb2, + 0x08, 0x85, 0xfe, 0xbf, 0x35, 0x98, 0xa8, 0x7b, 0x3e, 0x69, 0x6c, 0xb4, 0xd0, 0x21, 0x4c, 0x29, + 0xae, 0xc8, 0x82, 0x75, 0x95, 0xdc, 0xcb, 0x0c, 0xe3, 0x72, 0x8c, 0x2d, 0x72, 0x63, 0x94, 0x05, + 0x58, 0xa5, 0x85, 0x5e, 0xa3, 0x63, 0x7e, 0xc7, 0xb7, 0x43, 0x4a, 0x78, 0x98, 0x4b, 0x27, 0x4e, + 0x18, 0x47, 0xb8, 0xf8, 0x32, 0x90, 0x3f, 0x71, 0x4c, 0x45, 0xdf, 0xa4, 0xdb, 0x36, 0xdd, 0x4d, + 0xf4, 0x0c, 0x8c, 0x76, 0x3c, 0x2b, 0x9a, 0xf7, 0xf7, 0x44, 0x9b, 0x72, 0xdd, 0xb3, 0xe8, 0xd8, + 0x5e, 0xca, 0xb6, 0x60, 0xa6, 0x31, 0xd6, 0x46, 0xdf, 0x80, 0xb9, 0x34, 0x7d, 0xf4, 0x0c, 0xcc, + 0x9a, 0x5e, 0xa7, 0xe3, 0xb9, 0xad, 0xde, 0xce, 0x8e, 0x7d, 0x40, 0x12, 0xfe, 0xa5, 0xf5, 0x04, + 0x04, 0xa7, 0x6a, 0xea, 0xdf, 0xd4, 0x60, 0x84, 0xce, 0x8b, 0x0e, 0xe3, 0x96, 0xd7, 0x31, 0x6c, + 0x57, 0xf4, 0x8a, 0x79, 0xbf, 0x36, 0x58, 0x09, 0x16, 0x10, 0xd4, 0x85, 0xc9, 0x48, 0xd2, 0x19, + 0xca, 0xc7, 0xa1, 0xb1, 0xd1, 0x92, 0x7e, 0x61, 0x92, 0xfd, 0x46, 0x25, 0x01, 0x8e, 0x89, 0xe8, + 0x06, 0xcc, 0x37, 0x36, 0x5a, 0x4d, 0xd7, 0x74, 0x7a, 0x16, 0x59, 0x3d, 0x60, 0x7f, 0x28, 0x03, + 0xb0, 0x79, 0x89, 0xf8, 0x4e, 0xc6, 0x00, 0x44, 0x25, 0x1c, 0xc1, 0x68, 0x35, 0xc2, 0x5b, 0x08, + 0x27, 0x50, 0x56, 0x4d, 0x20, 0xc1, 0x11, 0x4c, 0xff, 0x41, 0x05, 0xa6, 0x94, 0x0e, 0x21, 0x07, + 0x26, 0xf8, 0xe7, 0x46, 0x3e, 0x58, 0xab, 0x25, 0x3f, 0x31, 0xd9, 0x6b, 0x4e, 0x9d, 0x0f, 0x68, + 0x80, 0x23, 0x12, 0x2a, 0x33, 0xab, 0xf4, 0x61, 0x66, 0x4b, 0x00, 0xdc, 0xdb, 0x8c, 0xb9, 0x0e, + 0xf0, 0x2d, 0xc9, 0xce, 0x8b, 0x96, 0x2c, 0xc5, 0x4a, 0x0d, 0xf4, 0xb0, 0x60, 0xfb, 0xdc, 0xc9, + 0xa0, 0x9a, 0x62, 0xf9, 0x3b, 0x30, 0xf6, 0xba, 0xe7, 0x92, 0x40, 0x5c, 0x3c, 0x9d, 0xd2, 0x07, + 0x4e, 0xd2, 0x43, 0xfd, 0x65, 0x8a, 0x17, 0x73, 0xf4, 0xfa, 0xaf, 0x68, 0x00, 0x0d, 0x23, 0x34, + 0xf8, 0x3d, 0xc9, 0x00, 0x7e, 0xbc, 0x0f, 0x27, 0x4e, 0xab, 0x6a, 0xc6, 0xb7, 0x71, 0x34, 0xb0, + 0x5f, 0x8f, 0x3e, 0x5f, 0x4a, 0xc1, 0x1c, 0x7b, 0xcb, 0x7e, 0x9d, 0x60, 0x06, 0x47, 0xef, 0x85, + 0x49, 0xe2, 0x9a, 0xfe, 0x61, 0x37, 0x24, 0x16, 0x1b, 0x81, 0x2a, 0xdf, 0xa1, 0xab, 0x51, 0x21, + 0x8e, 0xe1, 0xfa, 0x93, 0x90, 0x54, 0x65, 0xee, 0xdd, 0x4b, 0xfd, 0xae, 0x06, 0x73, 0xab, 0x07, + 0x5d, 0xdb, 0x67, 0xbe, 0xbd, 0xc4, 0xa7, 0x7a, 0x01, 0x7a, 0x02, 0x26, 0xf6, 0xf9, 0xbf, 0xa2, + 0xa5, 0xd4, 0xbd, 0x44, 0x0d, 0x1c, 0xc1, 0xd1, 0x0e, 0xcc, 0x12, 0xd6, 0x9c, 0x09, 0x00, 0x46, + 0x58, 0xc6, 0x3f, 0x81, 0xbb, 0x8e, 0x27, 0xb0, 0xe0, 0x14, 0x56, 0xd4, 0x82, 0x59, 0xd3, 0x31, + 0x82, 0xc0, 0xde, 0xb1, 0xcd, 0xd8, 0x6b, 0x65, 0x72, 0xe5, 0xbd, 0x8c, 0x2d, 0x24, 0x20, 0x77, + 0x8f, 0x6a, 0x17, 0x45, 0x3f, 0x93, 0x00, 0x9c, 0x42, 0xa1, 0xff, 0x81, 0x06, 0x93, 0x52, 0x1b, + 0x7a, 0x4b, 0x59, 0x24, 0x4f, 0xe0, 0x9c, 0xbf, 0x06, 0x73, 0xe2, 0xc2, 0x67, 0xcb, 0x73, 0x88, + 0x6f, 0xb8, 0x26, 0x41, 0x1f, 0x4e, 0x7c, 0xca, 0x63, 0x29, 0x23, 0xfa, 0x85, 0x74, 0xfd, 0xf8, + 0x13, 0xf5, 0x00, 0xaa, 0xd7, 0xc4, 0x66, 0x41, 0x8b, 0x50, 0xb1, 0x23, 0x79, 0x0c, 0x04, 0x8e, + 0x4a, 0xb3, 0x81, 0x2b, 0xb6, 0x25, 0x57, 0x56, 0xa5, 0x70, 0xfd, 0x2b, 0x8b, 0x68, 0xa4, 0xff, + 0x22, 0xd2, 0xbf, 0xad, 0xc1, 0xd4, 0x75, 0x7b, 0x9b, 0xf8, 0xfc, 0x3a, 0x81, 0x71, 0xbb, 0xc4, + 0x2b, 0x93, 0xa9, 0xbc, 0x17, 0x26, 0xe8, 0x00, 0x26, 0x03, 0x73, 0x97, 0x58, 0x3d, 0x47, 0x7a, + 0x9b, 0x5c, 0x2b, 0x67, 0x9c, 0x95, 0xa4, 0x5b, 0x02, 0x9f, 0xe2, 0x23, 0x1b, 0x51, 0xc0, 0x31, + 0x31, 0xfd, 0xd3, 0x70, 0x3e, 0xa7, 0x11, 0xaa, 0xc1, 0x58, 0x10, 0x1a, 0x7e, 0x28, 0xc6, 0x8c, + 0x31, 0x11, 0xe6, 0x92, 0x84, 0x79, 0x39, 0x7a, 0x10, 0x46, 0x88, 0x6b, 0x89, 0x41, 0x9b, 0x38, + 0x3e, 0xaa, 0x8d, 0xac, 0xba, 0x16, 0xa6, 0x65, 0x74, 0xc2, 0x1d, 0x2f, 0xb1, 0xb4, 0xd9, 0x84, + 0xaf, 0x89, 0x32, 0x2c, 0xa1, 0xcc, 0x9c, 0x9e, 0xb6, 0x1c, 0xa3, 0xaf, 0x68, 0x30, 0xb7, 0x93, + 0x9a, 0xd6, 0x61, 0x0c, 0xd6, 0xe9, 0x25, 0xb2, 0xb2, 0x20, 0x06, 0x24, 0xb3, 0xd8, 0x70, 0x86, + 0xae, 0xfe, 0xcf, 0x47, 0xe1, 0x91, 0xeb, 0x9e, 0x6f, 0xbf, 0xee, 0xb9, 0xa1, 0xe1, 0x6c, 0x7a, + 0x56, 0x7c, 0x71, 0x2c, 0x96, 0xf7, 0x17, 0x34, 0x78, 0xc0, 0xec, 0xf6, 0xb8, 0xc3, 0x53, 0x74, + 0x9f, 0xb7, 0x49, 0x7c, 0xdb, 0x2b, 0x7b, 0x7f, 0xcc, 0x5e, 0x45, 0xd4, 0x37, 0x6f, 0xe5, 0xa1, + 0xc4, 0x45, 0xb4, 0xd8, 0x35, 0xb6, 0xe5, 0xdd, 0x71, 0x59, 0xe7, 0x5a, 0x21, 0x1b, 0xcd, 0xd7, + 0xe3, 0x49, 0x28, 0x79, 0x8d, 0xdd, 0xc8, 0xc5, 0x88, 0x0b, 0x28, 0xa1, 0xcf, 0xc0, 0x45, 0x9b, + 0x77, 0x0e, 0x13, 0xc3, 0xb2, 0x5d, 0x12, 0x04, 0xec, 0x32, 0x77, 0x98, 0x7b, 0xda, 0x66, 0x1e, + 0x42, 0x9c, 0x4f, 0x07, 0xbd, 0x02, 0x10, 0x1c, 0xba, 0xa6, 0x18, 0xff, 0xb1, 0x52, 0x54, 0xf9, + 0x09, 0x2e, 0xb1, 0x60, 0x05, 0x23, 0x3d, 0xc4, 0x42, 0xb9, 0x28, 0xc7, 0xd9, 0x9d, 0x2f, 0x3b, + 0xc4, 0xe2, 0x35, 0x14, 0xc3, 0xf5, 0x7f, 0xa2, 0xc1, 0x84, 0x78, 0x2b, 0x85, 0xde, 0x93, 0x12, + 0xe4, 0xa4, 0x19, 0x37, 0x25, 0xcc, 0x1d, 0x32, 0x13, 0x9c, 0x10, 0xe2, 0x05, 0x53, 0x2e, 0x25, + 0x09, 0x08, 0xc2, 0xb1, 0x46, 0x90, 0x30, 0xc5, 0x45, 0x5a, 0x82, 0x42, 0x4c, 0xff, 0x96, 0x06, + 0xf3, 0x99, 0x56, 0x03, 0x28, 0xb3, 0xf7, 0xf1, 0x76, 0xeb, 0x7b, 0xd3, 0xc0, 0x9e, 0xc5, 0x2d, + 0x6f, 0x36, 0x5b, 0xc4, 0xdf, 0x97, 0x9b, 0x90, 0xf2, 0x8c, 0xd8, 0x8b, 0x49, 0xf4, 0x62, 0x08, + 0x9e, 0x71, 0x23, 0x85, 0x2b, 0xe6, 0x19, 0x69, 0x08, 0xce, 0xd0, 0x45, 0x5f, 0xd6, 0x60, 0xce, + 0x48, 0x3e, 0x8b, 0x8b, 0x98, 0x7a, 0x29, 0x27, 0xee, 0xd4, 0x13, 0xbb, 0xb8, 0x2f, 0x29, 0x40, + 0x80, 0x33, 0x64, 0xd1, 0x07, 0x60, 0xda, 0xe8, 0xda, 0xcb, 0x3d, 0xcb, 0x26, 0xae, 0x29, 0x5f, + 0x48, 0x31, 0x43, 0xdb, 0xf2, 0x66, 0x53, 0x96, 0xe3, 0x44, 0x2d, 0xf9, 0x9a, 0x4d, 0x0c, 0xe4, + 0xe8, 0x90, 0xaf, 0xd9, 0xc4, 0x18, 0xc6, 0xaf, 0xd9, 0xc4, 0xd0, 0xa9, 0x44, 0xd0, 0x27, 0xe1, + 0x41, 0x7e, 0x1a, 0xae, 0x18, 0x81, 0x6d, 0x2e, 0xf7, 0xc2, 0x5d, 0xe2, 0x86, 0x91, 0x84, 0xc4, + 0x2d, 0x0a, 0xcc, 0xa1, 0x65, 0xb5, 0xa8, 0x12, 0x2e, 0x6e, 0x8f, 0x5c, 0x00, 0xcf, 0xb6, 0x4c, + 0xf1, 0x3d, 0xdc, 0xec, 0x50, 0xca, 0xdf, 0xe8, 0x66, 0xb3, 0x51, 0x17, 0x9f, 0xc3, 0xd8, 0x44, + 0xfc, 0x1b, 0x2b, 0x14, 0xd0, 0x1b, 0x1a, 0xcc, 0x88, 0x45, 0x2e, 0x68, 0x4e, 0xb0, 0xf9, 0x7f, + 0xb9, 0xec, 0x62, 0x4c, 0x2d, 0xf8, 0x25, 0xac, 0x22, 0xe7, 0x6e, 0xe9, 0xd2, 0xc3, 0x2e, 0x01, + 0xc3, 0xc9, 0x7e, 0xa0, 0xbf, 0xaf, 0xc1, 0x85, 0x80, 0xf8, 0xfb, 0xb6, 0x49, 0x96, 0x4d, 0xd3, + 0xeb, 0xb9, 0xd1, 0x24, 0x57, 0xcb, 0xbf, 0x2c, 0x6a, 0xe5, 0xe0, 0xe3, 0xae, 0x1d, 0x79, 0x10, + 0x9c, 0x4b, 0x9f, 0x9e, 0x5f, 0xe7, 0xee, 0x18, 0xa1, 0xb9, 0x5b, 0x37, 0xcc, 0x5d, 0xa6, 0x37, + 0x70, 0x6f, 0x8e, 0x92, 0x9b, 0xe6, 0xc5, 0x24, 0x2a, 0x6e, 0x36, 0x4b, 0x15, 0xe2, 0x34, 0x41, + 0x14, 0x40, 0xd5, 0x27, 0xaf, 0xf5, 0x48, 0xc0, 0x5c, 0x3e, 0x28, 0xf1, 0xe6, 0xd0, 0x33, 0x86, + 0x05, 0x42, 0x2e, 0x05, 0x45, 0xbf, 0xb0, 0x24, 0x84, 0xda, 0xf0, 0x08, 0x5f, 0xb9, 0xcb, 0xae, + 0xe7, 0x1e, 0x76, 0xbc, 0x5e, 0x90, 0x5a, 0xfd, 0x53, 0x6c, 0xf5, 0x33, 0xa7, 0x96, 0xd5, 0x7e, + 0x15, 0x71, 0x7f, 0x3c, 0xe8, 0x25, 0xa8, 0x92, 0x7d, 0xe2, 0x86, 0x5b, 0x5b, 0x6b, 0x0b, 0xd3, + 0xa5, 0x8e, 0x46, 0xf6, 0x09, 0xab, 0x02, 0x07, 0x96, 0xd8, 0x90, 0x07, 0x13, 0x8e, 0xd7, 0x6e, + 0xdb, 0x6e, 0x7b, 0x61, 0xa6, 0xfc, 0x3a, 0x4a, 0x0c, 0xdb, 0x1a, 0xc7, 0xc7, 0x05, 0x66, 0xf1, + 0x03, 0x47, 0x54, 0x16, 0x9f, 0x07, 0x94, 0xdd, 0x02, 0x68, 0x0e, 0x46, 0xf6, 0x08, 0xf7, 0x6e, + 0x98, 0xc4, 0xf4, 0x5f, 0x74, 0x01, 0xc6, 0xf6, 0x0d, 0xa7, 0xc7, 0xa5, 0xfb, 0x2a, 0xe6, 0x3f, + 0x9e, 0xa9, 0x7c, 0x58, 0xd3, 0x7f, 0x41, 0x83, 0x0b, 0x79, 0x04, 0xe9, 0x11, 0xbf, 0x4f, 0xfc, + 0x6d, 0x2f, 0x88, 0x1c, 0x25, 0xc6, 0xf8, 0x11, 0x7f, 0x3b, 0x2a, 0xc4, 0x31, 0x1c, 0x35, 0xe1, + 0xfc, 0x6e, 0x18, 0x76, 0x97, 0x4d, 0x93, 0x04, 0x81, 0xac, 0xc1, 0xa8, 0x8d, 0xf1, 0x57, 0xdc, + 0xd7, 0xb7, 0xb6, 0x36, 0x53, 0x60, 0x9c, 0xd7, 0x46, 0xff, 0xae, 0x06, 0x17, 0x73, 0x17, 0x0e, + 0xc2, 0x70, 0x89, 0x79, 0x43, 0xb9, 0xeb, 0xbd, 0xd0, 0x08, 0x6d, 0xb7, 0xdd, 0x74, 0x77, 0x1c, + 0xbb, 0xbd, 0x1b, 0x8a, 0xee, 0x31, 0x49, 0x6d, 0x3d, 0xb7, 0x06, 0x2e, 0x68, 0x49, 0x3b, 0xde, + 0x31, 0x0e, 0x32, 0x08, 0x95, 0x8e, 0xaf, 0x67, 0xc1, 0x38, 0xaf, 0x8d, 0xfe, 0x8d, 0x31, 0x78, + 0x88, 0x76, 0x3c, 0x16, 0x1a, 0xd6, 0x0d, 0xd7, 0x68, 0xbf, 0x35, 0x0f, 0xe7, 0x6f, 0x6b, 0xf0, + 0xc0, 0x6e, 0xbe, 0x40, 0x2f, 0xc4, 0x96, 0x17, 0x4a, 0x29, 0x5e, 0xfd, 0x74, 0x04, 0xbe, 0x75, + 0xfb, 0x56, 0xc1, 0x45, 0x9d, 0x42, 0xcf, 0xc3, 0x9c, 0xeb, 0x59, 0xa4, 0xde, 0x6c, 0xe0, 0x75, + 0x23, 0xd8, 0x6b, 0x45, 0xa6, 0x96, 0x31, 0x6e, 0x99, 0xdf, 0x48, 0xc1, 0x70, 0xa6, 0x36, 0xda, + 0x07, 0xd4, 0xf5, 0xac, 0xd5, 0x7d, 0xdb, 0x8c, 0x9c, 0xb6, 0xca, 0xdf, 0x06, 0xb0, 0x07, 0x18, + 0x9b, 0x19, 0x6c, 0x38, 0x87, 0x02, 0xd3, 0x48, 0x68, 0x67, 0xd6, 0x3d, 0xd7, 0x0e, 0x3d, 0x9f, + 0x79, 0xdb, 0x0d, 0x25, 0x98, 0xb3, 0x75, 0xbe, 0x91, 0x8b, 0x11, 0x17, 0x50, 0xd2, 0xff, 0xa7, + 0x06, 0xe7, 0xe8, 0xb2, 0xd8, 0xf4, 0xbd, 0x83, 0xc3, 0xb7, 0xe2, 0x82, 0x7c, 0x42, 0x58, 0x9d, + 0xb9, 0x26, 0x7d, 0x51, 0xb1, 0x38, 0x4f, 0xb2, 0x3e, 0xc7, 0x46, 0x66, 0xd5, 0x98, 0x30, 0x52, + 0x6c, 0x4c, 0xd0, 0xdf, 0xa8, 0x70, 0x21, 0x39, 0x52, 0xe6, 0xdf, 0x92, 0xfb, 0xf0, 0x43, 0x30, + 0x43, 0xcb, 0xd6, 0x8d, 0x83, 0xcd, 0xc6, 0x6d, 0xcf, 0x89, 0x1c, 0x1e, 0x99, 0x13, 0xc3, 0x0d, + 0x15, 0x80, 0x93, 0xf5, 0xd0, 0x33, 0x30, 0xd1, 0xe5, 0xcf, 0x2a, 0x84, 0x71, 0xe1, 0x51, 0x6e, + 0x9a, 0x65, 0x45, 0x77, 0x8f, 0x6a, 0xf3, 0xe2, 0xb3, 0x6d, 0xb7, 0x2d, 0x0a, 0x71, 0xd4, 0x40, + 0xff, 0xea, 0x05, 0x60, 0xc8, 0x1d, 0x12, 0xbe, 0x15, 0xc7, 0xe4, 0x49, 0x98, 0x32, 0xbb, 0xbd, + 0xfa, 0xd5, 0xd6, 0x0b, 0x3d, 0x2f, 0x34, 0x84, 0xe5, 0x99, 0x49, 0xcd, 0xf5, 0xcd, 0x5b, 0x51, + 0x31, 0x56, 0xeb, 0x50, 0xee, 0x60, 0x76, 0x7b, 0x82, 0xdf, 0x6e, 0xaa, 0x37, 0xf9, 0x8c, 0x3b, + 0xd4, 0x37, 0x6f, 0x25, 0x60, 0x38, 0x53, 0x1b, 0x7d, 0x06, 0xa6, 0x89, 0xd8, 0xb8, 0xd7, 0x0d, + 0xdf, 0x12, 0x7c, 0xa1, 0xb4, 0xd8, 0x23, 0x87, 0x36, 0xe2, 0x06, 0x5c, 0xd9, 0x58, 0x55, 0x48, + 0xe0, 0x04, 0x41, 0x26, 0xf8, 0x8b, 0xdf, 0x74, 0x96, 0x3d, 0x2b, 0xcd, 0x28, 0xc6, 0x84, 0xe0, + 0x5f, 0x54, 0x09, 0x17, 0xb7, 0x47, 0xbf, 0xa9, 0xc1, 0x25, 0x09, 0xb5, 0x5d, 0xbb, 0xd3, 0xeb, + 0x60, 0x62, 0x3a, 0x86, 0xdd, 0x11, 0x5a, 0xc0, 0x8b, 0xa7, 0xf6, 0xa1, 0x49, 0xf4, 0x9c, 0x59, + 0xe5, 0xc3, 0x70, 0x41, 0x97, 0xd0, 0xb7, 0x34, 0x78, 0x34, 0x02, 0x6d, 0x52, 0x3d, 0xbc, 0xe7, + 0x93, 0xd8, 0xdd, 0x56, 0x0c, 0xc9, 0x44, 0x29, 0xde, 0xf9, 0xd8, 0xf1, 0x51, 0xed, 0xd1, 0xd5, + 0x7b, 0xe0, 0xc6, 0xf7, 0xa4, 0xae, 0x2e, 0x97, 0x96, 0xb7, 0x13, 0x0a, 0xb5, 0xe1, 0xac, 0x96, + 0x0b, 0x25, 0x81, 0x13, 0x04, 0xd1, 0x6f, 0x69, 0xf0, 0x80, 0x5a, 0xa0, 0xae, 0x16, 0xae, 0x2f, + 0xbc, 0x74, 0x6a, 0x9d, 0x49, 0xe1, 0xe7, 0x96, 0xb9, 0x02, 0x20, 0x2e, 0xea, 0x15, 0x65, 0xdb, + 0x1d, 0xb6, 0x30, 0xb9, 0x4e, 0x31, 0xc6, 0xd9, 0x36, 0x5f, 0xab, 0x01, 0x8e, 0x60, 0x54, 0x55, + 0xef, 0x7a, 0xd6, 0xa6, 0x6d, 0x05, 0x6b, 0x76, 0xc7, 0x0e, 0x99, 0xd4, 0x3f, 0xc2, 0x87, 0x63, + 0xd3, 0xb3, 0x36, 0x9b, 0x0d, 0x5e, 0x8e, 0x13, 0xb5, 0xd8, 0xc3, 0x11, 0xbb, 0x63, 0xb4, 0xc9, + 0x66, 0xcf, 0x71, 0x36, 0x7d, 0x8f, 0x99, 0x6f, 0x1a, 0xc4, 0xb0, 0x1c, 0xdb, 0x25, 0x25, 0xa5, + 0x7c, 0xb6, 0xdd, 0x9a, 0x45, 0x48, 0x71, 0x31, 0x3d, 0xb4, 0x04, 0xb0, 0x63, 0xd8, 0x4e, 0xeb, + 0x8e, 0xd1, 0xbd, 0xe9, 0x32, 0x55, 0xa0, 0xca, 0xf5, 0xe4, 0xab, 0xb2, 0x14, 0x2b, 0x35, 0xe8, + 0x6a, 0xa2, 0x5c, 0x10, 0x13, 0xfe, 0x26, 0x77, 0x61, 0xf6, 0x94, 0x56, 0x53, 0x84, 0x90, 0x0f, + 0xdf, 0x0d, 0x85, 0x04, 0x4e, 0x10, 0x44, 0x5f, 0xd0, 0x60, 0x36, 0x38, 0x0c, 0x42, 0xd2, 0x91, + 0x7d, 0x38, 0x77, 0xda, 0x7d, 0x60, 0x86, 0xad, 0x56, 0x82, 0x08, 0x4e, 0x11, 0x45, 0x06, 0x3c, + 0xc4, 0x46, 0xf5, 0x5a, 0xfd, 0xba, 0xdd, 0xde, 0x95, 0xcf, 0x41, 0x36, 0x89, 0x6f, 0x12, 0x37, + 0x5c, 0x98, 0x63, 0xeb, 0xa6, 0x76, 0x7c, 0x54, 0x7b, 0xa8, 0x59, 0x5c, 0x0d, 0xf7, 0xc3, 0x81, + 0x5e, 0x81, 0x45, 0x01, 0x5e, 0xf3, 0xee, 0x64, 0x28, 0xcc, 0x33, 0x0a, 0xec, 0x8d, 0x4e, 0xb3, + 0xb0, 0x16, 0xee, 0x83, 0x81, 0x6a, 0x14, 0x01, 0xf1, 0x99, 0x5d, 0x9a, 0xc8, 0xc5, 0x13, 0x2c, + 0x20, 0xb6, 0x08, 0x98, 0x46, 0xd1, 0xca, 0x82, 0x71, 0x5e, 0x1b, 0xf4, 0xac, 0x74, 0xdf, 0x3c, + 0xa4, 0x05, 0x2f, 0x6c, 0xb6, 0x16, 0xce, 0xb3, 0xfe, 0x9d, 0x57, 0xbc, 0x32, 0x23, 0x10, 0x4e, + 0xd7, 0xa5, 0xb2, 0x45, 0x54, 0xb4, 0xd2, 0xf3, 0x83, 0x70, 0xe1, 0x02, 0x6b, 0xcc, 0x64, 0x0b, + 0xac, 0x02, 0x70, 0xb2, 0x1e, 0x7a, 0x06, 0x66, 0x03, 0x62, 0x9a, 0x5e, 0xa7, 0xdb, 0x20, 0x3b, + 0x46, 0xcf, 0x09, 0x17, 0x2e, 0xb2, 0xde, 0xf3, 0x19, 0x4c, 0x40, 0x70, 0xaa, 0x26, 0x3a, 0x84, + 0xf3, 0xf2, 0xf9, 0xee, 0x9a, 0xd7, 0x5e, 0x37, 0x0e, 0x98, 0xa8, 0x7e, 0xe9, 0xde, 0x3b, 0x70, + 0x29, 0xf2, 0x6b, 0x5a, 0x7a, 0xa1, 0x67, 0xb8, 0xa1, 0x1d, 0x1e, 0xf2, 0xe1, 0xaa, 0x67, 0xd1, + 0xe1, 0x3c, 0x1a, 0x68, 0x0d, 0x2e, 0xa4, 0x8a, 0xaf, 0xda, 0x0e, 0x09, 0x16, 0x1e, 0x60, 0x9f, + 0xcd, 0x0c, 0x31, 0xf5, 0x1c, 0x38, 0xce, 0x6d, 0x85, 0x6e, 0xc2, 0xc5, 0xae, 0xef, 0x85, 0xc4, + 0x0c, 0x6f, 0x50, 0xf1, 0xc4, 0x11, 0x1f, 0x18, 0x2c, 0x2c, 0xb0, 0xb1, 0x60, 0x36, 0xf9, 0xcd, + 0xbc, 0x0a, 0x38, 0xbf, 0x1d, 0xfa, 0x86, 0x06, 0x97, 0x83, 0xd0, 0x27, 0x46, 0xc7, 0x76, 0xdb, + 0x75, 0xcf, 0x75, 0x09, 0x63, 0x93, 0x4d, 0x2b, 0x76, 0x4d, 0x7a, 0xb0, 0x14, 0x9f, 0xd2, 0x8f, + 0x8f, 0x6a, 0x97, 0x5b, 0x7d, 0x31, 0xe3, 0x7b, 0x50, 0xd6, 0x8f, 0x2a, 0x5c, 0xeb, 0xce, 0xf0, + 0x7e, 0xba, 0x08, 0x3b, 0xa4, 0xe3, 0xf9, 0x87, 0xcb, 0x51, 0xc0, 0x28, 0x61, 0x03, 0x67, 0x8b, + 0x70, 0x3d, 0x09, 0xc2, 0xe9, 0xba, 0x54, 0x32, 0x63, 0x9b, 0xe5, 0x6a, 0x2b, 0x6e, 0x5f, 0x89, + 0x25, 0xb3, 0x66, 0x0a, 0x86, 0x33, 0xb5, 0x51, 0x1d, 0xe6, 0x45, 0x59, 0x93, 0x2a, 0x37, 0xc1, + 0x55, 0x9f, 0x44, 0x32, 0x2f, 0x55, 0x13, 0xe6, 0x9b, 0x69, 0x20, 0xce, 0xd6, 0xa7, 0x5f, 0x41, + 0x7f, 0xa8, 0xbd, 0x18, 0x8d, 0xbf, 0x62, 0x23, 0x09, 0xc2, 0xe9, 0xba, 0x91, 0xf6, 0x99, 0xe8, + 0xc2, 0x58, 0xfc, 0x15, 0x1b, 0x29, 0x18, 0xce, 0xd4, 0xd6, 0xff, 0xe3, 0x28, 0xbc, 0x6b, 0x00, + 0x79, 0x09, 0x75, 0xf2, 0x87, 0xfb, 0xe4, 0x7b, 0x67, 0xb0, 0xe9, 0xe9, 0x16, 0x4c, 0xcf, 0xc9, + 0xe9, 0x0d, 0x3a, 0x9d, 0x41, 0xd1, 0x74, 0x9e, 0x9c, 0xe4, 0xe0, 0xd3, 0xdf, 0xc9, 0x9f, 0xfe, + 0x92, 0xa3, 0x7a, 0xcf, 0xe5, 0xd2, 0x2d, 0x58, 0x2e, 0x25, 0x47, 0x75, 0x80, 0xe5, 0xf5, 0xa7, + 0xa3, 0xf0, 0xd8, 0x20, 0xb2, 0x5b, 0xc9, 0xf5, 0x95, 0xc3, 0x75, 0xce, 0x74, 0x7d, 0x15, 0x39, + 0x60, 0x9e, 0xe1, 0xfa, 0xca, 0x21, 0x79, 0xd6, 0xeb, 0xab, 0x68, 0x54, 0xcf, 0x6a, 0x7d, 0x15, + 0x8d, 0xea, 0x00, 0xeb, 0xeb, 0x2f, 0xd2, 0xe7, 0x83, 0x14, 0xd9, 0x9a, 0x30, 0x62, 0x76, 0x7b, + 0x25, 0x99, 0x14, 0xf3, 0x98, 0xa8, 0x6f, 0xde, 0xc2, 0x14, 0x07, 0xc2, 0x30, 0xce, 0xd7, 0x4f, + 0x49, 0x16, 0xc4, 0xbc, 0x02, 0xf9, 0x92, 0xc4, 0x02, 0x13, 0x1d, 0x2a, 0xd2, 0xdd, 0x25, 0x1d, + 0xe2, 0x1b, 0x4e, 0x2b, 0xf4, 0x7c, 0xa3, 0x5d, 0x96, 0xdb, 0xb0, 0xa1, 0x5a, 0x4d, 0xe1, 0xc2, + 0x19, 0xec, 0x74, 0x40, 0xba, 0xb6, 0x55, 0x92, 0xbf, 0xb0, 0x01, 0xd9, 0x6c, 0x36, 0x30, 0xc5, + 0xa1, 0xff, 0xa3, 0x49, 0x50, 0x22, 0x54, 0xa0, 0x4f, 0xc2, 0x83, 0x86, 0xe3, 0x78, 0x77, 0x36, + 0x7d, 0x7b, 0xdf, 0x76, 0x48, 0x9b, 0x58, 0x52, 0x9e, 0x09, 0x84, 0x5f, 0x0d, 0xd3, 0x59, 0x96, + 0x8b, 0x2a, 0xe1, 0xe2, 0xf6, 0xe8, 0x2b, 0x1a, 0xcc, 0x9b, 0xe9, 0xa8, 0x00, 0xc3, 0xdc, 0xbc, + 0x67, 0x42, 0x0c, 0xf0, 0xfd, 0x94, 0x29, 0xc6, 0x59, 0xb2, 0xe8, 0xe7, 0x34, 0x6e, 0x17, 0x93, + 0x97, 0x00, 0x62, 0xce, 0xae, 0x9d, 0xd2, 0xc5, 0x61, 0x6c, 0x60, 0x8b, 0xaf, 0x19, 0x92, 0x04, + 0xd1, 0xb7, 0x34, 0xb8, 0xb8, 0x97, 0x67, 0xce, 0x17, 0x33, 0x7b, 0xb3, 0x6c, 0x57, 0x0a, 0xee, + 0x07, 0xb8, 0x44, 0x99, 0x5b, 0x01, 0xe7, 0x77, 0x44, 0x8e, 0x92, 0xb4, 0x70, 0x0a, 0x26, 0x50, + 0x7a, 0x94, 0x52, 0xa6, 0xd2, 0x78, 0x94, 0x24, 0x00, 0x27, 0x09, 0xa2, 0x2e, 0x4c, 0xee, 0x45, + 0x66, 0x65, 0x61, 0x4a, 0xaa, 0x97, 0xa5, 0xae, 0xd8, 0xa6, 0xf9, 0x55, 0x93, 0x2c, 0xc4, 0x31, + 0x11, 0xb4, 0x0b, 0x13, 0x7b, 0x9c, 0x11, 0x09, 0x13, 0xd0, 0xf2, 0xd0, 0x2a, 0x2a, 0xb7, 0x44, + 0x88, 0x22, 0x1c, 0xa1, 0x57, 0xfd, 0xdd, 0xaa, 0xf7, 0x70, 0x9a, 0xfc, 0x86, 0x06, 0x17, 0xf7, + 0x89, 0x1f, 0xda, 0x66, 0xfa, 0x32, 0x65, 0xb2, 0xbc, 0x1a, 0x7d, 0x3b, 0x0f, 0x21, 0x5f, 0x26, + 0xb9, 0x20, 0x9c, 0xdf, 0x05, 0xaa, 0x54, 0x73, 0x9b, 0x78, 0x2b, 0x34, 0x42, 0xdb, 0xdc, 0xf2, + 0xf6, 0x88, 0x4b, 0x3f, 0x56, 0x84, 0x1f, 0x06, 0xc6, 0x38, 0x98, 0x52, 0xbd, 0x5a, 0x5c, 0x0d, + 0xf7, 0xc3, 0xa1, 0xff, 0x58, 0x83, 0x8c, 0x65, 0x17, 0x7d, 0x55, 0x83, 0xe9, 0x1d, 0x62, 0x84, + 0x3d, 0x9f, 0x5c, 0x33, 0x42, 0xf9, 0x34, 0xe6, 0xf6, 0x69, 0x18, 0x94, 0x97, 0xae, 0x2a, 0x88, + 0xf9, 0xc5, 0xbf, 0x8c, 0x6e, 0xa3, 0x82, 0x70, 0xa2, 0x07, 0x8b, 0xcf, 0xc1, 0x7c, 0xa6, 0xe1, + 0x89, 0xae, 0x4b, 0xff, 0x85, 0x06, 0x79, 0x01, 0xa9, 0xd1, 0x2b, 0x30, 0x66, 0x58, 0x96, 0x8c, + 0x57, 0xf9, 0x74, 0x39, 0x07, 0x17, 0x4b, 0x7d, 0x81, 0xc4, 0x7e, 0x62, 0x8e, 0x16, 0x5d, 0x05, + 0x64, 0x24, 0x6e, 0xb1, 0xd7, 0x63, 0x17, 0x7d, 0x76, 0x19, 0xb5, 0x9c, 0x81, 0xe2, 0x9c, 0x16, + 0xfa, 0xdf, 0xd1, 0x00, 0x65, 0xe3, 0x21, 0x21, 0x1f, 0xaa, 0x62, 0x29, 0x47, 0xb3, 0x54, 0xca, + 0xec, 0x9f, 0xf6, 0x3b, 0x8e, 0x5f, 0x71, 0x89, 0x82, 0x00, 0x4b, 0x3a, 0xfa, 0x5f, 0x6a, 0x10, + 0xc7, 0xb4, 0x43, 0x1f, 0x84, 0x29, 0x8b, 0x04, 0xa6, 0x6f, 0x77, 0xc3, 0xd8, 0x4b, 0x59, 0xc6, + 0xb2, 0x69, 0xc4, 0x20, 0xac, 0xd6, 0x43, 0x3a, 0x8c, 0x87, 0x46, 0xb0, 0xd7, 0x6c, 0x08, 0xa5, + 0x92, 0x89, 0x00, 0x5b, 0xac, 0x04, 0x0b, 0x48, 0x1c, 0xdb, 0x60, 0x64, 0x80, 0xd8, 0x06, 0x68, + 0xe7, 0x14, 0x02, 0x39, 0xa0, 0x7b, 0x07, 0x71, 0xd0, 0x7f, 0xad, 0x02, 0xe7, 0x68, 0x95, 0x75, + 0xc3, 0x76, 0x43, 0xe2, 0x32, 0x2f, 0xdf, 0x92, 0x83, 0xd0, 0x86, 0x99, 0xd0, 0xb7, 0xdb, 0x6d, + 0xe2, 0x8b, 0x70, 0x30, 0x27, 0xf7, 0xd8, 0x96, 0x5e, 0x33, 0x5b, 0x2a, 0x22, 0x9c, 0xc4, 0x8b, + 0x9e, 0x66, 0xee, 0xb0, 0xf2, 0xd9, 0xcd, 0xbb, 0xa2, 0xa5, 0x4a, 0x99, 0x02, 0xb9, 0x2b, 0x82, + 0x65, 0xc8, 0x40, 0x88, 0xac, 0x14, 0xf3, 0x16, 0xe8, 0x43, 0x30, 0x23, 0xbc, 0x4a, 0x79, 0x90, + 0x0a, 0xa1, 0x7e, 0xb3, 0x13, 0xe6, 0xaa, 0x0a, 0xc0, 0xc9, 0x7a, 0xfa, 0x1f, 0x57, 0x20, 0x19, + 0x6e, 0xb1, 0xec, 0x28, 0x65, 0x23, 0x74, 0x54, 0xce, 0x2c, 0x42, 0xc7, 0xfb, 0x58, 0xac, 0x62, + 0x1e, 0x86, 0x9e, 0xdf, 0x52, 0xab, 0x11, 0x86, 0x79, 0x10, 0x79, 0x59, 0x23, 0x1e, 0xd6, 0xd1, + 0x13, 0x0f, 0xeb, 0x07, 0x85, 0x5f, 0xf8, 0x58, 0x22, 0x4e, 0x4a, 0xe4, 0x17, 0x3e, 0x9f, 0x68, + 0xa8, 0x38, 0x85, 0xbf, 0xa9, 0xc1, 0x84, 0x08, 0x02, 0x36, 0x80, 0x97, 0xfc, 0x0e, 0x8c, 0x31, + 0x95, 0x67, 0x18, 0x69, 0xb0, 0xb5, 0xeb, 0x79, 0x61, 0x22, 0x14, 0x1a, 0x73, 0xa6, 0x66, 0xff, + 0x62, 0x8e, 0x9e, 0x79, 0xe9, 0xf9, 0xe6, 0xae, 0x1d, 0x12, 0x33, 0x8c, 0x02, 0x2c, 0x45, 0x5e, + 0x7a, 0x4a, 0x39, 0x4e, 0xd4, 0xd2, 0xbf, 0x39, 0x0a, 0x8f, 0x0a, 0xc4, 0x19, 0x11, 0x49, 0x32, + 0xb8, 0x43, 0x38, 0x2f, 0xe6, 0xb6, 0xe1, 0x1b, 0xb6, 0xbc, 0xfd, 0x2f, 0xa7, 0xfa, 0x0a, 0xbf, + 0x90, 0x0c, 0x3a, 0x9c, 0x47, 0x83, 0x87, 0x0a, 0x62, 0xc5, 0xd7, 0x89, 0xe1, 0x84, 0xbb, 0x11, + 0xed, 0xca, 0x30, 0xa1, 0x82, 0xb2, 0xf8, 0x70, 0x2e, 0x15, 0xe6, 0x7d, 0x20, 0x00, 0x75, 0x9f, + 0x18, 0xaa, 0xeb, 0xc3, 0x10, 0xfe, 0xd0, 0xeb, 0xb9, 0x18, 0x71, 0x01, 0x25, 0x66, 0x43, 0x34, + 0x0e, 0x98, 0x49, 0x02, 0x93, 0xd0, 0xb7, 0x59, 0x48, 0x3b, 0x69, 0xc8, 0x5e, 0x4f, 0x82, 0x70, + 0xba, 0x2e, 0x7a, 0x06, 0x66, 0x99, 0x37, 0x47, 0xfc, 0x26, 0x7f, 0x2c, 0x7e, 0x41, 0xb6, 0x91, + 0x80, 0xe0, 0x54, 0x4d, 0xfd, 0xd7, 0x35, 0x98, 0x56, 0x97, 0xdd, 0x00, 0xef, 0x7c, 0x7a, 0xca, + 0x61, 0x38, 0xc4, 0x23, 0x04, 0x95, 0xea, 0x20, 0xe7, 0xe1, 0xef, 0x54, 0xe0, 0x7c, 0x4e, 0x1b, + 0x76, 0x37, 0x4f, 0x52, 0x07, 0xeb, 0x30, 0x77, 0xf3, 0x99, 0x43, 0x5a, 0xde, 0xcd, 0xa7, 0x21, + 0x38, 0x43, 0x17, 0xdd, 0x86, 0x11, 0xd3, 0xb7, 0xc5, 0xb0, 0x7c, 0xa8, 0x94, 0x5a, 0x88, 0x9b, + 0x2b, 0x53, 0x82, 0xe2, 0x48, 0x1d, 0x37, 0x31, 0x45, 0x48, 0x8f, 0x07, 0x75, 0x53, 0x47, 0x67, + 0x35, 0x3b, 0x1e, 0xd4, 0xbd, 0x1f, 0xe0, 0x64, 0x3d, 0xfd, 0xcf, 0x47, 0x60, 0x4a, 0x09, 0x67, + 0x88, 0xd6, 0x87, 0x31, 0x47, 0xc4, 0xfd, 0x8a, 0x4c, 0x12, 0xeb, 0x30, 0xd2, 0xee, 0xf6, 0x4a, + 0xda, 0x23, 0x24, 0xba, 0x6b, 0x14, 0x5d, 0xbb, 0xdb, 0x43, 0xb7, 0xa5, 0x85, 0xa3, 0x9c, 0x0d, + 0x42, 0xba, 0xcb, 0xa7, 0xac, 0x1c, 0xd1, 0xa2, 0x1e, 0x2d, 0x5c, 0xd4, 0x1d, 0x98, 0x08, 0x84, + 0xf9, 0x63, 0xac, 0xfc, 0xab, 0x56, 0x65, 0xa4, 0x85, 0xb9, 0x83, 0xeb, 0x4e, 0x91, 0x35, 0x24, + 0xa2, 0x41, 0xe5, 0xb2, 0x1e, 0x7b, 0xce, 0xc4, 0x94, 0xc2, 0x2a, 0x97, 0xcb, 0x6e, 0xb1, 0x12, + 0x2c, 0x20, 0x19, 0x76, 0x3f, 0x31, 0x10, 0xbb, 0xff, 0x52, 0x05, 0x50, 0xb6, 0x1b, 0xe8, 0x5d, + 0x30, 0xc6, 0xde, 0x82, 0x89, 0x7d, 0x2d, 0xa5, 0x68, 0xf6, 0x60, 0x0c, 0x73, 0x18, 0x6a, 0x89, + 0x37, 0x7a, 0xe5, 0xa6, 0x93, 0xb9, 0xa0, 0x08, 0x7a, 0xca, 0x83, 0xbe, 0xe8, 0xfc, 0x1c, 0x29, + 0x3c, 0x3f, 0x6f, 0xc1, 0x44, 0xc7, 0x76, 0xd9, 0x3d, 0x58, 0x39, 0xab, 0x10, 0xbf, 0x29, 0xe7, + 0x28, 0x70, 0x84, 0x4b, 0xff, 0xd3, 0x0a, 0x5d, 0xfa, 0xb1, 0xf4, 0x78, 0x08, 0x60, 0xf4, 0x42, + 0x8f, 0x8b, 0x21, 0x62, 0x07, 0x34, 0xcb, 0xcd, 0xb2, 0x44, 0xba, 0x2c, 0x11, 0xf2, 0x0b, 0xec, + 0xf8, 0x37, 0x56, 0x88, 0x51, 0xd2, 0xa1, 0xdd, 0x21, 0x2f, 0xda, 0xae, 0xe5, 0xdd, 0x11, 0xc3, + 0x3b, 0x2c, 0xe9, 0x2d, 0x89, 0x90, 0x93, 0x8e, 0x7f, 0x63, 0x85, 0x18, 0x7a, 0x09, 0x16, 0x98, + 0x12, 0xea, 0xb2, 0xf8, 0xb2, 0xa2, 0x6f, 0x9e, 0xe3, 0x44, 0x27, 0x5c, 0x95, 0xc5, 0xf4, 0x5b, + 0xa8, 0x17, 0xd4, 0xc1, 0x85, 0xad, 0xf5, 0xdf, 0xd2, 0xe0, 0x62, 0xee, 0x50, 0xa0, 0x6b, 0x30, + 0x1f, 0x7b, 0x2d, 0xa9, 0x2c, 0xb9, 0x1a, 0xc7, 0x35, 0xbe, 0x91, 0xae, 0x80, 0xb3, 0x6d, 0xd0, + 0xba, 0x14, 0x4b, 0x54, 0x96, 0x2f, 0x5c, 0x9e, 0x1e, 0x12, 0xa8, 0xf2, 0x4e, 0x05, 0x9c, 0xd7, + 0x4e, 0xff, 0x64, 0xa2, 0xc3, 0xf1, 0x80, 0xd1, 0xdd, 0xb1, 0x4d, 0xda, 0xf2, 0xd5, 0x8d, 0xdc, + 0x1d, 0x2b, 0xb4, 0x10, 0x73, 0x18, 0x7a, 0x44, 0x7d, 0xcb, 0x26, 0x79, 0x57, 0xf4, 0x9e, 0x4d, + 0x0f, 0x01, 0x84, 0x63, 0xa1, 0xed, 0xb6, 0xd1, 0x0e, 0x54, 0x0d, 0x91, 0x41, 0x48, 0x2c, 0xb5, + 0x8f, 0x96, 0xd2, 0x79, 0x05, 0x0e, 0xee, 0x52, 0x1d, 0xfd, 0xc2, 0x12, 0xb7, 0xfe, 0x8f, 0x35, + 0xb8, 0x44, 0xd9, 0x98, 0x15, 0xbd, 0xe4, 0x97, 0x91, 0x7e, 0x06, 0x38, 0xc9, 0x3b, 0x30, 0xe5, + 0xc7, 0xcd, 0xc4, 0xba, 0xfc, 0x29, 0x35, 0x8a, 0x90, 0xf2, 0x02, 0x9f, 0x4a, 0x39, 0x75, 0xdf, + 0x0b, 0xa2, 0xc9, 0x49, 0x07, 0x16, 0x92, 0x1a, 0x86, 0xd2, 0x13, 0xac, 0xe2, 0xd7, 0x3f, 0x57, + 0x01, 0xd8, 0x20, 0xe1, 0x1d, 0xcf, 0xdf, 0xa3, 0x43, 0xf4, 0x96, 0x7a, 0x7e, 0xfa, 0x30, 0x8c, + 0x76, 0x3d, 0x2b, 0x10, 0x5c, 0x8a, 0x3d, 0x5e, 0x66, 0x7e, 0x37, 0xac, 0x14, 0xd5, 0x60, 0x8c, + 0xd9, 0xfa, 0xc5, 0x01, 0xc2, 0x44, 0x73, 0x2a, 0x58, 0x05, 0x98, 0x97, 0xf3, 0xd8, 0xf0, 0xec, + 0xb9, 0x42, 0x20, 0x74, 0x0d, 0x11, 0x1b, 0x9e, 0x97, 0x61, 0x09, 0xd5, 0x3f, 0x37, 0x0a, 0x89, + 0x64, 0x59, 0xb1, 0x69, 0x44, 0x3b, 0x1b, 0xd3, 0xc8, 0x4b, 0xb0, 0xe0, 0x78, 0x86, 0xb5, 0x62, + 0x38, 0x74, 0xd1, 0xfb, 0x2d, 0x3e, 0x1d, 0x86, 0xdb, 0x96, 0xf9, 0x95, 0x18, 0x03, 0x58, 0x2b, + 0xa8, 0x83, 0x0b, 0x5b, 0xa3, 0x50, 0xa6, 0xe8, 0xe2, 0xe1, 0x9f, 0xd7, 0x86, 0x4d, 0x25, 0xb6, + 0xa4, 0x3e, 0x54, 0x91, 0x67, 0x79, 0x2a, 0x8b, 0xd7, 0x17, 0x35, 0xb8, 0x48, 0x0e, 0x42, 0xe2, + 0xbb, 0x86, 0xb3, 0xe5, 0x1b, 0x3b, 0x3b, 0xb6, 0x29, 0x3c, 0x1a, 0xf9, 0xe4, 0x6c, 0x1e, 0x1f, + 0xd5, 0x2e, 0xae, 0xe6, 0x55, 0xb8, 0x7b, 0x54, 0x7b, 0x7f, 0x36, 0x53, 0x5e, 0xf4, 0x2e, 0x25, + 0xb7, 0x09, 0x5b, 0x8c, 0xf9, 0xe4, 0x16, 0x9f, 0x86, 0xa9, 0x13, 0xbc, 0x2a, 0x98, 0x54, 0xcd, + 0x64, 0xbf, 0x57, 0x81, 0x69, 0xba, 0x7e, 0xd6, 0x3c, 0xd3, 0x70, 0x1a, 0x1b, 0xad, 0x13, 0xa4, + 0x99, 0x43, 0x6b, 0x70, 0x61, 0xc7, 0xf3, 0x4d, 0xb2, 0x55, 0xdf, 0xdc, 0xf2, 0xc4, 0x6d, 0x41, + 0x63, 0xa3, 0x25, 0x98, 0x22, 0xd3, 0x7f, 0xae, 0xe6, 0xc0, 0x71, 0x6e, 0x2b, 0x74, 0x13, 0x2e, + 0xc6, 0xe5, 0xb7, 0xba, 0xdc, 0x0d, 0x82, 0xa2, 0x1b, 0x89, 0xdd, 0x38, 0xae, 0xe6, 0x55, 0xc0, + 0xf9, 0xed, 0x90, 0x01, 0x0f, 0x89, 0x97, 0xda, 0x57, 0x3d, 0xff, 0x8e, 0xe1, 0x5b, 0x49, 0xb4, + 0xa3, 0xb1, 0x35, 0xb5, 0x51, 0x5c, 0x0d, 0xf7, 0xc3, 0xa1, 0xff, 0xd2, 0x38, 0x28, 0x2f, 0xaa, + 0x4e, 0x10, 0x32, 0xfd, 0x57, 0x35, 0xb8, 0x60, 0x3a, 0x36, 0x71, 0xc3, 0xd4, 0xd3, 0x19, 0xce, + 0x56, 0x6e, 0x95, 0x7a, 0xea, 0xd5, 0x25, 0x6e, 0xb3, 0x21, 0xbc, 0x46, 0xea, 0x39, 0xc8, 0x85, + 0x67, 0x4d, 0x0e, 0x04, 0xe7, 0x76, 0x86, 0x7d, 0x0f, 0x2b, 0x6f, 0x36, 0xd4, 0x87, 0xd1, 0x75, + 0x51, 0x86, 0x25, 0x14, 0x3d, 0x09, 0x53, 0x6d, 0xdf, 0xeb, 0x75, 0x83, 0x3a, 0x73, 0x55, 0xe5, + 0xeb, 0x9f, 0x89, 0x61, 0xd7, 0xe2, 0x62, 0xac, 0xd6, 0xa1, 0x42, 0x25, 0xff, 0xb9, 0xe9, 0x93, + 0x1d, 0xfb, 0x40, 0x30, 0x2b, 0x26, 0x54, 0x5e, 0x53, 0xca, 0x71, 0xa2, 0x16, 0x7a, 0x2f, 0x4c, + 0xda, 0x41, 0xd0, 0x23, 0xfe, 0x2d, 0xbc, 0x26, 0x62, 0xa5, 0xb2, 0x1b, 0x88, 0x66, 0x54, 0x88, + 0x63, 0x38, 0xfa, 0x9a, 0x06, 0xb3, 0x3e, 0x79, 0xad, 0x67, 0xfb, 0xc4, 0x62, 0x44, 0x03, 0xf1, + 0xac, 0x0d, 0x0f, 0xf7, 0x94, 0x6e, 0x09, 0x27, 0x90, 0x72, 0x2e, 0x21, 0x2d, 0x4e, 0x49, 0x20, + 0x4e, 0xf5, 0x80, 0x0e, 0x55, 0x60, 0xb7, 0x5d, 0xdb, 0x6d, 0x2f, 0x3b, 0xed, 0x60, 0xa1, 0xca, + 0x18, 0x1f, 0x97, 0x58, 0xe3, 0x62, 0xac, 0xd6, 0xa1, 0x3a, 0x57, 0x2f, 0xa0, 0xfb, 0xbe, 0x43, + 0xf8, 0xf8, 0x4e, 0xc6, 0x26, 0xb9, 0x5b, 0x2a, 0x00, 0x27, 0xeb, 0x51, 0x7d, 0x3c, 0x2a, 0x10, + 0xa3, 0x0c, 0x3c, 0xe8, 0x05, 0xed, 0xe7, 0xad, 0x04, 0x04, 0xa7, 0x6a, 0x2e, 0x2e, 0xc3, 0xf9, + 0x9c, 0xcf, 0x3c, 0x11, 0x73, 0xf9, 0xf5, 0x0a, 0xbc, 0xf3, 0x9e, 0xab, 0x12, 0xfd, 0x03, 0x0d, + 0xa6, 0xc8, 0x41, 0xe8, 0x1b, 0xd2, 0x9b, 0x9d, 0x4e, 0xd1, 0xce, 0x99, 0x6c, 0x81, 0xa5, 0xd5, + 0x98, 0x10, 0x9f, 0x36, 0x29, 0x2c, 0x28, 0x10, 0xac, 0xf6, 0x87, 0x6a, 0x48, 0x3c, 0x24, 0x8a, + 0x6a, 0xb9, 0x16, 0x79, 0x96, 0x04, 0x64, 0xf1, 0x63, 0x30, 0x97, 0xc6, 0x7c, 0xa2, 0x91, 0xfa, + 0xdd, 0x0a, 0x4c, 0x6c, 0xfa, 0x1e, 0x95, 0x63, 0xee, 0x43, 0x6c, 0x3f, 0x23, 0x11, 0xdb, 0xaf, + 0xd4, 0x3b, 0x59, 0xd1, 0xd9, 0xc2, 0xb8, 0xa2, 0x76, 0x2a, 0xae, 0xe8, 0xf2, 0x30, 0x44, 0xfa, + 0x07, 0x12, 0xfd, 0xd7, 0x1a, 0x4c, 0x89, 0x9a, 0xf7, 0x21, 0xa4, 0xdd, 0xa7, 0x92, 0x21, 0xed, + 0x3e, 0x32, 0xc4, 0x77, 0x15, 0xc4, 0xb0, 0xfb, 0x86, 0x06, 0x33, 0xa2, 0xc6, 0x3a, 0xe9, 0x6c, + 0x13, 0x1f, 0x5d, 0x85, 0x89, 0xa0, 0xc7, 0x26, 0x52, 0x7c, 0xd0, 0x43, 0xaa, 0x64, 0xec, 0x6f, + 0x1b, 0x26, 0x4b, 0x16, 0xc6, 0xab, 0x28, 0xd1, 0x3a, 0x79, 0x01, 0x8e, 0x1a, 0x53, 0x39, 0xd7, + 0xf7, 0x9c, 0x4c, 0xe4, 0x10, 0xec, 0x39, 0x04, 0x33, 0x08, 0x15, 0x2f, 0xe9, 0xdf, 0xc8, 0xaa, + 0xc3, 0xc4, 0x4b, 0x0a, 0x0e, 0x30, 0x2f, 0xd7, 0xbf, 0x30, 0x2a, 0x07, 0x9b, 0x45, 0xd4, 0xbb, + 0x0e, 0x93, 0xa6, 0x4f, 0x8c, 0x90, 0x58, 0x2b, 0x87, 0x83, 0x74, 0x8e, 0x31, 0xeb, 0x7a, 0xd4, + 0x02, 0xc7, 0x8d, 0x29, 0x5f, 0x54, 0x2f, 0x0b, 0x2a, 0xf1, 0x11, 0x52, 0x78, 0x51, 0xf0, 0x51, + 0x18, 0xf3, 0xee, 0xb8, 0xd2, 0xe7, 0xa0, 0x2f, 0x61, 0xf6, 0x29, 0x37, 0x69, 0x6d, 0xcc, 0x1b, + 0xb1, 0x98, 0x49, 0x3d, 0xbf, 0xeb, 0x05, 0x91, 0x35, 0x86, 0xc7, 0x4c, 0xe2, 0x45, 0x38, 0x82, + 0x21, 0x07, 0x26, 0x3a, 0x6c, 0x1a, 0x86, 0x0a, 0xde, 0x98, 0x98, 0x50, 0x35, 0xbc, 0x37, 0xc3, + 0x8c, 0x23, 0x12, 0xf4, 0x7c, 0xa3, 0x3c, 0x38, 0xe8, 0x1a, 0x26, 0x51, 0xcf, 0xb7, 0x8d, 0xa8, + 0x10, 0xc7, 0x70, 0x74, 0x08, 0x53, 0x3c, 0x78, 0x03, 0xb7, 0xb5, 0x4e, 0x94, 0x37, 0x17, 0x89, + 0xee, 0x6d, 0xc5, 0xd8, 0xf8, 0xd0, 0x2b, 0x05, 0x58, 0xa5, 0xa5, 0xff, 0xfc, 0xa8, 0x5c, 0xa4, + 0x22, 0x16, 0x6b, 0x7e, 0x82, 0x2b, 0xad, 0x54, 0x82, 0xab, 0xf7, 0x47, 0x39, 0xa3, 0x2a, 0x89, + 0x50, 0xf4, 0x32, 0x67, 0xd4, 0xb4, 0x20, 0x9d, 0xc8, 0x13, 0xd5, 0x83, 0xf3, 0x41, 0x68, 0x38, + 0xa4, 0x65, 0x0b, 0x95, 0x3a, 0x08, 0x8d, 0x4e, 0xb7, 0x44, 0x44, 0x79, 0xee, 0xfb, 0x9d, 0x45, + 0x85, 0xf3, 0xf0, 0xa3, 0xcf, 0x6b, 0xb0, 0xc0, 0xca, 0x97, 0x7b, 0xa1, 0xc7, 0xc3, 0xe4, 0xc5, + 0xc4, 0x4f, 0x7e, 0x23, 0xc9, 0x54, 0xa0, 0x56, 0x01, 0x3e, 0x5c, 0x48, 0x09, 0x7d, 0x1a, 0x2e, + 0x3a, 0x46, 0x10, 0x2e, 0x9b, 0xa1, 0xbd, 0x6f, 0x87, 0x87, 0x71, 0x17, 0x4e, 0x9e, 0xec, 0x8b, + 0x89, 0xda, 0x6b, 0x79, 0xc8, 0x70, 0x3e, 0x0d, 0xfd, 0x2f, 0x34, 0x40, 0xd9, 0x25, 0x84, 0x1c, + 0xa8, 0x5a, 0x91, 0x33, 0xb6, 0x56, 0x3e, 0x67, 0x4a, 0x8c, 0x32, 0xe6, 0xcc, 0xd2, 0x87, 0x5b, + 0x52, 0x40, 0x1e, 0x4c, 0xde, 0xd9, 0xb5, 0x43, 0xe2, 0xd8, 0x41, 0x28, 0xb8, 0xf3, 0xb0, 0xe4, + 0x64, 0x28, 0xa2, 0x17, 0x23, 0xc4, 0x38, 0xa6, 0xa1, 0x7f, 0x69, 0x04, 0xaa, 0x27, 0xc8, 0xa9, + 0xda, 0x03, 0x64, 0x2a, 0x81, 0xee, 0x87, 0xb1, 0x23, 0x30, 0x47, 0x82, 0x7a, 0x06, 0x19, 0xce, + 0x21, 0x80, 0x3e, 0x0d, 0x17, 0x6c, 0x77, 0xc7, 0x37, 0x82, 0xd0, 0xef, 0x31, 0xc3, 0xec, 0x30, + 0xf1, 0xe2, 0x99, 0x06, 0xd1, 0xcc, 0x41, 0x87, 0x73, 0x89, 0x20, 0x02, 0x13, 0x77, 0x3c, 0x7f, + 0x8f, 0x32, 0xcf, 0xd1, 0xf2, 0x99, 0x83, 0x5e, 0x64, 0x28, 0x62, 0xae, 0xc9, 0x7f, 0x07, 0x38, + 0xc2, 0xad, 0xff, 0x91, 0x06, 0x63, 0xfc, 0x7d, 0xe1, 0xd9, 0x0b, 0x4f, 0x7f, 0x2b, 0x21, 0x3c, + 0x95, 0x8a, 0x36, 0xcd, 0xba, 0x5a, 0x18, 0x07, 0xf9, 0x4d, 0x0d, 0x26, 0x59, 0x8d, 0xfb, 0x20, + 0xcd, 0xbc, 0x92, 0x94, 0x66, 0x9e, 0x2e, 0xfd, 0x35, 0x05, 0xb2, 0xcc, 0x1f, 0x8d, 0x88, 0x6f, + 0x61, 0xc2, 0x42, 0x13, 0xce, 0x0b, 0x0f, 0xc2, 0x35, 0x7b, 0x87, 0xd0, 0xd5, 0xd5, 0x30, 0x0e, + 0x03, 0x11, 0x14, 0x80, 0x3f, 0x21, 0xc9, 0x82, 0x71, 0x5e, 0x1b, 0xf4, 0x7b, 0x1a, 0x3d, 0x96, + 0x43, 0xdf, 0x36, 0x87, 0x0a, 0x2e, 0x2c, 0xfb, 0xb6, 0xb4, 0xce, 0x91, 0x71, 0xa5, 0xe0, 0x56, + 0x7c, 0x3e, 0xb3, 0xd2, 0xbb, 0x47, 0xb5, 0x5a, 0x8e, 0xbd, 0x26, 0x8e, 0x59, 0x1a, 0x84, 0x9f, + 0xfb, 0x61, 0xdf, 0x2a, 0xcc, 0xd6, 0x19, 0xf5, 0x18, 0x5d, 0x87, 0xb1, 0xc0, 0xf4, 0xba, 0xe4, + 0x24, 0xe1, 0xd2, 0xe5, 0x00, 0xb7, 0x68, 0x4b, 0xcc, 0x11, 0x2c, 0xbe, 0x0a, 0xd3, 0x6a, 0xcf, + 0x73, 0x94, 0x8e, 0x86, 0xaa, 0x74, 0x9c, 0xf8, 0x46, 0x43, 0x55, 0x52, 0x7e, 0xbf, 0x02, 0x22, + 0xff, 0xf3, 0x00, 0x16, 0x5d, 0x3b, 0x0a, 0x0e, 0x39, 0x44, 0x2e, 0xc2, 0x74, 0x0a, 0xf7, 0x78, + 0x0c, 0xd4, 0xf8, 0x90, 0xc8, 0x85, 0x71, 0xc7, 0xd8, 0x26, 0x4e, 0x94, 0xfc, 0xed, 0x6a, 0xf9, + 0xec, 0x64, 0x3c, 0xc0, 0x77, 0x90, 0xb2, 0xfb, 0xf1, 0x42, 0x2c, 0xa8, 0x2c, 0x3e, 0x0d, 0x53, + 0x4a, 0xb5, 0x13, 0xe9, 0x79, 0x6f, 0x68, 0x70, 0x29, 0x5a, 0x12, 0xc9, 0xe0, 0x2e, 0xe8, 0x71, + 0xa8, 0x1a, 0x5d, 0x9b, 0x99, 0x3e, 0x54, 0xe3, 0xd1, 0xf2, 0x66, 0x93, 0x95, 0x61, 0x09, 0x45, + 0xef, 0x83, 0x6a, 0x34, 0x4f, 0x42, 0x40, 0x92, 0x5b, 0x5c, 0x5a, 0xbc, 0x65, 0x0d, 0xf4, 0x6e, + 0x25, 0xdc, 0xe5, 0x58, 0x7c, 0xa2, 0x49, 0xc2, 0xfc, 0x72, 0x4c, 0xff, 0xf2, 0x08, 0xcc, 0x70, + 0xa5, 0x76, 0xc5, 0x76, 0x2d, 0xdb, 0x6d, 0xdf, 0x07, 0x56, 0x9a, 0xc8, 0xa2, 0x5d, 0x39, 0xad, + 0x2c, 0xda, 0x37, 0x60, 0xfc, 0x35, 0xba, 0xad, 0xa3, 0xe5, 0x30, 0xd0, 0xee, 0x92, 0x73, 0xcd, + 0x38, 0x42, 0x80, 0x05, 0x0a, 0x14, 0x28, 0xb9, 0xcc, 0x87, 0x78, 0x69, 0x9e, 0x18, 0x59, 0x19, + 0xb4, 0x76, 0x3a, 0x3f, 0x91, 0xb9, 0xfe, 0x1f, 0x34, 0x98, 0x4f, 0xb4, 0xb8, 0x0f, 0x27, 0xc1, + 0x4e, 0xf2, 0x24, 0x58, 0x1e, 0xfa, 0x2b, 0x0b, 0x4e, 0x84, 0xa7, 0xe1, 0x62, 0xee, 0x60, 0xdc, + 0x5b, 0x80, 0xd2, 0x7f, 0xbb, 0x02, 0xa3, 0x2d, 0x42, 0xac, 0xfb, 0xb0, 0x32, 0x5f, 0x49, 0x1c, + 0xf2, 0x1f, 0x2d, 0x9d, 0x82, 0xb0, 0xc8, 0x3c, 0xb2, 0x93, 0x32, 0x8f, 0x7c, 0xac, 0x34, 0x85, + 0xfe, 0xb6, 0x91, 0x5f, 0xae, 0x00, 0xd0, 0x6a, 0x3c, 0xef, 0xb2, 0xf0, 0x76, 0x8b, 0x33, 0xf3, + 0x4f, 0xbe, 0x55, 0xf2, 0xe9, 0xeb, 0x30, 0xce, 0xb3, 0x40, 0x0a, 0x3b, 0x33, 0xf0, 0x24, 0x59, + 0xb4, 0x04, 0x0b, 0x48, 0x92, 0x5b, 0x8c, 0x9e, 0x12, 0xb7, 0xd0, 0xff, 0xa9, 0x06, 0x2c, 0xad, + 0x49, 0x63, 0x83, 0xbd, 0xc3, 0xb5, 0xf9, 0xfd, 0x4f, 0x43, 0x0d, 0x7d, 0xc8, 0xec, 0xac, 0x4d, + 0x15, 0x80, 0x93, 0xf5, 0x50, 0x47, 0x19, 0xd7, 0x21, 0xb2, 0x9f, 0x8b, 0x7e, 0xdc, 0x93, 0x3f, + 0xfc, 0xb0, 0x02, 0xe7, 0x52, 0x75, 0x07, 0xd0, 0x3f, 0xce, 0x86, 0xdb, 0x2a, 0x71, 0xae, 0x47, + 0xce, 0x3e, 0xce, 0xb5, 0x0c, 0x39, 0x3d, 0x7a, 0xb6, 0x21, 0xa7, 0xff, 0x50, 0x03, 0x96, 0x4e, + 0xfb, 0x3e, 0x30, 0xde, 0xbf, 0x99, 0x64, 0xbc, 0x1f, 0x2e, 0xbb, 0x70, 0x0a, 0xf8, 0xed, 0x6f, + 0x56, 0x80, 0xa5, 0x28, 0x11, 0xd7, 0xdd, 0xca, 0x0d, 0xb2, 0x56, 0x70, 0x83, 0xfc, 0xa8, 0xb8, + 0x80, 0x4e, 0x59, 0x09, 0x95, 0x4b, 0xe8, 0xf7, 0x29, 0x77, 0xcc, 0x23, 0x49, 0x36, 0x92, 0xbd, + 0x67, 0x46, 0xaf, 0xc3, 0x4c, 0xb0, 0xeb, 0x79, 0xa1, 0x7c, 0x97, 0x3d, 0x5a, 0xde, 0x22, 0xcc, + 0x9c, 0x53, 0xa3, 0x4f, 0xe1, 0x1b, 0xb3, 0xa5, 0xe2, 0xc6, 0x49, 0x52, 0x68, 0x09, 0x60, 0xdb, + 0xf1, 0xcc, 0xbd, 0x7a, 0xb3, 0x81, 0x23, 0x67, 0x44, 0xe6, 0xa3, 0xb2, 0x22, 0x4b, 0xb1, 0x52, + 0x43, 0xff, 0x2f, 0x1a, 0x1f, 0xad, 0x13, 0x6c, 0xab, 0xfb, 0xc8, 0x25, 0xdf, 0x93, 0xe2, 0x92, + 0x4a, 0x3a, 0xc1, 0x04, 0xa7, 0xac, 0xc5, 0xbb, 0x44, 0x5a, 0x71, 0x13, 0xcb, 0xfb, 0x77, 0xc5, + 0x67, 0xca, 0x4c, 0x35, 0x5d, 0x98, 0x71, 0xd4, 0xd4, 0x36, 0x62, 0x9d, 0x97, 0xca, 0x8a, 0x23, + 0x3d, 0xd4, 0x13, 0xc5, 0x38, 0x49, 0x80, 0xf2, 0xda, 0xe8, 0xeb, 0x78, 0x52, 0xdd, 0x4a, 0xec, + 0x47, 0xb8, 0xa9, 0x02, 0x70, 0xb2, 0x9e, 0xfe, 0x0f, 0x2b, 0xf0, 0x08, 0xef, 0x3b, 0xf3, 0x18, + 0x6e, 0x90, 0x2e, 0x71, 0x2d, 0xe2, 0x9a, 0x87, 0x4c, 0x9e, 0xb6, 0xbc, 0x36, 0xfa, 0xdb, 0x1a, + 0x54, 0x89, 0x6b, 0x75, 0x3d, 0xdb, 0x8d, 0x0c, 0xe6, 0x9f, 0x28, 0x9f, 0x44, 0xb8, 0x80, 0xca, + 0xaa, 0x20, 0x20, 0x42, 0x0c, 0x8a, 0x5f, 0x58, 0x12, 0x46, 0x77, 0x60, 0xac, 0xeb, 0x7b, 0xdb, + 0x91, 0xde, 0x75, 0xfb, 0xd4, 0x7b, 0xb0, 0x49, 0xb1, 0xf3, 0xc9, 0x65, 0xff, 0x62, 0x4e, 0x4f, + 0xc7, 0xf0, 0xee, 0x81, 0x7a, 0x7e, 0x82, 0xab, 0x7e, 0xfd, 0x26, 0xe8, 0xf7, 0xee, 0xcb, 0x49, + 0x10, 0xbe, 0x00, 0x8f, 0x29, 0x08, 0x57, 0x0f, 0x4c, 0x12, 0x04, 0x75, 0xa3, 0x6b, 0x98, 0x54, + 0xe7, 0x64, 0x2f, 0x56, 0xb9, 0x25, 0xf8, 0x04, 0x28, 0xff, 0x8f, 0x06, 0x35, 0x05, 0x67, 0xc2, + 0x8d, 0x24, 0xe2, 0x45, 0xdf, 0xd4, 0x60, 0xca, 0x70, 0x5d, 0x2f, 0x34, 0xd4, 0x94, 0x61, 0xd6, + 0x90, 0x73, 0x93, 0x47, 0x6a, 0x69, 0x39, 0x26, 0x93, 0xba, 0x69, 0x54, 0x20, 0x58, 0xed, 0xcd, + 0xe2, 0xc7, 0x60, 0x2e, 0xdd, 0xea, 0x44, 0xda, 0x65, 0x1d, 0x2e, 0x29, 0xbd, 0x62, 0x97, 0x1d, + 0xf5, 0x5d, 0x62, 0xee, 0x05, 0x27, 0x19, 0xc6, 0x15, 0x2a, 0xa0, 0x4b, 0x24, 0x71, 0x70, 0x32, + 0xf6, 0xca, 0xce, 0x0e, 0xec, 0xe8, 0x21, 0xba, 0x82, 0xe3, 0x36, 0x2f, 0xc6, 0x11, 0x5c, 0x7f, + 0x1e, 0xce, 0xab, 0x38, 0x18, 0x4b, 0x3e, 0x91, 0x6f, 0x89, 0xbe, 0x0e, 0x8f, 0x2a, 0x18, 0x72, + 0x5f, 0xd1, 0x9d, 0x04, 0xdd, 0x37, 0xab, 0x11, 0xc3, 0x13, 0xcf, 0x0c, 0xbe, 0xa3, 0xc1, 0x83, + 0xa4, 0x68, 0xd5, 0x09, 0xa6, 0xf1, 0xd2, 0x90, 0xcb, 0xa2, 0x70, 0x55, 0x8b, 0xf8, 0x60, 0x45, + 0x60, 0x5c, 0xdc, 0x33, 0x74, 0x08, 0x10, 0xc8, 0x29, 0x19, 0xc6, 0x7f, 0x33, 0x77, 0x8e, 0x45, + 0x28, 0x71, 0xf9, 0x1b, 0x2b, 0xc4, 0xd0, 0x6b, 0x50, 0x0d, 0xc4, 0x4c, 0x0e, 0xf3, 0xc8, 0x37, + 0x67, 0x61, 0x08, 0x17, 0x35, 0xf1, 0x0b, 0x4b, 0x32, 0xe8, 0x57, 0x34, 0xb8, 0xe0, 0xe4, 0x6c, + 0x2e, 0x21, 0x42, 0xb4, 0xce, 0x60, 0xdf, 0x72, 0x13, 0x77, 0x1e, 0x04, 0xe7, 0x76, 0x05, 0xfd, + 0x5a, 0xe1, 0x8b, 0xd2, 0xb1, 0xf2, 0x59, 0xbe, 0xee, 0xb5, 0xf6, 0x4b, 0x3c, 0x2e, 0xfd, 0x59, + 0x98, 0xf2, 0x62, 0x8e, 0x20, 0x9e, 0x00, 0x7f, 0x7c, 0xc8, 0xce, 0x29, 0x3c, 0x86, 0x5f, 0x18, + 0x2a, 0x05, 0x58, 0xa5, 0x87, 0xbe, 0xae, 0x01, 0xb2, 0x32, 0xe7, 0x86, 0xb8, 0xb3, 0x7c, 0xe1, + 0xd4, 0x0f, 0x47, 0x7e, 0x45, 0x92, 0x2d, 0xc7, 0x39, 0x9d, 0xd0, 0xdf, 0x98, 0xe0, 0xd2, 0x3e, + 0x33, 0x52, 0x6f, 0xc3, 0xf8, 0x36, 0xd3, 0x96, 0x05, 0x17, 0x28, 0xad, 0x9a, 0x73, 0x9d, 0x9b, + 0xab, 0xb2, 0xfc, 0x7f, 0x2c, 0x30, 0xa3, 0x97, 0x61, 0xc4, 0x72, 0xa3, 0xcc, 0x91, 0x1f, 0x19, + 0x42, 0x55, 0x8c, 0xbd, 0x7f, 0xe9, 0xc6, 0xa1, 0x48, 0x91, 0x0b, 0x55, 0x57, 0x08, 0xc8, 0x62, + 0x9b, 0x3e, 0x5f, 0x96, 0x80, 0x14, 0xb4, 0xa5, 0x78, 0x1f, 0x95, 0x60, 0x49, 0x83, 0xd2, 0x4b, + 0x59, 0xc8, 0x4a, 0xd3, 0x93, 0x8a, 0x6f, 0x3f, 0xab, 0xc4, 0xa6, 0xaa, 0xc6, 0x8e, 0x0d, 0xae, + 0xc6, 0xce, 0x14, 0xaa, 0xb0, 0x04, 0xc6, 0x43, 0x9e, 0x35, 0x7d, 0xbc, 0x7c, 0x06, 0x51, 0xda, + 0x7f, 0x96, 0x55, 0x3d, 0x96, 0xca, 0x45, 0xca, 0x75, 0x81, 0x9c, 0x2e, 0xac, 0x7d, 0x96, 0x63, + 0x48, 0x2c, 0xfa, 0xd2, 0x0b, 0x8b, 0x67, 0x2a, 0xe2, 0x0b, 0x8b, 0xff, 0x8f, 0x05, 0x66, 0xf4, + 0x2a, 0xd5, 0xcc, 0xf8, 0x11, 0x27, 0x22, 0x1d, 0x3e, 0x3f, 0xe4, 0xd6, 0x0a, 0x22, 0xff, 0x61, + 0xfe, 0x0b, 0x4b, 0xfc, 0x68, 0x1b, 0x26, 0x84, 0x15, 0x44, 0xbc, 0x9d, 0xff, 0xc8, 0x10, 0x69, + 0x1f, 0xa2, 0xe4, 0x5b, 0xfc, 0xc5, 0x65, 0x84, 0x58, 0xff, 0xb7, 0x93, 0xdc, 0x7e, 0x25, 0x7c, + 0x0c, 0x76, 0xa0, 0x1a, 0xa1, 0x1b, 0xc6, 0x97, 0x3d, 0x4a, 0xb3, 0xc3, 0x3f, 0x2d, 0xfa, 0x85, + 0x25, 0x6e, 0x54, 0xcf, 0x7b, 0x36, 0x10, 0x07, 0xbc, 0x1d, 0xec, 0xc9, 0x40, 0x32, 0x39, 0xed, + 0xc8, 0xfd, 0x48, 0x4e, 0x9b, 0xef, 0x83, 0x31, 0x5a, 0xca, 0x07, 0xe3, 0x59, 0x38, 0x27, 0x2e, + 0xde, 0x9a, 0x16, 0x61, 0x77, 0x41, 0xc2, 0x45, 0x93, 0x3d, 0x05, 0xac, 0x27, 0x41, 0x38, 0x5d, + 0x17, 0xfd, 0xbe, 0x06, 0x55, 0x53, 0x08, 0x30, 0x62, 0x5f, 0xad, 0x0d, 0x67, 0xe4, 0x5c, 0x8a, + 0xe4, 0x21, 0x2e, 0x4e, 0xdf, 0x8e, 0x78, 0x44, 0x54, 0x7c, 0x4a, 0x97, 0x74, 0xb2, 0xd7, 0xe8, + 0x5f, 0x51, 0x65, 0xc1, 0x61, 0xc9, 0x7f, 0xd8, 0x03, 0x29, 0xee, 0x3b, 0x7a, 0x73, 0xc8, 0xaf, + 0x58, 0x8e, 0x31, 0xf2, 0x0f, 0xf9, 0x84, 0xd4, 0x0b, 0x62, 0xc8, 0x29, 0x7d, 0x8b, 0xda, 0x7d, + 0xf4, 0x1b, 0x1a, 0x3c, 0xc6, 0x1d, 0x76, 0xeb, 0x54, 0x40, 0x60, 0xa9, 0xb8, 0x48, 0x9c, 0xfb, + 0x2b, 0xf6, 0x18, 0xa9, 0x9e, 0xd8, 0x63, 0xe4, 0xf1, 0xe3, 0xa3, 0xda, 0x63, 0xf5, 0x01, 0x70, + 0xe3, 0x81, 0x7a, 0xb0, 0xb8, 0x07, 0x33, 0x89, 0xc9, 0x3e, 0xcb, 0x6b, 0xcd, 0x45, 0x17, 0xe6, + 0xd2, 0x73, 0x72, 0xa6, 0xd7, 0xa8, 0x37, 0x60, 0x52, 0x1e, 0x16, 0xe8, 0x11, 0x85, 0x50, 0x7c, + 0x98, 0xdf, 0x20, 0x87, 0x9c, 0x6a, 0x2d, 0xa1, 0xeb, 0x71, 0x65, 0xff, 0x36, 0x2d, 0x10, 0x08, + 0xf5, 0xef, 0x0b, 0x4b, 0xce, 0x16, 0xe9, 0x74, 0x1d, 0x23, 0x24, 0x6f, 0xff, 0xbb, 0x11, 0xfd, + 0xbf, 0x69, 0x9c, 0xe7, 0x8b, 0x74, 0x7f, 0x06, 0x4c, 0x75, 0x78, 0xe4, 0x3d, 0xf6, 0x2e, 0x4f, + 0x2b, 0xff, 0x22, 0x70, 0x3d, 0x46, 0x83, 0x55, 0x9c, 0xe8, 0x4e, 0x36, 0x21, 0xe5, 0xd5, 0xe1, + 0x0e, 0xe7, 0x81, 0xf3, 0x52, 0xa2, 0x6c, 0x1b, 0xaa, 0xd7, 0x46, 0x8e, 0x89, 0xa9, 0x1c, 0x80, + 0x19, 0xe7, 0xc4, 0x7b, 0xe6, 0x82, 0xd3, 0xbf, 0x3b, 0x02, 0xb9, 0x59, 0x4d, 0x90, 0x0e, 0xe3, + 0xdc, 0x53, 0x5e, 0xcd, 0xd4, 0xc9, 0xdd, 0xe8, 0xb1, 0x80, 0x20, 0x1f, 0x2e, 0x08, 0x3f, 0xf4, + 0x1b, 0xe4, 0x30, 0xce, 0x11, 0x29, 0xa6, 0xfe, 0xf1, 0x3c, 0xb1, 0x8b, 0x3d, 0x24, 0x49, 0xdf, + 0xae, 0xb2, 0x88, 0x5c, 0xad, 0x14, 0x26, 0x9c, 0x8b, 0x1b, 0xdd, 0xe4, 0x8f, 0x6a, 0x5c, 0x8b, + 0x85, 0xae, 0x89, 0xb9, 0x83, 0xfa, 0x0e, 0x64, 0x35, 0xaf, 0x02, 0xce, 0x6f, 0x87, 0xf6, 0x01, + 0x75, 0x8c, 0x83, 0x34, 0xb6, 0x21, 0xd2, 0x09, 0xac, 0x67, 0xb0, 0xe1, 0x1c, 0x0a, 0xf4, 0x00, + 0x35, 0x4c, 0x93, 0x74, 0x43, 0x62, 0xf1, 0x61, 0x8d, 0x0c, 0xd0, 0xec, 0x00, 0x5d, 0x4e, 0x82, + 0x70, 0xba, 0xae, 0xfe, 0x3b, 0x15, 0x18, 0x63, 0x2a, 0xf1, 0xdb, 0xc3, 0xa7, 0x89, 0x75, 0xb5, + 0xf0, 0xbe, 0xb3, 0x9d, 0xba, 0xef, 0x7c, 0xae, 0x3c, 0x89, 0xfe, 0x17, 0x9e, 0x9f, 0x80, 0x4b, + 0xac, 0xda, 0xb2, 0xc5, 0xb4, 0xe0, 0x80, 0x58, 0xcb, 0x96, 0xc5, 0x5e, 0xb7, 0xdd, 0xdb, 0x65, + 0xe5, 0x11, 0x18, 0xe9, 0xf9, 0x4e, 0xfa, 0x59, 0xe5, 0x2d, 0xbc, 0x86, 0x69, 0xb9, 0xfe, 0x15, + 0x0d, 0xe6, 0x18, 0xee, 0xba, 0x4f, 0x98, 0x94, 0x63, 0x38, 0x01, 0xda, 0x87, 0xaa, 0x2f, 0x0c, + 0x76, 0x62, 0x6e, 0xd6, 0x4a, 0x7f, 0x9a, 0x82, 0x17, 0x0b, 0x9c, 0x22, 0x07, 0x8f, 0xf8, 0x85, + 0x25, 0x2d, 0xfd, 0xcf, 0xc6, 0x61, 0xa1, 0xa8, 0x11, 0xfa, 0x9a, 0x06, 0x97, 0xcc, 0xf8, 0x84, + 0x5d, 0xee, 0x85, 0xbb, 0x9e, 0x6f, 0x87, 0x36, 0x09, 0x86, 0xd1, 0x69, 0xeb, 0xcb, 0xb2, 0x57, + 0x2c, 0xb4, 0x44, 0x3d, 0x97, 0x02, 0x2e, 0xa0, 0x8c, 0x3e, 0x0d, 0xb0, 0x17, 0xc7, 0xb2, 0xe2, + 0x2b, 0xed, 0x46, 0xe9, 0xb1, 0x52, 0xe2, 0x5d, 0x45, 0x9d, 0x62, 0xb6, 0x2b, 0xa5, 0x5c, 0x21, + 0x47, 0x89, 0x07, 0xc1, 0xee, 0x0d, 0x72, 0xd8, 0x35, 0xec, 0xc8, 0x5d, 0xbc, 0x3c, 0xf1, 0x56, + 0xeb, 0xba, 0x40, 0x95, 0x24, 0xae, 0x94, 0x2b, 0xe4, 0xd0, 0x97, 0x34, 0x98, 0xe1, 0x02, 0xb6, + 0xf0, 0x65, 0x12, 0xcc, 0x67, 0xa3, 0x74, 0x07, 0x6e, 0xaa, 0xd8, 0x64, 0x1f, 0xd8, 0xdd, 0x49, + 0x12, 0x94, 0xa4, 0x8b, 0xde, 0xd0, 0x60, 0x3e, 0x99, 0xcc, 0xea, 0x06, 0x39, 0x14, 0x4a, 0x34, + 0x2e, 0x3f, 0x1c, 0x69, 0x8c, 0xb2, 0x47, 0x4c, 0x59, 0xca, 0x82, 0xb3, 0x7d, 0x60, 0x3d, 0x23, + 0xa1, 0x69, 0x89, 0xe4, 0xba, 0xb6, 0xe7, 0xd2, 0x9e, 0x8d, 0x0f, 0xd9, 0xb3, 0xd5, 0xad, 0x7a, + 0x23, 0x81, 0x31, 0xd9, 0xb3, 0x2c, 0x38, 0xdb, 0x07, 0xfd, 0xcd, 0x0a, 0x5c, 0xee, 0x8f, 0x0c, + 0x3d, 0x17, 0xb9, 0xab, 0x73, 0xde, 0xf2, 0x44, 0xda, 0x5d, 0x7d, 0x21, 0x67, 0x93, 0x26, 0x5c, + 0xd7, 0x7d, 0x40, 0x8e, 0x11, 0x84, 0x3c, 0x73, 0x64, 0x24, 0x0a, 0x97, 0xf0, 0x5c, 0x67, 0xc7, + 0xd3, 0x5a, 0x06, 0x13, 0xce, 0xc1, 0x1e, 0xd1, 0xac, 0x7b, 0x9d, 0xae, 0x43, 0x24, 0xcd, 0x4a, + 0x79, 0x9a, 0x49, 0x4c, 0x38, 0x07, 0xbb, 0xfe, 0xd9, 0x0a, 0x3c, 0x50, 0xb0, 0x7d, 0x0b, 0xc6, + 0x40, 0xfb, 0x7f, 0x6e, 0x0c, 0xde, 0xd4, 0x60, 0x92, 0x8d, 0xc1, 0xdb, 0xc4, 0xbd, 0x97, 0xf5, + 0xb5, 0xc0, 0xb9, 0xe0, 0x0f, 0x35, 0x98, 0xcf, 0xc4, 0x8b, 0x1a, 0xc8, 0x39, 0xf4, 0xbe, 0xdd, + 0x99, 0xbf, 0x3b, 0x9d, 0x0b, 0x79, 0x2a, 0x37, 0x0f, 0xf2, 0x8b, 0x30, 0x93, 0xf0, 0x2d, 0x90, + 0xcf, 0xf0, 0xb5, 0xdc, 0x67, 0xf8, 0xea, 0x2b, 0xfb, 0x4a, 0xdf, 0x57, 0xf6, 0x9f, 0xaf, 0xc0, + 0x62, 0x31, 0xcf, 0xfe, 0x6b, 0xb3, 0xea, 0xe5, 0xce, 0xcf, 0x9e, 0x9d, 0x7f, 0x7d, 0x76, 0x7e, + 0x74, 0x92, 0x14, 0x1e, 0x98, 0xff, 0xff, 0x24, 0x19, 0x74, 0x2c, 0x7f, 0xe3, 0x9c, 0xe0, 0xa2, + 0xec, 0xce, 0xe6, 0x15, 0x18, 0x67, 0x21, 0x26, 0x22, 0xf9, 0xf6, 0x99, 0xd2, 0xa1, 0x2b, 0x02, + 0xae, 0x07, 0xf3, 0xff, 0xb1, 0xc0, 0x8a, 0x1a, 0x30, 0x67, 0x3a, 0x5e, 0xcf, 0x12, 0x09, 0xba, + 0x36, 0x62, 0x95, 0x5b, 0x86, 0xe4, 0xaa, 0xa7, 0xe0, 0x38, 0xd3, 0x02, 0x61, 0x7e, 0xeb, 0xc3, + 0x27, 0xe3, 0x43, 0x25, 0x5d, 0xd7, 0x78, 0xe0, 0x69, 0x79, 0xdb, 0xf3, 0x1a, 0x00, 0x89, 0xf8, + 0x61, 0xf4, 0xc6, 0xe6, 0xd9, 0x72, 0xc1, 0xc6, 0x24, 0x57, 0x8d, 0x54, 0x45, 0x59, 0x14, 0x60, + 0x85, 0x08, 0xf2, 0x61, 0x6a, 0x37, 0xce, 0xc0, 0x2e, 0xa4, 0xc7, 0xe7, 0x86, 0xcc, 0xfe, 0xce, + 0x2d, 0x34, 0x4a, 0x01, 0x56, 0x89, 0x20, 0x9f, 0x2b, 0x0f, 0xdc, 0xc0, 0x3e, 0x4c, 0x3e, 0xdc, + 0xd8, 0x72, 0x1f, 0x7f, 0x67, 0x5c, 0x86, 0x15, 0x2a, 0x94, 0xa6, 0x2b, 0x63, 0xc4, 0x0c, 0x73, + 0x67, 0x13, 0x47, 0x9a, 0x89, 0x69, 0xc6, 0x65, 0x58, 0xa1, 0x42, 0xc7, 0xb6, 0x13, 0xc7, 0x05, + 0x12, 0x96, 0xd8, 0xe7, 0x86, 0x8c, 0xcf, 0x24, 0xac, 0x5f, 0x71, 0x01, 0x56, 0x89, 0x20, 0x17, + 0xa0, 0x23, 0xc3, 0x05, 0x89, 0xab, 0x9c, 0x52, 0xdf, 0x19, 0x07, 0x1d, 0xe2, 0xea, 0x50, 0xfc, + 0x1b, 0x2b, 0x14, 0xd0, 0xab, 0xca, 0x85, 0x21, 0x94, 0xb7, 0x21, 0x0e, 0x74, 0x59, 0xf8, 0xc1, + 0xd8, 0x94, 0x36, 0xc5, 0xf6, 0xeb, 0x43, 0x8a, 0x19, 0xed, 0xee, 0x51, 0x6d, 0x9a, 0xf1, 0x90, + 0x8c, 0x59, 0x2d, 0x76, 0xb4, 0x9b, 0xee, 0xeb, 0x68, 0x77, 0x8d, 0xaa, 0x53, 0x8a, 0x33, 0x3b, + 0x63, 0x0c, 0x33, 0xac, 0x89, 0x0c, 0x2f, 0xd5, 0x4a, 0x57, 0xc0, 0xd9, 0x36, 0x5c, 0x9e, 0x20, + 0x16, 0x6b, 0x3f, 0xab, 0xca, 0x13, 0xbc, 0x0c, 0x4b, 0x28, 0xda, 0x87, 0xe9, 0x40, 0xf1, 0xdc, + 0x13, 0xd9, 0x9f, 0x86, 0xb8, 0xe5, 0x13, 0x5e, 0x7b, 0x2c, 0xf0, 0x86, 0x5a, 0x82, 0x13, 0x74, + 0xd0, 0xa7, 0x61, 0x32, 0x32, 0xab, 0x06, 0x0b, 0x73, 0xe5, 0x5f, 0x5c, 0xe5, 0x87, 0x88, 0x8a, + 0xed, 0xa4, 0x11, 0x28, 0xc0, 0x31, 0x3d, 0xd4, 0x4b, 0x3e, 0x74, 0x9e, 0x3f, 0x95, 0xc7, 0x9d, + 0xd2, 0x1f, 0xab, 0xe8, 0x91, 0x33, 0xaa, 0xc3, 0x3c, 0x39, 0xe8, 0x7a, 0x41, 0xcf, 0x27, 0x2c, + 0x3a, 0x1d, 0x9b, 0x1e, 0x14, 0x5f, 0x03, 0xae, 0xa6, 0x81, 0x38, 0x5b, 0x1f, 0x7d, 0x51, 0x83, + 0x39, 0x9e, 0x3c, 0x8b, 0x1e, 0x61, 0x9e, 0x4b, 0xdc, 0x30, 0x60, 0xd9, 0xa1, 0x4a, 0x3e, 0x8a, + 0x6a, 0xa5, 0x70, 0x09, 0xe3, 0x6a, 0xaa, 0x14, 0x67, 0x68, 0xd2, 0x95, 0xa3, 0x3e, 0x0f, 0x65, + 0x49, 0xa6, 0x4a, 0xae, 0x1c, 0xf5, 0xe9, 0x29, 0x5f, 0x39, 0x6a, 0x09, 0x4e, 0xd0, 0xd1, 0xdf, + 0x9c, 0x81, 0x29, 0xc5, 0x74, 0x97, 0xba, 0x17, 0xd5, 0xee, 0xc7, 0xbd, 0x68, 0x08, 0x53, 0xa6, + 0xe7, 0x06, 0xa1, 0xcf, 0xaf, 0xf9, 0x2b, 0xa7, 0x41, 0x53, 0x2e, 0x9f, 0x7a, 0x8c, 0x19, 0xab, + 0x64, 0x28, 0xa3, 0x93, 0xb7, 0xd5, 0x23, 0xa7, 0x70, 0x5b, 0x2d, 0x19, 0x5d, 0xce, 0x8d, 0xf5, + 0x07, 0x00, 0xa2, 0xf3, 0x92, 0x58, 0x22, 0xb6, 0x91, 0x8c, 0xb3, 0xde, 0x0c, 0xae, 0x4b, 0x18, + 0x56, 0xea, 0xa1, 0xd7, 0x61, 0xc6, 0x51, 0x03, 0x0f, 0x8b, 0xc3, 0xbc, 0x94, 0x6b, 0x76, 0x22, + 0x82, 0x31, 0xb7, 0x45, 0x25, 0x8a, 0x70, 0x92, 0x14, 0x5d, 0x06, 0x4e, 0x14, 0x54, 0x7c, 0x28, + 0xcf, 0x0b, 0x19, 0x9a, 0x3c, 0x5e, 0x06, 0xb2, 0x28, 0xc0, 0x0a, 0x91, 0x82, 0xeb, 0xf1, 0x89, + 0x52, 0xd7, 0xe3, 0x3d, 0x38, 0xef, 0x93, 0xd0, 0x3f, 0xac, 0x1f, 0x9a, 0x2c, 0xd6, 0xbe, 0x1f, + 0x32, 0xa9, 0xb7, 0x5a, 0x2e, 0xda, 0x00, 0xce, 0xa2, 0xc2, 0x79, 0xf8, 0x13, 0x07, 0xc5, 0x64, + 0xdf, 0x83, 0xe2, 0x83, 0x30, 0x15, 0x12, 0x73, 0xd7, 0xb5, 0x4d, 0xc3, 0x69, 0x36, 0x44, 0xe0, + 0x9f, 0x98, 0xe7, 0xc5, 0x20, 0xac, 0xd6, 0x43, 0x2b, 0x30, 0xd2, 0xb3, 0x2d, 0x71, 0x5a, 0xfe, + 0xa4, 0x34, 0x82, 0x37, 0x1b, 0x77, 0x8f, 0x6a, 0xef, 0x8c, 0xef, 0x9b, 0xe5, 0x57, 0x5d, 0xe9, + 0xee, 0xb5, 0xaf, 0x84, 0x87, 0x5d, 0x12, 0x2c, 0xdd, 0x6a, 0x36, 0x30, 0x6d, 0x9c, 0xe7, 0x3a, + 0x30, 0x7d, 0x02, 0xd7, 0x81, 0xaf, 0x6b, 0x70, 0xde, 0x48, 0xdb, 0xef, 0x49, 0xb0, 0x30, 0x53, + 0xfe, 0xd4, 0xc9, 0xbf, 0x13, 0x88, 0x03, 0x37, 0x2e, 0x67, 0xc9, 0xe1, 0xbc, 0x3e, 0x50, 0x5d, + 0xa7, 0x63, 0xb7, 0x65, 0x7c, 0x6f, 0x31, 0xeb, 0xb3, 0xe5, 0x74, 0x9d, 0xf5, 0x0c, 0x26, 0x9c, + 0x83, 0x1d, 0xdd, 0x81, 0x29, 0x33, 0x56, 0xfb, 0xc4, 0x89, 0xdf, 0x38, 0x8d, 0x6b, 0x06, 0x91, + 0xac, 0x57, 0xd1, 0x29, 0x55, 0x4a, 0xe8, 0x2b, 0x1a, 0x2c, 0xd2, 0xed, 0xa3, 0x88, 0xe5, 0x22, + 0xea, 0x3c, 0xfb, 0xea, 0xb9, 0x13, 0x7f, 0x35, 0x4b, 0xd7, 0xb8, 0x56, 0x88, 0x11, 0xf7, 0xa1, + 0x86, 0x3e, 0xa7, 0xc1, 0x39, 0x27, 0x19, 0x86, 0x9f, 0x25, 0x81, 0x2c, 0xf9, 0xd6, 0x2a, 0x15, + 0xd1, 0x9f, 0x2f, 0xcd, 0x54, 0x21, 0x4e, 0x13, 0xd4, 0xff, 0x58, 0x13, 0x76, 0xa2, 0xfb, 0x78, + 0xdf, 0x7e, 0xd6, 0x97, 0x73, 0xfa, 0x9f, 0x6b, 0x90, 0x91, 0x1f, 0xd0, 0x36, 0x4c, 0x50, 0x14, + 0x8d, 0x8d, 0x96, 0xf8, 0xac, 0x8f, 0x94, 0x3b, 0x2e, 0x19, 0x0a, 0x6e, 0x74, 0x13, 0x3f, 0x70, + 0x84, 0x98, 0x4a, 0x24, 0xae, 0x12, 0x7b, 0x50, 0x7c, 0x61, 0x29, 0x89, 0x44, 0x8d, 0x61, 0xc8, + 0x25, 0x12, 0xb5, 0x04, 0x27, 0xe8, 0xe8, 0x6b, 0x00, 0xb1, 0xcc, 0x37, 0xb4, 0x0b, 0xc6, 0x8f, + 0xc7, 0xe0, 0xe2, 0xb0, 0x0e, 0xea, 0x2c, 0xfa, 0x3b, 0xcb, 0xc7, 0xbb, 0xbc, 0x13, 0x12, 0xff, + 0xe6, 0xcd, 0x75, 0x99, 0xae, 0xb4, 0x64, 0xf8, 0xf9, 0x38, 0x9d, 0x73, 0x06, 0x23, 0x2e, 0xa0, + 0xc4, 0xe4, 0x5d, 0x91, 0x8d, 0x0e, 0x1b, 0x21, 0xe1, 0xb9, 0x48, 0xf9, 0xbb, 0x71, 0x2e, 0xef, + 0xa6, 0x81, 0x38, 0x5b, 0x3f, 0x8d, 0x84, 0xe7, 0x06, 0xa6, 0x02, 0x89, 0x96, 0x45, 0xc2, 0x13, + 0x04, 0x67, 0xeb, 0xab, 0x48, 0xf8, 0x4c, 0xd1, 0xdd, 0x3e, 0x96, 0x45, 0x22, 0x81, 0x38, 0x5b, + 0x1f, 0x59, 0xf0, 0xb0, 0x4f, 0x4c, 0xaf, 0xd3, 0x21, 0xae, 0xc5, 0x13, 0xab, 0x18, 0x7e, 0xdb, + 0x76, 0xaf, 0xfa, 0x06, 0xab, 0xc8, 0xcc, 0x08, 0x1a, 0x4b, 0xc7, 0xfe, 0x30, 0xee, 0x53, 0x0f, + 0xf7, 0xc5, 0x82, 0x3a, 0x70, 0xae, 0xc7, 0x82, 0x0d, 0xfb, 0x4d, 0x37, 0x24, 0xfe, 0xbe, 0xe1, + 0x94, 0xcc, 0x78, 0xcd, 0x38, 0xd0, 0xad, 0x24, 0x2a, 0x9c, 0xc6, 0x8d, 0x0e, 0xa9, 0xdc, 0x21, + 0xba, 0xa3, 0x90, 0xac, 0x96, 0xcf, 0x8f, 0x80, 0xb3, 0xe8, 0x70, 0x1e, 0x0d, 0xfd, 0xeb, 0x1a, + 0x08, 0x7f, 0x53, 0xf4, 0x70, 0xc2, 0xc4, 0x5f, 0x4d, 0x99, 0xf7, 0x1f, 0x16, 0x8f, 0xe6, 0x2a, + 0x31, 0x54, 0x79, 0x30, 0xf7, 0x1e, 0x25, 0x20, 0xc1, 0x64, 0xcc, 0xfb, 0x38, 0x66, 0x25, 0x5c, + 0xf7, 0x7b, 0x61, 0x92, 0xf0, 0xeb, 0x36, 0x29, 0xd1, 0x32, 0x1f, 0xde, 0xd5, 0xa8, 0x10, 0xc7, + 0x70, 0xfd, 0xdf, 0x68, 0x20, 0x30, 0xb0, 0xe0, 0xf2, 0x03, 0x05, 0x19, 0xbf, 0xa7, 0xf3, 0x8c, + 0x12, 0x1c, 0x7d, 0xa4, 0x30, 0x38, 0xfa, 0x19, 0xc5, 0x0c, 0xff, 0x8e, 0x06, 0xe7, 0x92, 0x11, + 0x22, 0x02, 0xf4, 0x6e, 0x98, 0x10, 0xd1, 0x8e, 0x44, 0xcc, 0x14, 0xfe, 0x48, 0x56, 0x24, 0xf8, + 0x8d, 0x60, 0x49, 0x55, 0x7d, 0x88, 0xe0, 0x28, 0xf9, 0x81, 0x2a, 0xfa, 0xab, 0xea, 0xfa, 0x9f, + 0xcc, 0xc2, 0x38, 0x8f, 0xcf, 0x43, 0x79, 0x5a, 0xce, 0x63, 0xab, 0x1b, 0xe5, 0x23, 0x00, 0x95, + 0x78, 0x53, 0x95, 0x88, 0xc9, 0x5a, 0xe9, 0x1b, 0x93, 0x15, 0xf3, 0x8c, 0x09, 0x43, 0x98, 0x67, + 0xeb, 0xb8, 0x29, 0x12, 0x25, 0x46, 0xd9, 0x12, 0xc2, 0x84, 0xdd, 0x72, 0xb4, 0xbc, 0xe4, 0xc6, + 0x07, 0x40, 0xb1, 0x5e, 0xce, 0xf6, 0xb1, 0x5c, 0xc6, 0x01, 0x51, 0xc6, 0xca, 0x3b, 0xb3, 0x89, + 0x21, 0x1f, 0x20, 0x20, 0x8a, 0xdc, 0x48, 0xe3, 0x85, 0x1b, 0x69, 0x07, 0x26, 0xc4, 0x56, 0x10, + 0xcc, 0xf1, 0x23, 0x43, 0x24, 0x35, 0x50, 0xc2, 0xe7, 0xf1, 0x02, 0x1c, 0x21, 0xa7, 0x27, 0x6e, + 0xc7, 0x38, 0xb0, 0x3b, 0xbd, 0x0e, 0xe3, 0x88, 0x63, 0x6a, 0x55, 0x56, 0x8c, 0x23, 0x38, 0xab, + 0xca, 0x7d, 0x00, 0x99, 0x22, 0xa5, 0x56, 0x15, 0x89, 0x7e, 0x23, 0x38, 0x7a, 0x19, 0xaa, 0x1d, + 0xe3, 0xa0, 0xd5, 0xf3, 0xdb, 0x44, 0x58, 0x2c, 0x8b, 0x65, 0xbc, 0x5e, 0x68, 0x3b, 0x4b, 0x54, + 0xfd, 0x0f, 0xfd, 0xa5, 0xa6, 0x1b, 0xde, 0xf4, 0x5b, 0xa1, 0x2f, 0xc3, 0xa6, 0xaf, 0x0b, 0x2c, + 0x58, 0xe2, 0x43, 0x0e, 0xcc, 0x76, 0x8c, 0x83, 0x5b, 0xae, 0x21, 0xf3, 0x91, 0x4e, 0x95, 0xa4, + 0xc0, 0x6e, 0x43, 0xd7, 0x13, 0xb8, 0x70, 0x0a, 0x77, 0xce, 0xc5, 0xeb, 0xf4, 0x59, 0x5d, 0xbc, + 0x2e, 0xcb, 0x57, 0x15, 0x5c, 0x6f, 0x7b, 0x30, 0xcf, 0x5b, 0xb0, 0xff, 0x8b, 0x89, 0x57, 0xe4, + 0x8b, 0x89, 0xd9, 0xf2, 0xd7, 0x3a, 0x7d, 0x5e, 0x4b, 0xf4, 0x60, 0x8a, 0x4a, 0xd8, 0xbc, 0x94, + 0x2a, 0x56, 0xa5, 0xcd, 0x8a, 0x0d, 0x89, 0x46, 0xc9, 0x6f, 0x15, 0xa3, 0xc6, 0x2a, 0x1d, 0x74, + 0x93, 0xe7, 0xab, 0x74, 0x48, 0x18, 0x57, 0x61, 0x0a, 0xfd, 0x1c, 0xb7, 0x1c, 0x47, 0xe9, 0x25, + 0x33, 0x15, 0x70, 0x7e, 0xbb, 0xf8, 0xbd, 0xf7, 0x7c, 0xfe, 0x7b, 0x6f, 0xf4, 0x77, 0xf3, 0x6c, + 0x90, 0xa8, 0xfc, 0x0b, 0x30, 0xce, 0x1b, 0x4a, 0x5b, 0x22, 0xbf, 0xab, 0xc1, 0x42, 0xa7, 0x20, + 0x11, 0x94, 0x30, 0x8d, 0x6e, 0x0d, 0xc1, 0x1f, 0x0a, 0x93, 0x4b, 0xad, 0x3c, 0x76, 0x7c, 0x54, + 0xbb, 0x67, 0x0a, 0x2a, 0x5c, 0xd8, 0xb7, 0x61, 0x1f, 0xe8, 0x0e, 0x13, 0x39, 0xea, 0x57, 0x35, + 0x98, 0x4b, 0x1f, 0x02, 0x6a, 0x8a, 0x4d, 0xed, 0x6c, 0x53, 0x6c, 0x2a, 0x6e, 0x14, 0x95, 0x3e, + 0x6e, 0x14, 0xcf, 0xc2, 0xa5, 0xfc, 0xb5, 0x41, 0x25, 0x32, 0x96, 0xd2, 0x56, 0x68, 0x42, 0x71, + 0x86, 0x00, 0x5a, 0x88, 0x39, 0x6c, 0xe5, 0xa5, 0xef, 0xfd, 0xe8, 0xf2, 0x3b, 0xbe, 0xff, 0xa3, + 0xcb, 0xef, 0xf8, 0xc1, 0x8f, 0x2e, 0xbf, 0xe3, 0xe7, 0x8e, 0x2f, 0x6b, 0xdf, 0x3b, 0xbe, 0xac, + 0x7d, 0xff, 0xf8, 0xb2, 0xf6, 0x83, 0xe3, 0xcb, 0xda, 0x7f, 0x3a, 0xbe, 0xac, 0x7d, 0xf5, 0x3f, + 0x5f, 0x7e, 0xc7, 0xcb, 0x4f, 0xc5, 0xdf, 0x78, 0x25, 0xfa, 0xb4, 0xf8, 0x9f, 0xee, 0x5e, 0xfb, + 0x0a, 0xfd, 0xc6, 0xe8, 0x45, 0x04, 0xfb, 0xc6, 0xff, 0x1b, 0x00, 0x00, 0xff, 0xff, 0xdf, 0x60, + 0x39, 0xce, 0x6b, 0xcf, 0x00, 0x00, } func (m *Addon) Marshal() (dAtA []byte, err error) { @@ -5834,6 +5941,58 @@ func (m *BackupEntryStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *CARotation) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *CARotation) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *CARotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastInitiationTime != nil { + { + size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.LastCompletionTime != nil { + { + size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + i -= len(m.Phase) + copy(dAtA[i:], m.Phase) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *CRI) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -6874,6 +7033,18 @@ func (m *ControllerResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Lifecycle != nil { + { + size, err := m.Lifecycle.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } if m.Primary != nil { i-- if *m.Primary { @@ -6919,6 +7090,50 @@ func (m *ControllerResource) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *ControllerResourceLifecycle) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ControllerResourceLifecycle) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ControllerResourceLifecycle) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Migrate != nil { + i -= len(*m.Migrate) + copy(dAtA[i:], *m.Migrate) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Migrate))) + i-- + dAtA[i] = 0x1a + } + if m.Delete != nil { + i -= len(*m.Delete) + copy(dAtA[i:], *m.Delete) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Delete))) + i-- + dAtA[i] = 0x12 + } + if m.Reconcile != nil { + i -= len(*m.Reconcile) + copy(dAtA[i:], *m.Reconcile) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.Reconcile))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *CoreDNS) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7722,6 +7937,18 @@ func (m *KubeAPIServerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Logging != nil { + { + size, err := m.Logging.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + } if m.EventTTL != nil { { size, err := m.EventTTL.MarshalToSizedBuffer(dAtA[:i]) @@ -7877,6 +8104,39 @@ func (m *KubeAPIServerConfig) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *KubeAPIServerLogging) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *KubeAPIServerLogging) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *KubeAPIServerLogging) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.HTTPAccessVerbosity != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.HTTPAccessVerbosity)) + i-- + dAtA[i] = 0x10 + } + if m.Verbosity != nil { + i = encodeVarintGenerated(dAtA, i, uint64(*m.Verbosity)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + func (m *KubeAPIServerRequests) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8961,6 +9221,56 @@ func (m *LastError) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *LastMaintenance) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *LastMaintenance) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *LastMaintenance) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.FailureReason != nil { + i -= len(*m.FailureReason) + copy(dAtA[i:], *m.FailureReason) + i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailureReason))) + i-- + dAtA[i] = 0x22 + } + i -= len(m.State) + copy(dAtA[i:], m.State) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.State))) + i-- + dAtA[i] = 0x1a + { + size, err := m.TriggeredTime.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + i -= len(m.Description) + copy(dAtA[i:], m.Description) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Description))) + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + func (m *LastOperation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -9730,6 +10040,16 @@ func (m *NodeLocalDNS) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.DisableForwardToUpstreamDNS != nil { + i-- + if *m.DisableForwardToUpstreamDNS { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } if m.ForceTCPToUpstreamDNS != nil { i-- if *m.ForceTCPToUpstreamDNS { @@ -11618,18 +11938,6 @@ func (m *SeedSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.HighAvailability != nil { - { - size, err := m.HighAvailability.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x52 - } if m.Ingress != nil { { size, err := m.Ingress.MarshalToSizedBuffer(dAtA[:i]) @@ -12192,58 +12500,6 @@ func (m *ShootAdvertisedAddress) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func (m *ShootCARotation) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *ShootCARotation) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *ShootCARotation) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.LastInitiationTime != nil { - { - size, err := m.LastInitiationTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - } - if m.LastCompletionTime != nil { - { - size, err := m.LastCompletionTime.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } - i -= len(m.Phase) - copy(dAtA[i:], m.Phase) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.Phase))) - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - func (m *ShootCredentials) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -13007,6 +13263,20 @@ func (m *ShootStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.LastMaintenance != nil { + { + size, err := m.LastMaintenance.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } if m.LastHibernationTriggerTime != nil { { size, err := m.LastHibernationTriggerTime.MarshalToSizedBuffer(dAtA[:i]) @@ -14142,6 +14412,25 @@ func (m *BackupEntryStatus) Size() (n int) { return n } +func (m *CARotation) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Phase) + n += 1 + l + sovGenerated(uint64(l)) + if m.LastCompletionTime != nil { + l = m.LastCompletionTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + if m.LastInitiationTime != nil { + l = m.LastInitiationTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *CRI) Size() (n int) { if m == nil { return 0 @@ -14534,6 +14823,31 @@ func (m *ControllerResource) Size() (n int) { if m.Primary != nil { n += 2 } + if m.Lifecycle != nil { + l = m.Lifecycle.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *ControllerResourceLifecycle) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Reconcile != nil { + l = len(*m.Reconcile) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Delete != nil { + l = len(*m.Delete) + n += 1 + l + sovGenerated(uint64(l)) + } + if m.Migrate != nil { + l = len(*m.Migrate) + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -14906,6 +15220,25 @@ func (m *KubeAPIServerConfig) Size() (n int) { l = m.EventTTL.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.Logging != nil { + l = m.Logging.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *KubeAPIServerLogging) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Verbosity != nil { + n += 1 + sovGenerated(uint64(*m.Verbosity)) + } + if m.HTTPAccessVerbosity != nil { + n += 1 + sovGenerated(uint64(*m.HTTPAccessVerbosity)) + } return n } @@ -15310,6 +15643,25 @@ func (m *LastError) Size() (n int) { return n } +func (m *LastMaintenance) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Description) + n += 1 + l + sovGenerated(uint64(l)) + l = m.TriggeredTime.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.State) + n += 1 + l + sovGenerated(uint64(l)) + if m.FailureReason != nil { + l = len(*m.FailureReason) + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + func (m *LastOperation) Size() (n int) { if m == nil { return 0 @@ -15605,6 +15957,9 @@ func (m *NodeLocalDNS) Size() (n int) { if m.ForceTCPToUpstreamDNS != nil { n += 2 } + if m.DisableForwardToUpstreamDNS != nil { + n += 2 + } return n } @@ -16326,10 +16681,6 @@ func (m *SeedSpec) Size() (n int) { l = m.Ingress.Size() n += 1 + l + sovGenerated(uint64(l)) } - if m.HighAvailability != nil { - l = m.HighAvailability.Size() - n += 1 + l + sovGenerated(uint64(l)) - } return n } @@ -16501,25 +16852,6 @@ func (m *ShootAdvertisedAddress) Size() (n int) { return n } -func (m *ShootCARotation) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = len(m.Phase) - n += 1 + l + sovGenerated(uint64(l)) - if m.LastCompletionTime != nil { - l = m.LastCompletionTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - if m.LastInitiationTime != nil { - l = m.LastInitiationTime.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - return n -} - func (m *ShootCredentials) Size() (n int) { if m == nil { return 0 @@ -16857,6 +17189,10 @@ func (m *ShootStatus) Size() (n int) { l = m.LastHibernationTriggerTime.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.LastMaintenance != nil { + l = m.LastMaintenance.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -17315,6 +17651,18 @@ func (this *BackupEntryStatus) String() string { }, "") return s } +func (this *CARotation) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&CARotation{`, + `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, + `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, + `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, + `}`, + }, "") + return s +} func (this *CRI) String() string { if this == nil { return "nil" @@ -17606,6 +17954,19 @@ func (this *ControllerResource) String() string { `GloballyEnabled:` + valueToStringGenerated(this.GloballyEnabled) + `,`, `ReconcileTimeout:` + strings.Replace(fmt.Sprintf("%v", this.ReconcileTimeout), "Duration", "v11.Duration", 1) + `,`, `Primary:` + valueToStringGenerated(this.Primary) + `,`, + `Lifecycle:` + strings.Replace(this.Lifecycle.String(), "ControllerResourceLifecycle", "ControllerResourceLifecycle", 1) + `,`, + `}`, + }, "") + return s +} +func (this *ControllerResourceLifecycle) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ControllerResourceLifecycle{`, + `Reconcile:` + valueToStringGenerated(this.Reconcile) + `,`, + `Delete:` + valueToStringGenerated(this.Delete) + `,`, + `Migrate:` + valueToStringGenerated(this.Migrate) + `,`, `}`, }, "") return s @@ -17857,6 +18218,18 @@ func (this *KubeAPIServerConfig) String() string { `Requests:` + strings.Replace(this.Requests.String(), "KubeAPIServerRequests", "KubeAPIServerRequests", 1) + `,`, `EnableAnonymousAuthentication:` + valueToStringGenerated(this.EnableAnonymousAuthentication) + `,`, `EventTTL:` + strings.Replace(fmt.Sprintf("%v", this.EventTTL), "Duration", "v11.Duration", 1) + `,`, + `Logging:` + strings.Replace(this.Logging.String(), "KubeAPIServerLogging", "KubeAPIServerLogging", 1) + `,`, + `}`, + }, "") + return s +} +func (this *KubeAPIServerLogging) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&KubeAPIServerLogging{`, + `Verbosity:` + valueToStringGenerated(this.Verbosity) + `,`, + `HTTPAccessVerbosity:` + valueToStringGenerated(this.HTTPAccessVerbosity) + `,`, `}`, }, "") return s @@ -18077,6 +18450,19 @@ func (this *LastError) String() string { }, "") return s } +func (this *LastMaintenance) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&LastMaintenance{`, + `Description:` + fmt.Sprintf("%v", this.Description) + `,`, + `TriggeredTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.TriggeredTime), "Time", "v11.Time", 1), `&`, ``, 1) + `,`, + `State:` + fmt.Sprintf("%v", this.State) + `,`, + `FailureReason:` + valueToStringGenerated(this.FailureReason) + `,`, + `}`, + }, "") + return s +} func (this *LastOperation) String() string { if this == nil { return "nil" @@ -18279,6 +18665,7 @@ func (this *NodeLocalDNS) String() string { `Enabled:` + fmt.Sprintf("%v", this.Enabled) + `,`, `ForceTCPToClusterDNS:` + valueToStringGenerated(this.ForceTCPToClusterDNS) + `,`, `ForceTCPToUpstreamDNS:` + valueToStringGenerated(this.ForceTCPToUpstreamDNS) + `,`, + `DisableForwardToUpstreamDNS:` + valueToStringGenerated(this.DisableForwardToUpstreamDNS) + `,`, `}`, }, "") return s @@ -18818,7 +19205,6 @@ func (this *SeedSpec) String() string { `Volume:` + strings.Replace(this.Volume.String(), "SeedVolume", "SeedVolume", 1) + `,`, `Settings:` + strings.Replace(this.Settings.String(), "SeedSettings", "SeedSettings", 1) + `,`, `Ingress:` + strings.Replace(this.Ingress.String(), "Ingress", "Ingress", 1) + `,`, - `HighAvailability:` + strings.Replace(this.HighAvailability.String(), "HighAvailability", "HighAvailability", 1) + `,`, `}`, }, "") return s @@ -18951,18 +19337,6 @@ func (this *ShootAdvertisedAddress) String() string { }, "") return s } -func (this *ShootCARotation) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&ShootCARotation{`, - `Phase:` + fmt.Sprintf("%v", this.Phase) + `,`, - `LastCompletionTime:` + strings.Replace(fmt.Sprintf("%v", this.LastCompletionTime), "Time", "v11.Time", 1) + `,`, - `LastInitiationTime:` + strings.Replace(fmt.Sprintf("%v", this.LastInitiationTime), "Time", "v11.Time", 1) + `,`, - `}`, - }, "") - return s -} func (this *ShootCredentials) String() string { if this == nil { return "nil" @@ -18978,7 +19352,7 @@ func (this *ShootCredentialsRotation) String() string { return "nil" } s := strings.Join([]string{`&ShootCredentialsRotation{`, - `CertificateAuthorities:` + strings.Replace(this.CertificateAuthorities.String(), "ShootCARotation", "ShootCARotation", 1) + `,`, + `CertificateAuthorities:` + strings.Replace(this.CertificateAuthorities.String(), "CARotation", "CARotation", 1) + `,`, `Kubeconfig:` + strings.Replace(this.Kubeconfig.String(), "ShootKubeconfigRotation", "ShootKubeconfigRotation", 1) + `,`, `SSHKeypair:` + strings.Replace(this.SSHKeypair.String(), "ShootSSHKeypairRotation", "ShootSSHKeypairRotation", 1) + `,`, `Observability:` + strings.Replace(this.Observability.String(), "ShootObservabilityRotation", "ShootObservabilityRotation", 1) + `,`, @@ -19169,6 +19543,7 @@ func (this *ShootStatus) String() string { `MigrationStartTime:` + strings.Replace(fmt.Sprintf("%v", this.MigrationStartTime), "Time", "v11.Time", 1) + `,`, `Credentials:` + strings.Replace(this.Credentials.String(), "ShootCredentials", "ShootCredentials", 1) + `,`, `LastHibernationTriggerTime:` + strings.Replace(fmt.Sprintf("%v", this.LastHibernationTriggerTime), "Time", "v11.Time", 1) + `,`, + `LastMaintenance:` + strings.Replace(this.LastMaintenance.String(), "LastMaintenance", "LastMaintenance", 1) + `,`, `}`, }, "") return s @@ -21452,7 +21827,7 @@ func (m *BackupEntryStatus) Unmarshal(dAtA []byte) error { } return nil } -func (m *CRI) Unmarshal(dAtA []byte) error { +func (m *CARotation) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -21475,15 +21850,15 @@ func (m *CRI) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: CRI: wiretype end group for non-group") + return fmt.Errorf("proto: CARotation: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: CRI: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: CARotation: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -21511,11 +21886,11 @@ func (m *CRI) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Name = CRIName(dAtA[iNdEx:postIndex]) + m.Phase = CredentialsRotationPhase(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ContainerRuntimes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -21542,64 +21917,218 @@ func (m *CRI) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ContainerRuntimes = append(m.ContainerRuntimes, ContainerRuntime{}) - if err := m.ContainerRuntimes[len(m.ContainerRuntimes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err + if m.LastCompletionTime == nil { + m.LastCompletionTime = &v11.Time{} } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { + if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *CloudProfile) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: CloudProfile: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: CloudProfile: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastInitiationTime == nil { + m.LastInitiationTime = &v11.Time{} + } + if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CRI) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CRI: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CRI: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = CRIName(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ContainerRuntimes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ContainerRuntimes = append(m.ContainerRuntimes, ContainerRuntime{}) + if err := m.ContainerRuntimes[len(m.ContainerRuntimes)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *CloudProfile) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: CloudProfile: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: CloudProfile: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -24480,6 +25009,191 @@ func (m *ControllerResource) Unmarshal(dAtA []byte) error { } b := bool(v != 0) m.Primary = &b + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Lifecycle", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Lifecycle == nil { + m.Lifecycle = &ControllerResourceLifecycle{} + } + if err := m.Lifecycle.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ControllerResourceLifecycle) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ControllerResourceLifecycle: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ControllerResourceLifecycle: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Reconcile", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ControllerResourceLifecycleStrategy(dAtA[iNdEx:postIndex]) + m.Reconcile = &s + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Delete", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ControllerResourceLifecycleStrategy(dAtA[iNdEx:postIndex]) + m.Delete = &s + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Migrate", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := ControllerResourceLifecycleStrategy(dAtA[iNdEx:postIndex]) + m.Migrate = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -26985,16 +27699,167 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.OIDCConfig == nil { - m.OIDCConfig = &OIDCConfig{} + if m.OIDCConfig == nil { + m.OIDCConfig = &OIDCConfig{} + } + if err := m.OIDCConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RuntimeConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.RuntimeConfig == nil { + m.RuntimeConfig = make(map[string]bool) + } + var mapkey string + var mapvalue bool + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapkey |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapkey := int(stringLenmapkey) + if intStringLenmapkey < 0 { + return ErrInvalidLengthGenerated + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey < 0 { + return ErrInvalidLengthGenerated + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + var mapvaluetemp int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + mapvaluetemp |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + mapvalue = bool(mapvaluetemp != 0) + } else { + iNdEx = entryPreIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.RuntimeConfig[mapkey] = mapvalue + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountConfig", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ServiceAccountConfig == nil { + m.ServiceAccountConfig = &ServiceAccountConfig{} } - if err := m.OIDCConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ServiceAccountConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 7: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field RuntimeConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field WatchCacheSizes", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -27021,95 +27886,16 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.RuntimeConfig == nil { - m.RuntimeConfig = make(map[string]bool) + if m.WatchCacheSizes == nil { + m.WatchCacheSizes = &WatchCacheSizes{} } - var mapkey string - var mapvalue bool - for iNdEx < postIndex { - entryPreIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - if fieldNum == 1 { - var stringLenmapkey uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLenmapkey |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLenmapkey := int(stringLenmapkey) - if intStringLenmapkey < 0 { - return ErrInvalidLengthGenerated - } - postStringIndexmapkey := iNdEx + intStringLenmapkey - if postStringIndexmapkey < 0 { - return ErrInvalidLengthGenerated - } - if postStringIndexmapkey > l { - return io.ErrUnexpectedEOF - } - mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapvaluetemp int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapvaluetemp |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - mapvalue = bool(mapvaluetemp != 0) - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } + if err := m.WatchCacheSizes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - m.RuntimeConfig[mapkey] = mapvalue iNdEx = postIndex - case 8: + case 10: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServiceAccountConfig", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Requests", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -27136,16 +27922,37 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ServiceAccountConfig == nil { - m.ServiceAccountConfig = &ServiceAccountConfig{} + if m.Requests == nil { + m.Requests = &KubeAPIServerRequests{} } - if err := m.ServiceAccountConfig.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Requests.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 9: + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field EnableAnonymousAuthentication", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.EnableAnonymousAuthentication = &b + case 12: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WatchCacheSizes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field EventTTL", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -27172,16 +27979,16 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.WatchCacheSizes == nil { - m.WatchCacheSizes = &WatchCacheSizes{} + if m.EventTTL == nil { + m.EventTTL = &v11.Duration{} } - if err := m.WatchCacheSizes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.EventTTL.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 10: + case 13: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Requests", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Logging", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -27208,18 +28015,68 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Requests == nil { - m.Requests = &KubeAPIServerRequests{} + if m.Logging == nil { + m.Logging = &KubeAPIServerLogging{} } - if err := m.Requests.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Logging.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 11: + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *KubeAPIServerLogging) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: KubeAPIServerLogging: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: KubeAPIServerLogging: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field EnableAnonymousAuthentication", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Verbosity", wireType) } - var v int + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -27229,18 +28086,17 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= int(b&0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } } - b := bool(v != 0) - m.EnableAnonymousAuthentication = &b - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field EventTTL", wireType) + m.Verbosity = &v + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field HTTPAccessVerbosity", wireType) } - var msglen int + var v int32 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -27250,28 +28106,12 @@ func (m *KubeAPIServerConfig) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + v |= int32(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.EventTTL == nil { - m.EventTTL = &v11.Duration{} - } - if err := m.EventTTL.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex + m.HTTPAccessVerbosity = &v default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -30290,11 +31130,44 @@ func (m *LastError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Description = string(dAtA[iNdEx:postIndex]) + m.Description = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TaskID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.TaskID = &s iNdEx = postIndex - case 2: + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TaskID", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Codes", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -30322,12 +31195,97 @@ func (m *LastError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - s := string(dAtA[iNdEx:postIndex]) - m.TaskID = &s + m.Codes = append(m.Codes, ErrorCode(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 3: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Codes", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field LastUpdateTime", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastUpdateTime == nil { + m.LastUpdateTime = &v11.Time{} + } + if err := m.LastUpdateTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *LastMaintenance) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: LastMaintenance: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: LastMaintenance: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Description", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -30355,11 +31313,11 @@ func (m *LastError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Codes = append(m.Codes, ErrorCode(dAtA[iNdEx:postIndex])) + m.Description = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 4: + case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastUpdateTime", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field TriggeredTime", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -30386,13 +31344,75 @@ func (m *LastError) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.LastUpdateTime == nil { - m.LastUpdateTime = &v11.Time{} - } - if err := m.LastUpdateTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.TriggeredTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.State = LastOperationState(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FailureReason", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + s := string(dAtA[iNdEx:postIndex]) + m.FailureReason = &s + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -32826,6 +33846,27 @@ func (m *NodeLocalDNS) Unmarshal(dAtA []byte) error { } b := bool(v != 0) m.ForceTCPToUpstreamDNS = &b + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DisableForwardToUpstreamDNS", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + b := bool(v != 0) + m.DisableForwardToUpstreamDNS = &b default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -38498,83 +39539,13 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Provider.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SecretRef == nil { - m.SecretRef = &v1.SecretReference{} - } - if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Taints", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Taints = append(m.Taints, SeedTaint{}) - if err := m.Taints[len(m.Taints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Provider.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 7: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -38601,16 +39572,16 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Volume == nil { - m.Volume = &SeedVolume{} + if m.SecretRef == nil { + m.SecretRef = &v1.SecretReference{} } - if err := m.Volume.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 8: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Settings", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Taints", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -38637,16 +39608,50 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Settings == nil { - m.Settings = &SeedSettings{} + m.Taints = append(m.Taints, SeedTaint{}) + if err := m.Taints[len(m.Taints)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if err := m.Settings.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Volume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Volume == nil { + m.Volume = &SeedVolume{} + } + if err := m.Volume.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 9: + case 8: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Ingress", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Settings", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -38673,16 +39678,16 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.Ingress == nil { - m.Ingress = &Ingress{} + if m.Settings == nil { + m.Settings = &SeedSettings{} } - if err := m.Ingress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Settings.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 10: + case 9: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field HighAvailability", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Ingress", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -38709,10 +39714,10 @@ func (m *SeedSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.HighAvailability == nil { - m.HighAvailability = &HighAvailability{} + if m.Ingress == nil { + m.Ingress = &Ingress{} } - if err := m.HighAvailability.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Ingress.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex @@ -40172,160 +41177,6 @@ func (m *ShootAdvertisedAddress) Unmarshal(dAtA []byte) error { } return nil } -func (m *ShootCARotation) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: ShootCARotation: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: ShootCARotation: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Phase", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastCompletionTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LastCompletionTime == nil { - m.LastCompletionTime = &v11.Time{} - } - if err := m.LastCompletionTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field LastInitiationTime", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.LastInitiationTime == nil { - m.LastInitiationTime = &v11.Time{} - } - if err := m.LastInitiationTime.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *ShootCredentials) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -40471,7 +41322,7 @@ func (m *ShootCredentialsRotation) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.CertificateAuthorities == nil { - m.CertificateAuthorities = &ShootCARotation{} + m.CertificateAuthorities = &CARotation{} } if err := m.CertificateAuthorities.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -40737,7 +41588,7 @@ func (m *ShootETCDEncryptionKeyRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) + m.Phase = CredentialsRotationPhase(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -41641,7 +42492,7 @@ func (m *ShootServiceAccountKeyRotation) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Phase = ShootCredentialsRotationPhase(dAtA[iNdEx:postIndex]) + m.Phase = CredentialsRotationPhase(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { @@ -43017,6 +43868,42 @@ func (m *ShootStatus) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastMaintenance", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastMaintenance == nil { + m.LastMaintenance = &LastMaintenance{} + } + if err := m.LastMaintenance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto index c1712728e..9c48289c0 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/generated.proto @@ -232,6 +232,21 @@ message BackupEntryStatus { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time migrationStartTime = 5; } +// CARotation contains information about the certificate authority credential rotation. +message CARotation { + // Phase describes the phase of the certificate authority credential rotation. + optional string phase = 1; + + // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 3; + + // LastCompletionTime is the most recent time when the certificate authority credential rotation was successfully + // completed. + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; +} + // CRI contains information about the Container Runtimes. message CRI { // The name of the CRI library. Supported values are `docker` and `containerd`. @@ -528,10 +543,12 @@ message ControllerResource { optional string type = 2; // GloballyEnabled determines if this ControllerResource is required by all Shoot clusters. + // This field is defaulted to false when kind is "Extension". // +optional optional bool globallyEnabled = 3; // ReconcileTimeout defines how long Gardener should wait for the resource reconciliation. + // This field is defaulted to 3m0s when kind is "Extension". // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration reconcileTimeout = 4; @@ -540,6 +557,29 @@ message ControllerResource { // combination. This field is immutable. // +optional optional bool primary = 5; + + // Lifecycle defines a strategy that determines when different operations on a ControllerResource should be performed. + // This field is defaulted in the following way when kind is "Extension". + // Reconcile: "AfterKubeAPIServer" + // Delete: "BeforeKubeAPIServer" + // Migrate: "BeforeKubeAPIServer" + // +optional + optional ControllerResourceLifecycle lifecycle = 6; +} + +// ControllerResourceLifecycle defines the lifecycle of a controller resource. +message ControllerResourceLifecycle { + // Reconcile defines the strategy during reconciliation. + // +optional + optional string reconcile = 1; + + // Delete defines the strategy during deletion. + // +optional + optional string delete = 2; + + // Migrate defines the strategy during migration. + // +optional + optional string migrate = 3; } // CoreDNS contains the settings of the Core DNS components running in the data plane of the Shoot cluster. @@ -791,6 +831,8 @@ message KubeAPIServerConfig { // EnableBasicAuthentication defines whether basic authentication should be enabled for this cluster or not. // +optional + // Defaults to false. + // Deprecated: basic authentication has been removed in Kubernetes v1.19+. This field will be removed in a future version. optional bool enableBasicAuthentication = 5; // OIDCConfig contains configuration settings for the OIDC provider. @@ -830,6 +872,22 @@ message KubeAPIServerConfig { // Defaults to 1h. // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Duration eventTTL = 12; + + // Logging contains configuration for the log level and HTTP access logs. + // +optional + optional KubeAPIServerLogging logging = 13; +} + +// KubeAPIServerLogging contains configuration for the logs level and http access logs +message KubeAPIServerLogging { + // Verbosity is the kube-apiserver log verbosity level + // Defaults to 2. + // +optional + optional int32 verbosity = 1; + + // HTTPAccessVerbosity is the kube-apiserver access logs level + // +optional + optional int32 httpAccessVerbosity = 2; } // KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. @@ -1217,6 +1275,22 @@ message LastError { optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastUpdateTime = 4; } +// LastMaintenance holds information about a maintenance operation on the Shoot. +message LastMaintenance { + // A human-readable message containing details about the operations performed in the last maintenance. + optional string description = 1; + + // TriggeredTime is the time when maintenance was triggered. + optional k8s.io.apimachinery.pkg.apis.meta.v1.Time triggeredTime = 2; + + // Status of the last maintenance operation, one of Processing, Succeeded, Error. + optional string state = 3; + + // FailureReason holds the information about the last maintenance operation failure reason. + // +optional + optional string failureReason = 4; +} + // LastOperation indicates the type and the state of the last operation, along with a description // message and a progress indicator. message LastOperation { @@ -1374,10 +1448,14 @@ message MaintenanceAutoUpdate { message MaintenanceTimeWindow { // Begin is the beginning of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". // If not present, a random value will be computed. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00` optional string begin = 1; // End is the end of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". // If not present, the value will be computed based on the "Begin" value. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00` optional string end = 2; } @@ -1452,6 +1530,11 @@ message NodeLocalDNS { // Default, if unspecified, is to enforce TCP. // +optional optional bool forceTCPToUpstreamDNS = 3; + + // DisableForwardToUpstreamDNS indicates whether requests from node local DNS to upstream DNS should be disabled. + // Default, if unspecified, is to forward requests for external domains to upstream DNS + // +optional + optional bool disableForwardToUpstreamDNS = 4; } // OIDCConfig contains configuration settings for the OIDC provider. @@ -2023,14 +2106,6 @@ message SeedSpec { // Ingress configures Ingress specific settings of the Seed cluster. This field is immutable. // +optional optional Ingress ingress = 9; - - // HighAvailability describes the high availability configuration for seed system components. A highly available - // seed will need at least 3 nodes or 3 availability zones (depending on the configured FailureTolerance of `node` or `zone`), - // allowing spreading of system components across the configured failure domain. - // Deprecated: This field is deprecated and not respected at all. It will be removed in a future release. Use - // `.spec.provider.zones` instead. - // +optional - optional HighAvailability highAvailability = 10; } // SeedStatus is the status of a Seed. @@ -2177,21 +2252,6 @@ message ShootAdvertisedAddress { optional string url = 2; } -// ShootCARotation contains information about the certificate authority credential rotation. -message ShootCARotation { - // Phase describes the phase of the certificate authority credential rotation. - optional string phase = 1; - - // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastInitiationTime = 3; - - // LastCompletionTime is the most recent time when the certificate authority credential rotation was successfully - // completed. - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastCompletionTime = 2; -} - // ShootCredentials contains information about the shoot credentials. message ShootCredentials { // Rotation contains information about the credential rotations. @@ -2203,7 +2263,7 @@ message ShootCredentials { message ShootCredentialsRotation { // CertificateAuthorities contains information about the certificate authority credential rotation. // +optional - optional ShootCARotation certificateAuthorities = 1; + optional CARotation certificateAuthorities = 1; // Kubeconfig contains information about the kubeconfig credential rotation. // +optional @@ -2483,6 +2543,10 @@ message ShootStatus { // managed to change the hibernation settings of the cluster // +optional optional k8s.io.apimachinery.pkg.apis.meta.v1.Time lastHibernationTriggerTime = 16; + + // LastMaintenance holds information about the last maintenance operations on the Shoot. + // +optional + optional LastMaintenance lastMaintenance = 17; } // ShootTemplate is a template for creating a Shoot object. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go index 2bd6f38fb..5306817e0 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/helper/helper.go @@ -243,10 +243,10 @@ func ComputeOperationType(meta metav1.ObjectMeta, lastOperation *gardencorev1bet } // HasOperationAnnotation returns true if the operation annotation is present and its value is "reconcile", "restore, or "migrate". -func HasOperationAnnotation(meta metav1.ObjectMeta) bool { - return meta.Annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationReconcile || - meta.Annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore || - meta.Annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationMigrate +func HasOperationAnnotation(annotations map[string]string) bool { + return annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationReconcile || + annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationRestore || + annotations[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationMigrate } // TaintsHave returns true if the given key is part of the taints list. @@ -531,6 +531,11 @@ func ShootSchedulingProfile(shoot *gardencorev1beta1.Shoot) *gardencorev1beta1.S return nil } +// ShootConfinesSpecUpdateRollout returns a bool. +func ShootConfinesSpecUpdateRollout(maintenance *gardencorev1beta1.Maintenance) bool { + return maintenance != nil && maintenance.ConfineSpecUpdateRollout != nil && *maintenance.ConfineSpecUpdateRollout +} + // SeedSettingVerticalPodAutoscalerEnabled returns true if the 'verticalPodAutoscaler' setting is enabled. func SeedSettingVerticalPodAutoscalerEnabled(settings *gardencorev1beta1.SeedSettings) bool { return settings == nil || settings.VerticalPodAutoscaler == nil || settings.VerticalPodAutoscaler.Enabled @@ -1185,36 +1190,16 @@ func IsNodeLocalDNSEnabled(systemComponents *gardencorev1beta1.SystemComponents, return fromSpec || fromAnnotation } -// IsTCPEnforcedForNodeLocalDNSToClusterDNS indicates whether TCP is enforced for connections from the node local DNS cache to the cluster DNS (Core DNS) or not. -// It can be disabled via the annotation (legacy) or via the shoot specification. -func IsTCPEnforcedForNodeLocalDNSToClusterDNS(systemComponents *gardencorev1beta1.SystemComponents, annotations map[string]string) bool { - fromSpec := true - if systemComponents != nil && systemComponents.NodeLocalDNS != nil && systemComponents.NodeLocalDNS.ForceTCPToClusterDNS != nil { - fromSpec = *systemComponents.NodeLocalDNS.ForceTCPToClusterDNS - } - fromAnnotation := true - if annotationValue, err := strconv.ParseBool(annotations[v1beta1constants.AnnotationNodeLocalDNSForceTcpToClusterDns]); err == nil { - fromAnnotation = annotationValue - } - return fromSpec && fromAnnotation -} - -// IsTCPEnforcedForNodeLocalDNSToUpstreamDNS indicates whether TCP is enforced for connections from the node local DNS cache to the upstream DNS (infrastructure DNS) or not. -// It can be disabled via the annotation (legacy) or via the shoot specification. -func IsTCPEnforcedForNodeLocalDNSToUpstreamDNS(systemComponents *gardencorev1beta1.SystemComponents, annotations map[string]string) bool { - fromSpec := true - if systemComponents != nil && systemComponents.NodeLocalDNS != nil && systemComponents.NodeLocalDNS.ForceTCPToUpstreamDNS != nil { - fromSpec = *systemComponents.NodeLocalDNS.DeepCopy().ForceTCPToUpstreamDNS - } - fromAnnotation := true - if annotationValue, err := strconv.ParseBool(annotations[v1beta1constants.AnnotationNodeLocalDNSForceTcpToUpstreamDns]); err == nil { - fromAnnotation = annotationValue +// GetNodeLocalDNS returns a pointer to the NodeLocalDNS spec. +func GetNodeLocalDNS(systemComponents *gardencorev1beta1.SystemComponents) *gardencorev1beta1.NodeLocalDNS { + if systemComponents != nil { + return systemComponents.NodeLocalDNS } - return fromSpec && fromAnnotation + return nil } // GetShootCARotationPhase returns the specified shoot CA rotation phase or an empty string -func GetShootCARotationPhase(credentials *gardencorev1beta1.ShootCredentials) gardencorev1beta1.ShootCredentialsRotationPhase { +func GetShootCARotationPhase(credentials *gardencorev1beta1.ShootCredentials) gardencorev1beta1.CredentialsRotationPhase { if credentials != nil && credentials.Rotation != nil && credentials.Rotation.CertificateAuthorities != nil { return credentials.Rotation.CertificateAuthorities.Phase } @@ -1223,7 +1208,11 @@ func GetShootCARotationPhase(credentials *gardencorev1beta1.ShootCredentials) ga // MutateShootCARotation mutates the .status.credentials.rotation.certificateAuthorities field based on the provided // mutation function. If the field is nil then it is initialized. -func MutateShootCARotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.ShootCARotation)) { +func MutateShootCARotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.CARotation)) { + if f == nil { + return + } + if shoot.Status.Credentials == nil { shoot.Status.Credentials = &gardencorev1beta1.ShootCredentials{} } @@ -1231,7 +1220,7 @@ func MutateShootCARotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1b shoot.Status.Credentials.Rotation = &gardencorev1beta1.ShootCredentialsRotation{} } if shoot.Status.Credentials.Rotation.CertificateAuthorities == nil { - shoot.Status.Credentials.Rotation.CertificateAuthorities = &gardencorev1beta1.ShootCARotation{} + shoot.Status.Credentials.Rotation.CertificateAuthorities = &gardencorev1beta1.CARotation{} } f(shoot.Status.Credentials.Rotation.CertificateAuthorities) @@ -1240,6 +1229,10 @@ func MutateShootCARotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1b // MutateShootKubeconfigRotation mutates the .status.credentials.rotation.kubeconfig field based on the provided // mutation function. If the field is nil then it is initialized. func MutateShootKubeconfigRotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.ShootKubeconfigRotation)) { + if f == nil { + return + } + if shoot.Status.Credentials == nil { shoot.Status.Credentials = &gardencorev1beta1.ShootCredentials{} } @@ -1271,6 +1264,10 @@ func IsShootKubeconfigRotationInitiationTimeAfterLastCompletionTime(credentials // MutateShootSSHKeypairRotation mutates the .status.credentials.rotation.sshKeypair field based on the provided // mutation function. If the field is nil then it is initialized. func MutateShootSSHKeypairRotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.ShootSSHKeypairRotation)) { + if f == nil { + return + } + if shoot.Status.Credentials == nil { shoot.Status.Credentials = &gardencorev1beta1.ShootCredentials{} } @@ -1302,6 +1299,10 @@ func IsShootSSHKeypairRotationInitiationTimeAfterLastCompletionTime(credentials // MutateObservabilityRotation mutates the .status.credentials.rotation.observability field based on the provided // mutation function. If the field is nil then it is initialized. func MutateObservabilityRotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.ShootObservabilityRotation)) { + if f == nil { + return + } + if shoot.Status.Credentials == nil { shoot.Status.Credentials = &gardencorev1beta1.ShootCredentials{} } @@ -1332,7 +1333,7 @@ func IsShootObservabilityRotationInitiationTimeAfterLastCompletionTime(credentia // GetShootServiceAccountKeyRotationPhase returns the specified shoot service account key rotation phase or an empty // string. -func GetShootServiceAccountKeyRotationPhase(credentials *gardencorev1beta1.ShootCredentials) gardencorev1beta1.ShootCredentialsRotationPhase { +func GetShootServiceAccountKeyRotationPhase(credentials *gardencorev1beta1.ShootCredentials) gardencorev1beta1.CredentialsRotationPhase { if credentials != nil && credentials.Rotation != nil && credentials.Rotation.ServiceAccountKey != nil { return credentials.Rotation.ServiceAccountKey.Phase } @@ -1342,6 +1343,10 @@ func GetShootServiceAccountKeyRotationPhase(credentials *gardencorev1beta1.Shoot // MutateShootServiceAccountKeyRotation mutates the .status.credentials.rotation.serviceAccountKey field based on the // provided mutation function. If the field is nil then it is initialized. func MutateShootServiceAccountKeyRotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.ShootServiceAccountKeyRotation)) { + if f == nil { + return + } + if shoot.Status.Credentials == nil { shoot.Status.Credentials = &gardencorev1beta1.ShootCredentials{} } @@ -1357,7 +1362,7 @@ func MutateShootServiceAccountKeyRotation(shoot *gardencorev1beta1.Shoot, f func // GetShootETCDEncryptionKeyRotationPhase returns the specified shoot ETCD encryption key rotation phase or an empty // string. -func GetShootETCDEncryptionKeyRotationPhase(credentials *gardencorev1beta1.ShootCredentials) gardencorev1beta1.ShootCredentialsRotationPhase { +func GetShootETCDEncryptionKeyRotationPhase(credentials *gardencorev1beta1.ShootCredentials) gardencorev1beta1.CredentialsRotationPhase { if credentials != nil && credentials.Rotation != nil && credentials.Rotation.ETCDEncryptionKey != nil { return credentials.Rotation.ETCDEncryptionKey.Phase } @@ -1367,6 +1372,10 @@ func GetShootETCDEncryptionKeyRotationPhase(credentials *gardencorev1beta1.Shoot // MutateShootETCDEncryptionKeyRotation mutates the .status.credentials.rotation.etcdEncryptionKey field based on the // provided mutation function. If the field is nil then it is initialized. func MutateShootETCDEncryptionKeyRotation(shoot *gardencorev1beta1.Shoot, f func(*gardencorev1beta1.ShootETCDEncryptionKeyRotation)) { + if f == nil { + return + } + if shoot.Status.Credentials == nil { shoot.Status.Credentials = &gardencorev1beta1.ShootCredentials{} } @@ -1406,30 +1415,18 @@ func IsFailureToleranceTypeNode(failureToleranceType *gardencorev1beta1.FailureT return failureToleranceType != nil && *failureToleranceType == gardencorev1beta1.FailureToleranceTypeNode } -// IsHAControlPlaneConfigured returns true if HA configuration for the shoot control plane has been set either -// via an alpha-annotation or ControlPlane Spec. +// IsHAControlPlaneConfigured returns true if HA configuration for the shoot control plane has been set. func IsHAControlPlaneConfigured(shoot *gardencorev1beta1.Shoot) bool { - return metav1.HasAnnotation(shoot.ObjectMeta, v1beta1constants.ShootAlphaControlPlaneHighAvailability) || shoot.Spec.ControlPlane != nil && shoot.Spec.ControlPlane.HighAvailability != nil + return shoot.Spec.ControlPlane != nil && shoot.Spec.ControlPlane.HighAvailability != nil } // IsMultiZonalShootControlPlane checks if the shoot should have a multi-zonal control plane. func IsMultiZonalShootControlPlane(shoot *gardencorev1beta1.Shoot) bool { - hasZonalAnnotation := shoot.ObjectMeta.Annotations[v1beta1constants.ShootAlphaControlPlaneHighAvailability] == v1beta1constants.ShootAlphaControlPlaneHighAvailabilityMultiZone - hasZoneFailureToleranceTypeSetInSpec := shoot.Spec.ControlPlane != nil && shoot.Spec.ControlPlane.HighAvailability != nil && shoot.Spec.ControlPlane.HighAvailability.FailureTolerance.Type == gardencorev1beta1.FailureToleranceTypeZone - return hasZonalAnnotation || hasZoneFailureToleranceTypeSetInSpec + return shoot.Spec.ControlPlane != nil && shoot.Spec.ControlPlane.HighAvailability != nil && shoot.Spec.ControlPlane.HighAvailability.FailureTolerance.Type == gardencorev1beta1.FailureToleranceTypeZone } -// GetFailureToleranceType determines the FailureToleranceType by looking at both the alpha HA annotations and shoot spec ControlPlane. +// GetFailureToleranceType determines the failure tolerance type of the given shoot. func GetFailureToleranceType(shoot *gardencorev1beta1.Shoot) *gardencorev1beta1.FailureToleranceType { - if haAnnot, ok := shoot.Annotations[v1beta1constants.ShootAlphaControlPlaneHighAvailability]; ok { - var failureToleranceType gardencorev1beta1.FailureToleranceType - if haAnnot == v1beta1constants.ShootAlphaControlPlaneHighAvailabilityMultiZone { - failureToleranceType = gardencorev1beta1.FailureToleranceTypeZone - } else { - failureToleranceType = gardencorev1beta1.FailureToleranceTypeNode - } - return &failureToleranceType - } if shoot.Spec.ControlPlane != nil && shoot.Spec.ControlPlane.HighAvailability != nil { return &shoot.Spec.ControlPlane.HighAvailability.FailureTolerance.Type } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go index 8b69b9084..e2aa68618 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_controllerregistration.go @@ -63,9 +63,11 @@ type ControllerResource struct { // Type is the resource type, for example "coreos" or "ubuntu". Type string `json:"type" protobuf:"bytes,2,opt,name=type"` // GloballyEnabled determines if this ControllerResource is required by all Shoot clusters. + // This field is defaulted to false when kind is "Extension". // +optional GloballyEnabled *bool `json:"globallyEnabled,omitempty" protobuf:"varint,3,opt,name=globallyEnabled"` // ReconcileTimeout defines how long Gardener should wait for the resource reconciliation. + // This field is defaulted to 3m0s when kind is "Extension". // +optional ReconcileTimeout *metav1.Duration `json:"reconcileTimeout,omitempty" protobuf:"bytes,4,opt,name=reconcileTimeout"` // Primary determines if the controller backed by this ControllerRegistration is responsible for the extension @@ -73,6 +75,13 @@ type ControllerResource struct { // combination. This field is immutable. // +optional Primary *bool `json:"primary,omitempty" protobuf:"varint,5,opt,name=primary"` + // Lifecycle defines a strategy that determines when different operations on a ControllerResource should be performed. + // This field is defaulted in the following way when kind is "Extension". + // Reconcile: "AfterKubeAPIServer" + // Delete: "BeforeKubeAPIServer" + // Migrate: "BeforeKubeAPIServer" + // +optional + Lifecycle *ControllerResourceLifecycle `json:"lifecycle,omitempty" protobuf:"bytes,6,opt,name=lifecycle"` } // DeploymentRef contains information about `ControllerDeployment` references. @@ -110,3 +119,26 @@ const ( // whether another resource requires it, but only when the respective seed has at least one shoot. ControllerDeploymentPolicyAlwaysExceptNoShoots ControllerDeploymentPolicy = "AlwaysExceptNoShoots" ) + +// ControllerResourceLifecycleStrategy is a string alias. +type ControllerResourceLifecycleStrategy string + +const ( + // BeforeKubeAPIServer specifies that a resource should be handled before the kube-apiserver. + BeforeKubeAPIServer ControllerResourceLifecycleStrategy = "BeforeKubeAPIServer" + // AfterKubeAPIServer specifies that a resource should be handled after the kube-apiserver. + AfterKubeAPIServer ControllerResourceLifecycleStrategy = "AfterKubeAPIServer" +) + +// ControllerResourceLifecycle defines the lifecycle of a controller resource. +type ControllerResourceLifecycle struct { + // Reconcile defines the strategy during reconciliation. + // +optional + Reconcile *ControllerResourceLifecycleStrategy `json:"reconcile,omitempty" protobuf:"bytes,1,opt,name=reconcile,casttype=ControllerResourceLifecycleStrategy"` + // Delete defines the strategy during deletion. + // +optional + Delete *ControllerResourceLifecycleStrategy `json:"delete,omitempty" protobuf:"bytes,2,opt,name=delete,casttype=ControllerResourceLifecycleStrategy"` + // Migrate defines the strategy during migration. + // +optional + Migrate *ControllerResourceLifecycleStrategy `json:"migrate,omitempty" protobuf:"bytes,3,opt,name=migrate,casttype=ControllerResourceLifecycleStrategy"` +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go index a14bf2e58..70811bfd0 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_seed.go @@ -88,13 +88,6 @@ type SeedSpec struct { // Ingress configures Ingress specific settings of the Seed cluster. This field is immutable. // +optional Ingress *Ingress `json:"ingress,omitempty" protobuf:"bytes,9,opt,name=ingress"` - // HighAvailability describes the high availability configuration for seed system components. A highly available - // seed will need at least 3 nodes or 3 availability zones (depending on the configured FailureTolerance of `node` or `zone`), - // allowing spreading of system components across the configured failure domain. - // Deprecated: This field is deprecated and not respected at all. It will be removed in a future release. Use - // `.spec.provider.zones` instead. - // +optional - HighAvailability *HighAvailability `json:"highAvailability,omitempty" protobuf:"bytes,10,opt,name=highAvailability"` } // SeedStatus is the status of a Seed. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go index 7ddd1eae8..9d2a690e0 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/types_shoot.go @@ -196,6 +196,22 @@ type ShootStatus struct { // managed to change the hibernation settings of the cluster // +optional LastHibernationTriggerTime *metav1.Time `json:"lastHibernationTriggerTime,omitempty" protobuf:"bytes,16,opt,name=lastHibernationTriggerTime"` + // LastMaintenance holds information about the last maintenance operations on the Shoot. + // +optional + LastMaintenance *LastMaintenance `json:"lastMaintenance,omitempty" protobuf:"bytes,17,opt,name=lastMaintenance"` +} + +// LastMaintenance holds information about a maintenance operation on the Shoot. +type LastMaintenance struct { + // A human-readable message containing details about the operations performed in the last maintenance. + Description string `json:"description" protobuf:"bytes,1,opt,name=description"` + // TriggeredTime is the time when maintenance was triggered. + TriggeredTime metav1.Time `json:"triggeredTime" protobuf:"bytes,2,opt,name=triggeredTime"` + // Status of the last maintenance operation, one of Processing, Succeeded, Error. + State LastOperationState `json:"state" protobuf:"bytes,3,opt,name=state,casttype=LastOperationState"` + // FailureReason holds the information about the last maintenance operation failure reason. + // +optional + FailureReason *string `json:"failureReason,omitempty" protobuf:"bytes,4,opt,name=failureReason"` } // ShootCredentials contains information about the shoot credentials. @@ -209,7 +225,7 @@ type ShootCredentials struct { type ShootCredentialsRotation struct { // CertificateAuthorities contains information about the certificate authority credential rotation. // +optional - CertificateAuthorities *ShootCARotation `json:"certificateAuthorities,omitempty" protobuf:"bytes,1,opt,name=certificateAuthorities"` + CertificateAuthorities *CARotation `json:"certificateAuthorities,omitempty" protobuf:"bytes,1,opt,name=certificateAuthorities"` // Kubeconfig contains information about the kubeconfig credential rotation. // +optional Kubeconfig *ShootKubeconfigRotation `json:"kubeconfig,omitempty" protobuf:"bytes,2,opt,name=kubeconfig"` @@ -227,10 +243,10 @@ type ShootCredentialsRotation struct { ETCDEncryptionKey *ShootETCDEncryptionKeyRotation `json:"etcdEncryptionKey,omitempty" protobuf:"bytes,6,opt,name=etcdEncryptionKey"` } -// ShootCARotation contains information about the certificate authority credential rotation. -type ShootCARotation struct { +// CARotation contains information about the certificate authority credential rotation. +type CARotation struct { // Phase describes the phase of the certificate authority credential rotation. - Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + Phase CredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` // LastInitiationTime is the most recent time when the certificate authority credential rotation was initiated. // +optional LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` @@ -273,7 +289,7 @@ type ShootObservabilityRotation struct { // ShootServiceAccountKeyRotation contains information about the service account key credential rotation. type ShootServiceAccountKeyRotation struct { // Phase describes the phase of the service account key credential rotation. - Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + Phase CredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` // LastInitiationTime is the most recent time when the service account key credential rotation was initiated. // +optional LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` @@ -286,7 +302,7 @@ type ShootServiceAccountKeyRotation struct { // ShootETCDEncryptionKeyRotation contains information about the ETCD encryption key credential rotation. type ShootETCDEncryptionKeyRotation struct { // Phase describes the phase of the ETCD encryption key credential rotation. - Phase ShootCredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` + Phase CredentialsRotationPhase `json:"phase" protobuf:"bytes,1,opt,name=phase"` // LastInitiationTime is the most recent time when the ETCD encryption key credential rotation was initiated. // +optional LastInitiationTime *metav1.Time `json:"lastInitiationTime,omitempty" protobuf:"bytes,3,opt,name=lastInitiationTime"` @@ -296,19 +312,19 @@ type ShootETCDEncryptionKeyRotation struct { LastCompletionTime *metav1.Time `json:"lastCompletionTime,omitempty" protobuf:"bytes,2,opt,name=lastCompletionTime"` } -// ShootCredentialsRotationPhase is a string alias. -type ShootCredentialsRotationPhase string +// CredentialsRotationPhase is a string alias. +type CredentialsRotationPhase string const ( // RotationPreparing is a constant for the credentials rotation phase describing that the procedure is being prepared. - RotationPreparing ShootCredentialsRotationPhase = "Preparing" + RotationPreparing CredentialsRotationPhase = "Preparing" // RotationPrepared is a constant for the credentials rotation phase describing that the procedure was prepared. - RotationPrepared ShootCredentialsRotationPhase = "Prepared" + RotationPrepared CredentialsRotationPhase = "Prepared" // RotationCompleting is a constant for the credentials rotation phase describing that the procedure is being // completed. - RotationCompleting ShootCredentialsRotationPhase = "Completing" + RotationCompleting CredentialsRotationPhase = "Completing" // RotationCompleted is a constant for the credentials rotation phase describing that the procedure was completed. - RotationCompleted ShootCredentialsRotationPhase = "Completed" + RotationCompleted CredentialsRotationPhase = "Completed" ) // ShootAdvertisedAddress contains information for the shoot's Kube API server. @@ -349,6 +365,7 @@ type KubernetesDashboard struct { const ( // KubernetesDashboardAuthModeBasic uses basic authentication mode for auth. + // Deprecated: basic authentication has been removed in Kubernetes v1.19+. KubernetesDashboardAuthModeBasic = "basic" // KubernetesDashboardAuthModeToken uses token-based mode for auth. KubernetesDashboardAuthModeToken = "token" @@ -379,7 +396,7 @@ type ControlPlane struct { // HighAvailability holds the configuration settings for high availability of the // control plane of a shoot. // +optional - HighAvailability *HighAvailability `json:"highAvailability" protobuf:"bytes,1,name=highAvailability"` + HighAvailability *HighAvailability `json:"highAvailability,omitempty" protobuf:"bytes,1,name=highAvailability"` } ////////////////////////////////////////////////////////////////////////////////////////////////// @@ -665,6 +682,8 @@ type KubeAPIServerConfig struct { AuditConfig *AuditConfig `json:"auditConfig,omitempty" protobuf:"bytes,4,opt,name=auditConfig"` // EnableBasicAuthentication defines whether basic authentication should be enabled for this cluster or not. // +optional + // Defaults to false. + // Deprecated: basic authentication has been removed in Kubernetes v1.19+. This field will be removed in a future version. EnableBasicAuthentication *bool `json:"enableBasicAuthentication,omitempty" protobuf:"varint,5,opt,name=enableBasicAuthentication"` // OIDCConfig contains configuration settings for the OIDC provider. // +optional @@ -697,6 +716,20 @@ type KubeAPIServerConfig struct { // Defaults to 1h. // +optional EventTTL *metav1.Duration `json:"eventTTL,omitempty" protobuf:"bytes,12,opt,name=eventTTL"` + // Logging contains configuration for the log level and HTTP access logs. + // +optional + Logging *KubeAPIServerLogging `json:"logging,omitempty" protobuf:"bytes,13,opt,name=logging"` +} + +// KubeAPIServerLogging contains configuration for the logs level and http access logs +type KubeAPIServerLogging struct { + // Verbosity is the kube-apiserver log verbosity level + // Defaults to 2. + // +optional + Verbosity *int32 `json:"verbosity,omitempty" protobuf:"varint,1,opt,name=verbosity"` + // HTTPAccessVerbosity is the kube-apiserver access logs level + // +optional + HTTPAccessVerbosity *int32 `json:"httpAccessVerbosity,omitempty" protobuf:"varint,2,opt,name=httpAccessVerbosity"` } // KubeAPIServerRequests contains configuration for request-specific settings for the kube-apiserver. @@ -1211,9 +1244,13 @@ type MaintenanceAutoUpdate struct { type MaintenanceTimeWindow struct { // Begin is the beginning of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". // If not present, a random value will be computed. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00` Begin string `json:"begin" protobuf:"bytes,1,opt,name=begin"` // End is the end of the time window in the format HHMMSS+ZONE, e.g. "220000+0100". // If not present, the value will be computed based on the "Begin" value. + // +kubebuilder:validation:Required + // +kubebuilder:validation:Pattern=`([0-1][0-9]|2[0-3])[0-5][0-9][0-5][0-9]\+[0-1][0-4]00` End string `json:"end" protobuf:"bytes,2,opt,name=end"` } @@ -1510,6 +1547,10 @@ type NodeLocalDNS struct { // Default, if unspecified, is to enforce TCP. // +optional ForceTCPToUpstreamDNS *bool `json:"forceTCPToUpstreamDNS,omitempty" protobuf:"varint,3,opt,name=forceTCPToUpstreamDNS"` + // DisableForwardToUpstreamDNS indicates whether requests from node local DNS to upstream DNS should be disabled. + // Default, if unspecified, is to forward requests for external domains to upstream DNS + // +optional + DisableForwardToUpstreamDNS *bool `json:"disableForwardToUpstreamDNS,omitempty" protobuf:"varint,4,opt,name=disableForwardToUpstreamDNS"` } ////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go index 5b42b8481..b9406f6b4 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.conversion.go @@ -202,6 +202,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*CARotation)(nil), (*core.CARotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_CARotation_To_core_CARotation(a.(*CARotation), b.(*core.CARotation), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.CARotation)(nil), (*CARotation)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_CARotation_To_v1beta1_CARotation(a.(*core.CARotation), b.(*CARotation), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*CRI)(nil), (*core.CRI)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_CRI_To_core_CRI(a.(*CRI), b.(*core.CRI), scope) }); err != nil { @@ -392,6 +402,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*ControllerResourceLifecycle)(nil), (*core.ControllerResourceLifecycle)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle(a.(*ControllerResourceLifecycle), b.(*core.ControllerResourceLifecycle), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.ControllerResourceLifecycle)(nil), (*ControllerResourceLifecycle)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_ControllerResourceLifecycle_To_v1beta1_ControllerResourceLifecycle(a.(*core.ControllerResourceLifecycle), b.(*ControllerResourceLifecycle), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*CoreDNS)(nil), (*core.CoreDNS)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_CoreDNS_To_core_CoreDNS(a.(*CoreDNS), b.(*core.CoreDNS), scope) }); err != nil { @@ -582,6 +602,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*KubeAPIServerLogging)(nil), (*core.KubeAPIServerLogging)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_KubeAPIServerLogging_To_core_KubeAPIServerLogging(a.(*KubeAPIServerLogging), b.(*core.KubeAPIServerLogging), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.KubeAPIServerLogging)(nil), (*KubeAPIServerLogging)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_KubeAPIServerLogging_To_v1beta1_KubeAPIServerLogging(a.(*core.KubeAPIServerLogging), b.(*KubeAPIServerLogging), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*KubeAPIServerRequests)(nil), (*core.KubeAPIServerRequests)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(a.(*KubeAPIServerRequests), b.(*core.KubeAPIServerRequests), scope) }); err != nil { @@ -722,6 +752,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*LastMaintenance)(nil), (*core.LastMaintenance)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1beta1_LastMaintenance_To_core_LastMaintenance(a.(*LastMaintenance), b.(*core.LastMaintenance), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.LastMaintenance)(nil), (*LastMaintenance)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_LastMaintenance_To_v1beta1_LastMaintenance(a.(*core.LastMaintenance), b.(*LastMaintenance), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*LastOperation)(nil), (*core.LastOperation)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_LastOperation_To_core_LastOperation(a.(*LastOperation), b.(*core.LastOperation), scope) }); err != nil { @@ -1292,16 +1332,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*ShootCARotation)(nil), (*core.ShootCARotation)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1beta1_ShootCARotation_To_core_ShootCARotation(a.(*ShootCARotation), b.(*core.ShootCARotation), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*core.ShootCARotation)(nil), (*ShootCARotation)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_core_ShootCARotation_To_v1beta1_ShootCARotation(a.(*core.ShootCARotation), b.(*ShootCARotation), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*ShootCredentials)(nil), (*core.ShootCredentials)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1beta1_ShootCredentials_To_core_ShootCredentials(a.(*ShootCredentials), b.(*core.ShootCredentials), scope) }); err != nil { @@ -1933,6 +1963,30 @@ func Convert_core_BackupEntryStatus_To_v1beta1_BackupEntryStatus(in *core.Backup return autoConvert_core_BackupEntryStatus_To_v1beta1_BackupEntryStatus(in, out, s) } +func autoConvert_v1beta1_CARotation_To_core_CARotation(in *CARotation, out *core.CARotation, s conversion.Scope) error { + out.Phase = core.CredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_v1beta1_CARotation_To_core_CARotation is an autogenerated conversion function. +func Convert_v1beta1_CARotation_To_core_CARotation(in *CARotation, out *core.CARotation, s conversion.Scope) error { + return autoConvert_v1beta1_CARotation_To_core_CARotation(in, out, s) +} + +func autoConvert_core_CARotation_To_v1beta1_CARotation(in *core.CARotation, out *CARotation, s conversion.Scope) error { + out.Phase = CredentialsRotationPhase(in.Phase) + out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) + out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) + return nil +} + +// Convert_core_CARotation_To_v1beta1_CARotation is an autogenerated conversion function. +func Convert_core_CARotation_To_v1beta1_CARotation(in *core.CARotation, out *CARotation, s conversion.Scope) error { + return autoConvert_core_CARotation_To_v1beta1_CARotation(in, out, s) +} + func autoConvert_v1beta1_CRI_To_core_CRI(in *CRI, out *core.CRI, s conversion.Scope) error { out.Name = core.CRIName(in.Name) out.ContainerRuntimes = *(*[]core.ContainerRuntime)(unsafe.Pointer(&in.ContainerRuntimes)) @@ -2425,6 +2479,7 @@ func autoConvert_v1beta1_ControllerResource_To_core_ControllerResource(in *Contr out.GloballyEnabled = (*bool)(unsafe.Pointer(in.GloballyEnabled)) out.ReconcileTimeout = (*metav1.Duration)(unsafe.Pointer(in.ReconcileTimeout)) out.Primary = (*bool)(unsafe.Pointer(in.Primary)) + out.Lifecycle = (*core.ControllerResourceLifecycle)(unsafe.Pointer(in.Lifecycle)) return nil } @@ -2439,6 +2494,7 @@ func autoConvert_core_ControllerResource_To_v1beta1_ControllerResource(in *core. out.GloballyEnabled = (*bool)(unsafe.Pointer(in.GloballyEnabled)) out.ReconcileTimeout = (*metav1.Duration)(unsafe.Pointer(in.ReconcileTimeout)) out.Primary = (*bool)(unsafe.Pointer(in.Primary)) + out.Lifecycle = (*ControllerResourceLifecycle)(unsafe.Pointer(in.Lifecycle)) return nil } @@ -2447,6 +2503,30 @@ func Convert_core_ControllerResource_To_v1beta1_ControllerResource(in *core.Cont return autoConvert_core_ControllerResource_To_v1beta1_ControllerResource(in, out, s) } +func autoConvert_v1beta1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle(in *ControllerResourceLifecycle, out *core.ControllerResourceLifecycle, s conversion.Scope) error { + out.Reconcile = (*core.ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Reconcile)) + out.Delete = (*core.ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Delete)) + out.Migrate = (*core.ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Migrate)) + return nil +} + +// Convert_v1beta1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle is an autogenerated conversion function. +func Convert_v1beta1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle(in *ControllerResourceLifecycle, out *core.ControllerResourceLifecycle, s conversion.Scope) error { + return autoConvert_v1beta1_ControllerResourceLifecycle_To_core_ControllerResourceLifecycle(in, out, s) +} + +func autoConvert_core_ControllerResourceLifecycle_To_v1beta1_ControllerResourceLifecycle(in *core.ControllerResourceLifecycle, out *ControllerResourceLifecycle, s conversion.Scope) error { + out.Reconcile = (*ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Reconcile)) + out.Delete = (*ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Delete)) + out.Migrate = (*ControllerResourceLifecycleStrategy)(unsafe.Pointer(in.Migrate)) + return nil +} + +// Convert_core_ControllerResourceLifecycle_To_v1beta1_ControllerResourceLifecycle is an autogenerated conversion function. +func Convert_core_ControllerResourceLifecycle_To_v1beta1_ControllerResourceLifecycle(in *core.ControllerResourceLifecycle, out *ControllerResourceLifecycle, s conversion.Scope) error { + return autoConvert_core_ControllerResourceLifecycle_To_v1beta1_ControllerResourceLifecycle(in, out, s) +} + func autoConvert_v1beta1_CoreDNS_To_core_CoreDNS(in *CoreDNS, out *core.CoreDNS, s conversion.Scope) error { out.Autoscaling = (*core.CoreDNSAutoscaling)(unsafe.Pointer(in.Autoscaling)) out.Rewriting = (*core.CoreDNSRewriting)(unsafe.Pointer(in.Rewriting)) @@ -2890,6 +2970,7 @@ func autoConvert_v1beta1_KubeAPIServerConfig_To_core_KubeAPIServerConfig(in *Kub out.Requests = (*core.KubeAPIServerRequests)(unsafe.Pointer(in.Requests)) out.EnableAnonymousAuthentication = (*bool)(unsafe.Pointer(in.EnableAnonymousAuthentication)) out.EventTTL = (*metav1.Duration)(unsafe.Pointer(in.EventTTL)) + out.Logging = (*core.KubeAPIServerLogging)(unsafe.Pointer(in.Logging)) return nil } @@ -2923,6 +3004,7 @@ func autoConvert_core_KubeAPIServerConfig_To_v1beta1_KubeAPIServerConfig(in *cor out.Requests = (*KubeAPIServerRequests)(unsafe.Pointer(in.Requests)) out.EnableAnonymousAuthentication = (*bool)(unsafe.Pointer(in.EnableAnonymousAuthentication)) out.EventTTL = (*metav1.Duration)(unsafe.Pointer(in.EventTTL)) + out.Logging = (*KubeAPIServerLogging)(unsafe.Pointer(in.Logging)) return nil } @@ -2931,6 +3013,28 @@ func Convert_core_KubeAPIServerConfig_To_v1beta1_KubeAPIServerConfig(in *core.Ku return autoConvert_core_KubeAPIServerConfig_To_v1beta1_KubeAPIServerConfig(in, out, s) } +func autoConvert_v1beta1_KubeAPIServerLogging_To_core_KubeAPIServerLogging(in *KubeAPIServerLogging, out *core.KubeAPIServerLogging, s conversion.Scope) error { + out.Verbosity = (*int32)(unsafe.Pointer(in.Verbosity)) + out.HTTPAccessVerbosity = (*int32)(unsafe.Pointer(in.HTTPAccessVerbosity)) + return nil +} + +// Convert_v1beta1_KubeAPIServerLogging_To_core_KubeAPIServerLogging is an autogenerated conversion function. +func Convert_v1beta1_KubeAPIServerLogging_To_core_KubeAPIServerLogging(in *KubeAPIServerLogging, out *core.KubeAPIServerLogging, s conversion.Scope) error { + return autoConvert_v1beta1_KubeAPIServerLogging_To_core_KubeAPIServerLogging(in, out, s) +} + +func autoConvert_core_KubeAPIServerLogging_To_v1beta1_KubeAPIServerLogging(in *core.KubeAPIServerLogging, out *KubeAPIServerLogging, s conversion.Scope) error { + out.Verbosity = (*int32)(unsafe.Pointer(in.Verbosity)) + out.HTTPAccessVerbosity = (*int32)(unsafe.Pointer(in.HTTPAccessVerbosity)) + return nil +} + +// Convert_core_KubeAPIServerLogging_To_v1beta1_KubeAPIServerLogging is an autogenerated conversion function. +func Convert_core_KubeAPIServerLogging_To_v1beta1_KubeAPIServerLogging(in *core.KubeAPIServerLogging, out *KubeAPIServerLogging, s conversion.Scope) error { + return autoConvert_core_KubeAPIServerLogging_To_v1beta1_KubeAPIServerLogging(in, out, s) +} + func autoConvert_v1beta1_KubeAPIServerRequests_To_core_KubeAPIServerRequests(in *KubeAPIServerRequests, out *core.KubeAPIServerRequests, s conversion.Scope) error { out.MaxNonMutatingInflight = (*int32)(unsafe.Pointer(in.MaxNonMutatingInflight)) out.MaxMutatingInflight = (*int32)(unsafe.Pointer(in.MaxMutatingInflight)) @@ -3385,6 +3489,32 @@ func Convert_core_LastError_To_v1beta1_LastError(in *core.LastError, out *LastEr return autoConvert_core_LastError_To_v1beta1_LastError(in, out, s) } +func autoConvert_v1beta1_LastMaintenance_To_core_LastMaintenance(in *LastMaintenance, out *core.LastMaintenance, s conversion.Scope) error { + out.Description = in.Description + out.TriggeredTime = in.TriggeredTime + out.State = core.LastOperationState(in.State) + out.FailureReason = (*string)(unsafe.Pointer(in.FailureReason)) + return nil +} + +// Convert_v1beta1_LastMaintenance_To_core_LastMaintenance is an autogenerated conversion function. +func Convert_v1beta1_LastMaintenance_To_core_LastMaintenance(in *LastMaintenance, out *core.LastMaintenance, s conversion.Scope) error { + return autoConvert_v1beta1_LastMaintenance_To_core_LastMaintenance(in, out, s) +} + +func autoConvert_core_LastMaintenance_To_v1beta1_LastMaintenance(in *core.LastMaintenance, out *LastMaintenance, s conversion.Scope) error { + out.Description = in.Description + out.TriggeredTime = in.TriggeredTime + out.State = LastOperationState(in.State) + out.FailureReason = (*string)(unsafe.Pointer(in.FailureReason)) + return nil +} + +// Convert_core_LastMaintenance_To_v1beta1_LastMaintenance is an autogenerated conversion function. +func Convert_core_LastMaintenance_To_v1beta1_LastMaintenance(in *core.LastMaintenance, out *LastMaintenance, s conversion.Scope) error { + return autoConvert_core_LastMaintenance_To_v1beta1_LastMaintenance(in, out, s) +} + func autoConvert_v1beta1_LastOperation_To_core_LastOperation(in *LastOperation, out *core.LastOperation, s conversion.Scope) error { out.Description = in.Description out.LastUpdateTime = in.LastUpdateTime @@ -3761,6 +3891,7 @@ func autoConvert_v1beta1_NodeLocalDNS_To_core_NodeLocalDNS(in *NodeLocalDNS, out out.Enabled = in.Enabled out.ForceTCPToClusterDNS = (*bool)(unsafe.Pointer(in.ForceTCPToClusterDNS)) out.ForceTCPToUpstreamDNS = (*bool)(unsafe.Pointer(in.ForceTCPToUpstreamDNS)) + out.DisableForwardToUpstreamDNS = (*bool)(unsafe.Pointer(in.DisableForwardToUpstreamDNS)) return nil } @@ -3773,6 +3904,7 @@ func autoConvert_core_NodeLocalDNS_To_v1beta1_NodeLocalDNS(in *core.NodeLocalDNS out.Enabled = in.Enabled out.ForceTCPToClusterDNS = (*bool)(unsafe.Pointer(in.ForceTCPToClusterDNS)) out.ForceTCPToUpstreamDNS = (*bool)(unsafe.Pointer(in.ForceTCPToUpstreamDNS)) + out.DisableForwardToUpstreamDNS = (*bool)(unsafe.Pointer(in.DisableForwardToUpstreamDNS)) return nil } @@ -4708,7 +4840,6 @@ func autoConvert_v1beta1_SeedSpec_To_core_SeedSpec(in *SeedSpec, out *core.SeedS out.Volume = (*core.SeedVolume)(unsafe.Pointer(in.Volume)) out.Settings = (*core.SeedSettings)(unsafe.Pointer(in.Settings)) out.Ingress = (*core.Ingress)(unsafe.Pointer(in.Ingress)) - out.HighAvailability = (*core.HighAvailability)(unsafe.Pointer(in.HighAvailability)) return nil } @@ -4733,7 +4864,6 @@ func autoConvert_core_SeedSpec_To_v1beta1_SeedSpec(in *core.SeedSpec, out *SeedS out.Taints = *(*[]SeedTaint)(unsafe.Pointer(&in.Taints)) out.Volume = (*SeedVolume)(unsafe.Pointer(in.Volume)) out.Ingress = (*Ingress)(unsafe.Pointer(in.Ingress)) - out.HighAvailability = (*HighAvailability)(unsafe.Pointer(in.HighAvailability)) return nil } @@ -4950,30 +5080,6 @@ func Convert_core_ShootAdvertisedAddress_To_v1beta1_ShootAdvertisedAddress(in *c return autoConvert_core_ShootAdvertisedAddress_To_v1beta1_ShootAdvertisedAddress(in, out, s) } -func autoConvert_v1beta1_ShootCARotation_To_core_ShootCARotation(in *ShootCARotation, out *core.ShootCARotation, s conversion.Scope) error { - out.Phase = core.ShootCredentialsRotationPhase(in.Phase) - out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) - out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) - return nil -} - -// Convert_v1beta1_ShootCARotation_To_core_ShootCARotation is an autogenerated conversion function. -func Convert_v1beta1_ShootCARotation_To_core_ShootCARotation(in *ShootCARotation, out *core.ShootCARotation, s conversion.Scope) error { - return autoConvert_v1beta1_ShootCARotation_To_core_ShootCARotation(in, out, s) -} - -func autoConvert_core_ShootCARotation_To_v1beta1_ShootCARotation(in *core.ShootCARotation, out *ShootCARotation, s conversion.Scope) error { - out.Phase = ShootCredentialsRotationPhase(in.Phase) - out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) - out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) - return nil -} - -// Convert_core_ShootCARotation_To_v1beta1_ShootCARotation is an autogenerated conversion function. -func Convert_core_ShootCARotation_To_v1beta1_ShootCARotation(in *core.ShootCARotation, out *ShootCARotation, s conversion.Scope) error { - return autoConvert_core_ShootCARotation_To_v1beta1_ShootCARotation(in, out, s) -} - func autoConvert_v1beta1_ShootCredentials_To_core_ShootCredentials(in *ShootCredentials, out *core.ShootCredentials, s conversion.Scope) error { out.Rotation = (*core.ShootCredentialsRotation)(unsafe.Pointer(in.Rotation)) return nil @@ -4995,7 +5101,7 @@ func Convert_core_ShootCredentials_To_v1beta1_ShootCredentials(in *core.ShootCre } func autoConvert_v1beta1_ShootCredentialsRotation_To_core_ShootCredentialsRotation(in *ShootCredentialsRotation, out *core.ShootCredentialsRotation, s conversion.Scope) error { - out.CertificateAuthorities = (*core.ShootCARotation)(unsafe.Pointer(in.CertificateAuthorities)) + out.CertificateAuthorities = (*core.CARotation)(unsafe.Pointer(in.CertificateAuthorities)) out.Kubeconfig = (*core.ShootKubeconfigRotation)(unsafe.Pointer(in.Kubeconfig)) out.SSHKeypair = (*core.ShootSSHKeypairRotation)(unsafe.Pointer(in.SSHKeypair)) out.Observability = (*core.ShootObservabilityRotation)(unsafe.Pointer(in.Observability)) @@ -5010,7 +5116,7 @@ func Convert_v1beta1_ShootCredentialsRotation_To_core_ShootCredentialsRotation(i } func autoConvert_core_ShootCredentialsRotation_To_v1beta1_ShootCredentialsRotation(in *core.ShootCredentialsRotation, out *ShootCredentialsRotation, s conversion.Scope) error { - out.CertificateAuthorities = (*ShootCARotation)(unsafe.Pointer(in.CertificateAuthorities)) + out.CertificateAuthorities = (*CARotation)(unsafe.Pointer(in.CertificateAuthorities)) out.Kubeconfig = (*ShootKubeconfigRotation)(unsafe.Pointer(in.Kubeconfig)) out.SSHKeypair = (*ShootSSHKeypairRotation)(unsafe.Pointer(in.SSHKeypair)) out.Observability = (*ShootObservabilityRotation)(unsafe.Pointer(in.Observability)) @@ -5025,7 +5131,7 @@ func Convert_core_ShootCredentialsRotation_To_v1beta1_ShootCredentialsRotation(i } func autoConvert_v1beta1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionKeyRotation(in *ShootETCDEncryptionKeyRotation, out *core.ShootETCDEncryptionKeyRotation, s conversion.Scope) error { - out.Phase = core.ShootCredentialsRotationPhase(in.Phase) + out.Phase = core.CredentialsRotationPhase(in.Phase) out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) return nil @@ -5037,7 +5143,7 @@ func Convert_v1beta1_ShootETCDEncryptionKeyRotation_To_core_ShootETCDEncryptionK } func autoConvert_core_ShootETCDEncryptionKeyRotation_To_v1beta1_ShootETCDEncryptionKeyRotation(in *core.ShootETCDEncryptionKeyRotation, out *ShootETCDEncryptionKeyRotation, s conversion.Scope) error { - out.Phase = ShootCredentialsRotationPhase(in.Phase) + out.Phase = CredentialsRotationPhase(in.Phase) out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) return nil @@ -5207,7 +5313,7 @@ func Convert_core_ShootSSHKeypairRotation_To_v1beta1_ShootSSHKeypairRotation(in } func autoConvert_v1beta1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountKeyRotation(in *ShootServiceAccountKeyRotation, out *core.ShootServiceAccountKeyRotation, s conversion.Scope) error { - out.Phase = core.ShootCredentialsRotationPhase(in.Phase) + out.Phase = core.CredentialsRotationPhase(in.Phase) out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) return nil @@ -5219,7 +5325,7 @@ func Convert_v1beta1_ShootServiceAccountKeyRotation_To_core_ShootServiceAccountK } func autoConvert_core_ShootServiceAccountKeyRotation_To_v1beta1_ShootServiceAccountKeyRotation(in *core.ShootServiceAccountKeyRotation, out *ShootServiceAccountKeyRotation, s conversion.Scope) error { - out.Phase = ShootCredentialsRotationPhase(in.Phase) + out.Phase = CredentialsRotationPhase(in.Phase) out.LastInitiationTime = (*metav1.Time)(unsafe.Pointer(in.LastInitiationTime)) out.LastCompletionTime = (*metav1.Time)(unsafe.Pointer(in.LastCompletionTime)) return nil @@ -5319,6 +5425,7 @@ func autoConvert_v1beta1_ShootStatus_To_core_ShootStatus(in *ShootStatus, out *c out.MigrationStartTime = (*metav1.Time)(unsafe.Pointer(in.MigrationStartTime)) out.Credentials = (*core.ShootCredentials)(unsafe.Pointer(in.Credentials)) out.LastHibernationTriggerTime = (*metav1.Time)(unsafe.Pointer(in.LastHibernationTriggerTime)) + out.LastMaintenance = (*core.LastMaintenance)(unsafe.Pointer(in.LastMaintenance)) return nil } @@ -5346,6 +5453,7 @@ func autoConvert_core_ShootStatus_To_v1beta1_ShootStatus(in *core.ShootStatus, o out.AdvertisedAddresses = *(*[]ShootAdvertisedAddress)(unsafe.Pointer(&in.AdvertisedAddresses)) out.MigrationStartTime = (*metav1.Time)(unsafe.Pointer(in.MigrationStartTime)) out.Credentials = (*ShootCredentials)(unsafe.Pointer(in.Credentials)) + out.LastMaintenance = (*LastMaintenance)(unsafe.Pointer(in.LastMaintenance)) return nil } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go index a939fa229..0c9d6c89e 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/v1beta1/zz_generated.deepcopy.go @@ -444,6 +444,30 @@ func (in *BackupEntryStatus) DeepCopy() *BackupEntryStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CARotation) DeepCopyInto(out *CARotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CARotation. +func (in *CARotation) DeepCopy() *CARotation { + if in == nil { + return nil + } + out := new(CARotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CRI) DeepCopyInto(out *CRI) { *out = *in @@ -1027,6 +1051,11 @@ func (in *ControllerResource) DeepCopyInto(out *ControllerResource) { *out = new(bool) **out = **in } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(ControllerResourceLifecycle) + (*in).DeepCopyInto(*out) + } return } @@ -1040,6 +1069,37 @@ func (in *ControllerResource) DeepCopy() *ControllerResource { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerResourceLifecycle) DeepCopyInto(out *ControllerResourceLifecycle) { + *out = *in + if in.Reconcile != nil { + in, out := &in.Reconcile, &out.Reconcile + *out = new(ControllerResourceLifecycleStrategy) + **out = **in + } + if in.Delete != nil { + in, out := &in.Delete, &out.Delete + *out = new(ControllerResourceLifecycleStrategy) + **out = **in + } + if in.Migrate != nil { + in, out := &in.Migrate, &out.Migrate + *out = new(ControllerResourceLifecycleStrategy) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerResourceLifecycle. +func (in *ControllerResourceLifecycle) DeepCopy() *ControllerResourceLifecycle { + if in == nil { + return nil + } + out := new(ControllerResourceLifecycle) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CoreDNS) DeepCopyInto(out *CoreDNS) { *out = *in @@ -1541,6 +1601,11 @@ func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { *out = new(metav1.Duration) **out = **in } + if in.Logging != nil { + in, out := &in.Logging, &out.Logging + *out = new(KubeAPIServerLogging) + (*in).DeepCopyInto(*out) + } return } @@ -1554,6 +1619,32 @@ func (in *KubeAPIServerConfig) DeepCopy() *KubeAPIServerConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeAPIServerLogging) DeepCopyInto(out *KubeAPIServerLogging) { + *out = *in + if in.Verbosity != nil { + in, out := &in.Verbosity, &out.Verbosity + *out = new(int32) + **out = **in + } + if in.HTTPAccessVerbosity != nil { + in, out := &in.HTTPAccessVerbosity, &out.HTTPAccessVerbosity + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeAPIServerLogging. +func (in *KubeAPIServerLogging) DeepCopy() *KubeAPIServerLogging { + if in == nil { + return nil + } + out := new(KubeAPIServerLogging) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeAPIServerRequests) DeepCopyInto(out *KubeAPIServerRequests) { *out = *in @@ -2126,6 +2217,28 @@ func (in *LastError) DeepCopy() *LastError { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LastMaintenance) DeepCopyInto(out *LastMaintenance) { + *out = *in + in.TriggeredTime.DeepCopyInto(&out.TriggeredTime) + if in.FailureReason != nil { + in, out := &in.FailureReason, &out.FailureReason + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LastMaintenance. +func (in *LastMaintenance) DeepCopy() *LastMaintenance { + if in == nil { + return nil + } + out := new(LastMaintenance) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LastOperation) DeepCopyInto(out *LastOperation) { *out = *in @@ -2506,6 +2619,11 @@ func (in *NodeLocalDNS) DeepCopyInto(out *NodeLocalDNS) { *out = new(bool) **out = **in } + if in.DisableForwardToUpstreamDNS != nil { + in, out := &in.DisableForwardToUpstreamDNS, &out.DisableForwardToUpstreamDNS + *out = new(bool) + **out = **in + } return } @@ -3538,11 +3656,6 @@ func (in *SeedSpec) DeepCopyInto(out *SeedSpec) { *out = new(Ingress) (*in).DeepCopyInto(*out) } - if in.HighAvailability != nil { - in, out := &in.HighAvailability, &out.HighAvailability - *out = new(HighAvailability) - **out = **in - } return } @@ -3778,30 +3891,6 @@ func (in *ShootAdvertisedAddress) DeepCopy() *ShootAdvertisedAddress { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ShootCARotation) DeepCopyInto(out *ShootCARotation) { - *out = *in - if in.LastInitiationTime != nil { - in, out := &in.LastInitiationTime, &out.LastInitiationTime - *out = (*in).DeepCopy() - } - if in.LastCompletionTime != nil { - in, out := &in.LastCompletionTime, &out.LastCompletionTime - *out = (*in).DeepCopy() - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootCARotation. -func (in *ShootCARotation) DeepCopy() *ShootCARotation { - if in == nil { - return nil - } - out := new(ShootCARotation) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootCredentials) DeepCopyInto(out *ShootCredentials) { *out = *in @@ -3828,7 +3917,7 @@ func (in *ShootCredentialsRotation) DeepCopyInto(out *ShootCredentialsRotation) *out = *in if in.CertificateAuthorities != nil { in, out := &in.CertificateAuthorities, &out.CertificateAuthorities - *out = new(ShootCARotation) + *out = new(CARotation) (*in).DeepCopyInto(*out) } if in.Kubeconfig != nil { @@ -4229,6 +4318,11 @@ func (in *ShootStatus) DeepCopyInto(out *ShootStatus) { in, out := &in.LastHibernationTriggerTime, &out.LastHibernationTriggerTime *out = (*in).DeepCopy() } + if in.LastMaintenance != nil { + in, out := &in.LastMaintenance, &out.LastMaintenance + *out = new(LastMaintenance) + (*in).DeepCopyInto(*out) + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go index 39e848e34..80e751547 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/core/zz_generated.deepcopy.go @@ -444,6 +444,30 @@ func (in *BackupEntryStatus) DeepCopy() *BackupEntryStatus { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CARotation) DeepCopyInto(out *CARotation) { + *out = *in + if in.LastInitiationTime != nil { + in, out := &in.LastInitiationTime, &out.LastInitiationTime + *out = (*in).DeepCopy() + } + if in.LastCompletionTime != nil { + in, out := &in.LastCompletionTime, &out.LastCompletionTime + *out = (*in).DeepCopy() + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CARotation. +func (in *CARotation) DeepCopy() *CARotation { + if in == nil { + return nil + } + out := new(CARotation) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CRI) DeepCopyInto(out *CRI) { *out = *in @@ -1029,6 +1053,11 @@ func (in *ControllerResource) DeepCopyInto(out *ControllerResource) { *out = new(bool) **out = **in } + if in.Lifecycle != nil { + in, out := &in.Lifecycle, &out.Lifecycle + *out = new(ControllerResourceLifecycle) + (*in).DeepCopyInto(*out) + } return } @@ -1042,6 +1071,37 @@ func (in *ControllerResource) DeepCopy() *ControllerResource { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ControllerResourceLifecycle) DeepCopyInto(out *ControllerResourceLifecycle) { + *out = *in + if in.Reconcile != nil { + in, out := &in.Reconcile, &out.Reconcile + *out = new(ControllerResourceLifecycleStrategy) + **out = **in + } + if in.Delete != nil { + in, out := &in.Delete, &out.Delete + *out = new(ControllerResourceLifecycleStrategy) + **out = **in + } + if in.Migrate != nil { + in, out := &in.Migrate, &out.Migrate + *out = new(ControllerResourceLifecycleStrategy) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ControllerResourceLifecycle. +func (in *ControllerResourceLifecycle) DeepCopy() *ControllerResourceLifecycle { + if in == nil { + return nil + } + out := new(ControllerResourceLifecycle) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *CoreDNS) DeepCopyInto(out *CoreDNS) { *out = *in @@ -1695,6 +1755,11 @@ func (in *KubeAPIServerConfig) DeepCopyInto(out *KubeAPIServerConfig) { *out = new(metav1.Duration) **out = **in } + if in.Logging != nil { + in, out := &in.Logging, &out.Logging + *out = new(KubeAPIServerLogging) + (*in).DeepCopyInto(*out) + } return } @@ -1708,6 +1773,32 @@ func (in *KubeAPIServerConfig) DeepCopy() *KubeAPIServerConfig { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *KubeAPIServerLogging) DeepCopyInto(out *KubeAPIServerLogging) { + *out = *in + if in.Verbosity != nil { + in, out := &in.Verbosity, &out.Verbosity + *out = new(int32) + **out = **in + } + if in.HTTPAccessVerbosity != nil { + in, out := &in.HTTPAccessVerbosity, &out.HTTPAccessVerbosity + *out = new(int32) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubeAPIServerLogging. +func (in *KubeAPIServerLogging) DeepCopy() *KubeAPIServerLogging { + if in == nil { + return nil + } + out := new(KubeAPIServerLogging) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KubeAPIServerRequests) DeepCopyInto(out *KubeAPIServerRequests) { *out = *in @@ -2280,6 +2371,28 @@ func (in *LastError) DeepCopy() *LastError { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *LastMaintenance) DeepCopyInto(out *LastMaintenance) { + *out = *in + in.TriggeredTime.DeepCopyInto(&out.TriggeredTime) + if in.FailureReason != nil { + in, out := &in.FailureReason, &out.FailureReason + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LastMaintenance. +func (in *LastMaintenance) DeepCopy() *LastMaintenance { + if in == nil { + return nil + } + out := new(LastMaintenance) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *LastOperation) DeepCopyInto(out *LastOperation) { *out = *in @@ -2660,6 +2773,11 @@ func (in *NodeLocalDNS) DeepCopyInto(out *NodeLocalDNS) { *out = new(bool) **out = **in } + if in.DisableForwardToUpstreamDNS != nil { + in, out := &in.DisableForwardToUpstreamDNS, &out.DisableForwardToUpstreamDNS + *out = new(bool) + **out = **in + } return } @@ -3710,11 +3828,6 @@ func (in *SeedSpec) DeepCopyInto(out *SeedSpec) { *out = new(Ingress) (*in).DeepCopyInto(*out) } - if in.HighAvailability != nil { - in, out := &in.HighAvailability, &out.HighAvailability - *out = new(HighAvailability) - **out = **in - } return } @@ -3950,30 +4063,6 @@ func (in *ShootAdvertisedAddress) DeepCopy() *ShootAdvertisedAddress { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ShootCARotation) DeepCopyInto(out *ShootCARotation) { - *out = *in - if in.LastInitiationTime != nil { - in, out := &in.LastInitiationTime, &out.LastInitiationTime - *out = (*in).DeepCopy() - } - if in.LastCompletionTime != nil { - in, out := &in.LastCompletionTime, &out.LastCompletionTime - *out = (*in).DeepCopy() - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ShootCARotation. -func (in *ShootCARotation) DeepCopy() *ShootCARotation { - if in == nil { - return nil - } - out := new(ShootCARotation) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ShootCredentials) DeepCopyInto(out *ShootCredentials) { *out = *in @@ -4000,7 +4089,7 @@ func (in *ShootCredentialsRotation) DeepCopyInto(out *ShootCredentialsRotation) *out = *in if in.CertificateAuthorities != nil { in, out := &in.CertificateAuthorities, &out.CertificateAuthorities - *out = new(ShootCARotation) + *out = new(CARotation) (*in).DeepCopyInto(*out) } if in.Kubeconfig != nil { @@ -4493,6 +4582,11 @@ func (in *ShootStatus) DeepCopyInto(out *ShootStatus) { *out = new(ShootCredentials) (*in).DeepCopyInto(*out) } + if in.LastMaintenance != nil { + in, out := &in.LastMaintenance, &out.LastMaintenance + *out = new(LastMaintenance) + (*in).DeepCopyInto(*out) + } return } diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operator/register.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/register.go new file mode 100644 index 000000000..ae4eb753f --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/register.go @@ -0,0 +1,18 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package operator + +// GroupName is the group name used in this package. +const GroupName = "operator.gardener.cloud" diff --git a/vendor/github.com/gardener/gardener/pkg/logger/logger.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/constants.go similarity index 55% rename from vendor/github.com/gardener/gardener/pkg/logger/logger.go rename to vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/constants.go index d90cc6891..232f23236 100644 --- a/vendor/github.com/gardener/gardener/pkg/logger/logger.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/constants.go @@ -1,4 +1,4 @@ -// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,21 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -package logger +package v1alpha1 -import ( - "github.com/go-logr/logr" - "k8s.io/apimachinery/pkg/util/runtime" +const ( + // SecretManagerIdentityOperator is the identity for the secret manager used inside gardener-operator. + SecretManagerIdentityOperator = "gardener-operator" - "github.com/gardener/gardener/pkg/utils" + // SecretNameCARuntime is a constant for the name of a secret containing the CA for the garden runtime cluster. + SecretNameCARuntime = "ca-garden-runtime" ) - -// IDFieldName is the name of the id field for a logger. -const IDFieldName = "process_id" - -// NewIDLogger extends an existing logger with a randomly generated id field (key `process_id`). -func NewIDLogger(logger logr.Logger) logr.Logger { - id, err := utils.GenerateRandomString(8) - runtime.Must(err) - return logger.WithValues(IDFieldName, id) -} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/doc.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/doc.go new file mode 100644 index 000000000..11779bdbf --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/doc.go @@ -0,0 +1,24 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// +k8s:deepcopy-gen=package +// +k8s:conversion-gen=github.com/gardener/gardener/pkg/apis/operator +// +k8s:openapi-gen=true +// +k8s:defaulter-gen=TypeMeta + +//go:generate gen-crd-api-reference-docs -api-dir . -config ../../../../hack/api-reference/operator-config.json -template-dir ../../../../hack/api-reference/template -out-file ../../../../docs/api-reference/operator.md + +// Package v1alpha1 contains the configuration of the Gardener Operator. +// +groupName=operator.gardener.cloud +package v1alpha1 // import "github.com/gardener/gardener/pkg/apis/operator/v1alpha1" diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/register.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/register.go new file mode 100644 index 000000000..f13651a85 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/register.go @@ -0,0 +1,53 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1alpha1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" + + "github.com/gardener/gardener/pkg/apis/operator" +) + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: operator.GroupName, Version: "v1alpha1"} + +// Kind takes an unqualified kind and returns back a Group qualified GroupKind +func Kind(kind string) schema.GroupKind { + return SchemeGroupVersion.WithKind(kind).GroupKind() +} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // SchemeBuilder is a new Scheme Builder which registers our API. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + // AddToScheme is a reference to the Scheme Builder's AddToScheme function. + AddToScheme = SchemeBuilder.AddToScheme +) + +// Adds the list of known types to Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &Garden{}, + &GardenList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go new file mode 100644 index 000000000..d722d9f7e --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/types.go @@ -0,0 +1,206 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package v1alpha1 + +import ( + corev1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// +kubebuilder:resource:scope=Cluster,shortName="grdn" +// +kubebuilder:subresource:status +// +kubebuilder:printcolumn:name="Reconciled",type=string,JSONPath=`.status.conditions[?(@.type=="Reconciled")].status`,description="Indicates whether the garden has been reconciled." +// +kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`,description="creation timestamp" + +// Garden describes a list of gardens. +type Garden struct { + metav1.TypeMeta `json:",inline"` + // Standard object metadata. + metav1.ObjectMeta `json:"metadata,omitempty"` + // Spec contains the specification of this garden. + Spec GardenSpec `json:"spec,omitempty"` + // Status contains the status of this garden. + Status GardenStatus `json:"status,omitempty"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// GardenList is a list of Garden resources. +type GardenList struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ListMeta `json:"metadata,omitempty"` + + // Items is the list of Garden. + Items []Garden `json:"items"` +} + +// GardenSpec contains the specification of a garden environment. +type GardenSpec struct { + // RuntimeCluster contains configuration for the runtime cluster. + RuntimeCluster RuntimeCluster `json:"runtimeCluster"` + // VirtualCluster contains configuration for the virtual cluster. + VirtualCluster VirtualCluster `json:"virtualCluster"` +} + +// RuntimeCluster contains configuration for the runtime cluster. +type RuntimeCluster struct { + // Provider defines the provider-specific information for this cluster. + Provider Provider `json:"provider"` + // Settings contains certain settings for this cluster. + // +optional + Settings *Settings `json:"settings,omitempty"` +} + +// Provider defines the provider-specific information for this cluster. +type Provider struct { + // Zones is the list of availability zones the cluster is deployed to. + // +optional + Zones []string `json:"zones,omitempty"` +} + +// Settings contains certain settings for this cluster. +type Settings struct { + // VerticalPodAutoscaler controls certain settings for the vertical pod autoscaler components deployed in the + // cluster. + // +optional + VerticalPodAutoscaler *SettingVerticalPodAutoscaler `json:"verticalPodAutoscaler,omitempty"` +} + +// SettingVerticalPodAutoscaler controls certain settings for the vertical pod autoscaler components deployed in the +// seed. +type SettingVerticalPodAutoscaler struct { + // Enabled controls whether the VPA components shall be deployed into this cluster. It is true by default because + // the operator (and Gardener) heavily rely on a VPA being deployed. You should only disable this if your runtime + // cluster already has another, manually/custom managed VPA deployment. If this is not the case, but you still + // disable it, then reconciliation will fail. + // +kubebuilder:default=true + // +optional + Enabled *bool `json:"enabled,omitempty"` +} + +// VirtualCluster contains configuration for the virtual cluster. +type VirtualCluster struct { + // ETCD contains configuration for the etcds of the virtual garden cluster. + // +optional + ETCD *ETCD `json:"etcd,omitempty"` + // Maintenance contains information about the time window for maintenance operations. + Maintenance Maintenance `json:"maintenance"` +} + +// ETCD contains configuration for the etcds of the virtual garden cluster. +type ETCD struct { + // Main contains configuration for the main etcd. + // +optional + Main *ETCDMain `json:"main,omitempty"` + // Events contains configuration for the events etcd. + // +optional + Events *ETCDEvents `json:"events,omitempty"` +} + +// ETCDMain contains configuration for the main etcd. +type ETCDMain struct { + // Backup contains the object store configuration for backups for the virtual garden etcd. + // +optional + Backup *Backup `json:"backup,omitempty"` + // Storage contains storage configuration. + // +optional + Storage *Storage `json:"storage,omitempty"` +} + +// ETCDEvents contains configuration for the events etcd. +type ETCDEvents struct { + // Storage contains storage configuration. + // +optional + Storage *Storage `json:"storage,omitempty"` +} + +// Storage contains storage configuration. +type Storage struct { + // Capacity is the storage capacity for the volumes. + // +kubebuilder:default=`10Gi` + // +optional + Capacity *resource.Quantity `json:"capacity,omitempty"` + // ClassName is the name of a storage class. + // +optional + ClassName *string `json:"className,omitempty"` +} + +// Backup contains the object store configuration for backups for the virtual garden etcd. +type Backup struct { + // Provider is a provider name. This field is immutable. + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" + Provider string `json:"provider"` + // BucketName is the name of the backup bucket. + // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="Value is immutable" + BucketName string `json:"bucketName"` + // SecretRef is a reference to a Secret object containing the cloud provider credentials for the object store where + // backups should be stored. It should have enough privileges to manipulate the objects as well as buckets. + SecretRef corev1.SecretReference `json:"secretRef"` +} + +// Maintenance contains information about the time window for maintenance operations. +type Maintenance struct { + // TimeWindow contains information about the time window for maintenance operations. + TimeWindow gardencorev1beta1.MaintenanceTimeWindow `json:"timeWindow"` +} + +// GardenStatus is the status of a garden environment. +type GardenStatus struct { + // Gardener holds information about the Gardener which last acted on the Garden. + // +optional + Gardener *gardencorev1beta1.Gardener `json:"gardener,omitempty"` + // Conditions is a list of conditions. + Conditions []gardencorev1beta1.Condition `json:"conditions,omitempty"` + // ObservedGeneration is the most recent generation observed for this resource. + ObservedGeneration int64 `json:"observedGeneration,omitempty"` + // Credentials contains information about the virtual garden cluster credentials. + // +optional + Credentials *Credentials `json:"credentials,omitempty"` +} + +// Credentials contains information about the virtual garden cluster credentials. +type Credentials struct { + // Rotation contains information about the credential rotations. + // +optional + Rotation *CredentialsRotation `json:"rotation,omitempty"` +} + +// CredentialsRotation contains information about the rotation of credentials. +type CredentialsRotation struct { + // CertificateAuthorities contains information about the certificate authority credential rotation. + // +optional + CertificateAuthorities *gardencorev1beta1.CARotation `json:"certificateAuthorities,omitempty"` +} + +const ( + // GardenReconciled is a constant for a condition type indicating that the garden has been reconciled. + GardenReconciled gardencorev1beta1.ConditionType = "Reconciled" +) + +// AvailableOperationAnnotations is the set of available operation annotations for Garden resources. +var AvailableOperationAnnotations = sets.NewString( + v1beta1constants.GardenerOperationReconcile, + v1beta1constants.OperationRotateCAStart, + v1beta1constants.OperationRotateCAComplete, + v1beta1constants.OperationRotateCredentialsStart, + v1beta1constants.OperationRotateCredentialsComplete, +) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/zz_generated.deepcopy.go new file mode 100644 index 000000000..c19f818d6 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/apis/operator/v1alpha1/zz_generated.deepcopy.go @@ -0,0 +1,421 @@ +//go:build !ignore_autogenerated +// +build !ignore_autogenerated + +/* +Copyright (c) SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by deepcopy-gen. DO NOT EDIT. + +package v1alpha1 + +import ( + v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + runtime "k8s.io/apimachinery/pkg/runtime" +) + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Backup) DeepCopyInto(out *Backup) { + *out = *in + out.SecretRef = in.SecretRef + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Backup. +func (in *Backup) DeepCopy() *Backup { + if in == nil { + return nil + } + out := new(Backup) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Credentials) DeepCopyInto(out *Credentials) { + *out = *in + if in.Rotation != nil { + in, out := &in.Rotation, &out.Rotation + *out = new(CredentialsRotation) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Credentials. +func (in *Credentials) DeepCopy() *Credentials { + if in == nil { + return nil + } + out := new(Credentials) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CredentialsRotation) DeepCopyInto(out *CredentialsRotation) { + *out = *in + if in.CertificateAuthorities != nil { + in, out := &in.CertificateAuthorities, &out.CertificateAuthorities + *out = new(v1beta1.CARotation) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CredentialsRotation. +func (in *CredentialsRotation) DeepCopy() *CredentialsRotation { + if in == nil { + return nil + } + out := new(CredentialsRotation) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ETCD) DeepCopyInto(out *ETCD) { + *out = *in + if in.Main != nil { + in, out := &in.Main, &out.Main + *out = new(ETCDMain) + (*in).DeepCopyInto(*out) + } + if in.Events != nil { + in, out := &in.Events, &out.Events + *out = new(ETCDEvents) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCD. +func (in *ETCD) DeepCopy() *ETCD { + if in == nil { + return nil + } + out := new(ETCD) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ETCDEvents) DeepCopyInto(out *ETCDEvents) { + *out = *in + if in.Storage != nil { + in, out := &in.Storage, &out.Storage + *out = new(Storage) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDEvents. +func (in *ETCDEvents) DeepCopy() *ETCDEvents { + if in == nil { + return nil + } + out := new(ETCDEvents) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ETCDMain) DeepCopyInto(out *ETCDMain) { + *out = *in + if in.Backup != nil { + in, out := &in.Backup, &out.Backup + *out = new(Backup) + **out = **in + } + if in.Storage != nil { + in, out := &in.Storage, &out.Storage + *out = new(Storage) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ETCDMain. +func (in *ETCDMain) DeepCopy() *ETCDMain { + if in == nil { + return nil + } + out := new(ETCDMain) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Garden) DeepCopyInto(out *Garden) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Garden. +func (in *Garden) DeepCopy() *Garden { + if in == nil { + return nil + } + out := new(Garden) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *Garden) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GardenList) DeepCopyInto(out *GardenList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]Garden, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GardenList. +func (in *GardenList) DeepCopy() *GardenList { + if in == nil { + return nil + } + out := new(GardenList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *GardenList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GardenSpec) DeepCopyInto(out *GardenSpec) { + *out = *in + in.RuntimeCluster.DeepCopyInto(&out.RuntimeCluster) + in.VirtualCluster.DeepCopyInto(&out.VirtualCluster) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GardenSpec. +func (in *GardenSpec) DeepCopy() *GardenSpec { + if in == nil { + return nil + } + out := new(GardenSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *GardenStatus) DeepCopyInto(out *GardenStatus) { + *out = *in + if in.Gardener != nil { + in, out := &in.Gardener, &out.Gardener + *out = new(v1beta1.Gardener) + **out = **in + } + if in.Conditions != nil { + in, out := &in.Conditions, &out.Conditions + *out = make([]v1beta1.Condition, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + if in.Credentials != nil { + in, out := &in.Credentials, &out.Credentials + *out = new(Credentials) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GardenStatus. +func (in *GardenStatus) DeepCopy() *GardenStatus { + if in == nil { + return nil + } + out := new(GardenStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Maintenance) DeepCopyInto(out *Maintenance) { + *out = *in + out.TimeWindow = in.TimeWindow + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Maintenance. +func (in *Maintenance) DeepCopy() *Maintenance { + if in == nil { + return nil + } + out := new(Maintenance) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Provider) DeepCopyInto(out *Provider) { + *out = *in + if in.Zones != nil { + in, out := &in.Zones, &out.Zones + *out = make([]string, len(*in)) + copy(*out, *in) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Provider. +func (in *Provider) DeepCopy() *Provider { + if in == nil { + return nil + } + out := new(Provider) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RuntimeCluster) DeepCopyInto(out *RuntimeCluster) { + *out = *in + in.Provider.DeepCopyInto(&out.Provider) + if in.Settings != nil { + in, out := &in.Settings, &out.Settings + *out = new(Settings) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RuntimeCluster. +func (in *RuntimeCluster) DeepCopy() *RuntimeCluster { + if in == nil { + return nil + } + out := new(RuntimeCluster) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *SettingVerticalPodAutoscaler) DeepCopyInto(out *SettingVerticalPodAutoscaler) { + *out = *in + if in.Enabled != nil { + in, out := &in.Enabled, &out.Enabled + *out = new(bool) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SettingVerticalPodAutoscaler. +func (in *SettingVerticalPodAutoscaler) DeepCopy() *SettingVerticalPodAutoscaler { + if in == nil { + return nil + } + out := new(SettingVerticalPodAutoscaler) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Settings) DeepCopyInto(out *Settings) { + *out = *in + if in.VerticalPodAutoscaler != nil { + in, out := &in.VerticalPodAutoscaler, &out.VerticalPodAutoscaler + *out = new(SettingVerticalPodAutoscaler) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Settings. +func (in *Settings) DeepCopy() *Settings { + if in == nil { + return nil + } + out := new(Settings) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Storage) DeepCopyInto(out *Storage) { + *out = *in + if in.Capacity != nil { + in, out := &in.Capacity, &out.Capacity + x := (*in).DeepCopy() + *out = &x + } + if in.ClassName != nil { + in, out := &in.ClassName, &out.ClassName + *out = new(string) + **out = **in + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Storage. +func (in *Storage) DeepCopy() *Storage { + if in == nil { + return nil + } + out := new(Storage) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *VirtualCluster) DeepCopyInto(out *VirtualCluster) { + *out = *in + if in.ETCD != nil { + in, out := &in.ETCD, &out.ETCD + *out = new(ETCD) + (*in).DeepCopyInto(*out) + } + out.Maintenance = in.Maintenance + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VirtualCluster. +func (in *VirtualCluster) DeepCopy() *VirtualCluster { + if in == nil { + return nil + } + out := new(VirtualCluster) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/github.com/gardener/gardener/pkg/apis/resources/register.go b/vendor/github.com/gardener/gardener/pkg/apis/resources/register.go index 112a3f118..10862a1eb 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/resources/register.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/resources/register.go @@ -14,5 +14,5 @@ package resources -// GroupName is the group name use in this package +// GroupName is the group name used in this package. const GroupName = "resources.gardener.cloud" diff --git a/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/types.go b/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/types.go index f4c2eabb0..353321eb1 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/types.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/resources/v1alpha1/types.go @@ -105,6 +105,29 @@ const ( // seconds for the automatic mount of a projected ServiceAccount token. ProjectedTokenExpirationSeconds = "projected-token-mount.resources.gardener.cloud/expiration-seconds" + // HighAvailabilityConfigConsider is a constant for a label on a Namespace which indicates that the workload + // resources in this namespace should be considered by the HA config webhook. + HighAvailabilityConfigConsider = "high-availability-config.resources.gardener.cloud/consider" + // HighAvailabilityConfigSkip is a constant for a label on a resource which indicates that this resource should not + // be considered by the HA config webhook. + HighAvailabilityConfigSkip = "high-availability-config.resources.gardener.cloud/skip" + // HighAvailabilityConfigFailureToleranceType is a constant for a label on a Namespace which describes the HA + // failure tolerance type. + HighAvailabilityConfigFailureToleranceType = "high-availability-config.resources.gardener.cloud/failure-tolerance-type" + // HighAvailabilityConfigZones is a constant for an annotation on a Namespace which describes the availability + // zones are used. + HighAvailabilityConfigZones = "high-availability-config.resources.gardener.cloud/zones" + // HighAvailabilityConfigType is a constant for a label on a resource which describes which component type it is. + HighAvailabilityConfigType = "high-availability-config.resources.gardener.cloud/type" + // HighAvailabilityConfigTypeController is a constant for a label value on a resource describing it's a controller. + HighAvailabilityConfigTypeController = "controller" + // HighAvailabilityConfigTypeServer is a constant for a label value on a resource describing it's a (webhook) + // server. + HighAvailabilityConfigTypeServer = "server" + // HighAvailabilityConfigReplicas is a constant for an annotation on a resource which overwrites the desired replica + // count. + HighAvailabilityConfigReplicas = "high-availability-config.resources.gardener.cloud/replicas" + // SeccompProfileSkip is a constant for a label on a Pod which indicates that this Pod should not be considered for // defaulting of its seccomp profile. SeccompProfileSkip = "seccompprofile.resources.gardener.cloud/skip" diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/encoding/encoding.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/encoding/encoding.go index 41f54943e..0a90332c1 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/encoding/encoding.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/encoding/encoding.go @@ -94,7 +94,6 @@ func getDecoder(withDefaulter bool) runtime.Decoder { } return versioning.NewCodec(nil, serializer.NewCodecFactory(scheme).UniversalDeserializer(), runtime.UnsafeObjectConvertor(scheme), scheme, scheme, nil, runtime.DisabledGroupVersioner, runtime.InternalGroupVersioner, scheme.Name()) - } func getEncoder(gv runtime.GroupVersioner, mediaType string) (runtime.Encoder, error) { diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/types_managedseed.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/types_managedseed.go index d274643a1..c51f4997e 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/types_managedseed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/types_managedseed.go @@ -60,10 +60,6 @@ type ManagedSeedSpec struct { // Shoot references a Shoot that should be registered as Seed. // This field is immutable. Shoot *Shoot - // SeedTemplate is a template for a Seed object, that should be used to register a given cluster as a Seed. - // Either SeedTemplate or Gardenlet must be specified. When Seed is specified, the ManagedSeed controller will not deploy a gardenlet into the cluster - // and an existing gardenlet reconciling the new Seed is required. - SeedTemplate *gardencore.SeedTemplate // Gardenlet specifies that the ManagedSeed controller should deploy a gardenlet into the cluster // with the given deployment parameters and GardenletConfiguration. Gardenlet *Gardenlet @@ -95,9 +91,9 @@ type Gardenlet struct { // GardenletDeployment specifies certain gardenlet deployment parameters, such as the number of replicas, // the image, etc. type GardenletDeployment struct { - // ReplicaCount is the number of gardenlet replicas. Defaults to 1. + // ReplicaCount is the number of gardenlet replicas. Defaults to 2. ReplicaCount *int32 - // RevisionHistoryLimit is the number of old gardenlet ReplicaSets to retain to allow rollback. Defaults to 10. + // RevisionHistoryLimit is the number of old gardenlet ReplicaSets to retain to allow rollback. Defaults to 2. RevisionHistoryLimit *int32 // ServiceAccountName is the name of the ServiceAccount to use to run gardenlet pods. ServiceAccountName *string @@ -117,9 +113,6 @@ type GardenletDeployment struct { Env []corev1.EnvVar // VPA specifies whether to enable VPA for gardenlet. Defaults to true. VPA *bool - // FailureToleranceType determines how gardenlet replicas are spread across the failure domains, possible values are either `node` or `zone`. - // Please make sure to adjust the replicaCount accordingly if you intend to run an HA setup for gardenlet. - FailureToleranceType *gardencore.FailureToleranceType } // Image specifies container image parameters. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseed.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseed.go index b5fdf3724..bd2048a71 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/defaults_managedseed.go @@ -34,10 +34,7 @@ func addDefaultingFuncs(scheme *runtime.Scheme) error { // SetDefaults_ManagedSeed sets default values for ManagedSeed objects. func SetDefaults_ManagedSeed(obj *ManagedSeed) { - switch { - case obj.Spec.SeedTemplate != nil: - setDefaultsSeedSpec(&obj.Spec.SeedTemplate.Spec, obj.Name, obj.Namespace, true) - case obj.Spec.Gardenlet != nil: + if obj.Spec.Gardenlet != nil { setDefaultsGardenlet(obj.Spec.Gardenlet, obj.Name, obj.Namespace) } } @@ -46,12 +43,12 @@ func SetDefaults_ManagedSeed(obj *ManagedSeed) { func SetDefaults_GardenletDeployment(obj *GardenletDeployment) { // Set default replica count if obj.ReplicaCount == nil { - obj.ReplicaCount = pointer.Int32(1) + obj.ReplicaCount = pointer.Int32(2) } // Set default revision history limit if obj.RevisionHistoryLimit == nil { - obj.RevisionHistoryLimit = pointer.Int32(10) + obj.RevisionHistoryLimit = pointer.Int32(2) } // Set default image diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/generated.pb.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/generated.pb.go index a90b8d2c0..226922d9c 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/generated.pb.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/generated.pb.go @@ -21,7 +21,6 @@ package v1alpha1 import ( fmt "fmt" - github_com_gardener_gardener_pkg_apis_core_v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" v1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" io "io" @@ -522,120 +521,116 @@ func init() { } var fileDescriptor_d64c05a219673fe5 = []byte{ - // 1799 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x59, 0xcd, 0x6f, 0x1c, 0x49, - 0x15, 0x77, 0xdb, 0x1e, 0xdb, 0xfd, 0xfc, 0x15, 0x57, 0xbc, 0x61, 0xd6, 0x12, 0x33, 0xd6, 0x48, - 0x20, 0xf3, 0xb1, 0x3d, 0xc4, 0xac, 0x50, 0x58, 0xc8, 0x0a, 0xb7, 0x93, 0xcd, 0xee, 0x2a, 0x4e, - 0x4c, 0x8d, 0x1d, 0x24, 0xc4, 0x81, 0x9a, 0xee, 0xca, 0xb8, 0x49, 0x7f, 0x6d, 0x57, 0xcd, 0x6c, - 0x46, 0x48, 0x68, 0xc5, 0x8d, 0x03, 0x12, 0xe2, 0xc2, 0x1f, 0x80, 0xc4, 0x89, 0x3f, 0x24, 0xc7, - 0x15, 0xe2, 0xb0, 0x02, 0x69, 0x94, 0x0c, 0x08, 0x04, 0x7f, 0x42, 0x0e, 0x08, 0x55, 0x75, 0xf5, - 0xe7, 0xf4, 0xb0, 0x8e, 0x67, 0xc8, 0x61, 0x6f, 0x5d, 0xef, 0xe3, 0xf7, 0x5e, 0xbd, 0x7a, 0x55, - 0xef, 0xbd, 0x19, 0x38, 0xe9, 0x39, 0xfc, 0xa2, 0xdf, 0x35, 0xac, 0xc0, 0x6b, 0xf7, 0x48, 0x64, - 0x53, 0x9f, 0x46, 0xd9, 0x47, 0xf8, 0xa4, 0xd7, 0x26, 0xa1, 0xc3, 0xda, 0x8c, 0x52, 0xdb, 0x23, - 0x3e, 0xe9, 0x51, 0x8f, 0xfa, 0xbc, 0x3d, 0xb8, 0x49, 0xdc, 0xf0, 0x82, 0xdc, 0x6c, 0xf7, 0x84, - 0x18, 0xe1, 0xd4, 0x36, 0xc2, 0x28, 0xe0, 0x01, 0xba, 0x9d, 0xc1, 0x19, 0x09, 0x4a, 0xf6, 0x11, - 0x3e, 0xe9, 0x19, 0x02, 0xce, 0x28, 0xc2, 0x19, 0x09, 0xdc, 0x9e, 0x79, 0x39, 0x6f, 0xac, 0x20, - 0xa2, 0xed, 0xc1, 0xcd, 0x2e, 0xe5, 0x93, 0x2e, 0xec, 0xbd, 0x95, 0xc7, 0x08, 0x7a, 0x41, 0x5b, - 0x92, 0xbb, 0xfd, 0xc7, 0x72, 0x25, 0x17, 0xf2, 0x4b, 0x89, 0xb7, 0x9e, 0xdc, 0x62, 0x86, 0x13, - 0x08, 0xe0, 0x04, 0x77, 0x02, 0xf2, 0xed, 0x4c, 0xc6, 0x23, 0xd6, 0x85, 0xe3, 0xd3, 0x68, 0x98, - 0x79, 0xe3, 0x51, 0x4e, 0xaa, 0xb4, 0xda, 0xd3, 0xb4, 0xa2, 0xbe, 0xcf, 0x1d, 0x8f, 0x4e, 0x28, - 0x7c, 0xe7, 0xf3, 0x14, 0x98, 0x75, 0x41, 0x3d, 0x52, 0xd6, 0x6b, 0x3d, 0x5f, 0x04, 0xfd, 0x9e, - 0x0c, 0x92, 0x4b, 0x39, 0xfa, 0xa5, 0x06, 0x60, 0xd3, 0xd0, 0x0d, 0x86, 0x22, 0xb6, 0x75, 0x6d, - 0x5f, 0x3b, 0x58, 0x3f, 0xc4, 0xc6, 0x4c, 0x07, 0x63, 0xa4, 0xf0, 0x77, 0x52, 0x64, 0x73, 0x6b, - 0x3c, 0x6a, 0x42, 0xb6, 0xc6, 0x39, 0xab, 0xe8, 0x1c, 0x56, 0xac, 0xc0, 0x7f, 0xec, 0xf4, 0xea, - 0x8b, 0xd2, 0xfe, 0x5b, 0x46, 0xbc, 0x37, 0x23, 0xbf, 0x37, 0x69, 0x56, 0xed, 0xcd, 0xc0, 0xe4, - 0xe3, 0xbb, 0x4f, 0x39, 0xf5, 0x99, 0x13, 0xf8, 0xe6, 0xd6, 0xb3, 0x51, 0x73, 0x61, 0x3c, 0x6a, - 0xae, 0x1c, 0x4b, 0x10, 0xac, 0xc0, 0xd0, 0x2d, 0xd0, 0xbb, 0x41, 0xc0, 0x19, 0x8f, 0x48, 0x58, - 0x5f, 0xda, 0xd7, 0x0e, 0x74, 0x73, 0x6f, 0x3c, 0x6a, 0xea, 0x66, 0x42, 0x7c, 0x99, 0x5f, 0xe0, - 0x4c, 0x18, 0xdd, 0x86, 0x6d, 0x8f, 0x46, 0x3d, 0xfa, 0x23, 0x87, 0x5f, 0x9c, 0x92, 0x48, 0x44, - 0x66, 0x79, 0x5f, 0x3b, 0x58, 0x33, 0xaf, 0x8f, 0x47, 0xcd, 0xed, 0x93, 0x22, 0x0b, 0x97, 0x65, - 0x5b, 0x7f, 0x04, 0xb8, 0x5e, 0x11, 0x03, 0xf4, 0x36, 0x6c, 0x44, 0x34, 0x74, 0x1d, 0x8b, 0x1c, - 0x07, 0x7d, 0x15, 0xed, 0x9a, 0x79, 0x6d, 0x3c, 0x6a, 0x6e, 0xe0, 0x1c, 0x1d, 0x17, 0xa4, 0xd0, - 0x7d, 0xd8, 0x8d, 0xe8, 0xc0, 0x11, 0x5b, 0x7d, 0xdf, 0x61, 0x3c, 0x88, 0x86, 0xf7, 0x1d, 0xcf, - 0xe1, 0x32, 0x56, 0x35, 0xb3, 0x3e, 0x1e, 0x35, 0x77, 0x71, 0x05, 0x1f, 0x57, 0x6a, 0xa1, 0xf7, - 0x00, 0x31, 0x1a, 0x0d, 0x1c, 0x8b, 0x1e, 0x59, 0x96, 0xc0, 0x7f, 0x40, 0x3c, 0xaa, 0xa2, 0x73, - 0x63, 0x3c, 0x6a, 0xa2, 0xce, 0x04, 0x17, 0x57, 0x68, 0x20, 0x0a, 0x35, 0xc7, 0x23, 0x3d, 0x2a, - 0x03, 0xb3, 0x7e, 0x78, 0x67, 0xc6, 0x94, 0xf9, 0x40, 0x60, 0x99, 0xfa, 0x78, 0xd4, 0xac, 0xc9, - 0x4f, 0x1c, 0xa3, 0xa3, 0x73, 0xd0, 0x23, 0xca, 0x82, 0x7e, 0x64, 0x51, 0x56, 0xaf, 0x49, 0x53, - 0x07, 0xb9, 0xec, 0x30, 0xc4, 0x25, 0x34, 0x06, 0x37, 0x0d, 0xac, 0x84, 0x30, 0xfd, 0xa8, 0xef, - 0x44, 0x12, 0x9c, 0x99, 0x9b, 0xe2, 0xb4, 0x13, 0x0e, 0xc3, 0x19, 0x12, 0xfa, 0xad, 0x06, 0x7a, - 0x18, 0xd8, 0xf7, 0x49, 0x97, 0xba, 0xac, 0xbe, 0xb2, 0xbf, 0x74, 0xb0, 0x7e, 0x48, 0xe6, 0x9f, - 0xf5, 0xc6, 0x69, 0x62, 0xe3, 0xae, 0xcf, 0xa3, 0xa1, 0xb9, 0xa3, 0x32, 0x55, 0x4f, 0xe9, 0x38, - 0x73, 0x03, 0xfd, 0x41, 0x83, 0xad, 0x30, 0xb0, 0x8f, 0x7c, 0x3f, 0xe0, 0x84, 0x3b, 0x81, 0xcf, - 0xea, 0xab, 0xd2, 0xb3, 0xc7, 0xff, 0x1f, 0xcf, 0x72, 0x86, 0x62, 0xf7, 0x6e, 0x28, 0xf7, 0xb6, - 0x8a, 0x4c, 0x5c, 0xf2, 0x0a, 0x59, 0xb0, 0x43, 0x6c, 0xdb, 0x11, 0x0b, 0xe2, 0x3e, 0x0a, 0xdc, - 0xbe, 0x47, 0x59, 0x7d, 0x4d, 0xba, 0xba, 0x57, 0x75, 0x38, 0xb1, 0x88, 0xf9, 0xa6, 0x82, 0xdf, - 0x39, 0x2a, 0x2b, 0xe3, 0x49, 0x3c, 0xf4, 0x31, 0xdc, 0x28, 0x13, 0x4f, 0x44, 0xf6, 0xb1, 0xba, - 0x2e, 0x2d, 0x35, 0xa7, 0x5b, 0x92, 0x72, 0x66, 0x43, 0x99, 0xbb, 0x71, 0x54, 0x09, 0x83, 0xa7, - 0xc0, 0xa3, 0xef, 0xc2, 0x12, 0xf5, 0x07, 0x75, 0x98, 0xbe, 0x9f, 0xbb, 0xfe, 0xe0, 0x11, 0x89, - 0xcc, 0x75, 0x65, 0x60, 0xe9, 0xae, 0x3f, 0xc0, 0x42, 0x07, 0xbd, 0x09, 0x4b, 0x83, 0x90, 0xd4, - 0xd7, 0xe5, 0x5b, 0xb1, 0x2a, 0x58, 0x8f, 0x4e, 0x8f, 0xb0, 0xa0, 0xa1, 0xdf, 0x69, 0xb0, 0xfb, - 0x98, 0x38, 0x6e, 0x3f, 0xa2, 0x67, 0x81, 0x4b, 0x23, 0xe2, 0x5b, 0xf4, 0x6c, 0x18, 0xd2, 0xfa, - 0x86, 0xbc, 0x7a, 0x96, 0xb8, 0xc6, 0xef, 0x55, 0xf0, 0x5f, 0x8e, 0x9a, 0xf7, 0x5e, 0xbd, 0xce, - 0x19, 0x55, 0x50, 0xb8, 0xd2, 0x81, 0xbd, 0xef, 0xc3, 0x56, 0x31, 0x4d, 0xd1, 0x35, 0x58, 0x7a, - 0x42, 0x87, 0xf2, 0x79, 0xd2, 0xb1, 0xf8, 0x44, 0xbb, 0x50, 0x1b, 0x10, 0xb7, 0x4f, 0xe5, 0xa3, - 0xa3, 0xe3, 0x78, 0xf1, 0xce, 0xe2, 0x2d, 0x6d, 0xef, 0x08, 0xae, 0x57, 0xa4, 0xd2, 0xab, 0x40, - 0xb4, 0x7e, 0xaf, 0x41, 0x7c, 0xe9, 0x91, 0x01, 0x10, 0xd1, 0x30, 0x60, 0x8e, 0x78, 0xaf, 0x62, - 0xe5, 0xb8, 0x70, 0xe0, 0x94, 0x8a, 0x73, 0x12, 0x22, 0xde, 0x9c, 0xc4, 0x55, 0x43, 0x8f, 0xe3, - 0x7d, 0x46, 0x7a, 0x58, 0xd0, 0xd0, 0x43, 0x80, 0xb0, 0xef, 0xba, 0xa7, 0x81, 0xeb, 0x58, 0x43, - 0xf5, 0xbe, 0xb5, 0x05, 0xd4, 0x69, 0x4a, 0x7d, 0x39, 0x6a, 0x7e, 0x79, 0xb2, 0x9e, 0x1b, 0x99, - 0x00, 0xce, 0x41, 0xb4, 0xfe, 0xba, 0x08, 0xeb, 0x27, 0xf2, 0x72, 0xd9, 0x1d, 0x4a, 0x6d, 0xf4, - 0x53, 0x58, 0x13, 0xb5, 0xdc, 0x26, 0x9c, 0xa8, 0xb2, 0xf9, 0xad, 0xa9, 0x65, 0x4b, 0xde, 0x4e, - 0x21, 0x2d, 0xb2, 0xe7, 0x61, 0xf7, 0x67, 0xd4, 0xe2, 0x27, 0x94, 0x13, 0x13, 0xa9, 0x0c, 0x82, - 0x8c, 0x86, 0x53, 0x54, 0x14, 0xc2, 0x32, 0x0b, 0xa9, 0xa5, 0x8a, 0xe2, 0x83, 0x19, 0x1f, 0x81, - 0x9c, 0xef, 0x9d, 0x90, 0x5a, 0xe6, 0x86, 0xb2, 0xbd, 0x2c, 0x56, 0x58, 0x5a, 0x42, 0x4f, 0x61, - 0x85, 0x71, 0xc2, 0xfb, 0x4c, 0x06, 0x6c, 0xfd, 0xf0, 0x74, 0x8e, 0x36, 0x25, 0x6e, 0x56, 0xab, - 0xe3, 0x35, 0x56, 0xf6, 0x5a, 0xcf, 0x35, 0xd8, 0xce, 0x49, 0xdf, 0x77, 0x18, 0x47, 0x3f, 0x99, - 0x88, 0xb0, 0x71, 0xb9, 0x08, 0x0b, 0x6d, 0x19, 0xdf, 0x6b, 0xca, 0xda, 0x5a, 0x42, 0xc9, 0x45, - 0x37, 0x80, 0x9a, 0xc3, 0xa9, 0xc7, 0xea, 0x8b, 0xf2, 0xa2, 0x7f, 0x38, 0xbf, 0xad, 0x9a, 0x9b, - 0xca, 0x6c, 0xed, 0x03, 0x61, 0x00, 0xc7, 0x76, 0x5a, 0x7f, 0x5f, 0x84, 0xad, 0x7c, 0x40, 0x28, - 0x7f, 0x0d, 0x39, 0xc4, 0x0a, 0x39, 0xf4, 0xc3, 0x39, 0x9e, 0x27, 0xe5, 0x53, 0xd3, 0xe8, 0xe7, - 0xa5, 0x34, 0xea, 0xcc, 0xd7, 0xec, 0xff, 0xce, 0xa4, 0x7f, 0x68, 0x80, 0x8a, 0x0a, 0xaf, 0x21, - 0x99, 0xa2, 0x62, 0x32, 0x9d, 0xcc, 0x75, 0xc3, 0x53, 0xf2, 0xe9, 0x3f, 0xcb, 0xe5, 0x8d, 0x8a, - 0x23, 0x40, 0x07, 0xb0, 0xa6, 0xda, 0x47, 0xa6, 0x1a, 0xcc, 0x0d, 0xe1, 0xb4, 0x6a, 0x30, 0x19, - 0x4e, 0xb9, 0x88, 0xc0, 0x1a, 0xa3, 0x2e, 0xb5, 0x78, 0x10, 0xa9, 0xfc, 0xf8, 0xf6, 0x25, 0x43, - 0x22, 0x6a, 0x45, 0x47, 0xa9, 0x66, 0x71, 0x49, 0x28, 0x38, 0x85, 0x45, 0x9f, 0x68, 0xb0, 0xc6, - 0xa9, 0x17, 0xba, 0x84, 0x53, 0x95, 0x0c, 0x78, 0x7e, 0xb1, 0x39, 0x53, 0xc8, 0x99, 0x0b, 0x09, - 0x05, 0xa7, 0x56, 0xd1, 0x2f, 0x60, 0x93, 0x5d, 0x04, 0x01, 0x4f, 0x58, 0xaa, 0x61, 0x3d, 0xba, - 0xa4, 0x1b, 0xaa, 0xe6, 0xc7, 0x55, 0xb5, 0x93, 0x07, 0x32, 0xdf, 0x50, 0x56, 0x37, 0x0b, 0x64, - 0x5c, 0x34, 0x87, 0x7e, 0xa5, 0xc1, 0x56, 0x3f, 0xb4, 0x09, 0xa7, 0x1d, 0x2e, 0xe6, 0xb0, 0xde, - 0x50, 0xf5, 0xb1, 0xb3, 0x26, 0xc9, 0x79, 0x01, 0xd4, 0x44, 0xa2, 0x71, 0x2b, 0xd2, 0x70, 0xc9, - 0xf0, 0xd4, 0x51, 0x62, 0xe5, 0x2a, 0xa3, 0x44, 0xeb, 0x2f, 0x2b, 0xb0, 0x5b, 0x75, 0x35, 0xd1, - 0x87, 0x80, 0x82, 0xae, 0x98, 0x19, 0xa8, 0x7d, 0x2f, 0x9e, 0x3e, 0x9d, 0xc0, 0x97, 0xc9, 0xb8, - 0x64, 0xee, 0xa9, 0xa0, 0xa1, 0x87, 0x13, 0x12, 0xb8, 0x42, 0x0b, 0x7d, 0x33, 0x97, 0xce, 0xf1, - 0xc4, 0x93, 0x1e, 0x76, 0x45, 0x4a, 0x7f, 0x0f, 0x36, 0x23, 0x4a, 0xec, 0x61, 0xc2, 0x92, 0x39, - 0x57, 0xcb, 0x4e, 0x0a, 0xe7, 0x99, 0xb8, 0x28, 0x8b, 0xee, 0xc1, 0x8e, 0x4f, 0x9f, 0x72, 0xb5, - 0x7e, 0xd0, 0xf7, 0xba, 0x34, 0x92, 0xd9, 0x52, 0xcb, 0x5a, 0xd7, 0x07, 0x65, 0x01, 0x3c, 0xa9, - 0x83, 0x8e, 0x60, 0xdb, 0xea, 0x47, 0x72, 0x36, 0x4c, 0xfc, 0xa8, 0x49, 0x98, 0x2f, 0x29, 0x98, - 0xed, 0xe3, 0x22, 0x1b, 0x97, 0xe5, 0x05, 0x44, 0x7c, 0x76, 0x76, 0x0a, 0xb1, 0x52, 0x84, 0x38, - 0x2f, 0xb2, 0x71, 0x59, 0xbe, 0xe0, 0x45, 0x7c, 0x7a, 0xf5, 0x55, 0xd9, 0x06, 0x4d, 0x7a, 0x11, - 0xb3, 0x71, 0x59, 0x1e, 0xbd, 0x9b, 0xa4, 0x6e, 0x8a, 0xb0, 0x16, 0x0f, 0x8a, 0xc9, 0xa0, 0x70, - 0x5e, 0xe0, 0xe2, 0x92, 0x34, 0x7a, 0x07, 0xb6, 0xac, 0xc0, 0x75, 0xe5, 0x22, 0x1e, 0x79, 0x75, - 0xb9, 0x09, 0x99, 0xab, 0xc7, 0x05, 0x0e, 0x2e, 0x49, 0xa2, 0x8f, 0x00, 0xac, 0xc0, 0x8f, 0x3b, - 0x74, 0xa6, 0xba, 0xf1, 0xdb, 0x57, 0xb9, 0xb4, 0xc7, 0x09, 0x4a, 0x56, 0x2a, 0x53, 0x12, 0xc3, - 0x39, 0x23, 0xf2, 0xaa, 0x86, 0xd4, 0xb7, 0x1d, 0xbf, 0xa7, 0xa2, 0x28, 0x5b, 0xf9, 0xd9, 0xaf, - 0xea, 0x69, 0x01, 0x34, 0xde, 0x7e, 0x91, 0x86, 0x4b, 0x86, 0x5b, 0xff, 0x5c, 0x2c, 0x34, 0x44, - 0xf2, 0x69, 0xa7, 0x50, 0x93, 0x6f, 0x8b, 0x2a, 0x60, 0xb3, 0xce, 0xdc, 0xf2, 0xd9, 0x8a, 0x67, - 0x6e, 0xf9, 0x89, 0x63, 0x74, 0x34, 0x80, 0x0d, 0x96, 0x7b, 0x5d, 0x55, 0x6d, 0xf8, 0xc1, 0x95, - 0x1e, 0xcc, 0xc2, 0x2b, 0x3d, 0x1e, 0x35, 0x37, 0xf2, 0x14, 0x5c, 0xb0, 0x83, 0xfa, 0xa0, 0xf7, - 0x92, 0x49, 0x55, 0x15, 0x8b, 0xf7, 0xe7, 0x35, 0xf9, 0xc6, 0xbf, 0x05, 0xa4, 0x4b, 0x9c, 0x59, - 0x6a, 0xfd, 0x49, 0x83, 0x9d, 0x89, 0x46, 0xb5, 0x94, 0x7e, 0xda, 0xeb, 0x48, 0xbf, 0xea, 0x67, - 0x73, 0xf1, 0x2a, 0xcf, 0x66, 0xeb, 0x5f, 0x1a, 0x5c, 0xaf, 0xa8, 0x94, 0x5f, 0xc4, 0xa9, 0xa5, - 0xf5, 0x6f, 0x0d, 0x4a, 0xb7, 0x09, 0xed, 0xc3, 0xb2, 0x4f, 0x3c, 0xaa, 0x46, 0xc8, 0x54, 0x49, - 0xfe, 0x9a, 0x25, 0x39, 0xe8, 0x5d, 0x58, 0x89, 0x28, 0x61, 0x2a, 0xc0, 0xba, 0xf9, 0xd5, 0xa4, - 0x9d, 0xc4, 0x92, 0xfa, 0x72, 0xd4, 0xdc, 0x2d, 0xdd, 0x50, 0x49, 0xc7, 0x4a, 0x0b, 0x3d, 0x84, - 0x1a, 0x73, 0x7c, 0x2b, 0xe9, 0x6a, 0xbe, 0x7e, 0xb9, 0x28, 0x9e, 0x39, 0x1e, 0xcd, 0xda, 0xb9, - 0x8e, 0x00, 0xc0, 0x31, 0x0e, 0xfa, 0x0a, 0xac, 0x46, 0x94, 0x47, 0x0e, 0x65, 0xaa, 0xe6, 0xac, - 0x8f, 0x47, 0xcd, 0x55, 0x1c, 0x93, 0x70, 0xc2, 0x6b, 0xdd, 0x81, 0x37, 0xb0, 0x78, 0x28, 0xfd, - 0x5e, 0xb1, 0xd6, 0xa3, 0x6f, 0x80, 0x1e, 0x92, 0x88, 0x3b, 0x69, 0xad, 0xad, 0xc5, 0x39, 0x7f, - 0x9a, 0x10, 0x71, 0xc6, 0x6f, 0x7d, 0x0d, 0xe2, 0x2b, 0xff, 0xf9, 0x81, 0x6a, 0xfd, 0x59, 0x83, - 0x52, 0x5b, 0x81, 0x0e, 0x61, 0x99, 0x0f, 0xc3, 0x44, 0xa9, 0x21, 0x14, 0xd4, 0x4f, 0x15, 0xa8, - 0x28, 0x29, 0x7f, 0x75, 0x90, 0xb2, 0xe8, 0xd7, 0x1a, 0x6c, 0x46, 0x79, 0xc7, 0x55, 0x82, 0x9c, - 0xcd, 0x98, 0x20, 0x95, 0xc1, 0x30, 0x77, 0x64, 0xb1, 0xcf, 0xb3, 0x70, 0xd1, 0xba, 0x69, 0x3d, - 0x7b, 0xd1, 0x58, 0xf8, 0xf4, 0x45, 0x63, 0xe1, 0xb3, 0x17, 0x8d, 0x85, 0x4f, 0xc6, 0x0d, 0xed, - 0xd9, 0xb8, 0xa1, 0x7d, 0x3a, 0x6e, 0x68, 0x9f, 0x8d, 0x1b, 0xda, 0xf3, 0x71, 0x43, 0xfb, 0xcd, - 0xdf, 0x1a, 0x0b, 0x3f, 0xbe, 0x3d, 0xd3, 0x1f, 0x1e, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x07, - 0x7f, 0xff, 0x0e, 0x30, 0x19, 0x00, 0x00, + // 1732 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcd, 0x8f, 0x1b, 0x49, + 0x15, 0x9f, 0x9e, 0x19, 0xcf, 0xb8, 0x9f, 0x33, 0x9e, 0x4c, 0x65, 0x36, 0x78, 0x47, 0xc2, 0x1e, + 0x59, 0x02, 0x0d, 0x1f, 0xdb, 0x26, 0xc3, 0x0a, 0x85, 0x85, 0xac, 0xe4, 0x9e, 0x84, 0xec, 0xae, + 0x32, 0x89, 0x29, 0xcf, 0x04, 0x09, 0x71, 0xa0, 0xdc, 0x5d, 0xf1, 0x34, 0x71, 0x7f, 0x6c, 0x57, + 0xd9, 0x1b, 0x0b, 0x09, 0xad, 0xb8, 0x71, 0x40, 0x42, 0xfb, 0x2f, 0x20, 0xf1, 0xb7, 0xe4, 0xb8, + 0x42, 0x1c, 0x56, 0x20, 0x59, 0x89, 0x41, 0x48, 0x70, 0xe1, 0x3e, 0x07, 0x84, 0xaa, 0xba, 0xfa, + 0xd3, 0x36, 0x19, 0x62, 0x93, 0xc3, 0xde, 0xba, 0xde, 0xc7, 0xef, 0xbd, 0x7a, 0xf5, 0xab, 0xaa, + 0x57, 0x0d, 0xa7, 0x7d, 0x87, 0x5f, 0x0c, 0x7b, 0x86, 0xe5, 0xbb, 0xad, 0x3e, 0x09, 0x6d, 0xea, + 0xd1, 0x30, 0xfd, 0x08, 0x9e, 0xf6, 0x5b, 0x24, 0x70, 0x58, 0x8b, 0x51, 0x6a, 0xbb, 0xc4, 0x23, + 0x7d, 0xea, 0x52, 0x8f, 0xb7, 0x46, 0xb7, 0xc8, 0x20, 0xb8, 0x20, 0xb7, 0x5a, 0x7d, 0x61, 0x46, + 0x38, 0xb5, 0x8d, 0x20, 0xf4, 0xb9, 0x8f, 0xee, 0xa4, 0x70, 0x46, 0x8c, 0x92, 0x7e, 0x04, 0x4f, + 0xfb, 0x86, 0x80, 0x33, 0xf2, 0x70, 0x46, 0x0c, 0x77, 0x60, 0x5e, 0x2d, 0x1b, 0xcb, 0x0f, 0x69, + 0x6b, 0x74, 0xab, 0x47, 0xf9, 0x6c, 0x0a, 0x07, 0xef, 0x64, 0x31, 0xfc, 0xbe, 0xdf, 0x92, 0xe2, + 0xde, 0xf0, 0x89, 0x1c, 0xc9, 0x81, 0xfc, 0x52, 0xe6, 0xcd, 0xa7, 0xb7, 0x99, 0xe1, 0xf8, 0x02, + 0x38, 0xc6, 0x9d, 0x81, 0x7c, 0x37, 0xb5, 0x71, 0x89, 0x75, 0xe1, 0x78, 0x34, 0x1c, 0xa7, 0xd9, + 0xb8, 0x94, 0x93, 0x79, 0x5e, 0xad, 0x45, 0x5e, 0xe1, 0xd0, 0xe3, 0x8e, 0x4b, 0x67, 0x1c, 0xbe, + 0xf7, 0x2a, 0x07, 0x66, 0x5d, 0x50, 0x97, 0x14, 0xfd, 0x9a, 0x2f, 0xd6, 0x41, 0xbf, 0x2f, 0x8b, + 0x34, 0xa0, 0x1c, 0xfd, 0x5a, 0x03, 0xb0, 0x69, 0x30, 0xf0, 0xc7, 0xa2, 0xb6, 0x35, 0xed, 0x50, + 0x3b, 0xaa, 0x1c, 0x63, 0x63, 0xa9, 0x85, 0x31, 0x12, 0xf8, 0xbb, 0x09, 0xb2, 0x59, 0x9d, 0x4e, + 0x1a, 0x90, 0x8e, 0x71, 0x26, 0x2a, 0x3a, 0x87, 0x2d, 0xcb, 0xf7, 0x9e, 0x38, 0xfd, 0xda, 0xba, + 0x8c, 0xff, 0x8e, 0x11, 0xcd, 0xcd, 0xc8, 0xce, 0x4d, 0x86, 0x55, 0x73, 0x33, 0x30, 0xf9, 0xe4, + 0xde, 0x33, 0x4e, 0x3d, 0xe6, 0xf8, 0x9e, 0x59, 0x7d, 0x3e, 0x69, 0xac, 0x4d, 0x27, 0x8d, 0xad, + 0x13, 0x09, 0x82, 0x15, 0x18, 0xba, 0x0d, 0x7a, 0xcf, 0xf7, 0x39, 0xe3, 0x21, 0x09, 0x6a, 0x1b, + 0x87, 0xda, 0x91, 0x6e, 0x1e, 0x4c, 0x27, 0x0d, 0xdd, 0x8c, 0x85, 0x97, 0xd9, 0x01, 0x4e, 0x8d, + 0xd1, 0x1d, 0xd8, 0x75, 0x69, 0xd8, 0xa7, 0x3f, 0x71, 0xf8, 0x45, 0x87, 0x84, 0xa2, 0x32, 0x9b, + 0x87, 0xda, 0x51, 0xd9, 0xbc, 0x31, 0x9d, 0x34, 0x76, 0x4f, 0xf3, 0x2a, 0x5c, 0xb4, 0x6d, 0x7e, + 0xa6, 0xc3, 0x8d, 0x39, 0x35, 0x40, 0xef, 0xc2, 0xb5, 0x90, 0x06, 0x03, 0xc7, 0x22, 0x27, 0xfe, + 0x50, 0x55, 0xbb, 0x64, 0x5e, 0x9f, 0x4e, 0x1a, 0xd7, 0x70, 0x46, 0x8e, 0x73, 0x56, 0xe8, 0x01, + 0xec, 0x87, 0x74, 0xe4, 0x88, 0xa9, 0x7e, 0xe0, 0x30, 0xee, 0x87, 0xe3, 0x07, 0x8e, 0xeb, 0x70, + 0x59, 0xab, 0x92, 0x59, 0x9b, 0x4e, 0x1a, 0xfb, 0x78, 0x8e, 0x1e, 0xcf, 0xf5, 0x42, 0x3f, 0x02, + 0xc4, 0x68, 0x38, 0x72, 0x2c, 0xda, 0xb6, 0x2c, 0x81, 0xff, 0x90, 0xb8, 0x54, 0x55, 0xe7, 0xe6, + 0x74, 0xd2, 0x40, 0xdd, 0x19, 0x2d, 0x9e, 0xe3, 0x81, 0x28, 0x94, 0x1c, 0x97, 0xf4, 0xa9, 0x2c, + 0x4c, 0xe5, 0xf8, 0xee, 0x92, 0x94, 0xf9, 0x50, 0x60, 0x99, 0xfa, 0x74, 0xd2, 0x28, 0xc9, 0x4f, + 0x1c, 0xa1, 0xa3, 0x73, 0xd0, 0x43, 0xca, 0xfc, 0x61, 0x68, 0x51, 0x56, 0x2b, 0xc9, 0x50, 0x47, + 0x19, 0x76, 0x18, 0x62, 0x13, 0x1a, 0xa3, 0x5b, 0x06, 0x56, 0x46, 0x98, 0x7e, 0x3c, 0x74, 0x42, + 0x09, 0xce, 0xcc, 0x1d, 0xb1, 0xda, 0xb1, 0x86, 0xe1, 0x14, 0x09, 0x7d, 0xa6, 0x81, 0x1e, 0xf8, + 0xf6, 0x03, 0xd2, 0xa3, 0x03, 0x56, 0xdb, 0x3a, 0xdc, 0x38, 0xaa, 0x1c, 0x93, 0xd5, 0xb3, 0xde, + 0xe8, 0xc4, 0x31, 0xee, 0x79, 0x3c, 0x1c, 0x9b, 0x7b, 0x8a, 0xa9, 0x7a, 0x22, 0xc7, 0x69, 0x1a, + 0xe8, 0x0f, 0x1a, 0x54, 0x03, 0xdf, 0x6e, 0x7b, 0x9e, 0xcf, 0x09, 0x77, 0x7c, 0x8f, 0xd5, 0xb6, + 0x65, 0x66, 0x4f, 0xfe, 0x3f, 0x99, 0x65, 0x02, 0x45, 0xe9, 0xdd, 0x54, 0xe9, 0x55, 0xf3, 0x4a, + 0x5c, 0xc8, 0x0a, 0x59, 0xb0, 0x47, 0x6c, 0xdb, 0x11, 0x03, 0x32, 0x78, 0xec, 0x0f, 0x86, 0x2e, + 0x65, 0xb5, 0xb2, 0x4c, 0xf5, 0x60, 0xde, 0xe2, 0x44, 0x26, 0xe6, 0xdb, 0x0a, 0x7e, 0xaf, 0x5d, + 0x74, 0xc6, 0xb3, 0x78, 0xe8, 0x13, 0xb8, 0x59, 0x14, 0x9e, 0x0a, 0xf6, 0xb1, 0x9a, 0x2e, 0x23, + 0x35, 0x16, 0x47, 0x92, 0x76, 0x66, 0x5d, 0x85, 0xbb, 0xd9, 0x9e, 0x0b, 0x83, 0x17, 0xc0, 0xa3, + 0xef, 0xc3, 0x06, 0xf5, 0x46, 0x35, 0x58, 0x3c, 0x9f, 0x7b, 0xde, 0xe8, 0x31, 0x09, 0xcd, 0x8a, + 0x0a, 0xb0, 0x71, 0xcf, 0x1b, 0x61, 0xe1, 0x83, 0xde, 0x86, 0x8d, 0x51, 0x40, 0x6a, 0x15, 0x79, + 0x56, 0x6c, 0x0b, 0xd5, 0xe3, 0x4e, 0x1b, 0x0b, 0xd9, 0xc1, 0x0f, 0xa1, 0x9a, 0x27, 0x03, 0xba, + 0x0e, 0x1b, 0x4f, 0xe9, 0x58, 0x1e, 0x02, 0x3a, 0x16, 0x9f, 0x68, 0x1f, 0x4a, 0x23, 0x32, 0x18, + 0x52, 0xb9, 0xb5, 0x75, 0x1c, 0x0d, 0xde, 0x5b, 0xbf, 0xad, 0x1d, 0xb4, 0xe1, 0xc6, 0x9c, 0x05, + 0xfb, 0x5f, 0x20, 0x9a, 0xbf, 0xd7, 0x20, 0xda, 0x5a, 0xc8, 0x00, 0x08, 0x69, 0xe0, 0x33, 0x47, + 0x9c, 0x0a, 0x91, 0x73, 0x74, 0x3c, 0xe3, 0x44, 0x8a, 0x33, 0x16, 0x62, 0x56, 0x9c, 0x44, 0x67, + 0xb3, 0x1e, 0xcd, 0xea, 0x8c, 0xf4, 0xb1, 0x90, 0xa1, 0x47, 0x00, 0xc1, 0x70, 0x30, 0xe8, 0xf8, + 0x03, 0xc7, 0x1a, 0xab, 0x53, 0xa4, 0x25, 0xa0, 0x3a, 0x89, 0xf4, 0x72, 0xd2, 0xf8, 0xea, 0xec, + 0xad, 0x69, 0xa4, 0x06, 0x38, 0x03, 0xd1, 0xfc, 0xcb, 0x3a, 0x54, 0x4e, 0x25, 0x85, 0xed, 0x2e, + 0xa5, 0x36, 0xfa, 0x39, 0x94, 0xc5, 0x8d, 0x69, 0x13, 0x4e, 0xd4, 0xe5, 0xf4, 0x9d, 0x85, 0x97, + 0x83, 0xdc, 0x03, 0xc2, 0x5a, 0xac, 0xd1, 0xa3, 0xde, 0x2f, 0xa8, 0xc5, 0x4f, 0x29, 0x27, 0x26, + 0x52, 0xeb, 0x04, 0xa9, 0x0c, 0x27, 0xa8, 0x28, 0x80, 0x4d, 0x16, 0x50, 0x4b, 0x5d, 0x3d, 0x0f, + 0x97, 0xdc, 0x6a, 0x99, 0xdc, 0xbb, 0x01, 0xb5, 0xcc, 0x6b, 0x2a, 0xf6, 0xa6, 0x18, 0x61, 0x19, + 0x09, 0x3d, 0x83, 0x2d, 0xc6, 0x09, 0x1f, 0x32, 0x59, 0xb0, 0xca, 0x71, 0x67, 0x85, 0x31, 0x25, + 0x6e, 0x7a, 0x23, 0x46, 0x63, 0xac, 0xe2, 0x35, 0x5f, 0x68, 0xb0, 0x9b, 0xb1, 0x7e, 0xe0, 0x30, + 0x8e, 0x7e, 0x36, 0x53, 0x61, 0xe3, 0x6a, 0x15, 0x16, 0xde, 0xb2, 0xbe, 0xd7, 0x55, 0xb4, 0x72, + 0x2c, 0xc9, 0x54, 0xd7, 0x87, 0x92, 0xc3, 0xa9, 0xcb, 0x6a, 0xeb, 0x72, 0x3b, 0x7d, 0xb4, 0xba, + 0xa9, 0x9a, 0x3b, 0x2a, 0x6c, 0xe9, 0x43, 0x11, 0x00, 0x47, 0x71, 0x9a, 0x7f, 0x5b, 0x87, 0x6a, + 0xb6, 0x20, 0x94, 0xbf, 0x01, 0x0e, 0xb1, 0x1c, 0x87, 0x7e, 0xbc, 0xc2, 0xf5, 0xa4, 0x7c, 0x21, + 0x8d, 0x7e, 0x59, 0xa0, 0x51, 0x77, 0xb5, 0x61, 0xff, 0x3b, 0x93, 0xfe, 0xae, 0x01, 0xca, 0x3b, + 0xbc, 0x01, 0x32, 0x85, 0x79, 0x32, 0x9d, 0xae, 0x74, 0xc2, 0x0b, 0xf8, 0xf4, 0xef, 0xcd, 0xe2, + 0x44, 0xc5, 0x12, 0xa0, 0x23, 0x28, 0xab, 0x26, 0x8d, 0xa9, 0x36, 0xee, 0x9a, 0x48, 0x5a, 0xb5, + 0x71, 0x0c, 0x27, 0x5a, 0x44, 0xa0, 0xcc, 0xe8, 0x80, 0x5a, 0xdc, 0x0f, 0x15, 0x3f, 0xbe, 0x7b, + 0xc5, 0x92, 0x88, 0xbb, 0xa2, 0xab, 0x5c, 0xd3, 0xba, 0xc4, 0x12, 0x9c, 0xc0, 0xa2, 0x4f, 0x35, + 0x28, 0x73, 0xea, 0x06, 0x03, 0xc2, 0xa9, 0x22, 0x03, 0x5e, 0x5d, 0x6d, 0xce, 0x14, 0x72, 0x9a, + 0x42, 0x2c, 0xc1, 0x49, 0x54, 0xf4, 0x2b, 0xd8, 0x61, 0x17, 0xbe, 0xcf, 0x63, 0x95, 0x6a, 0x0b, + 0xdb, 0x57, 0x4c, 0x43, 0xdd, 0xac, 0xf2, 0x8d, 0x66, 0x74, 0xb3, 0x40, 0xe6, 0x5b, 0x2a, 0xea, + 0x4e, 0x4e, 0x8c, 0xf3, 0xe1, 0xd0, 0x6f, 0x34, 0xa8, 0x0e, 0x03, 0x9b, 0x70, 0xda, 0xe5, 0xe2, + 0xb5, 0xd3, 0x1f, 0xab, 0x6e, 0x71, 0x59, 0x92, 0x9c, 0xe7, 0x40, 0x4d, 0x24, 0xda, 0xa3, 0xbc, + 0x0c, 0x17, 0x02, 0x2f, 0x6c, 0xd8, 0xb7, 0x5e, 0xa7, 0x61, 0x6f, 0xfe, 0x79, 0x0b, 0xf6, 0xe7, + 0x6d, 0x4d, 0xf4, 0x11, 0x20, 0xbf, 0x27, 0x3a, 0x73, 0x6a, 0xdf, 0x8f, 0xde, 0x78, 0x8e, 0xef, + 0x49, 0x32, 0x6e, 0x98, 0x07, 0xaa, 0x68, 0xe8, 0xd1, 0x8c, 0x05, 0x9e, 0xe3, 0x85, 0xbe, 0x9d, + 0xa1, 0x73, 0xf4, 0xae, 0x48, 0x16, 0x7b, 0x0e, 0xa5, 0x7f, 0x00, 0x3b, 0x21, 0x25, 0xf6, 0x38, + 0x56, 0x49, 0xce, 0x95, 0xd2, 0x95, 0xc2, 0x59, 0x25, 0xce, 0xdb, 0xa2, 0xfb, 0xb0, 0xe7, 0xd1, + 0x67, 0x5c, 0x8d, 0x1f, 0x0e, 0xdd, 0x1e, 0x0d, 0x25, 0x5b, 0x4a, 0x69, 0x83, 0xf8, 0xb0, 0x68, + 0x80, 0x67, 0x7d, 0x50, 0x1b, 0x76, 0xad, 0x61, 0x28, 0x5f, 0x60, 0x71, 0x1e, 0x25, 0x09, 0xf3, + 0x15, 0x05, 0xb3, 0x7b, 0x92, 0x57, 0xe3, 0xa2, 0xbd, 0x80, 0x88, 0xd6, 0xce, 0x4e, 0x20, 0xb6, + 0xf2, 0x10, 0xe7, 0x79, 0x35, 0x2e, 0xda, 0xe7, 0xb2, 0x88, 0x56, 0xaf, 0xb6, 0x2d, 0xdb, 0xa0, + 0xd9, 0x2c, 0x22, 0x35, 0x2e, 0xda, 0xa3, 0xf7, 0x63, 0xea, 0x26, 0x08, 0xe5, 0xe8, 0x39, 0x16, + 0xb7, 0xe3, 0xe7, 0x39, 0x2d, 0x2e, 0x58, 0xa3, 0xf7, 0xa0, 0x6a, 0xf9, 0x83, 0x81, 0x1c, 0x44, + 0x0f, 0x4b, 0x5d, 0x4e, 0x42, 0x72, 0xf5, 0x24, 0xa7, 0xc1, 0x05, 0x4b, 0xf4, 0x31, 0x80, 0xe5, + 0x7b, 0x51, 0x1f, 0xcc, 0x54, 0xcf, 0x7b, 0xe7, 0x75, 0x36, 0xed, 0x49, 0x8c, 0x92, 0x5e, 0x95, + 0x89, 0x88, 0xe1, 0x4c, 0x10, 0xb9, 0x55, 0x03, 0xea, 0xd9, 0x8e, 0xd7, 0x57, 0x55, 0x94, 0x0d, + 0xf3, 0xf2, 0x5b, 0xb5, 0x93, 0x03, 0x8d, 0xa6, 0x9f, 0x97, 0xe1, 0x42, 0xe0, 0xe6, 0xbf, 0xf2, + 0x0d, 0x91, 0x3c, 0xda, 0x29, 0x94, 0xe4, 0xd9, 0xa2, 0x2e, 0xb0, 0x65, 0x5f, 0xb6, 0xf2, 0xd8, + 0x8a, 0x5e, 0xb6, 0xf2, 0x13, 0x47, 0xe8, 0x68, 0x08, 0x7a, 0x3f, 0x7e, 0x97, 0xa9, 0x43, 0xfb, + 0x83, 0x55, 0xbd, 0xf3, 0xa2, 0x97, 0x6f, 0x32, 0xc4, 0x69, 0xa4, 0xe6, 0x1f, 0x35, 0xd8, 0x9b, + 0x69, 0x18, 0x0b, 0x34, 0xd0, 0xde, 0x04, 0x0d, 0xe6, 0x1f, 0x5f, 0xeb, 0xaf, 0x73, 0x7c, 0x35, + 0xff, 0xa1, 0xc1, 0x8d, 0x39, 0x37, 0xd6, 0x97, 0xf1, 0xf5, 0xd0, 0xfc, 0xa7, 0x06, 0x05, 0x56, + 0xa3, 0x43, 0xd8, 0xf4, 0x88, 0x4b, 0xd5, 0x53, 0x2e, 0x71, 0x92, 0xff, 0x6e, 0xa4, 0x06, 0xbd, + 0x0f, 0x5b, 0x21, 0x25, 0x4c, 0x15, 0x58, 0x37, 0xbf, 0x1e, 0xb7, 0x75, 0x58, 0x4a, 0x2f, 0x27, + 0x8d, 0xfd, 0xc2, 0x4e, 0x91, 0x72, 0xac, 0xbc, 0xd0, 0x23, 0x28, 0x31, 0xc7, 0xb3, 0xe2, 0xee, + 0xe2, 0x9b, 0x57, 0xab, 0xe2, 0x99, 0xe3, 0xd2, 0xb4, 0xad, 0xea, 0x0a, 0x00, 0x1c, 0xe1, 0xa0, + 0xaf, 0xc1, 0x76, 0x48, 0x79, 0xe8, 0x50, 0xa6, 0xce, 0xfe, 0xca, 0x74, 0xd2, 0xd8, 0xc6, 0x91, + 0x08, 0xc7, 0xba, 0xe6, 0x5d, 0x78, 0x0b, 0x8b, 0x03, 0xcb, 0xeb, 0xe7, 0xef, 0x5c, 0xf4, 0x2d, + 0xd0, 0x03, 0x12, 0x72, 0x27, 0xb9, 0xf3, 0x4a, 0x11, 0xe7, 0x3b, 0xb1, 0x10, 0xa7, 0xfa, 0xe6, + 0x37, 0x20, 0xda, 0x7a, 0xaf, 0x2e, 0x54, 0xf3, 0x4f, 0x1a, 0x14, 0xae, 0x77, 0x74, 0x0c, 0x9b, + 0x7c, 0x1c, 0xc4, 0x4e, 0x75, 0xe1, 0x70, 0x36, 0x0e, 0xe8, 0xe5, 0xa4, 0x81, 0xf2, 0x96, 0x42, + 0x8a, 0xa5, 0x2d, 0xfa, 0xad, 0x06, 0x3b, 0x61, 0x36, 0x71, 0x45, 0x90, 0xb3, 0x25, 0x09, 0x32, + 0xb7, 0x18, 0xe6, 0x9e, 0xbc, 0x74, 0xb3, 0x2a, 0x9c, 0x8f, 0x6e, 0x5a, 0xcf, 0x5f, 0xd6, 0xd7, + 0x3e, 0x7f, 0x59, 0x5f, 0xfb, 0xe2, 0x65, 0x7d, 0xed, 0xd3, 0x69, 0x5d, 0x7b, 0x3e, 0xad, 0x6b, + 0x9f, 0x4f, 0xeb, 0xda, 0x17, 0xd3, 0xba, 0xf6, 0x62, 0x5a, 0xd7, 0x7e, 0xf7, 0xd7, 0xfa, 0xda, + 0x4f, 0xef, 0x2c, 0xf5, 0x7b, 0xff, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x9f, 0x51, 0x54, 0xe6, + 0x1e, 0x18, 0x00, 0x00, } func (m *Gardenlet) Marshal() (dAtA []byte, err error) { @@ -720,13 +715,6 @@ func (m *GardenletDeployment) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - if m.FailureToleranceType != nil { - i -= len(*m.FailureToleranceType) - copy(dAtA[i:], *m.FailureToleranceType) - i = encodeVarintGenerated(dAtA, i, uint64(len(*m.FailureToleranceType))) - i-- - dAtA[i] = 0x62 - } if m.VPA != nil { i-- if *m.VPA { @@ -1304,18 +1292,6 @@ func (m *ManagedSeedSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x1a } - if m.SeedTemplate != nil { - { - size, err := m.SeedTemplate.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - } if m.Shoot != nil { { size, err := m.Shoot.MarshalToSizedBuffer(dAtA[:i]) @@ -1654,10 +1630,6 @@ func (m *GardenletDeployment) Size() (n int) { if m.VPA != nil { n += 2 } - if m.FailureToleranceType != nil { - l = len(*m.FailureToleranceType) - n += 1 + l + sovGenerated(uint64(l)) - } return n } @@ -1813,10 +1785,6 @@ func (m *ManagedSeedSpec) Size() (n int) { l = m.Shoot.Size() n += 1 + l + sovGenerated(uint64(l)) } - if m.SeedTemplate != nil { - l = m.SeedTemplate.Size() - n += 1 + l + sovGenerated(uint64(l)) - } if m.Gardenlet != nil { l = m.Gardenlet.Size() n += 1 + l + sovGenerated(uint64(l)) @@ -1981,7 +1949,6 @@ func (this *GardenletDeployment) String() string { `AdditionalVolumeMounts:` + repeatedStringForAdditionalVolumeMounts + `,`, `Env:` + repeatedStringForEnv + `,`, `VPA:` + valueToStringGenerated(this.VPA) + `,`, - `FailureToleranceType:` + valueToStringGenerated(this.FailureToleranceType) + `,`, `}`, }, "") return s @@ -2100,7 +2067,6 @@ func (this *ManagedSeedSpec) String() string { } s := strings.Join([]string{`&ManagedSeedSpec{`, `Shoot:` + strings.Replace(this.Shoot.String(), "Shoot", "Shoot", 1) + `,`, - `SeedTemplate:` + strings.Replace(fmt.Sprintf("%v", this.SeedTemplate), "SeedTemplate", "v1beta1.SeedTemplate", 1) + `,`, `Gardenlet:` + strings.Replace(this.Gardenlet.String(), "Gardenlet", "Gardenlet", 1) + `,`, `}`, }, "") @@ -2909,39 +2875,6 @@ func (m *GardenletDeployment) Unmarshal(dAtA []byte) error { } b := bool(v != 0) m.VPA = &b - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FailureToleranceType", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - s := github_com_gardener_gardener_pkg_apis_core_v1beta1.FailureToleranceType(dAtA[iNdEx:postIndex]) - m.FailureToleranceType = &s - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -4252,42 +4185,6 @@ func (m *ManagedSeedSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SeedTemplate", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.SeedTemplate == nil { - m.SeedTemplate = &v1beta1.SeedTemplate{} - } - if err := m.SeedTemplate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Gardenlet", wireType) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/generated.proto b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/generated.proto index 18dcabed1..4532a1ce8 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/generated.proto +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/generated.proto @@ -56,11 +56,11 @@ message Gardenlet { // GardenletDeployment specifies certain gardenlet deployment parameters, such as the number of replicas, // the image, etc. message GardenletDeployment { - // ReplicaCount is the number of gardenlet replicas. Defaults to 1. + // ReplicaCount is the number of gardenlet replicas. Defaults to 2. // +optional optional int32 replicaCount = 1; - // RevisionHistoryLimit is the number of old gardenlet ReplicaSets to retain to allow rollback. Defaults to 10. + // RevisionHistoryLimit is the number of old gardenlet ReplicaSets to retain to allow rollback. Defaults to 2. // +optional optional int32 revisionHistoryLimit = 2; @@ -99,11 +99,6 @@ message GardenletDeployment { // VPA specifies whether to enable VPA for gardenlet. Defaults to true. // +optional optional bool vpa = 11; - - // FailureToleranceType determines how gardenlet replicas are spread across the failure domains, possible values are either `node` or `zone`. - // Please make sure to adjust the replicaCount accordingly if you intend to run an HA setup for gardenlet. - // +optional - optional string failureToleranceType = 12; } // Image specifies container image parameters. @@ -258,12 +253,6 @@ message ManagedSeedSpec { // +optional optional Shoot shoot = 1; - // SeedTemplate is a template for a Seed object, that should be used to register a given cluster as a Seed. - // Either SeedTemplate or Gardenlet must be specified. When Seed is specified, the ManagedSeed controller will not deploy a gardenlet into the cluster - // and an existing gardenlet reconciling the new Seed is required. - // +optional - optional github.com.gardener.gardener.pkg.apis.core.v1beta1.SeedTemplate seedTemplate = 2; - // Gardenlet specifies that the ManagedSeed controller should deploy a gardenlet into the cluster // with the given deployment parameters and GardenletConfiguration. // +optional diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/types_managedseed.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/types_managedseed.go index 6843a7d7e..9b0f9fc8f 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/types_managedseed.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/types_managedseed.go @@ -67,11 +67,10 @@ type ManagedSeedSpec struct { // This field is immutable. // +optional Shoot *Shoot `json:"shoot,omitempty" protobuf:"bytes,1,opt,name=shoot"` - // SeedTemplate is a template for a Seed object, that should be used to register a given cluster as a Seed. - // Either SeedTemplate or Gardenlet must be specified. When Seed is specified, the ManagedSeed controller will not deploy a gardenlet into the cluster - // and an existing gardenlet reconciling the new Seed is required. - // +optional - SeedTemplate *gardencorev1beta1.SeedTemplate `json:"seedTemplate,omitempty" protobuf:"bytes,2,opt,name=seedTemplate"` + + // SeedTemplate is tombstoned to show why 2 is reserved protobuf tag. + // SeedTemplate *gardencorev1beta1.SeedTemplate `json:"seedTemplate,omitempty" protobuf:"bytes,2,opt,name=seedTemplate"` + // Gardenlet specifies that the ManagedSeed controller should deploy a gardenlet into the cluster // with the given deployment parameters and GardenletConfiguration. // +optional @@ -108,10 +107,10 @@ type Gardenlet struct { // GardenletDeployment specifies certain gardenlet deployment parameters, such as the number of replicas, // the image, etc. type GardenletDeployment struct { - // ReplicaCount is the number of gardenlet replicas. Defaults to 1. + // ReplicaCount is the number of gardenlet replicas. Defaults to 2. // +optional ReplicaCount *int32 `json:"replicaCount,omitempty" protobuf:"varint,1,opt,name=replicaCount"` - // RevisionHistoryLimit is the number of old gardenlet ReplicaSets to retain to allow rollback. Defaults to 10. + // RevisionHistoryLimit is the number of old gardenlet ReplicaSets to retain to allow rollback. Defaults to 2. // +optional RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty" protobuf:"varint,2,opt,name=revisionHistoryLimit"` // ServiceAccountName is the name of the ServiceAccount to use to run gardenlet pods. @@ -141,10 +140,6 @@ type GardenletDeployment struct { // VPA specifies whether to enable VPA for gardenlet. Defaults to true. // +optional VPA *bool `json:"vpa,omitempty" protobuf:"bytes,11,rep,name=vpa"` - // FailureToleranceType determines how gardenlet replicas are spread across the failure domains, possible values are either `node` or `zone`. - // Please make sure to adjust the replicaCount accordingly if you intend to run an HA setup for gardenlet. - // +optional - FailureToleranceType *gardencorev1beta1.FailureToleranceType `json:"failureToleranceType,omitempty" protobuf:"bytes,12,opt,name=failureToleranceType"` } // Image specifies container image parameters. diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/zz_generated.conversion.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/zz_generated.conversion.go index 21a8b7f78..eb55453ab 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/zz_generated.conversion.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/zz_generated.conversion.go @@ -254,7 +254,6 @@ func autoConvert_v1alpha1_GardenletDeployment_To_seedmanagement_GardenletDeploym out.AdditionalVolumeMounts = *(*[]v1.VolumeMount)(unsafe.Pointer(&in.AdditionalVolumeMounts)) out.Env = *(*[]v1.EnvVar)(unsafe.Pointer(&in.Env)) out.VPA = (*bool)(unsafe.Pointer(in.VPA)) - out.FailureToleranceType = (*core.FailureToleranceType)(unsafe.Pointer(in.FailureToleranceType)) return nil } @@ -275,7 +274,6 @@ func autoConvert_seedmanagement_GardenletDeployment_To_v1alpha1_GardenletDeploym out.AdditionalVolumeMounts = *(*[]v1.VolumeMount)(unsafe.Pointer(&in.AdditionalVolumeMounts)) out.Env = *(*[]v1.EnvVar)(unsafe.Pointer(&in.Env)) out.VPA = (*bool)(unsafe.Pointer(in.VPA)) - out.FailureToleranceType = (*v1beta1.FailureToleranceType)(unsafe.Pointer(in.FailureToleranceType)) return nil } @@ -536,15 +534,6 @@ func Convert_seedmanagement_ManagedSeedSetStatus_To_v1alpha1_ManagedSeedSetStatu func autoConvert_v1alpha1_ManagedSeedSpec_To_seedmanagement_ManagedSeedSpec(in *ManagedSeedSpec, out *seedmanagement.ManagedSeedSpec, s conversion.Scope) error { out.Shoot = (*seedmanagement.Shoot)(unsafe.Pointer(in.Shoot)) - if in.SeedTemplate != nil { - in, out := &in.SeedTemplate, &out.SeedTemplate - *out = new(core.SeedTemplate) - if err := Convert_v1beta1_SeedTemplate_To_core_SeedTemplate(*in, *out, s); err != nil { - return err - } - } else { - out.SeedTemplate = nil - } if in.Gardenlet != nil { in, out := &in.Gardenlet, &out.Gardenlet *out = new(seedmanagement.Gardenlet) @@ -564,15 +553,6 @@ func Convert_v1alpha1_ManagedSeedSpec_To_seedmanagement_ManagedSeedSpec(in *Mana func autoConvert_seedmanagement_ManagedSeedSpec_To_v1alpha1_ManagedSeedSpec(in *seedmanagement.ManagedSeedSpec, out *ManagedSeedSpec, s conversion.Scope) error { out.Shoot = (*Shoot)(unsafe.Pointer(in.Shoot)) - if in.SeedTemplate != nil { - in, out := &in.SeedTemplate, &out.SeedTemplate - *out = new(v1beta1.SeedTemplate) - if err := Convert_core_SeedTemplate_To_v1beta1_SeedTemplate(*in, *out, s); err != nil { - return err - } - } else { - out.SeedTemplate = nil - } if in.Gardenlet != nil { in, out := &in.Gardenlet, &out.Gardenlet *out = new(Gardenlet) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/zz_generated.deepcopy.go index 138a9ecd2..b1e50e24b 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1/zz_generated.deepcopy.go @@ -127,11 +127,6 @@ func (in *GardenletDeployment) DeepCopyInto(out *GardenletDeployment) { *out = new(bool) **out = **in } - if in.FailureToleranceType != nil { - in, out := &in.FailureToleranceType, &out.FailureToleranceType - *out = new(v1beta1.FailureToleranceType) - **out = **in - } return } @@ -373,11 +368,6 @@ func (in *ManagedSeedSpec) DeepCopyInto(out *ManagedSeedSpec) { *out = new(Shoot) **out = **in } - if in.SeedTemplate != nil { - in, out := &in.SeedTemplate, &out.SeedTemplate - *out = new(v1beta1.SeedTemplate) - (*in).DeepCopyInto(*out) - } if in.Gardenlet != nil { in, out := &in.Gardenlet, &out.Gardenlet *out = new(Gardenlet) diff --git a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/zz_generated.deepcopy.go b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/zz_generated.deepcopy.go index b1b048bb9..9500fbf47 100644 --- a/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/zz_generated.deepcopy.go +++ b/vendor/github.com/gardener/gardener/pkg/apis/seedmanagement/zz_generated.deepcopy.go @@ -129,11 +129,6 @@ func (in *GardenletDeployment) DeepCopyInto(out *GardenletDeployment) { *out = new(bool) **out = **in } - if in.FailureToleranceType != nil { - in, out := &in.FailureToleranceType, &out.FailureToleranceType - *out = new(core.FailureToleranceType) - **out = **in - } return } @@ -375,11 +370,6 @@ func (in *ManagedSeedSpec) DeepCopyInto(out *ManagedSeedSpec) { *out = new(Shoot) **out = **in } - if in.SeedTemplate != nil { - in, out := &in.SeedTemplate, &out.SeedTemplate - *out = new(core.SeedTemplate) - (*in).DeepCopyInto(*out) - } if in.Gardenlet != nil { in, out := &in.Gardenlet, &out.Gardenlet *out = new(Gardenlet) diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go index fb71115de..6739e1c7d 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/client.go @@ -233,9 +233,6 @@ func ValidateConfigWithAllowList(config clientcmdapi.Config, allowedFields []str } var supportedKubernetesVersions = []string{ - "1.17", - "1.18", - "1.19", "1.20", "1.21", "1.22", diff --git a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go index fb270731d..7c3acd795 100644 --- a/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go +++ b/vendor/github.com/gardener/gardener/pkg/client/kubernetes/types.go @@ -42,6 +42,7 @@ import ( gardenercoreinstall "github.com/gardener/gardener/pkg/apis/core/install" extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" gardenoperationsinstall "github.com/gardener/gardener/pkg/apis/operations/install" + operatorv1alpha1 "github.com/gardener/gardener/pkg/apis/operator/v1alpha1" resourcesv1alpha1 "github.com/gardener/gardener/pkg/apis/resources/v1alpha1" gardenseedmanagementinstall "github.com/gardener/gardener/pkg/apis/seedmanagement/install" gardensettingsinstall "github.com/gardener/gardener/pkg/apis/settings/install" @@ -105,6 +106,7 @@ func init() { kubernetesscheme.AddToScheme, extensionsv1alpha1.AddToScheme, resourcesv1alpha1.AddToScheme, + operatorv1alpha1.AddToScheme, vpaautoscalingv1.AddToScheme, hvpav1alpha1.AddToScheme, druidv1alpha1.AddToScheme, diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/eventhandler.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/eventhandler.go new file mode 100644 index 000000000..c7acbf25b --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/eventhandler.go @@ -0,0 +1,73 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package controllerutils + +import ( + "time" + + "k8s.io/apimachinery/pkg/types" + "k8s.io/client-go/util/workqueue" + "k8s.io/utils/clock" + "sigs.k8s.io/controller-runtime/pkg/client" + "sigs.k8s.io/controller-runtime/pkg/event" + "sigs.k8s.io/controller-runtime/pkg/handler" + "sigs.k8s.io/controller-runtime/pkg/reconcile" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" +) + +// EnqueueCreateEventsOncePer24hDuration returns handler.Funcs which enqueues the object for Create events only once per 24h. +// All other events are normally enqueued. +func EnqueueCreateEventsOncePer24hDuration(clock clock.Clock) handler.Funcs { + return handler.Funcs{ + CreateFunc: func(evt event.CreateEvent, q workqueue.RateLimitingInterface) { + if evt.Object == nil { + return + } + q.AddAfter(reconcile.Request{NamespacedName: types.NamespacedName{ + Name: evt.Object.GetName(), + Namespace: evt.Object.GetNamespace(), + }}, getDuration(evt.Object, clock)) + }, + UpdateFunc: func(evt event.UpdateEvent, q workqueue.RateLimitingInterface) { + if evt.ObjectNew == nil { + return + } + q.Add(reconcile.Request{NamespacedName: types.NamespacedName{ + Name: evt.ObjectNew.GetName(), + Namespace: evt.ObjectNew.GetNamespace(), + }}) + }, + DeleteFunc: func(evt event.DeleteEvent, q workqueue.RateLimitingInterface) { + if evt.Object == nil { + return + } + q.Add(reconcile.Request{NamespacedName: types.NamespacedName{ + Name: evt.Object.GetName(), + Namespace: evt.Object.GetNamespace(), + }}) + }, + } +} + +func getDuration(obj client.Object, clock clock.Clock) time.Duration { + switch obj := obj.(type) { + case *gardencorev1beta1.BackupBucket: + return ReconcileOncePer24hDuration(clock, obj.ObjectMeta, obj.Status.ObservedGeneration, obj.Status.LastOperation) + case *gardencorev1beta1.BackupEntry: + return ReconcileOncePer24hDuration(clock, obj.ObjectMeta, obj.Status.ObservedGeneration, obj.Status.LastOperation) + } + return 0 +} diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/miscellaneous.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/miscellaneous.go index 90829f6cd..b15316808 100644 --- a/vendor/github.com/gardener/gardener/pkg/controllerutils/miscellaneous.go +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/miscellaneous.go @@ -24,6 +24,7 @@ import ( "github.com/gardener/gardener/pkg/utils" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/clock" ) const separator = "," @@ -87,8 +88,6 @@ func setTaskAnnotations(annotations map[string]string, tasks []string) { } var ( - // Now is a function for returning the current time. - Now = time.Now // RandomDuration is a function for returning a random duration. RandomDuration = utils.RandomDuration ) @@ -97,7 +96,7 @@ var ( // only one reconciliation should happen per 24h. If the deletion timestamp is set or the generation has changed or the // last operation does not indicate success or indicates that the last reconciliation happened more than 24h ago then 0 // will be returned. -func ReconcileOncePer24hDuration(objectMeta metav1.ObjectMeta, observedGeneration int64, lastOperation *gardencorev1beta1.LastOperation) time.Duration { +func ReconcileOncePer24hDuration(clock clock.Clock, objectMeta metav1.ObjectMeta, observedGeneration int64, lastOperation *gardencorev1beta1.LastOperation) time.Duration { if objectMeta.DeletionTimestamp != nil { return 0 } @@ -106,7 +105,7 @@ func ReconcileOncePer24hDuration(objectMeta metav1.ObjectMeta, observedGeneratio return 0 } - if v1beta1helper.HasOperationAnnotation(objectMeta) { + if v1beta1helper.HasOperationAnnotation(objectMeta.Annotations) { return 0 } @@ -118,8 +117,8 @@ func ReconcileOncePer24hDuration(objectMeta metav1.ObjectMeta, observedGeneratio // If last reconciliation happened more than 24h ago then we want to reconcile immediately, so let's only compute // a delay if the last reconciliation was within the last 24h. - if lastReconciliation := lastOperation.LastUpdateTime.Time; Now().UTC().Before(lastReconciliation.UTC().Add(24 * time.Hour)) { - durationUntilLastReconciliationWas24hAgo := lastReconciliation.UTC().Add(24 * time.Hour).Sub(Now().UTC()) + if lastReconciliation := lastOperation.LastUpdateTime.Time; clock.Now().UTC().Before(lastReconciliation.UTC().Add(24 * time.Hour)) { + durationUntilLastReconciliationWas24hAgo := lastReconciliation.UTC().Add(24 * time.Hour).Sub(clock.Now().UTC()) return RandomDuration(durationUntilLastReconciliationWas24hAgo) } diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/predicate/predicate.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/predicate/predicate.go index 109bc9827..3281ae235 100644 --- a/vendor/github.com/gardener/gardener/pkg/controllerutils/predicate/predicate.go +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/predicate/predicate.go @@ -15,13 +15,20 @@ package predicate import ( + "context" + "reflect" + "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/event" "sigs.k8s.io/controller-runtime/pkg/predicate" + "github.com/gardener/gardener/pkg/api/extensions" gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" - gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" + v1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" resourcesv1alpha1 "github.com/gardener/gardener/pkg/apis/resources/v1alpha1" + contextutil "github.com/gardener/gardener/pkg/utils/context" + gutil "github.com/gardener/gardener/pkg/utils/gardener" ) // IsDeleting is a predicate for objects having a deletion timestamp. @@ -123,8 +130,8 @@ func RelevantConditionsChanged( for _, condition := range relevantConditionTypes { if wasConditionStatusReasonOrMessageUpdated( - gardencorev1beta1helper.GetCondition(oldConditions, condition), - gardencorev1beta1helper.GetCondition(newConditions, condition), + v1beta1helper.GetCondition(oldConditions, condition), + v1beta1helper.GetCondition(newConditions, condition), ) { return true } @@ -151,3 +158,134 @@ func ManagedResourceConditionsChanged() predicate.Predicate { resourcesv1alpha1.ResourcesProgressing, ) } + +// ExtensionStatusChanged returns a predicate which returns true when the status of the extension object has changed. +func ExtensionStatusChanged() predicate.Predicate { + return predicate.Funcs{ + CreateFunc: func(e event.CreateEvent) bool { + // If the object has the operation annotation reconcile, this means it's not picked up by the extension controller. + // For restore and migrate operations, we remove the annotation only at the end, so we don't stop enqueueing it. + if e.Object.GetAnnotations()[v1beta1constants.GardenerOperation] == v1beta1constants.GardenerOperationReconcile { + return false + } + + // If lastOperation State is failed then we admit reconciliation. + // This is not possible during create but possible during a controller restart. + return lastOperationStateFailed(e.Object) + }, + + UpdateFunc: func(e event.UpdateEvent) bool { + // If the object has the operation annotation, this means it's not picked up by the extension controller. + // migrate and restore annotations are removed for the extensions only at the end of the operation, + // so if the oldObject doesn't have the same annotation, don't enqueue it. + if v1beta1helper.HasOperationAnnotation(e.ObjectNew.GetAnnotations()) { + operation := e.ObjectNew.GetAnnotations()[v1beta1constants.GardenerOperation] + if operation == v1beta1constants.GardenerOperationMigrate || operation == v1beta1constants.GardenerOperationRestore { + // if the oldObject doesn't have the same annotation skip + if e.ObjectOld.GetAnnotations()[v1beta1constants.GardenerOperation] != operation { + return false + } + } else { + return false + } + } + + // If lastOperation State has changed to Succeeded or Error then we admit reconciliation. + return lastOperationStateChanged(e.ObjectOld, e.ObjectNew) + }, + + DeleteFunc: func(event.DeleteEvent) bool { return false }, + GenericFunc: func(event.GenericEvent) bool { return false }, + } +} + +func lastOperationStateFailed(obj client.Object) bool { + acc, err := extensions.Accessor(obj) + if err != nil { + return false + } + + if acc.GetExtensionStatus().GetLastOperation() == nil { + return false + } + + return acc.GetExtensionStatus().GetLastOperation().State == gardencorev1beta1.LastOperationStateFailed +} + +func lastOperationStateChanged(oldObj, newObj client.Object) bool { + newAcc, err := extensions.Accessor(newObj) + if err != nil { + return false + } + + oldAcc, err := extensions.Accessor(oldObj) + if err != nil { + return false + } + + if newAcc.GetExtensionStatus().GetLastOperation() == nil { + return false + } + + lastOperationState := newAcc.GetExtensionStatus().GetLastOperation().State + newLastOperationStateSucceededOrErroneous := lastOperationState == gardencorev1beta1.LastOperationStateSucceeded || lastOperationState == gardencorev1beta1.LastOperationStateError || lastOperationState == gardencorev1beta1.LastOperationStateFailed + + if newLastOperationStateSucceededOrErroneous { + if oldAcc.GetExtensionStatus().GetLastOperation() != nil { + return !reflect.DeepEqual(oldAcc.GetExtensionStatus().GetLastOperation(), newAcc.GetExtensionStatus().GetLastOperation()) + } + return true + } + + return false +} + +// IsBeingMigratedPredicate returns a predicate which returns true for objects that are being migrated to a different +// seed cluster. +func IsBeingMigratedPredicate(reader client.Reader, seedName string, getSeedNamesFromObject func(client.Object) (*string, *string)) predicate.Predicate { + return &isBeingMigratedPredicate{ + reader: reader, + seedName: seedName, + getSeedNamesFromObject: getSeedNamesFromObject, + } +} + +type isBeingMigratedPredicate struct { + ctx context.Context + reader client.Reader + seedName string + getSeedNamesFromObject func(client.Object) (*string, *string) +} + +func (p *isBeingMigratedPredicate) InjectStopChannel(stopChan <-chan struct{}) error { + p.ctx = contextutil.FromStopChannel(stopChan) + return nil +} + +// IsObjectBeingMigrated is an alias for gutil.IsObjectBeingMigrated. +var IsObjectBeingMigrated = gutil.IsObjectBeingMigrated + +func (p *isBeingMigratedPredicate) Create(e event.CreateEvent) bool { + return IsObjectBeingMigrated(p.ctx, p.reader, e.Object, p.seedName, p.getSeedNamesFromObject) +} + +func (p *isBeingMigratedPredicate) Update(e event.UpdateEvent) bool { + return IsObjectBeingMigrated(p.ctx, p.reader, e.ObjectNew, p.seedName, p.getSeedNamesFromObject) +} + +func (p *isBeingMigratedPredicate) Delete(e event.DeleteEvent) bool { + return IsObjectBeingMigrated(p.ctx, p.reader, e.Object, p.seedName, p.getSeedNamesFromObject) +} + +func (p *isBeingMigratedPredicate) Generic(e event.GenericEvent) bool { + return IsObjectBeingMigrated(p.ctx, p.reader, e.Object, p.seedName, p.getSeedNamesFromObject) +} + +// SeedNamePredicate returns a predicate which returns true for objects that are being migrated to a different +// seed cluster. +func SeedNamePredicate(seedName string, getSeedNamesFromObject func(client.Object) (*string, *string)) predicate.Predicate { + return predicate.NewPredicateFuncs(func(obj client.Object) bool { + specSeedName, statusSeedName := getSeedNamesFromObject(obj) + return gutil.GetResponsibleSeedName(specSeedName, statusSeedName) == seedName + }) +} diff --git a/vendor/github.com/gardener/gardener/pkg/controllerutils/seedfilter.go b/vendor/github.com/gardener/gardener/pkg/controllerutils/seedfilter.go index b40537bd5..ec7e2d6bd 100644 --- a/vendor/github.com/gardener/gardener/pkg/controllerutils/seedfilter.go +++ b/vendor/github.com/gardener/gardener/pkg/controllerutils/seedfilter.go @@ -19,26 +19,12 @@ import ( gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" gardencorev1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" - gardencorev1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" - operationsv1alpha1 "github.com/gardener/gardener/pkg/apis/operations/v1alpha1" seedmanagementv1alpha1 "github.com/gardener/gardener/pkg/apis/seedmanagement/v1alpha1" kutil "github.com/gardener/gardener/pkg/utils/kubernetes" "sigs.k8s.io/controller-runtime/pkg/client" ) -// SeedFilterFunc returns a filtering func for seeds. -func SeedFilterFunc(seedName string) func(obj interface{}) bool { - return func(obj interface{}) bool { - seed, ok := obj.(*gardencorev1beta1.Seed) - if !ok { - return false - } - - return seed.Name == seedName - } -} - // ShootFilterFunc returns a filtering func for shoots. func ShootFilterFunc(seedName string) func(obj interface{}) bool { return func(obj interface{}) bool { @@ -58,105 +44,6 @@ func ShootFilterFunc(seedName string) func(obj interface{}) bool { } } -// ShootMigrationFilterFunc returns a filtering func for shoots that are being migrated to a different seed. -func ShootMigrationFilterFunc(ctx context.Context, c client.Reader, seedName string) func(obj interface{}) bool { - return func(obj interface{}) bool { - shoot, ok := obj.(*gardencorev1beta1.Shoot) - if !ok { - return false - } - - return ShootIsBeingMigratedToSeed(ctx, c, shoot, seedName) - } -} - -// ShootIsBeingMigratedToSeed checks if the given shoot is currently being migrated to the seed with the given name, -// and the source seed has ownerChecks enabled (as it is a prerequisite to successfully force restore a shoot to a different seed). -func ShootIsBeingMigratedToSeed(ctx context.Context, c client.Reader, shoot *gardencorev1beta1.Shoot, seedName string) bool { - if shoot.Spec.SeedName != nil && shoot.Status.SeedName != nil && *shoot.Spec.SeedName != *shoot.Status.SeedName && *shoot.Spec.SeedName == seedName { - seed := &gardencorev1beta1.Seed{} - if err := c.Get(ctx, kutil.Key(*shoot.Status.SeedName), seed); err != nil { - return false - } - return gardencorev1beta1helper.SeedSettingOwnerChecksEnabled(seed.Spec.Settings) - } - return false -} - -// BackupBucketFilterFunc returns a filtering func for BackupBuckets. -func BackupBucketFilterFunc(seedName string) func(obj interface{}) bool { - return func(obj interface{}) bool { - backupBucket, ok := obj.(*gardencorev1beta1.BackupBucket) - if !ok { - return false - } - if backupBucket.Spec.SeedName == nil { - return false - } - - return *backupBucket.Spec.SeedName == seedName - } -} - -// BackupEntryFilterFunc returns a filtering func for BackupEntries. -func BackupEntryFilterFunc(seedName string) func(obj interface{}) bool { - return func(obj interface{}) bool { - backupEntry, ok := obj.(*gardencorev1beta1.BackupEntry) - if !ok { - return false - } - if backupEntry.Spec.SeedName == nil { - return false - } - - if backupEntry.Status.SeedName == nil || *backupEntry.Spec.SeedName == *backupEntry.Status.SeedName { - return *backupEntry.Spec.SeedName == seedName - } - - return *backupEntry.Status.SeedName == seedName - } -} - -// BackupEntryMigrationFilterFunc returns a filtering func for backup entries that are being migrated to a different seed. -func BackupEntryMigrationFilterFunc(ctx context.Context, c client.Reader, seedName string) func(obj interface{}) bool { - return func(obj interface{}) bool { - backupEntry, ok := obj.(*gardencorev1beta1.BackupEntry) - if !ok { - return false - } - - return BackupEntryIsBeingMigratedToSeed(ctx, c, backupEntry, seedName) - } -} - -// BackupEntryIsBeingMigratedToSeed checks if the given BackupEntry is currently being migrated to the seed with the given name, -// and the source seed has ownerChecks enabled (as it is a prerequisite to successfully force restore a shoot to a different seed). -func BackupEntryIsBeingMigratedToSeed(ctx context.Context, c client.Reader, backupEntry *gardencorev1beta1.BackupEntry, seedName string) bool { - if backupEntry.Spec.SeedName != nil && backupEntry.Status.SeedName != nil && *backupEntry.Spec.SeedName != *backupEntry.Status.SeedName && *backupEntry.Spec.SeedName == seedName { - seed := &gardencorev1beta1.Seed{} - if err := c.Get(ctx, kutil.Key(*backupEntry.Status.SeedName), seed); err != nil { - return false - } - return gardencorev1beta1helper.SeedSettingOwnerChecksEnabled(seed.Spec.Settings) - } - return false -} - -// BastionFilterFunc returns a filtering func for Bastions. -func BastionFilterFunc(seedName string) func(obj interface{}) bool { - return func(obj interface{}) bool { - bastion, ok := obj.(*operationsv1alpha1.Bastion) - if !ok { - return false - } - if bastion.Spec.SeedName == nil { - return false - } - - return *bastion.Spec.SeedName == seedName - } -} - // ManagedSeedFilterFunc returns a filtering func for ManagedSeeds that checks if the ManagedSeed references a Shoot scheduled on a Seed, for which the gardenlet is responsible.. func ManagedSeedFilterFunc(ctx context.Context, c client.Reader, seedName string) func(obj interface{}) bool { return func(obj interface{}) bool { diff --git a/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go b/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go index 556b59d21..3c9311246 100644 --- a/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go +++ b/vendor/github.com/gardener/gardener/pkg/extensions/customresources.go @@ -324,13 +324,16 @@ func MigrateExtensionObject( } // MigrateExtensionObjects lists all extension objects of a given kind and annotates them with the Migrate operation. +// It executes the given predicateFunc for each of them, and if it evaluates to true, then it migrates the extension object. +// If predicateFunc is nil then migrates all extension objects. func MigrateExtensionObjects( ctx context.Context, c client.Client, listObj client.ObjectList, namespace string, + predicateFunc func(obj extensionsv1alpha1.Object) bool, ) error { - fns, err := applyFuncToExtensionObjects(ctx, c, listObj, namespace, nil, func(ctx context.Context, obj extensionsv1alpha1.Object) error { + fns, err := applyFuncToExtensionObjects(ctx, c, listObj, namespace, predicateFunc, func(ctx context.Context, obj extensionsv1alpha1.Object) error { return MigrateExtensionObject(ctx, c, obj) }) if err != nil { @@ -375,6 +378,8 @@ func WaitUntilExtensionObjectMigrated( } // WaitUntilExtensionObjectsMigrated lists all extension objects of a given kind and waits until they are migrated. +// It executes the given predicateFunc for each of them, and if it evaluates to true, then it waits for the extension object to be migrated. +// If predicateFunc is nil then waits for all extension objects to be migrated. func WaitUntilExtensionObjectsMigrated( ctx context.Context, c client.Client, @@ -383,8 +388,9 @@ func WaitUntilExtensionObjectsMigrated( namespace string, interval time.Duration, timeout time.Duration, + predicateFunc func(obj extensionsv1alpha1.Object) bool, ) error { - fns, err := applyFuncToExtensionObjects(ctx, c, listObj, namespace, nil, func(ctx context.Context, obj extensionsv1alpha1.Object) error { + fns, err := applyFuncToExtensionObjects(ctx, c, listObj, namespace, predicateFunc, func(ctx context.Context, obj extensionsv1alpha1.Object) error { return WaitUntilExtensionObjectMigrated(ctx, c, obj, kind, interval, timeout) }) if err != nil { diff --git a/vendor/github.com/gardener/gardener/pkg/extensions/owner.go b/vendor/github.com/gardener/gardener/pkg/extensions/owner.go deleted file mode 100644 index 39729d630..000000000 --- a/vendor/github.com/gardener/gardener/pkg/extensions/owner.go +++ /dev/null @@ -1,41 +0,0 @@ -// Copyright (c) 2021 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package extensions - -import ( - "context" - - extensionsv1alpha1 "github.com/gardener/gardener/pkg/apis/extensions/v1alpha1" - kutil "github.com/gardener/gardener/pkg/utils/kubernetes" - - "k8s.io/apimachinery/pkg/api/meta" - "sigs.k8s.io/controller-runtime/pkg/client" -) - -// GetOwnerNameAndID reads the owner domain name and ID from the owner DNSRecord extension resource in the given namespace. -// If the owner DNSRecord resource is not found, it returns empty strings. -func GetOwnerNameAndID(ctx context.Context, c client.Client, namespace, shootName string) (string, string, error) { - dns := &extensionsv1alpha1.DNSRecord{} - if err := c.Get(ctx, kutil.Key(namespace, shootName+"-owner"), dns); client.IgnoreNotFound(err) != nil && !meta.IsNoMatchError(err) { - return "", "", err - } - - var value string - if len(dns.Spec.Values) > 0 { - value = dns.Spec.Values[0] - } - - return dns.Spec.Name, value, nil -} diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go index cc2edebe3..cd4aa54f2 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/register.go @@ -19,7 +19,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) -// GroupName is the group name use in this package +// GroupName is the group name used in this package. const GroupName = "gardenlet.config.gardener.cloud" // SchemeGroupVersion is group version used to register these objects diff --git a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/register.go b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/register.go index e526ecf16..0a27ae866 100644 --- a/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/register.go +++ b/vendor/github.com/gardener/gardener/pkg/gardenlet/apis/config/v1alpha1/register.go @@ -19,7 +19,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" ) -// GroupName is the group name use in this package +// GroupName is the group name used in this package. const GroupName = "gardenlet.config.gardener.cloud" // SchemeGroupVersion is group version used to register these objects diff --git a/vendor/github.com/gardener/gardener/pkg/logger/types.go b/vendor/github.com/gardener/gardener/pkg/logger/types.go index da609c4de..b265e231f 100644 --- a/vendor/github.com/gardener/gardener/pkg/logger/types.go +++ b/vendor/github.com/gardener/gardener/pkg/logger/types.go @@ -31,7 +31,6 @@ const ( var ( // AllLogLevels is a slice of all available log levels. AllLogLevels = []string{DebugLevel, InfoLevel, ErrorLevel} - // AllLogFormats is a slice of all available log formats. AllLogFormats = []string{FormatJSON, FormatText} ) diff --git a/vendor/github.com/gardener/gardener/pkg/logger/zap.go b/vendor/github.com/gardener/gardener/pkg/logger/zap.go index ce8a6ce64..fccdbd256 100644 --- a/vendor/github.com/gardener/gardener/pkg/logger/zap.go +++ b/vendor/github.com/gardener/gardener/pkg/logger/zap.go @@ -66,25 +66,3 @@ func NewZapLogger(level string, format string, additionalOpts ...logzap.Opts) (l return logzap.New(append(opts, additionalOpts...)...), nil } - -// ZapLogger is a Logger implementation. -// If development is true, a Zap development config will be used -// (stacktraces on warnings, no sampling), otherwise a Zap production -// config will be used (stacktraces on errors, sampling). -// Additionally, the time encoding is adjusted to `zapcore.ISO8601TimeEncoder`. -// This is used by extensions for historical reasons. -// TODO: consolidate this with NewZapLogger and make everything configurable in a harmonized way -func ZapLogger(development bool) logr.Logger { - return logzap.New(func(o *logzap.Options) { - var encCfg zapcore.EncoderConfig - if development { - encCfg = zap.NewDevelopmentEncoderConfig() - } else { - encCfg = zap.NewProductionEncoderConfig() - } - setCommonEncoderConfigOptions(&encCfg) - - o.Encoder = zapcore.NewJSONEncoder(encCfg) - o.Development = development - }) -} diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/containerd/templates/scripts/health-monitor.tpl.sh b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/containerd/templates/scripts/health-monitor.tpl.sh old mode 100755 new mode 100644 index 078e0ea65..cae1219c7 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/containerd/templates/scripts/health-monitor.tpl.sh +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/containerd/templates/scripts/health-monitor.tpl.sh @@ -3,15 +3,30 @@ set -o nounset set -o pipefail function containerd_monitoring { - echo "ContainerD monitor has started !" + echo "containerd monitor has started !" while [ 1 ]; do - if ! timeout 60 ctr c list > /dev/null; then - echo "ContainerD daemon failed!" - pkill containerd - sleep 30 - else + start_timestamp=$(date +%s) + until ctr c list > /dev/null; do + CONTAINERD_PID=$(systemctl show --property MainPID containerd --value) + + if [ $CONTAINERD_PID -eq 0 ]; then + echo "Connection to containerd socket failed (process not started), retrying in $SLEEP_SECONDS seconds..." + break + fi + + now=$(date +%s) + time_elapsed="$(($now-$start_timestamp))" + + if [ $time_elapsed -gt 60 ]; then + echo "containerd daemon unreachable for more than 60s. Sending SIGTERM to PID $CONTAINERD_PID" + kill -n 15 $CONTAINERD_PID + sleep 20 + break 2 + fi + echo "Connection to containerd socket failed, retrying in $SLEEP_SECONDS seconds..." sleep $SLEEP_SECONDS - fi + done + sleep $SLEEP_SECONDS done } diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/containerd/templates/scripts/init.tpl.sh b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/containerd/templates/scripts/init.tpl.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/docker/templates/scripts/health-monitor.tpl.sh b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/docker/templates/scripts/health-monitor.tpl.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/cliflags.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/cliflags.go index 9d67d1a2e..d78c70247 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/cliflags.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/cliflags.go @@ -23,7 +23,6 @@ import ( "github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components" "github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/containerd" "github.com/gardener/gardener/pkg/utils/imagevector" - "github.com/gardener/gardener/pkg/utils/version" "github.com/Masterminds/semver" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -42,10 +41,6 @@ func CLIFlags(kubernetesVersion *semver.Version, criName extensionsv1alpha1.CRIN fmt.Sprintf("--node-labels=%s=%s", v1beta1constants.LabelWorkerKubernetesVersion, kubernetesVersion.String()), ) - if version.ConstraintK8sLess119.Check(kubernetesVersion) { - flags = append(flags, "--volume-plugin-dir="+pathVolumePluginDirectory) - } - if criName == extensionsv1alpha1.CRINameContainerD { flags = append(flags, "--container-runtime=remote", diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/config.go b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/config.go index 5f0341db7..e7cf8881f 100644 --- a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/config.go +++ b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/config.go @@ -103,10 +103,7 @@ func Config(kubernetesVersion *semver.Version, clusterDNSAddress, clusterDomain SyncFrequency: metav1.Duration{Duration: time.Minute}, SystemReserved: params.SystemReserved, VolumeStatsAggPeriod: metav1.Duration{Duration: time.Minute}, - } - - if !version.ConstraintK8sLess119.Check(kubernetesVersion) { - config.VolumePluginDir = pathVolumePluginDirectory + VolumePluginDir: pathVolumePluginDirectory, } return config @@ -147,6 +144,14 @@ var ( } ) +// ShouldProtectKernelDefaultsBeEnabled returns true if ProtectKernelDefaults is set to true in the kubelet's config parameters or k8s version is >= 1.26. +func ShouldProtectKernelDefaultsBeEnabled(kubeletConfigParameters *components.ConfigurableKubeletConfigParameters, kubernetesVersion *semver.Version) bool { + if kubeletConfigParameters.ProtectKernelDefaults != nil { + return *kubeletConfigParameters.ProtectKernelDefaults + } + return kubernetesVersion != nil && version.ConstraintK8sGreaterEqual126.Check(kubernetesVersion) +} + func setConfigDefaults(c *components.ConfigurableKubeletConfigParameters, kubernetesVersion *semver.Version) { if c.CpuCFSQuota == nil { c.CpuCFSQuota = pointer.Bool(true) @@ -233,9 +238,7 @@ func setConfigDefaults(c *components.ConfigurableKubeletConfigParameters, kubern c.ContainerLogMaxSize = pointer.String("100Mi") } - if c.ProtectKernelDefaults == nil { - c.ProtectKernelDefaults = pointer.Bool(version.ConstraintK8sGreaterEqual126.Check(kubernetesVersion)) - } + c.ProtectKernelDefaults = pointer.Bool(ShouldProtectKernelDefaultsBeEnabled(c, kubernetesVersion)) if c.StreamingConnectionIdleTimeout == nil { if version.ConstraintK8sGreaterEqual126.Check(kubernetesVersion) { diff --git a/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/templates/scripts/health-monitor.tpl.sh b/vendor/github.com/gardener/gardener/pkg/operation/botanist/component/extensions/operatingsystemconfig/original/components/kubelet/templates/scripts/health-monitor.tpl.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/backupentry.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/backupentry.go index 84ffa61e1..4483b5a70 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/backupentry.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/backupentry.go @@ -19,6 +19,10 @@ import ( "strings" "k8s.io/apimachinery/pkg/types" + "sigs.k8s.io/controller-runtime/pkg/client" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" ) var backupEntryDelimiter = "--" @@ -39,8 +43,19 @@ func ExtractShootDetailsFromBackupEntryName(backupEntryName string) (shootTechni tokens := strings.Split(backupEntryName, backupEntryDelimiter) uid := tokens[len(tokens)-1] - shootTechnicalID = strings.TrimSuffix(backupEntryName, uid) + shootTechnicalID = strings.TrimPrefix(backupEntryName, v1beta1constants.BackupSourcePrefix+"-") + shootTechnicalID = strings.TrimSuffix(shootTechnicalID, uid) shootTechnicalID = strings.TrimSuffix(shootTechnicalID, backupEntryDelimiter) shootUID = types.UID(uid) return } + +// GetBackupEntrySeedNames returns the spec.seedName and the status.seedName field in case the provided object is a +// BackupEntry. +func GetBackupEntrySeedNames(obj client.Object) (*string, *string) { + backupEntry, ok := obj.(*gardencorev1beta1.BackupEntry) + if !ok { + return nil, nil + } + return backupEntry.Spec.SeedName, backupEntry.Status.SeedName +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/identity.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/identity.go new file mode 100644 index 000000000..e405752d7 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/identity.go @@ -0,0 +1,110 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package gardener + +import ( + "bufio" + "fmt" + "os" + "regexp" + "strings" + + "k8s.io/component-base/version" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + "github.com/gardener/gardener/pkg/utils" +) + +// DetermineIdentity determines the Gardener component identity. +// We want to determine the Docker container id of the currently running instance because we need to identify for still +// ongoing operations whether another instance is still operating the respective Shoots. When running locally, we +// generate a random string because there is no container id. +func DetermineIdentity() (*gardencorev1beta1.Gardener, error) { + var ( + validID = regexp.MustCompile(`([0-9a-f]{64})`) + id string + + name string + err error + ) + + name, err = os.Hostname() + if err != nil { + return nil, fmt.Errorf("unable to get hostname: %w", err) + } + + // If running inside a Kubernetes cluster (as container) we can read the container id from the proc file system. + // Otherwise generate a random string for the id + if cGroupFile, err := os.Open("/proc/self/cgroup"); err == nil { + defer cGroupFile.Close() + reader := bufio.NewReader(cGroupFile) + + var cgroupV1 string + for { + line, err := reader.ReadString('\n') + if err != nil { + break + } + + // Store cgroup-v1 result for fall back + if strings.HasPrefix(line, "1:name=systemd") { + cgroupV1 = line + } + + // Always prefer cgroup-v2 + if strings.HasPrefix(line, "0::") { + if containerID := extractID(line); validID.MatchString(containerID) { + id = containerID + break + } + } + } + + // Fall-back to cgroup-v1 if possible + if len(id) == 0 && len(cgroupV1) > 0 { + id = extractID(cgroupV1) + } + } + + if id == "" { + id, err = utils.GenerateRandomString(64) + if err != nil { + return nil, fmt.Errorf("unable to generate id: %w", err) + } + } + + return &gardencorev1beta1.Gardener{ + ID: id, + Name: name, + Version: version.Get().GitVersion, + }, nil +} + +func extractID(line string) string { + var ( + id string + splitBySlash = strings.Split(line, "/") + ) + + if len(splitBySlash) == 0 { + return "" + } + + id = strings.TrimSpace(splitBySlash[len(splitBySlash)-1]) + id = strings.TrimSuffix(id, ".scope") + id = strings.TrimPrefix(id, "docker-") + + return id +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/migration.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/migration.go new file mode 100644 index 000000000..e24e26d18 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/migration.go @@ -0,0 +1,67 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package gardener + +import ( + "context" + + "sigs.k8s.io/controller-runtime/pkg/client" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + v1beta1helper "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" + kutil "github.com/gardener/gardener/pkg/utils/kubernetes" +) + +// IsObjectBeingMigrated checks whether the object is being migrated. +func IsObjectBeingMigrated( + ctx context.Context, + reader client.Reader, + obj client.Object, + seedName string, + getSeedNamesFromObject func(client.Object) (*string, *string), +) bool { + specSeedName, statusSeedName := getSeedNamesFromObject(obj) + + if specSeedName != nil && statusSeedName != nil && *specSeedName != *statusSeedName && *specSeedName == seedName { + seed := &gardencorev1beta1.Seed{} + if err := reader.Get(ctx, kutil.Key(*statusSeedName), seed); err != nil { + return false + } + return v1beta1helper.SeedSettingOwnerChecksEnabled(seed.Spec.Settings) + } + + return false +} + +// GetResponsibleSeedName returns the seed name which is responsible for the next reconciliation. +func GetResponsibleSeedName(specSeedName, statusSeedName *string) string { + switch { + case specSeedName == nil: + // If the spec.seedName is empty then nobody is responsible. + return "" + + case statusSeedName == nil: + // If status.seedName is not set yet, the seed given in spec.seedName is responsible for reconciliation. + return *specSeedName + + case *specSeedName != *statusSeedName: + // Migration of the object was triggered, the seed given in status.seedName is responsible for preparing the + // migration. + return *statusSeedName + + default: + return *specSeedName + } +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go b/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go index fc07239bc..ab08b0998 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/gardener/shoot.go @@ -32,10 +32,11 @@ import ( clientcmdlatest "k8s.io/client-go/tools/clientcmd/api/latest" clientcmdv1 "k8s.io/client-go/tools/clientcmd/api/v1" "k8s.io/component-base/version" + "k8s.io/utils/clock" "k8s.io/utils/pointer" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/gardener/gardener/pkg/apis/core/v1beta1" + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" v1beta1constants "github.com/gardener/gardener/pkg/apis/core/v1beta1/constants" resourcesv1alpha1 "github.com/gardener/gardener/pkg/apis/resources/v1alpha1" "github.com/gardener/gardener/pkg/controllerutils" @@ -45,12 +46,12 @@ import ( ) // RespectShootSyncPeriodOverwrite checks whether to respect the sync period overwrite of a Shoot or not. -func RespectShootSyncPeriodOverwrite(respectSyncPeriodOverwrite bool, shoot *v1beta1.Shoot) bool { +func RespectShootSyncPeriodOverwrite(respectSyncPeriodOverwrite bool, shoot *gardencorev1beta1.Shoot) bool { return respectSyncPeriodOverwrite || shoot.Namespace == v1beta1constants.GardenNamespace } // ShouldIgnoreShoot determines whether a Shoot should be ignored or not. -func ShouldIgnoreShoot(respectSyncPeriodOverwrite bool, shoot *v1beta1.Shoot) bool { +func ShouldIgnoreShoot(respectSyncPeriodOverwrite bool, shoot *gardencorev1beta1.Shoot) bool { if !RespectShootSyncPeriodOverwrite(respectSyncPeriodOverwrite, shoot) { return false } @@ -64,44 +65,44 @@ func ShouldIgnoreShoot(respectSyncPeriodOverwrite bool, shoot *v1beta1.Shoot) bo return ignore } -// IsShootFailed checks if a Shoot is failed. -func IsShootFailed(shoot *v1beta1.Shoot) bool { +// IsShootFailedAndUpToDate checks if a Shoot is failed and the observed generation and gardener version are up-to-date. +func IsShootFailedAndUpToDate(shoot *gardencorev1beta1.Shoot) bool { lastOperation := shoot.Status.LastOperation - return lastOperation != nil && lastOperation.State == v1beta1.LastOperationStateFailed && + return lastOperation != nil && lastOperation.State == gardencorev1beta1.LastOperationStateFailed && shoot.Generation == shoot.Status.ObservedGeneration && shoot.Status.Gardener.Version == version.Get().GitVersion } // IsNowInEffectiveShootMaintenanceTimeWindow checks if the current time is in the effective // maintenance time window of the Shoot. -func IsNowInEffectiveShootMaintenanceTimeWindow(shoot *v1beta1.Shoot) bool { - return EffectiveShootMaintenanceTimeWindow(shoot).Contains(time.Now()) +func IsNowInEffectiveShootMaintenanceTimeWindow(shoot *gardencorev1beta1.Shoot, clock clock.Clock) bool { + return EffectiveShootMaintenanceTimeWindow(shoot).Contains(clock.Now()) } // LastReconciliationDuringThisTimeWindow returns true if is contained in the given effective maintenance time // window of the shoot and if the did not happen longer than the longest possible duration of a // maintenance time window. -func LastReconciliationDuringThisTimeWindow(shoot *v1beta1.Shoot) bool { +func LastReconciliationDuringThisTimeWindow(shoot *gardencorev1beta1.Shoot, clock clock.Clock) bool { if shoot.Status.LastOperation == nil { return false } var ( timeWindow = EffectiveShootMaintenanceTimeWindow(shoot) - now = time.Now() + now = clock.Now() lastReconciliation = shoot.Status.LastOperation.LastUpdateTime.Time ) - return timeWindow.Contains(lastReconciliation) && now.UTC().Sub(lastReconciliation.UTC()) <= v1beta1.MaintenanceTimeWindowDurationMaximum + return timeWindow.Contains(lastReconciliation) && now.UTC().Sub(lastReconciliation.UTC()) <= gardencorev1beta1.MaintenanceTimeWindowDurationMaximum } // IsObservedAtLatestGenerationAndSucceeded checks whether the Shoot's generation has changed or if the LastOperation status // is Succeeded. -func IsObservedAtLatestGenerationAndSucceeded(shoot *v1beta1.Shoot) bool { +func IsObservedAtLatestGenerationAndSucceeded(shoot *gardencorev1beta1.Shoot) bool { lastOperation := shoot.Status.LastOperation return shoot.Generation == shoot.Status.ObservedGeneration && - (lastOperation != nil && lastOperation.State == v1beta1.LastOperationStateSucceeded) + (lastOperation != nil && lastOperation.State == gardencorev1beta1.LastOperationStateSucceeded) } // SyncPeriodOfShoot determines the sync period of the given shoot. @@ -109,7 +110,7 @@ func IsObservedAtLatestGenerationAndSucceeded(shoot *v1beta1.Shoot) bool { // If no overwrite is allowed, the defaultMinSyncPeriod is returned. // Otherwise, the overwrite is parsed. If an error occurs or it is smaller than the defaultMinSyncPeriod, // the defaultMinSyncPeriod is returned. Otherwise, the overwrite is returned. -func SyncPeriodOfShoot(respectSyncPeriodOverwrite bool, defaultMinSyncPeriod time.Duration, shoot *v1beta1.Shoot) time.Duration { +func SyncPeriodOfShoot(respectSyncPeriodOverwrite bool, defaultMinSyncPeriod time.Duration, shoot *gardencorev1beta1.Shoot) time.Duration { if !RespectShootSyncPeriodOverwrite(respectSyncPeriodOverwrite, shoot) { return defaultMinSyncPeriod } @@ -139,7 +140,7 @@ func EffectiveMaintenanceTimeWindow(timeWindow *timewindow.MaintenanceTimeWindow } // EffectiveShootMaintenanceTimeWindow returns the effective MaintenanceTimeWindow of the given Shoot. -func EffectiveShootMaintenanceTimeWindow(shoot *v1beta1.Shoot) *timewindow.MaintenanceTimeWindow { +func EffectiveShootMaintenanceTimeWindow(shoot *gardencorev1beta1.Shoot) *timewindow.MaintenanceTimeWindow { maintenance := shoot.Spec.Maintenance if maintenance == nil || maintenance.TimeWindow == nil { return timewindow.AlwaysTimeWindow @@ -443,3 +444,12 @@ func injectGenericKubeconfig(podSpec *corev1.PodSpec, genericKubeconfigName, acc } } } + +// GetShootSeedNames returns the spec.seedName and the status.seedName field in case the provided object is a Shoot. +func GetShootSeedNames(obj client.Object) (*string, *string) { + shoot, ok := obj.(*gardencorev1beta1.Shoot) + if !ok { + return nil, nil + } + return shoot.Spec.SeedName, shoot.Status.SeedName +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/images/images.go b/vendor/github.com/gardener/gardener/pkg/utils/images/images.go index 143e68518..0c786dda4 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/images/images.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/images/images.go @@ -55,8 +55,6 @@ const ( ImageNameFluentBitPluginInstaller = "fluent-bit-plugin-installer" // ImageNameGardenerResourceManager is a constant for an image in the image vector with name 'gardener-resource-manager'. ImageNameGardenerResourceManager = "gardener-resource-manager" - // ImageNameGardenerSeedAdmissionController is a constant for an image in the image vector with name 'gardener-seed-admission-controller'. - ImageNameGardenerSeedAdmissionController = "gardener-seed-admission-controller" // ImageNameGardenlet is a constant for an image in the image vector with name 'gardenlet'. ImageNameGardenlet = "gardenlet" // ImageNameGrafana is a constant for an image in the image vector with name 'grafana'. diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/admissionplugins.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/admissionplugins.go index 2c6386c6b..ae73cd4ba 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/admissionplugins.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/admissionplugins.go @@ -23,11 +23,11 @@ import ( ) var ( - lowestSupportedKubernetesVersionMajorMinor = "1.17" + lowestSupportedKubernetesVersionMajorMinor = "1.20" lowestSupportedKubernetesVersion, _ = semver.NewVersion(lowestSupportedKubernetesVersionMajorMinor) admissionPlugins = map[string][]gardencorev1beta1.AdmissionPlugin{ - "1.17": getDefaultPlugins("1.17"), + "1.20": getDefaultPlugins("1.20"), "1.23": getDefaultPlugins("1.23"), "1.25": getDefaultPlugins("1.25"), } @@ -65,7 +65,7 @@ func getAdmissionPluginsForVersionInternal(v string) []gardencorev1beta1.Admissi func getDefaultPlugins(version string) []gardencorev1beta1.AdmissionPlugin { var admissionPlugins []gardencorev1beta1.AdmissionPlugin switch version { - case "1.17": + case "1.20": admissionPlugins = append(admissionPlugins, []gardencorev1beta1.AdmissionPlugin{ {Name: "Priority"}, {Name: "NamespaceLifecycle"}, diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/etcd.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/etcd.go index a3cf5f43e..5eda979aa 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/etcd.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/health/etcd.go @@ -33,7 +33,7 @@ func CheckEtcd(etcd *druidv1alpha1.Etcd) error { continue } - // TODO(timuthy): Check for cond.Status != druidv1alpha1.ConditionTrue as soon as https://github.com/gardener/etcd-druid/issues/413 is resolved. + // TODO(timuthy): Check for cond.Status != druidv1alpha1.ConditionTrue as soon as https://github.com/gardener/etcd-druid/pull/469 is released. if cond.Status == druidv1alpha1.ConditionFalse { return fmt.Errorf("backup for etcd %q is reported as unready: %s", etcd.Name, cond.Message) } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/highavailability.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/highavailability.go new file mode 100644 index 000000000..c3849a63d --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/highavailability.go @@ -0,0 +1,103 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package kubernetes + +import ( + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/utils/pointer" + + gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" + resourcesv1alpha1 "github.com/gardener/gardener/pkg/apis/resources/v1alpha1" +) + +// GetReplicaCount returns the replica count based on the criteria, failure tolerance type, and component type. +func GetReplicaCount(failureToleranceType *gardencorev1beta1.FailureToleranceType, componentType string) *int32 { + if len(componentType) == 0 { + return nil + } + + if failureToleranceType != nil && + *failureToleranceType == "" && + componentType == resourcesv1alpha1.HighAvailabilityConfigTypeController { + return pointer.Int32(1) + } + + return pointer.Int32(2) +} + +// GetNodeSelectorRequirementForZones returns a node selector requirement to ensure all pods are scheduled only on +// nodes in the provided zones. If no zones are provided then nothing is done. +// Note that the returned requirement should be added to all existing node selector terms in the +// spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms field of pods because +// the various node selector terms are evaluated with the OR operator. +func GetNodeSelectorRequirementForZones(failureToleranceType *gardencorev1beta1.FailureToleranceType, zones []string) *corev1.NodeSelectorRequirement { + if len(zones) == 0 || failureToleranceType == nil { + return nil + } + + return &corev1.NodeSelectorRequirement{ + Key: corev1.LabelTopologyZone, + Operator: corev1.NodeSelectorOpIn, + Values: zones, + } +} + +// GetTopologySpreadConstraints adds topology spread constraints based on the passed `failureToleranceType`. This is +// only done when the number of replicas is greater than 1 (otherwise, it doesn't make sense to add spread constraints). +func GetTopologySpreadConstraints( + replicas int32, + maxReplicas int32, + labelSelector metav1.LabelSelector, + numberOfZones int32, + failureToleranceType *gardencorev1beta1.FailureToleranceType, +) []corev1.TopologySpreadConstraint { + if replicas <= 1 { + return nil + } + + whenUnsatisfiable := corev1.ScheduleAnyway + if failureToleranceType != nil && *failureToleranceType != "" { + whenUnsatisfiable = corev1.DoNotSchedule + } + + topologySpreadConstraints := []corev1.TopologySpreadConstraint{{ + TopologyKey: corev1.LabelHostname, + MaxSkew: 1, + WhenUnsatisfiable: whenUnsatisfiable, + LabelSelector: &labelSelector, + }} + + // We only want to enforce a spread over zones when there are: + // - multiple zones + // - AND + // - the failure tolerance type is 'nil' (seed/shoot system component case) or 'zone' (shoot control-plane case) + if numberOfZones > 1 && (failureToleranceType == nil || *failureToleranceType == gardencorev1beta1.FailureToleranceTypeZone) { + maxSkew := int32(1) + // Increase maxSkew if there are >= 2*numberOfZones maxReplicas, see https://github.com/kubernetes/kubernetes/issues/109364. + if maxReplicas >= 2*numberOfZones { + maxSkew = 2 + } + + topologySpreadConstraints = append(topologySpreadConstraints, corev1.TopologySpreadConstraint{ + TopologyKey: corev1.LabelTopologyZone, + MaxSkew: maxSkew, + WhenUnsatisfiable: corev1.DoNotSchedule, + LabelSelector: &labelSelector, + }) + } + + return topologySpreadConstraints +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go index 79aef4eaa..afccb95e0 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/kubernetes.go @@ -25,8 +25,6 @@ import ( "strings" "time" - gardencorev1beta1 "github.com/gardener/gardener/pkg/apis/core/v1beta1" - "github.com/gardener/gardener/pkg/apis/core/v1beta1/helper" "github.com/gardener/gardener/pkg/client/kubernetes" "github.com/gardener/gardener/pkg/utils/retry" @@ -683,44 +681,6 @@ func ObjectKeyForCreateWebhooks(obj client.Object, req admission.Request) client return client.ObjectKey{Namespace: namespace, Name: name} } -// GetTopologySpreadConstraints returns the required topology spread constraints based -// on the passed `failureToleranceType`. -func GetTopologySpreadConstraints(failureToleranceType *gardencorev1beta1.FailureToleranceType, maxReplicas int32, labelSelector metav1.LabelSelector) []corev1.TopologySpreadConstraint { - const criticalMaxReplicaCount = 6 - - whenUnsatisfiable := corev1.DoNotSchedule - if failureToleranceType == nil { - // Spread should be a best-effort only if no HA is configured. - whenUnsatisfiable = corev1.ScheduleAnyway - } - - constraints := []corev1.TopologySpreadConstraint{ - { - TopologyKey: corev1.LabelHostname, - MaxSkew: 1, - WhenUnsatisfiable: whenUnsatisfiable, - LabelSelector: &labelSelector, - }, - } - - if helper.IsFailureToleranceTypeZone(failureToleranceType) { - maxSkew := int32(1) - // Increase maxSkew if there can be >= 6 replicas, see https://github.com/kubernetes/kubernetes/issues/109364. - if maxReplicas >= criticalMaxReplicaCount { - maxSkew = 2 - } - - constraints = append(constraints, corev1.TopologySpreadConstraint{ - TopologyKey: corev1.LabelTopologyZone, - MaxSkew: maxSkew, - WhenUnsatisfiable: corev1.DoNotSchedule, - LabelSelector: &labelSelector, - }) - } - - return constraints -} - // ClientCertificateFromRESTConfig returns the client certificate used inside a REST config. func ClientCertificateFromRESTConfig(restConfig *rest.Config) (*tls.Certificate, error) { cert, err := tls.X509KeyPair(restConfig.CertData, restConfig.KeyData) diff --git a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go index bc8c54b1a..5d1397846 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/kubernetes/object.go @@ -87,12 +87,13 @@ func DeleteObjectsFromListConditionally(ctx context.Context, c client.Client, li return flow.Parallel(fns...)(ctx) } -// IsNamespaceInUse checks if there are is at least one object of the given kind left inside the given namespace. -func IsNamespaceInUse(ctx context.Context, reader client.Reader, namespace string, gvk schema.GroupVersionKind) (bool, error) { +// ResourcesExist checks if there is at least one object of the given gvk. The kind in the gvk must be the list kind, +// for example corev1.SchemeGroupVersion.WithKind("PodList"). +func ResourcesExist(ctx context.Context, reader client.Reader, gvk schema.GroupVersionKind, listOpts ...client.ListOption) (bool, error) { objects := &metav1.PartialObjectMetadataList{} objects.SetGroupVersionKind(gvk) - if err := reader.List(ctx, objects, client.InNamespace(namespace), client.Limit(1)); err != nil { + if err := reader.List(ctx, objects, append(listOpts, client.Limit(1))...); err != nil { return true, err } diff --git a/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go b/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go index 1102d64c5..11cf78e1f 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/managedresources/managedresources.go @@ -76,8 +76,11 @@ func New(client client.Client, namespace, name, class string, keepObjects *bool, return mr } -// NewForShoot constructs a new ManagedResource object for the shoot's Gardener-Resource-Manager. -func NewForShoot(c client.Client, namespace, name string, keepObjects bool) *builder.ManagedResource { +// NewForShoot constructs a new ManagedResource object for the shoot's gardener-resource-manager. +// The origin is used to identify the creator of the managed resource. Gardener acts on resources +// with "origin=gardener" label. External callers (extension controllers or other components) +// of this function should provide their own unique origin value. +func NewForShoot(c client.Client, namespace, name, origin string, keepObjects bool) *builder.ManagedResource { var ( injectedLabels = map[string]string{v1beta1constants.ShootNoCleanup: "true"} labels = map[string]string{LabelKeyOrigin: LabelValueGardener} @@ -86,7 +89,7 @@ func NewForShoot(c client.Client, namespace, name string, keepObjects bool) *bui return New(c, namespace, name, "", &keepObjects, labels, injectedLabels, nil) } -// NewForSeed constructs a new ManagedResource object for the seed's Gardener-Resource-Manager. +// NewForSeed constructs a new ManagedResource object for the seed's gardener-resource-manager. func NewForSeed(c client.Client, namespace, name string, keepObjects bool) *builder.ManagedResource { var labels map[string]string if !strings.HasPrefix(namespace, v1beta1constants.TechnicalIDPrefix) { @@ -159,10 +162,13 @@ func CreateForSeed(ctx context.Context, client client.Client, namespace, name st } // CreateForShoot deploys a ManagedResource CR for the shoot's gardener-resource-manager. -func CreateForShoot(ctx context.Context, client client.Client, namespace, name string, keepObjects bool, data map[string][]byte) error { +// The origin is used to identify the creator of the managed resource. Gardener acts on resources +// with "origin=gardener" label. External callers (extension controllers or other components) +// of this function should provide their own unique origin value. +func CreateForShoot(ctx context.Context, client client.Client, namespace, name, origin string, keepObjects bool, data map[string][]byte) error { var ( secretName, secret = NewSecret(client, namespace, name, data, true) - managedResource = NewForShoot(client, namespace, name, keepObjects).WithSecretRef(secretName) + managedResource = NewForShoot(client, namespace, name, origin, keepObjects).WithSecretRef(secretName) ) return deployManagedResource(ctx, secret, managedResource) @@ -323,3 +329,19 @@ func checkConfigurationError(err error) []gardencorev1beta1.ErrorCode { return errorCodes } + +// CheckIfManagedResourcesExist checks if some ManagedResources of the given class still exist. If yes it returns true. +func CheckIfManagedResourcesExist(ctx context.Context, c client.Client, class *string) (bool, error) { + managedResourceList := &resourcesv1alpha1.ManagedResourceList{} + if err := c.List(ctx, managedResourceList); err != nil { + return false, err + } + + for _, managedResource := range managedResourceList.Items { + if pointer.StringEqual(managedResource.Spec.Class, class) { + return true, nil + } + } + + return false, nil +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth.go b/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth.go index 29d4dd07c..c5cf3e487 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/secrets/basic_auth.go @@ -16,7 +16,6 @@ package secrets import ( "fmt" - "strings" "github.com/gardener/gardener/pkg/utils" @@ -101,18 +100,3 @@ func (b *BasicAuth) SecretData() map[string][]byte { return data } - -// LoadBasicAuthFromCSV loads the basic auth username and the password from the given CSV-formatted . -func LoadBasicAuthFromCSV(name string, data []byte) (*BasicAuth, error) { - csv := strings.Split(string(data), ",") - if len(csv) < 2 { - return nil, fmt.Errorf("invalid CSV for loading basic auth data: %s", string(data)) - } - - return &BasicAuth{ - Name: name, - Format: BasicAuthFormatCSV, - Username: csv[1], - Password: csv[0], - }, nil -} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/timewindow/schedule.go b/vendor/github.com/gardener/gardener/pkg/utils/timewindow/schedule.go new file mode 100644 index 000000000..bdb289503 --- /dev/null +++ b/vendor/github.com/gardener/gardener/pkg/utils/timewindow/schedule.go @@ -0,0 +1,77 @@ +// Copyright (c) 2022 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under the Apache Software License, v. 2 except as noted otherwise in the LICENSE file +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package timewindow + +import ( + "fmt" + "hash/crc32" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" +) + +// MutateScheduleFunc is a function for mutating the schedule based on the maintenance time window and UID. +type MutateScheduleFunc func(string, MaintenanceTimeWindow, types.UID) string + +// DetermineSchedule determines a schedule based on the provided format and the creation timestamp. If both the begin +// and end of a maintenance time window are provided and different from the 'always time window' then the provided +// mutation function is applied. +func DetermineSchedule( + scheduleFormat string, + begin, end string, + uid types.UID, + creationTimestamp metav1.Time, + mutate MutateScheduleFunc, +) ( + string, + error, +) { + if len(begin) != 0 && len(end) != 0 { + maintenanceTimeWindow, err := ParseMaintenanceTimeWindow(begin, end) + if err != nil { + return "", err + } + + if !maintenanceTimeWindow.Equal(AlwaysTimeWindow) { + return mutate(scheduleFormat, *maintenanceTimeWindow, uid), nil + } + } + + return fmt.Sprintf(scheduleFormat, creationTimestamp.Minute(), creationTimestamp.Hour()), nil +} + +// RandomizeWithinTimeWindow computes a random time (based on the provided UID) within the provided time window. +func RandomizeWithinTimeWindow(scheduleFormat string, window MaintenanceTimeWindow, uid types.UID) string { + var ( + windowBegin = window.Begin() + windowInMinutes = uint32(window.Duration().Minutes()) + randomMinutes = int(crc32.ChecksumIEEE([]byte(uid)) % windowInMinutes) + randomTime = windowBegin.Add(0, randomMinutes, 0) + ) + + return fmt.Sprintf(scheduleFormat, randomTime.Minute(), randomTime.Hour()) +} + +// RandomizeWithinFirstHourOfTimeWindow computes a random time (based on the provided UID) within the first hour of the +// provided time window. It adds a 15 minutes time buffer before the start. +func RandomizeWithinFirstHourOfTimeWindow(scheduleFormat string, window MaintenanceTimeWindow, uid types.UID) string { + var ( + windowBegin = window.Begin().Add(0, -15, 0) + randomMinutes = int(crc32.ChecksumIEEE([]byte(uid)) % 60) + randomTime = windowBegin.Add(-1, randomMinutes, 0) + ) + + return fmt.Sprintf(scheduleFormat, randomTime.Minute(), randomTime.Hour()) +} diff --git a/vendor/github.com/gardener/gardener/pkg/utils/version/version.go b/vendor/github.com/gardener/gardener/pkg/utils/version/version.go index c538eeb93..5be8411f1 100644 --- a/vendor/github.com/gardener/gardener/pkg/utils/version/version.go +++ b/vendor/github.com/gardener/gardener/pkg/utils/version/version.go @@ -23,20 +23,6 @@ import ( ) var ( - // ConstraintK8sGreaterEqual118 is a version constraint for versions >= 1.18. - ConstraintK8sGreaterEqual118 *semver.Constraints - // ConstraintK8sEqual118 is a version constraint for versions == 1.18. - ConstraintK8sEqual118 *semver.Constraints - // ConstraintK8sGreaterEqual119 is a version constraint for versions >= 1.19. - ConstraintK8sGreaterEqual119 *semver.Constraints - // ConstraintK8sLess119 is a version constraint for versions < 1.19. - ConstraintK8sLess119 *semver.Constraints - // ConstraintK8sLess120 is a version constraint for versions < 1.20. - ConstraintK8sLess120 *semver.Constraints - // ConstraintK8sEqual119 is a version constraint for versions == 1.19. - ConstraintK8sEqual119 *semver.Constraints - // ConstraintK8sGreaterEqual120 is a version constraint for versions >= 1.20. - ConstraintK8sGreaterEqual120 *semver.Constraints // ConstraintK8sEqual120 is a version constraint for versions == 1.20. ConstraintK8sEqual120 *semver.Constraints // ConstraintK8sLessEqual121 is a version constraint for versions <= 1.21. @@ -69,21 +55,6 @@ var ( func init() { var err error - - ConstraintK8sGreaterEqual118, err = semver.NewConstraint(">= 1.18") - utilruntime.Must(err) - ConstraintK8sEqual118, err = semver.NewConstraint("1.18.x") - utilruntime.Must(err) - ConstraintK8sGreaterEqual119, err = semver.NewConstraint(">= 1.19") - utilruntime.Must(err) - ConstraintK8sEqual119, err = semver.NewConstraint("1.19.x") - utilruntime.Must(err) - ConstraintK8sLess119, err = semver.NewConstraint("< 1.19") - utilruntime.Must(err) - ConstraintK8sLess120, err = semver.NewConstraint("< 1.20") - utilruntime.Must(err) - ConstraintK8sGreaterEqual120, err = semver.NewConstraint(">= 1.20") - utilruntime.Must(err) ConstraintK8sEqual120, err = semver.NewConstraint("1.20.x") utilruntime.Must(err) ConstraintK8sLessEqual121, err = semver.NewConstraint("<= 1.21.x") @@ -120,14 +91,15 @@ func init() { // if needed. func CompareVersions(version1, operator, version2 string) (bool, error) { var ( - v1 = normalizeVersion(version1) - v2 = normalizeVersion(version2) + v1 = Normalize(version1) + v2 = Normalize(version2) ) return CheckVersionMeetsConstraint(v1, fmt.Sprintf("%s %s", operator, v2)) } -func normalizeVersion(version string) string { +// Normalize normalizes the version by cutting prefixes and suffixes. +func Normalize(version string) string { v := strings.Replace(version, "v", "", -1) idx := strings.IndexAny(v, "-+") if idx != -1 { @@ -143,7 +115,7 @@ func CheckVersionMeetsConstraint(version, constraint string) (bool, error) { return false, err } - v, err := semver.NewVersion(normalizeVersion(version)) + v, err := semver.NewVersion(Normalize(version)) if err != nil { return false, err } diff --git a/vendor/github.com/gobwas/glob/bench.sh b/vendor/github.com/gobwas/glob/bench.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/json-iterator/go/build.sh b/vendor/github.com/json-iterator/go/build.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/json-iterator/go/test.sh b/vendor/github.com/json-iterator/go/test.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/mattn/go-colorable/go.test.sh b/vendor/github.com/mattn/go-colorable/go.test.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/mattn/go-isatty/go.test.sh b/vendor/github.com/mattn/go-isatty/go.test.sh old mode 100755 new mode 100644 diff --git a/vendor/github.com/modern-go/concurrent/test.sh b/vendor/github.com/modern-go/concurrent/test.sh old mode 100755 new mode 100644 diff --git a/vendor/go.uber.org/atomic/.gitignore b/vendor/go.uber.org/atomic/.gitignore index c3fa25389..2e337a0ed 100644 --- a/vendor/go.uber.org/atomic/.gitignore +++ b/vendor/go.uber.org/atomic/.gitignore @@ -10,3 +10,6 @@ lint.log # Profiling output *.prof + +# Output of fossa analyzer +/fossa diff --git a/vendor/go.uber.org/atomic/.travis.yml b/vendor/go.uber.org/atomic/.travis.yml deleted file mode 100644 index 13d0a4f25..000000000 --- a/vendor/go.uber.org/atomic/.travis.yml +++ /dev/null @@ -1,27 +0,0 @@ -sudo: false -language: go -go_import_path: go.uber.org/atomic - -env: - global: - - GO111MODULE=on - -matrix: - include: - - go: oldstable - - go: stable - env: LINT=1 - -cache: - directories: - - vendor - -before_install: - - go version - -script: - - test -z "$LINT" || make lint - - make cover - -after_success: - - bash <(curl -s https://codecov.io/bash) diff --git a/vendor/go.uber.org/atomic/CHANGELOG.md b/vendor/go.uber.org/atomic/CHANGELOG.md index 24c0274dc..38f564e2b 100644 --- a/vendor/go.uber.org/atomic/CHANGELOG.md +++ b/vendor/go.uber.org/atomic/CHANGELOG.md @@ -4,6 +4,20 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [1.9.0] - 2021-07-15 +### Added +- Add `Float64.Swap` to match int atomic operations. +- Add `atomic.Time` type for atomic operations on `time.Time` values. + +[1.9.0]: https://github.com/uber-go/atomic/compare/v1.8.0...v1.9.0 + +## [1.8.0] - 2021-06-09 +### Added +- Add `atomic.Uintptr` type for atomic operations on `uintptr` values. +- Add `atomic.UnsafePointer` type for atomic operations on `unsafe.Pointer` values. + +[1.8.0]: https://github.com/uber-go/atomic/compare/v1.7.0...v1.8.0 + ## [1.7.0] - 2020-09-14 ### Added - Support JSON serialization and deserialization of primitive atomic types. @@ -15,32 +29,46 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed - Remove dependency on `golang.org/x/{lint, tools}`. +[1.7.0]: https://github.com/uber-go/atomic/compare/v1.6.0...v1.7.0 + ## [1.6.0] - 2020-02-24 ### Changed - Drop library dependency on `golang.org/x/{lint, tools}`. +[1.6.0]: https://github.com/uber-go/atomic/compare/v1.5.1...v1.6.0 + ## [1.5.1] - 2019-11-19 - Fix bug where `Bool.CAS` and `Bool.Toggle` do work correctly together causing `CAS` to fail even though the old value matches. +[1.5.1]: https://github.com/uber-go/atomic/compare/v1.5.0...v1.5.1 + ## [1.5.0] - 2019-10-29 ### Changed - With Go modules, only the `go.uber.org/atomic` import path is supported now. If you need to use the old import path, please add a `replace` directive to your `go.mod`. +[1.5.0]: https://github.com/uber-go/atomic/compare/v1.4.0...v1.5.0 + ## [1.4.0] - 2019-05-01 ### Added - Add `atomic.Error` type for atomic operations on `error` values. +[1.4.0]: https://github.com/uber-go/atomic/compare/v1.3.2...v1.4.0 + ## [1.3.2] - 2018-05-02 ### Added - Add `atomic.Duration` type for atomic operations on `time.Duration` values. +[1.3.2]: https://github.com/uber-go/atomic/compare/v1.3.1...v1.3.2 + ## [1.3.1] - 2017-11-14 ### Fixed - Revert optimization for `atomic.String.Store("")` which caused data races. +[1.3.1]: https://github.com/uber-go/atomic/compare/v1.3.0...v1.3.1 + ## [1.3.0] - 2017-11-13 ### Added - Add `atomic.Bool.CAS` for compare-and-swap semantics on bools. @@ -48,10 +76,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Optimize `atomic.String.Store("")` by avoiding an allocation. +[1.3.0]: https://github.com/uber-go/atomic/compare/v1.2.0...v1.3.0 + ## [1.2.0] - 2017-04-12 ### Added - Shadow `atomic.Value` from `sync/atomic`. +[1.2.0]: https://github.com/uber-go/atomic/compare/v1.1.0...v1.2.0 + ## [1.1.0] - 2017-03-10 ### Added - Add atomic `Float64` type. @@ -59,18 +91,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Support new `go.uber.org/atomic` import path. +[1.1.0]: https://github.com/uber-go/atomic/compare/v1.0.0...v1.1.0 + ## [1.0.0] - 2016-07-18 - Initial release. -[1.7.0]: https://github.com/uber-go/atomic/compare/v1.6.0...v1.7.0 -[1.6.0]: https://github.com/uber-go/atomic/compare/v1.5.1...v1.6.0 -[1.5.1]: https://github.com/uber-go/atomic/compare/v1.5.0...v1.5.1 -[1.5.0]: https://github.com/uber-go/atomic/compare/v1.4.0...v1.5.0 -[1.4.0]: https://github.com/uber-go/atomic/compare/v1.3.2...v1.4.0 -[1.3.2]: https://github.com/uber-go/atomic/compare/v1.3.1...v1.3.2 -[1.3.1]: https://github.com/uber-go/atomic/compare/v1.3.0...v1.3.1 -[1.3.0]: https://github.com/uber-go/atomic/compare/v1.2.0...v1.3.0 -[1.2.0]: https://github.com/uber-go/atomic/compare/v1.1.0...v1.2.0 -[1.1.0]: https://github.com/uber-go/atomic/compare/v1.0.0...v1.1.0 [1.0.0]: https://github.com/uber-go/atomic/releases/tag/v1.0.0 diff --git a/vendor/go.uber.org/atomic/Makefile b/vendor/go.uber.org/atomic/Makefile index 1b1376d42..46c945b32 100644 --- a/vendor/go.uber.org/atomic/Makefile +++ b/vendor/go.uber.org/atomic/Makefile @@ -69,6 +69,7 @@ generate: $(GEN_ATOMICINT) $(GEN_ATOMICWRAPPER) generatenodirty: @[ -z "$$(git status --porcelain)" ] || ( \ echo "Working tree is dirty. Commit your changes first."; \ + git status; \ exit 1 ) @make generate @status=$$(git status --porcelain); \ diff --git a/vendor/go.uber.org/atomic/README.md b/vendor/go.uber.org/atomic/README.md index ade0c20f1..96b47a1f1 100644 --- a/vendor/go.uber.org/atomic/README.md +++ b/vendor/go.uber.org/atomic/README.md @@ -55,8 +55,8 @@ Released under the [MIT License](LICENSE.txt). [doc-img]: https://godoc.org/github.com/uber-go/atomic?status.svg [doc]: https://godoc.org/go.uber.org/atomic -[ci-img]: https://travis-ci.com/uber-go/atomic.svg?branch=master -[ci]: https://travis-ci.com/uber-go/atomic +[ci-img]: https://github.com/uber-go/atomic/actions/workflows/go.yml/badge.svg +[ci]: https://github.com/uber-go/atomic/actions/workflows/go.yml [cov-img]: https://codecov.io/gh/uber-go/atomic/branch/master/graph/badge.svg [cov]: https://codecov.io/gh/uber-go/atomic [reportcard-img]: https://goreportcard.com/badge/go.uber.org/atomic diff --git a/vendor/go.uber.org/atomic/bool.go b/vendor/go.uber.org/atomic/bool.go index 9cf1914b1..209df7bbc 100644 --- a/vendor/go.uber.org/atomic/bool.go +++ b/vendor/go.uber.org/atomic/bool.go @@ -1,6 +1,6 @@ // @generated Code generated by gen-atomicwrapper. -// Copyright (c) 2020 Uber Technologies, Inc. +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -36,10 +36,10 @@ type Bool struct { var _zeroBool bool // NewBool creates a new Bool. -func NewBool(v bool) *Bool { +func NewBool(val bool) *Bool { x := &Bool{} - if v != _zeroBool { - x.Store(v) + if val != _zeroBool { + x.Store(val) } return x } @@ -50,19 +50,19 @@ func (x *Bool) Load() bool { } // Store atomically stores the passed bool. -func (x *Bool) Store(v bool) { - x.v.Store(boolToInt(v)) +func (x *Bool) Store(val bool) { + x.v.Store(boolToInt(val)) } // CAS is an atomic compare-and-swap for bool values. -func (x *Bool) CAS(o, n bool) bool { - return x.v.CAS(boolToInt(o), boolToInt(n)) +func (x *Bool) CAS(old, new bool) (swapped bool) { + return x.v.CAS(boolToInt(old), boolToInt(new)) } // Swap atomically stores the given bool and returns the old // value. -func (x *Bool) Swap(o bool) bool { - return truthy(x.v.Swap(boolToInt(o))) +func (x *Bool) Swap(val bool) (old bool) { + return truthy(x.v.Swap(boolToInt(val))) } // MarshalJSON encodes the wrapped bool into JSON. diff --git a/vendor/go.uber.org/atomic/bool_ext.go b/vendor/go.uber.org/atomic/bool_ext.go index c7bf7a827..a2e60e987 100644 --- a/vendor/go.uber.org/atomic/bool_ext.go +++ b/vendor/go.uber.org/atomic/bool_ext.go @@ -38,7 +38,7 @@ func boolToInt(b bool) uint32 { } // Toggle atomically negates the Boolean and returns the previous value. -func (b *Bool) Toggle() bool { +func (b *Bool) Toggle() (old bool) { for { old := b.Load() if b.CAS(old, !old) { diff --git a/vendor/go.uber.org/atomic/duration.go b/vendor/go.uber.org/atomic/duration.go index 027cfcb20..207594f5e 100644 --- a/vendor/go.uber.org/atomic/duration.go +++ b/vendor/go.uber.org/atomic/duration.go @@ -1,6 +1,6 @@ // @generated Code generated by gen-atomicwrapper. -// Copyright (c) 2020 Uber Technologies, Inc. +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -37,10 +37,10 @@ type Duration struct { var _zeroDuration time.Duration // NewDuration creates a new Duration. -func NewDuration(v time.Duration) *Duration { +func NewDuration(val time.Duration) *Duration { x := &Duration{} - if v != _zeroDuration { - x.Store(v) + if val != _zeroDuration { + x.Store(val) } return x } @@ -51,19 +51,19 @@ func (x *Duration) Load() time.Duration { } // Store atomically stores the passed time.Duration. -func (x *Duration) Store(v time.Duration) { - x.v.Store(int64(v)) +func (x *Duration) Store(val time.Duration) { + x.v.Store(int64(val)) } // CAS is an atomic compare-and-swap for time.Duration values. -func (x *Duration) CAS(o, n time.Duration) bool { - return x.v.CAS(int64(o), int64(n)) +func (x *Duration) CAS(old, new time.Duration) (swapped bool) { + return x.v.CAS(int64(old), int64(new)) } // Swap atomically stores the given time.Duration and returns the old // value. -func (x *Duration) Swap(o time.Duration) time.Duration { - return time.Duration(x.v.Swap(int64(o))) +func (x *Duration) Swap(val time.Duration) (old time.Duration) { + return time.Duration(x.v.Swap(int64(val))) } // MarshalJSON encodes the wrapped time.Duration into JSON. diff --git a/vendor/go.uber.org/atomic/duration_ext.go b/vendor/go.uber.org/atomic/duration_ext.go index 6273b66bd..4c18b0a9e 100644 --- a/vendor/go.uber.org/atomic/duration_ext.go +++ b/vendor/go.uber.org/atomic/duration_ext.go @@ -25,13 +25,13 @@ import "time" //go:generate bin/gen-atomicwrapper -name=Duration -type=time.Duration -wrapped=Int64 -pack=int64 -unpack=time.Duration -cas -swap -json -imports time -file=duration.go // Add atomically adds to the wrapped time.Duration and returns the new value. -func (d *Duration) Add(n time.Duration) time.Duration { - return time.Duration(d.v.Add(int64(n))) +func (d *Duration) Add(delta time.Duration) time.Duration { + return time.Duration(d.v.Add(int64(delta))) } // Sub atomically subtracts from the wrapped time.Duration and returns the new value. -func (d *Duration) Sub(n time.Duration) time.Duration { - return time.Duration(d.v.Sub(int64(n))) +func (d *Duration) Sub(delta time.Duration) time.Duration { + return time.Duration(d.v.Sub(int64(delta))) } // String encodes the wrapped value as a string. diff --git a/vendor/go.uber.org/atomic/error.go b/vendor/go.uber.org/atomic/error.go index a6166fbea..3be19c35e 100644 --- a/vendor/go.uber.org/atomic/error.go +++ b/vendor/go.uber.org/atomic/error.go @@ -1,6 +1,6 @@ // @generated Code generated by gen-atomicwrapper. -// Copyright (c) 2020 Uber Technologies, Inc. +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -32,10 +32,10 @@ type Error struct { var _zeroError error // NewError creates a new Error. -func NewError(v error) *Error { +func NewError(val error) *Error { x := &Error{} - if v != _zeroError { - x.Store(v) + if val != _zeroError { + x.Store(val) } return x } @@ -46,6 +46,6 @@ func (x *Error) Load() error { } // Store atomically stores the passed error. -func (x *Error) Store(v error) { - x.v.Store(packError(v)) +func (x *Error) Store(val error) { + x.v.Store(packError(val)) } diff --git a/vendor/go.uber.org/atomic/float64.go b/vendor/go.uber.org/atomic/float64.go index 071906020..8a1367184 100644 --- a/vendor/go.uber.org/atomic/float64.go +++ b/vendor/go.uber.org/atomic/float64.go @@ -1,6 +1,6 @@ // @generated Code generated by gen-atomicwrapper. -// Copyright (c) 2020 Uber Technologies, Inc. +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -37,10 +37,10 @@ type Float64 struct { var _zeroFloat64 float64 // NewFloat64 creates a new Float64. -func NewFloat64(v float64) *Float64 { +func NewFloat64(val float64) *Float64 { x := &Float64{} - if v != _zeroFloat64 { - x.Store(v) + if val != _zeroFloat64 { + x.Store(val) } return x } @@ -51,13 +51,14 @@ func (x *Float64) Load() float64 { } // Store atomically stores the passed float64. -func (x *Float64) Store(v float64) { - x.v.Store(math.Float64bits(v)) +func (x *Float64) Store(val float64) { + x.v.Store(math.Float64bits(val)) } -// CAS is an atomic compare-and-swap for float64 values. -func (x *Float64) CAS(o, n float64) bool { - return x.v.CAS(math.Float64bits(o), math.Float64bits(n)) +// Swap atomically stores the given float64 and returns the old +// value. +func (x *Float64) Swap(val float64) (old float64) { + return math.Float64frombits(x.v.Swap(math.Float64bits(val))) } // MarshalJSON encodes the wrapped float64 into JSON. diff --git a/vendor/go.uber.org/atomic/float64_ext.go b/vendor/go.uber.org/atomic/float64_ext.go index 927b1add7..df36b0107 100644 --- a/vendor/go.uber.org/atomic/float64_ext.go +++ b/vendor/go.uber.org/atomic/float64_ext.go @@ -20,15 +20,18 @@ package atomic -import "strconv" +import ( + "math" + "strconv" +) -//go:generate bin/gen-atomicwrapper -name=Float64 -type=float64 -wrapped=Uint64 -pack=math.Float64bits -unpack=math.Float64frombits -cas -json -imports math -file=float64.go +//go:generate bin/gen-atomicwrapper -name=Float64 -type=float64 -wrapped=Uint64 -pack=math.Float64bits -unpack=math.Float64frombits -swap -json -imports math -file=float64.go // Add atomically adds to the wrapped float64 and returns the new value. -func (f *Float64) Add(s float64) float64 { +func (f *Float64) Add(delta float64) float64 { for { old := f.Load() - new := old + s + new := old + delta if f.CAS(old, new) { return new } @@ -36,8 +39,27 @@ func (f *Float64) Add(s float64) float64 { } // Sub atomically subtracts from the wrapped float64 and returns the new value. -func (f *Float64) Sub(s float64) float64 { - return f.Add(-s) +func (f *Float64) Sub(delta float64) float64 { + return f.Add(-delta) +} + +// CAS is an atomic compare-and-swap for float64 values. +// +// Note: CAS handles NaN incorrectly. NaN != NaN using Go's inbuilt operators +// but CAS allows a stored NaN to compare equal to a passed in NaN. +// This avoids typical CAS loops from blocking forever, e.g., +// +// for { +// old := atom.Load() +// new = f(old) +// if atom.CAS(old, new) { +// break +// } +// } +// +// If CAS did not match NaN to match, then the above would loop forever. +func (f *Float64) CAS(old, new float64) (swapped bool) { + return f.v.CAS(math.Float64bits(old), math.Float64bits(new)) } // String encodes the wrapped value as a string. diff --git a/vendor/go.uber.org/atomic/gen.go b/vendor/go.uber.org/atomic/gen.go index 50d6b2485..1e9ef4f87 100644 --- a/vendor/go.uber.org/atomic/gen.go +++ b/vendor/go.uber.org/atomic/gen.go @@ -24,3 +24,4 @@ package atomic //go:generate bin/gen-atomicint -name=Int64 -wrapped=int64 -file=int64.go //go:generate bin/gen-atomicint -name=Uint32 -wrapped=uint32 -unsigned -file=uint32.go //go:generate bin/gen-atomicint -name=Uint64 -wrapped=uint64 -unsigned -file=uint64.go +//go:generate bin/gen-atomicint -name=Uintptr -wrapped=uintptr -unsigned -file=uintptr.go diff --git a/vendor/go.uber.org/atomic/int32.go b/vendor/go.uber.org/atomic/int32.go index 18ae56493..640ea36a1 100644 --- a/vendor/go.uber.org/atomic/int32.go +++ b/vendor/go.uber.org/atomic/int32.go @@ -1,6 +1,6 @@ // @generated Code generated by gen-atomicint. -// Copyright (c) 2020 Uber Technologies, Inc. +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -36,8 +36,8 @@ type Int32 struct { } // NewInt32 creates a new Int32. -func NewInt32(i int32) *Int32 { - return &Int32{v: i} +func NewInt32(val int32) *Int32 { + return &Int32{v: val} } // Load atomically loads the wrapped value. @@ -46,13 +46,13 @@ func (i *Int32) Load() int32 { } // Add atomically adds to the wrapped int32 and returns the new value. -func (i *Int32) Add(n int32) int32 { - return atomic.AddInt32(&i.v, n) +func (i *Int32) Add(delta int32) int32 { + return atomic.AddInt32(&i.v, delta) } // Sub atomically subtracts from the wrapped int32 and returns the new value. -func (i *Int32) Sub(n int32) int32 { - return atomic.AddInt32(&i.v, -n) +func (i *Int32) Sub(delta int32) int32 { + return atomic.AddInt32(&i.v, -delta) } // Inc atomically increments the wrapped int32 and returns the new value. @@ -66,18 +66,18 @@ func (i *Int32) Dec() int32 { } // CAS is an atomic compare-and-swap. -func (i *Int32) CAS(old, new int32) bool { +func (i *Int32) CAS(old, new int32) (swapped bool) { return atomic.CompareAndSwapInt32(&i.v, old, new) } // Store atomically stores the passed value. -func (i *Int32) Store(n int32) { - atomic.StoreInt32(&i.v, n) +func (i *Int32) Store(val int32) { + atomic.StoreInt32(&i.v, val) } // Swap atomically swaps the wrapped int32 and returns the old value. -func (i *Int32) Swap(n int32) int32 { - return atomic.SwapInt32(&i.v, n) +func (i *Int32) Swap(val int32) (old int32) { + return atomic.SwapInt32(&i.v, val) } // MarshalJSON encodes the wrapped int32 into JSON. diff --git a/vendor/go.uber.org/atomic/int64.go b/vendor/go.uber.org/atomic/int64.go index 2bcbbfaa9..9ab66b980 100644 --- a/vendor/go.uber.org/atomic/int64.go +++ b/vendor/go.uber.org/atomic/int64.go @@ -1,6 +1,6 @@ // @generated Code generated by gen-atomicint. -// Copyright (c) 2020 Uber Technologies, Inc. +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -36,8 +36,8 @@ type Int64 struct { } // NewInt64 creates a new Int64. -func NewInt64(i int64) *Int64 { - return &Int64{v: i} +func NewInt64(val int64) *Int64 { + return &Int64{v: val} } // Load atomically loads the wrapped value. @@ -46,13 +46,13 @@ func (i *Int64) Load() int64 { } // Add atomically adds to the wrapped int64 and returns the new value. -func (i *Int64) Add(n int64) int64 { - return atomic.AddInt64(&i.v, n) +func (i *Int64) Add(delta int64) int64 { + return atomic.AddInt64(&i.v, delta) } // Sub atomically subtracts from the wrapped int64 and returns the new value. -func (i *Int64) Sub(n int64) int64 { - return atomic.AddInt64(&i.v, -n) +func (i *Int64) Sub(delta int64) int64 { + return atomic.AddInt64(&i.v, -delta) } // Inc atomically increments the wrapped int64 and returns the new value. @@ -66,18 +66,18 @@ func (i *Int64) Dec() int64 { } // CAS is an atomic compare-and-swap. -func (i *Int64) CAS(old, new int64) bool { +func (i *Int64) CAS(old, new int64) (swapped bool) { return atomic.CompareAndSwapInt64(&i.v, old, new) } // Store atomically stores the passed value. -func (i *Int64) Store(n int64) { - atomic.StoreInt64(&i.v, n) +func (i *Int64) Store(val int64) { + atomic.StoreInt64(&i.v, val) } // Swap atomically swaps the wrapped int64 and returns the old value. -func (i *Int64) Swap(n int64) int64 { - return atomic.SwapInt64(&i.v, n) +func (i *Int64) Swap(val int64) (old int64) { + return atomic.SwapInt64(&i.v, val) } // MarshalJSON encodes the wrapped int64 into JSON. diff --git a/vendor/go.uber.org/atomic/string.go b/vendor/go.uber.org/atomic/string.go index 225b7a2be..80df93d09 100644 --- a/vendor/go.uber.org/atomic/string.go +++ b/vendor/go.uber.org/atomic/string.go @@ -1,6 +1,6 @@ // @generated Code generated by gen-atomicwrapper. -// Copyright (c) 2020 Uber Technologies, Inc. +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -32,10 +32,10 @@ type String struct { var _zeroString string // NewString creates a new String. -func NewString(v string) *String { +func NewString(val string) *String { x := &String{} - if v != _zeroString { - x.Store(v) + if val != _zeroString { + x.Store(val) } return x } @@ -49,6 +49,6 @@ func (x *String) Load() string { } // Store atomically stores the passed string. -func (x *String) Store(v string) { - x.v.Store(v) +func (x *String) Store(val string) { + x.v.Store(val) } diff --git a/vendor/go.uber.org/atomic/string_ext.go b/vendor/go.uber.org/atomic/string_ext.go index 3a9558213..83d92edaf 100644 --- a/vendor/go.uber.org/atomic/string_ext.go +++ b/vendor/go.uber.org/atomic/string_ext.go @@ -21,6 +21,8 @@ package atomic //go:generate bin/gen-atomicwrapper -name=String -type=string -wrapped=Value -file=string.go +// Note: No Swap as String wraps Value, which wraps the stdlib sync/atomic.Value which +// only supports Swap as of go1.17: https://github.com/golang/go/issues/39351 // String returns the wrapped value. func (s *String) String() string { diff --git a/vendor/go.uber.org/multierr/go113.go b/vendor/go.uber.org/atomic/time.go similarity index 58% rename from vendor/go.uber.org/multierr/go113.go rename to vendor/go.uber.org/atomic/time.go index 264b0eac0..33460fc37 100644 --- a/vendor/go.uber.org/multierr/go113.go +++ b/vendor/go.uber.org/atomic/time.go @@ -1,4 +1,6 @@ -// Copyright (c) 2019 Uber Technologies, Inc. +// @generated Code generated by gen-atomicwrapper. + +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -18,35 +20,36 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. -// +build go1.13 +package atomic -package multierr +import ( + "time" +) -import "errors" +// Time is an atomic type-safe wrapper for time.Time values. +type Time struct { + _ nocmp // disallow non-atomic comparison -// As attempts to find the first error in the error list that matches the type -// of the value that target points to. -// -// This function allows errors.As to traverse the values stored on the -// multierr error. -func (merr *multiError) As(target interface{}) bool { - for _, err := range merr.Errors() { - if errors.As(err, target) { - return true - } - } - return false + v Value } -// Is attempts to match the provided error against errors in the error list. -// -// This function allows errors.Is to traverse the values stored on the -// multierr error. -func (merr *multiError) Is(target error) bool { - for _, err := range merr.Errors() { - if errors.Is(err, target) { - return true - } +var _zeroTime time.Time + +// NewTime creates a new Time. +func NewTime(val time.Time) *Time { + x := &Time{} + if val != _zeroTime { + x.Store(val) } - return false + return x +} + +// Load atomically loads the wrapped time.Time. +func (x *Time) Load() time.Time { + return unpackTime(x.v.Load()) +} + +// Store atomically stores the passed time.Time. +func (x *Time) Store(val time.Time) { + x.v.Store(packTime(val)) } diff --git a/vendor/go.uber.org/atomic/time_ext.go b/vendor/go.uber.org/atomic/time_ext.go new file mode 100644 index 000000000..1e3dc978a --- /dev/null +++ b/vendor/go.uber.org/atomic/time_ext.go @@ -0,0 +1,36 @@ +// Copyright (c) 2021 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package atomic + +import "time" + +//go:generate bin/gen-atomicwrapper -name=Time -type=time.Time -wrapped=Value -pack=packTime -unpack=unpackTime -imports time -file=time.go + +func packTime(t time.Time) interface{} { + return t +} + +func unpackTime(v interface{}) time.Time { + if t, ok := v.(time.Time); ok { + return t + } + return time.Time{} +} diff --git a/vendor/go.uber.org/atomic/uint32.go b/vendor/go.uber.org/atomic/uint32.go index a973aba1a..7859a9cc3 100644 --- a/vendor/go.uber.org/atomic/uint32.go +++ b/vendor/go.uber.org/atomic/uint32.go @@ -1,6 +1,6 @@ // @generated Code generated by gen-atomicint. -// Copyright (c) 2020 Uber Technologies, Inc. +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -36,8 +36,8 @@ type Uint32 struct { } // NewUint32 creates a new Uint32. -func NewUint32(i uint32) *Uint32 { - return &Uint32{v: i} +func NewUint32(val uint32) *Uint32 { + return &Uint32{v: val} } // Load atomically loads the wrapped value. @@ -46,13 +46,13 @@ func (i *Uint32) Load() uint32 { } // Add atomically adds to the wrapped uint32 and returns the new value. -func (i *Uint32) Add(n uint32) uint32 { - return atomic.AddUint32(&i.v, n) +func (i *Uint32) Add(delta uint32) uint32 { + return atomic.AddUint32(&i.v, delta) } // Sub atomically subtracts from the wrapped uint32 and returns the new value. -func (i *Uint32) Sub(n uint32) uint32 { - return atomic.AddUint32(&i.v, ^(n - 1)) +func (i *Uint32) Sub(delta uint32) uint32 { + return atomic.AddUint32(&i.v, ^(delta - 1)) } // Inc atomically increments the wrapped uint32 and returns the new value. @@ -66,18 +66,18 @@ func (i *Uint32) Dec() uint32 { } // CAS is an atomic compare-and-swap. -func (i *Uint32) CAS(old, new uint32) bool { +func (i *Uint32) CAS(old, new uint32) (swapped bool) { return atomic.CompareAndSwapUint32(&i.v, old, new) } // Store atomically stores the passed value. -func (i *Uint32) Store(n uint32) { - atomic.StoreUint32(&i.v, n) +func (i *Uint32) Store(val uint32) { + atomic.StoreUint32(&i.v, val) } // Swap atomically swaps the wrapped uint32 and returns the old value. -func (i *Uint32) Swap(n uint32) uint32 { - return atomic.SwapUint32(&i.v, n) +func (i *Uint32) Swap(val uint32) (old uint32) { + return atomic.SwapUint32(&i.v, val) } // MarshalJSON encodes the wrapped uint32 into JSON. diff --git a/vendor/go.uber.org/atomic/uint64.go b/vendor/go.uber.org/atomic/uint64.go index 3b6c71fd5..2f2a7db63 100644 --- a/vendor/go.uber.org/atomic/uint64.go +++ b/vendor/go.uber.org/atomic/uint64.go @@ -1,6 +1,6 @@ // @generated Code generated by gen-atomicint. -// Copyright (c) 2020 Uber Technologies, Inc. +// Copyright (c) 2020-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -36,8 +36,8 @@ type Uint64 struct { } // NewUint64 creates a new Uint64. -func NewUint64(i uint64) *Uint64 { - return &Uint64{v: i} +func NewUint64(val uint64) *Uint64 { + return &Uint64{v: val} } // Load atomically loads the wrapped value. @@ -46,13 +46,13 @@ func (i *Uint64) Load() uint64 { } // Add atomically adds to the wrapped uint64 and returns the new value. -func (i *Uint64) Add(n uint64) uint64 { - return atomic.AddUint64(&i.v, n) +func (i *Uint64) Add(delta uint64) uint64 { + return atomic.AddUint64(&i.v, delta) } // Sub atomically subtracts from the wrapped uint64 and returns the new value. -func (i *Uint64) Sub(n uint64) uint64 { - return atomic.AddUint64(&i.v, ^(n - 1)) +func (i *Uint64) Sub(delta uint64) uint64 { + return atomic.AddUint64(&i.v, ^(delta - 1)) } // Inc atomically increments the wrapped uint64 and returns the new value. @@ -66,18 +66,18 @@ func (i *Uint64) Dec() uint64 { } // CAS is an atomic compare-and-swap. -func (i *Uint64) CAS(old, new uint64) bool { +func (i *Uint64) CAS(old, new uint64) (swapped bool) { return atomic.CompareAndSwapUint64(&i.v, old, new) } // Store atomically stores the passed value. -func (i *Uint64) Store(n uint64) { - atomic.StoreUint64(&i.v, n) +func (i *Uint64) Store(val uint64) { + atomic.StoreUint64(&i.v, val) } // Swap atomically swaps the wrapped uint64 and returns the old value. -func (i *Uint64) Swap(n uint64) uint64 { - return atomic.SwapUint64(&i.v, n) +func (i *Uint64) Swap(val uint64) (old uint64) { + return atomic.SwapUint64(&i.v, val) } // MarshalJSON encodes the wrapped uint64 into JSON. diff --git a/vendor/go.uber.org/atomic/uintptr.go b/vendor/go.uber.org/atomic/uintptr.go new file mode 100644 index 000000000..ecf7a7727 --- /dev/null +++ b/vendor/go.uber.org/atomic/uintptr.go @@ -0,0 +1,102 @@ +// @generated Code generated by gen-atomicint. + +// Copyright (c) 2020-2021 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package atomic + +import ( + "encoding/json" + "strconv" + "sync/atomic" +) + +// Uintptr is an atomic wrapper around uintptr. +type Uintptr struct { + _ nocmp // disallow non-atomic comparison + + v uintptr +} + +// NewUintptr creates a new Uintptr. +func NewUintptr(val uintptr) *Uintptr { + return &Uintptr{v: val} +} + +// Load atomically loads the wrapped value. +func (i *Uintptr) Load() uintptr { + return atomic.LoadUintptr(&i.v) +} + +// Add atomically adds to the wrapped uintptr and returns the new value. +func (i *Uintptr) Add(delta uintptr) uintptr { + return atomic.AddUintptr(&i.v, delta) +} + +// Sub atomically subtracts from the wrapped uintptr and returns the new value. +func (i *Uintptr) Sub(delta uintptr) uintptr { + return atomic.AddUintptr(&i.v, ^(delta - 1)) +} + +// Inc atomically increments the wrapped uintptr and returns the new value. +func (i *Uintptr) Inc() uintptr { + return i.Add(1) +} + +// Dec atomically decrements the wrapped uintptr and returns the new value. +func (i *Uintptr) Dec() uintptr { + return i.Sub(1) +} + +// CAS is an atomic compare-and-swap. +func (i *Uintptr) CAS(old, new uintptr) (swapped bool) { + return atomic.CompareAndSwapUintptr(&i.v, old, new) +} + +// Store atomically stores the passed value. +func (i *Uintptr) Store(val uintptr) { + atomic.StoreUintptr(&i.v, val) +} + +// Swap atomically swaps the wrapped uintptr and returns the old value. +func (i *Uintptr) Swap(val uintptr) (old uintptr) { + return atomic.SwapUintptr(&i.v, val) +} + +// MarshalJSON encodes the wrapped uintptr into JSON. +func (i *Uintptr) MarshalJSON() ([]byte, error) { + return json.Marshal(i.Load()) +} + +// UnmarshalJSON decodes JSON into the wrapped uintptr. +func (i *Uintptr) UnmarshalJSON(b []byte) error { + var v uintptr + if err := json.Unmarshal(b, &v); err != nil { + return err + } + i.Store(v) + return nil +} + +// String encodes the wrapped value as a string. +func (i *Uintptr) String() string { + v := i.Load() + return strconv.FormatUint(uint64(v), 10) +} diff --git a/vendor/go.uber.org/atomic/unsafe_pointer.go b/vendor/go.uber.org/atomic/unsafe_pointer.go new file mode 100644 index 000000000..169f793dc --- /dev/null +++ b/vendor/go.uber.org/atomic/unsafe_pointer.go @@ -0,0 +1,58 @@ +// Copyright (c) 2021 Uber Technologies, Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +package atomic + +import ( + "sync/atomic" + "unsafe" +) + +// UnsafePointer is an atomic wrapper around unsafe.Pointer. +type UnsafePointer struct { + _ nocmp // disallow non-atomic comparison + + v unsafe.Pointer +} + +// NewUnsafePointer creates a new UnsafePointer. +func NewUnsafePointer(val unsafe.Pointer) *UnsafePointer { + return &UnsafePointer{v: val} +} + +// Load atomically loads the wrapped value. +func (p *UnsafePointer) Load() unsafe.Pointer { + return atomic.LoadPointer(&p.v) +} + +// Store atomically stores the passed value. +func (p *UnsafePointer) Store(val unsafe.Pointer) { + atomic.StorePointer(&p.v, val) +} + +// Swap atomically swaps the wrapped unsafe.Pointer and returns the old value. +func (p *UnsafePointer) Swap(val unsafe.Pointer) (old unsafe.Pointer) { + return atomic.SwapPointer(&p.v, val) +} + +// CAS is an atomic compare-and-swap. +func (p *UnsafePointer) CAS(old, new unsafe.Pointer) (swapped bool) { + return atomic.CompareAndSwapPointer(&p.v, old, new) +} diff --git a/vendor/go.uber.org/multierr/.travis.yml b/vendor/go.uber.org/multierr/.travis.yml deleted file mode 100644 index 8636ab42a..000000000 --- a/vendor/go.uber.org/multierr/.travis.yml +++ /dev/null @@ -1,23 +0,0 @@ -sudo: false -language: go -go_import_path: go.uber.org/multierr - -env: - global: - - GO111MODULE=on - -go: - - oldstable - - stable - -before_install: -- go version - -script: -- | - set -e - make lint - make cover - -after_success: -- bash <(curl -s https://codecov.io/bash) diff --git a/vendor/go.uber.org/multierr/CHANGELOG.md b/vendor/go.uber.org/multierr/CHANGELOG.md index 6f1db9ef4..b0814e7c9 100644 --- a/vendor/go.uber.org/multierr/CHANGELOG.md +++ b/vendor/go.uber.org/multierr/CHANGELOG.md @@ -1,6 +1,12 @@ Releases ======== +v1.7.0 (2021-05-06) +=================== + +- Add `AppendInvoke` to append into errors from `defer` blocks. + + v1.6.0 (2020-09-14) =================== diff --git a/vendor/go.uber.org/multierr/LICENSE.txt b/vendor/go.uber.org/multierr/LICENSE.txt index 858e02475..413e30f7c 100644 --- a/vendor/go.uber.org/multierr/LICENSE.txt +++ b/vendor/go.uber.org/multierr/LICENSE.txt @@ -1,4 +1,4 @@ -Copyright (c) 2017 Uber Technologies, Inc. +Copyright (c) 2017-2021 Uber Technologies, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/go.uber.org/multierr/Makefile b/vendor/go.uber.org/multierr/Makefile index 316004400..dcb6fe723 100644 --- a/vendor/go.uber.org/multierr/Makefile +++ b/vendor/go.uber.org/multierr/Makefile @@ -34,9 +34,5 @@ lint: gofmt golint staticcheck .PHONY: cover cover: - go test -coverprofile=cover.out -coverpkg=./... -v ./... + go test -race -coverprofile=cover.out -coverpkg=./... -v ./... go tool cover -html=cover.out -o cover.html - -update-license: - @cd tools && go install go.uber.org/tools/update-license - @$(GOBIN)/update-license $(GO_FILES) diff --git a/vendor/go.uber.org/multierr/README.md b/vendor/go.uber.org/multierr/README.md index 751bd65e5..70aacecd7 100644 --- a/vendor/go.uber.org/multierr/README.md +++ b/vendor/go.uber.org/multierr/README.md @@ -15,9 +15,9 @@ Stable: No breaking changes will be made before 2.0. Released under the [MIT License]. [MIT License]: LICENSE.txt -[doc-img]: https://godoc.org/go.uber.org/multierr?status.svg -[doc]: https://godoc.org/go.uber.org/multierr -[ci-img]: https://travis-ci.com/uber-go/multierr.svg?branch=master +[doc-img]: https://pkg.go.dev/badge/go.uber.org/multierr +[doc]: https://pkg.go.dev/go.uber.org/multierr +[ci-img]: https://github.com/uber-go/multierr/actions/workflows/go.yml/badge.svg [cov-img]: https://codecov.io/gh/uber-go/multierr/branch/master/graph/badge.svg -[ci]: https://travis-ci.com/uber-go/multierr +[ci]: https://github.com/uber-go/multierr/actions/workflows/go.yml [cov]: https://codecov.io/gh/uber-go/multierr diff --git a/vendor/go.uber.org/multierr/error.go b/vendor/go.uber.org/multierr/error.go index 5c9b67d53..faa0a0594 100644 --- a/vendor/go.uber.org/multierr/error.go +++ b/vendor/go.uber.org/multierr/error.go @@ -1,4 +1,4 @@ -// Copyright (c) 2019 Uber Technologies, Inc. +// Copyright (c) 2017-2021 Uber Technologies, Inc. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal @@ -35,8 +35,53 @@ // // err = multierr.Append(reader.Close(), writer.Close()) // -// This makes it possible to record resource cleanup failures from deferred -// blocks with the help of named return values. +// The underlying list of errors for a returned error object may be retrieved +// with the Errors function. +// +// errors := multierr.Errors(err) +// if len(errors) > 0 { +// fmt.Println("The following errors occurred:", errors) +// } +// +// Appending from a loop +// +// You sometimes need to append into an error from a loop. +// +// var err error +// for _, item := range items { +// err = multierr.Append(err, process(item)) +// } +// +// Cases like this may require knowledge of whether an individual instance +// failed. This usually requires introduction of a new variable. +// +// var err error +// for _, item := range items { +// if perr := process(item); perr != nil { +// log.Warn("skipping item", item) +// err = multierr.Append(err, perr) +// } +// } +// +// multierr includes AppendInto to simplify cases like this. +// +// var err error +// for _, item := range items { +// if multierr.AppendInto(&err, process(item)) { +// log.Warn("skipping item", item) +// } +// } +// +// This will append the error into the err variable, and return true if that +// individual error was non-nil. +// +// See AppendInto for more information. +// +// Deferred Functions +// +// Go makes it possible to modify the return value of a function in a defer +// block if the function was using named returns. This makes it possible to +// record resource cleanup failures from deferred blocks. // // func sendRequest(req Request) (err error) { // conn, err := openConnection() @@ -49,14 +94,21 @@ // // ... // } // -// The underlying list of errors for a returned error object may be retrieved -// with the Errors function. +// multierr provides the Invoker type and AppendInvoke function to make cases +// like the above simpler and obviate the need for a closure. The following is +// roughly equivalent to the example above. // -// errors := multierr.Errors(err) -// if len(errors) > 0 { -// fmt.Println("The following errors occurred:", errors) +// func sendRequest(req Request) (err error) { +// conn, err := openConnection() +// if err != nil { +// return err +// } +// defer multierr.AppendInvoke(err, multierr.Close(conn)) +// // ... // } // +// See AppendInvoke and Invoker for more information. +// // Advanced Usage // // Errors returned by Combine and Append MAY implement the following @@ -87,6 +139,7 @@ package multierr // import "go.uber.org/multierr" import ( "bytes" + "errors" "fmt" "io" "strings" @@ -186,6 +239,33 @@ func (merr *multiError) Errors() []error { return merr.errors } +// As attempts to find the first error in the error list that matches the type +// of the value that target points to. +// +// This function allows errors.As to traverse the values stored on the +// multierr error. +func (merr *multiError) As(target interface{}) bool { + for _, err := range merr.Errors() { + if errors.As(err, target) { + return true + } + } + return false +} + +// Is attempts to match the provided error against errors in the error list. +// +// This function allows errors.Is to traverse the values stored on the +// multierr error. +func (merr *multiError) Is(target error) bool { + for _, err := range merr.Errors() { + if errors.Is(err, target) { + return true + } + } + return false +} + func (merr *multiError) Error() string { if merr == nil { return "" @@ -421,7 +501,7 @@ func Append(left error, right error) error { // items = append(items, item) // } // -// Compare this with a verison that relies solely on Append: +// Compare this with a version that relies solely on Append: // // var err error // for line := range lines { @@ -447,3 +527,113 @@ func AppendInto(into *error, err error) (errored bool) { *into = Append(*into, err) return true } + +// Invoker is an operation that may fail with an error. Use it with +// AppendInvoke to append the result of calling the function into an error. +// This allows you to conveniently defer capture of failing operations. +// +// See also, Close and Invoke. +type Invoker interface { + Invoke() error +} + +// Invoke wraps a function which may fail with an error to match the Invoker +// interface. Use it to supply functions matching this signature to +// AppendInvoke. +// +// For example, +// +// func processReader(r io.Reader) (err error) { +// scanner := bufio.NewScanner(r) +// defer multierr.AppendInvoke(&err, multierr.Invoke(scanner.Err)) +// for scanner.Scan() { +// // ... +// } +// // ... +// } +// +// In this example, the following line will construct the Invoker right away, +// but defer the invocation of scanner.Err() until the function returns. +// +// defer multierr.AppendInvoke(&err, multierr.Invoke(scanner.Err)) +type Invoke func() error + +// Invoke calls the supplied function and returns its result. +func (i Invoke) Invoke() error { return i() } + +// Close builds an Invoker that closes the provided io.Closer. Use it with +// AppendInvoke to close io.Closers and append their results into an error. +// +// For example, +// +// func processFile(path string) (err error) { +// f, err := os.Open(path) +// if err != nil { +// return err +// } +// defer multierr.AppendInvoke(&err, multierr.Close(f)) +// return processReader(f) +// } +// +// In this example, multierr.Close will construct the Invoker right away, but +// defer the invocation of f.Close until the function returns. +// +// defer multierr.AppendInvoke(&err, multierr.Close(f)) +func Close(closer io.Closer) Invoker { + return Invoke(closer.Close) +} + +// AppendInvoke appends the result of calling the given Invoker into the +// provided error pointer. Use it with named returns to safely defer +// invocation of fallible operations until a function returns, and capture the +// resulting errors. +// +// func doSomething(...) (err error) { +// // ... +// f, err := openFile(..) +// if err != nil { +// return err +// } +// +// // multierr will call f.Close() when this function returns and +// // if the operation fails, its append its error into the +// // returned error. +// defer multierr.AppendInvoke(&err, multierr.Close(f)) +// +// scanner := bufio.NewScanner(f) +// // Similarly, this scheduled scanner.Err to be called and +// // inspected when the function returns and append its error +// // into the returned error. +// defer multierr.AppendInvoke(&err, multierr.Invoke(scanner.Err)) +// +// // ... +// } +// +// Without defer, AppendInvoke behaves exactly like AppendInto. +// +// err := // ... +// multierr.AppendInvoke(&err, mutltierr.Invoke(foo)) +// +// // ...is roughly equivalent to... +// +// err := // ... +// multierr.AppendInto(&err, foo()) +// +// The advantage of the indirection introduced by Invoker is to make it easy +// to defer the invocation of a function. Without this indirection, the +// invoked function will be evaluated at the time of the defer block rather +// than when the function returns. +// +// // BAD: This is likely not what the caller intended. This will evaluate +// // foo() right away and append its result into the error when the +// // function returns. +// defer multierr.AppendInto(&err, foo()) +// +// // GOOD: This will defer invocation of foo unutil the function returns. +// defer multierr.AppendInvoke(&err, multierr.Invoke(foo)) +// +// multierr provides a few Invoker implementations out of the box for +// convenience. See Invoker for more information. +func AppendInvoke(into *error, invoker Invoker) { + AppendInto(into, invoker.Invoke()) +} diff --git a/vendor/go.uber.org/zap/checklicense.sh b/vendor/go.uber.org/zap/checklicense.sh old mode 100755 new mode 100644 diff --git a/vendor/golang.org/x/crypto/curve25519/internal/field/sync.sh b/vendor/golang.org/x/crypto/curve25519/internal/field/sync.sh old mode 100755 new mode 100644 diff --git a/vendor/golang.org/x/sys/plan9/mkall.sh b/vendor/golang.org/x/sys/plan9/mkall.sh old mode 100755 new mode 100644 diff --git a/vendor/golang.org/x/sys/plan9/mkerrors.sh b/vendor/golang.org/x/sys/plan9/mkerrors.sh old mode 100755 new mode 100644 diff --git a/vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh b/vendor/golang.org/x/sys/plan9/mksysnum_plan9.sh old mode 100755 new mode 100644 diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh old mode 100755 new mode 100644 diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh old mode 100755 new mode 100644 diff --git a/vendor/google.golang.org/appengine/internal/regen.sh b/vendor/google.golang.org/appengine/internal/regen.sh old mode 100755 new mode 100644 diff --git a/vendor/istio.io/api/analysis/v1alpha1/message.pb.go b/vendor/istio.io/api/analysis/v1alpha1/message.pb.go index 411f14cc5..1eb84985a 100644 --- a/vendor/istio.io/api/analysis/v1alpha1/message.pb.go +++ b/vendor/istio.io/api/analysis/v1alpha1/message.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: analysis/v1alpha1/message.proto diff --git a/vendor/istio.io/api/meta/v1alpha1/status.pb.go b/vendor/istio.io/api/meta/v1alpha1/status.pb.go index 206f35f4b..778cc9f68 100644 --- a/vendor/istio.io/api/meta/v1alpha1/status.pb.go +++ b/vendor/istio.io/api/meta/v1alpha1/status.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: meta/v1alpha1/status.proto diff --git a/vendor/istio.io/api/networking/v1alpha3/destination_rule.gen.json b/vendor/istio.io/api/networking/v1alpha3/destination_rule.gen.json index bdcb90cd6..ccb4f2065 100644 --- a/vendor/istio.io/api/networking/v1alpha3/destination_rule.gen.json +++ b/vendor/istio.io/api/networking/v1alpha3/destination_rule.gen.json @@ -30,7 +30,7 @@ "type": "string" }, "subjectAltNames": { - "description": "A list of alternate names to verify the subject identity in the certificate. If specified, the proxy will verify that the server certificate's subject alt name matches one of the specified values. If specified, this list overrides the value of subject_alt_names from the ServiceEntry.", + "description": "A list of alternate names to verify the subject identity in the certificate. If specified, the proxy will verify that the server certificate's subject alt name matches one of the specified values. If specified, this list overrides the value of subject_alt_names from the ServiceEntry. If unspecified, automatic validation of upstream presented certificate for new upstream connections will be done based on the downstream HTTP host/authority header, provided `VERIFY_CERT_AT_CLIENT` and `ENABLE_AUTO_SNI` environmental variables are set to `true`.", "type": "array", "items": { "type": "string" @@ -74,12 +74,12 @@ "type": "object", "properties": { "http1MaxPendingRequests": { - "description": "Maximum number of pending HTTP requests to a destination. Default 2^32-1.", + "description": "Maximum number of requests that will be queued while waiting for a ready connection pool connection. Default 1024. Refer to https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking under which conditions a new connection is created for HTTP2. Please note that this is applicable to both HTTP/1.1 and HTTP2.", "type": "integer", "format": "int32" }, "http2MaxRequests": { - "description": "Maximum number of requests to a backend. Default 2^32-1.", + "description": "Maximum number of active requests to a destination. Default 1024. Please note that this is applicable to both HTTP/1.1 and HTTP2.", "type": "integer", "format": "int32" }, @@ -130,6 +130,10 @@ }, "tcpKeepalive": { "$ref": "#/components/schemas/istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive" + }, + "maxConnectionDuration": { + "description": "The maximum duration of a connection. The duration is defined as the period since a connection was established. If not set, there is no max duration. When max_connection_duration is reached the connection will be closed. Duration must be at least 1ms.", + "type": "string" } } }, @@ -189,7 +193,7 @@ "$ref": "#/components/schemas/istio.networking.v1alpha3.LocalityLoadBalancerSetting" }, "warmupDurationSecs": { - "description": "Represents the warmup duration of Service. If set, the newly created endpoint of service remains in warmup mode starting from its creation time for the duration of this window and Istio progressively increases amount of traffic for that endpoint instead of sending proportional amount of traffic. This should be enabled for services that require warm up time to serve full production load with reasonable latency. Currently this is only supported for ROUND_ROBIN and LEAST_CONN load balancers.", + "description": "Represents the warmup duration of Service. If set, the newly created endpoint of service remains in warmup mode starting from its creation time for the duration of this window and Istio progressively increases amount of traffic for that endpoint instead of sending proportional amount of traffic. This should be enabled for services that require warm up time to serve full production load with reasonable latency. Currently this is only supported for ROUND_ROBIN and LEAST_REQUEST load balancers.", "type": "string" } }, @@ -571,7 +575,7 @@ "type": "object", "properties": { "protocol": { - "description": "Specifies which protocol to use for tunneling the downstream connection. Supported protocols are: connect - uses HTTP CONNECT; post - uses HTTP POST. HTTP version for upstream requests is determined by the service protocol defined for the proxy.", + "description": "Specifies which protocol to use for tunneling the downstream connection. Supported protocols are: CONNECT - uses HTTP CONNECT; POST - uses HTTP POST. CONNECT is used by default if not specified. HTTP version for upstream requests is determined by the service protocol defined for the proxy.", "type": "string" }, "targetHost": { diff --git a/vendor/istio.io/api/networking/v1alpha3/destination_rule.pb.go b/vendor/istio.io/api/networking/v1alpha3/destination_rule.pb.go index f5b56b91d..8153625dc 100644 --- a/vendor/istio.io/api/networking/v1alpha3/destination_rule.pb.go +++ b/vendor/istio.io/api/networking/v1alpha3/destination_rule.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1alpha3/destination_rule.proto @@ -161,6 +161,7 @@ // simple: ROUND_ROBIN // ``` // {{}} +// {{}} // // Destination Rules can be customized to specific workloads as well. // The following example shows how a destination rule can be applied to a @@ -173,19 +174,20 @@ // kind: DestinationRule // metadata: // name: configure-client-mtls-dr-with-workloadselector -// spec: -// workloadSelector: -// matchLabels: -// app: ratings -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// portLevelSettings: -// - port: -// number: 31443 -// tls: -// credentialName: client-credential -// mode: MUTUAL +// spec: +// host: example.com +// workloadSelector: +// matchLabels: +// app: ratings +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// portLevelSettings: +// - port: +// number: 31443 +// tls: +// credentialName: client-credential +// mode: MUTUAL // ``` // {{}} // {{}} @@ -194,19 +196,20 @@ // kind: DestinationRule // metadata: // name: configure-client-mtls-dr-with-workloadselector -// spec: -// workloadSelector: -// matchLabels: -// app: ratings -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// portLevelSettings: -// - port: -// number: 31443 -// tls: -// credentialName: client-credential -// mode: MUTUAL +// spec: +// host: example.com +// workloadSelector: +// matchLabels: +// app: ratings +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// portLevelSettings: +// - port: +// number: 31443 +// tls: +// credentialName: client-credential +// mode: MUTUAL // ``` // {{}} // {{}} @@ -501,7 +504,6 @@ type DestinationRule struct { // the destination rule is declared in. Similarly, the value "*" is reserved and // defines an export to all namespaces. ExportTo []string `protobuf:"bytes,4,rep,name=export_to,json=exportTo,proto3" json:"export_to,omitempty"` - // // Criteria used to select the specific set of pods/VMs on which this // `DestinationRule` configuration should be applied. If specified, the `DestinationRule` // configuration will be applied only to the workload instances matching the workload selector @@ -696,19 +698,23 @@ func (x *TrafficPolicy) GetTunnel() *TrafficPolicy_TunnelSettings { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_REQUEST -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// simple: LEAST_REQUEST +// subsets: +// - name: testversion +// labels: +// version: v3 +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// // ``` // {{}} // @@ -717,19 +723,23 @@ func (x *TrafficPolicy) GetTunnel() *TrafficPolicy_TunnelSettings { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_REQUEST -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// simple: LEAST_REQUEST +// subsets: +// - name: testversion +// labels: +// version: v3 +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// // ``` // {{}} // {{}} @@ -827,12 +837,16 @@ func (x *Subset) GetTrafficPolicy() *TrafficPolicy { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// // ``` // {{}} // @@ -841,12 +855,16 @@ func (x *Subset) GetTrafficPolicy() *TrafficPolicy { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// // ``` // {{}} // {{}} @@ -861,15 +879,19 @@ func (x *Subset) GetTrafficPolicy() *TrafficPolicy { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// consistentHash: -// httpCookie: -// name: user -// ttl: 0s +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// consistentHash: +// httpCookie: +// name: user +// ttl: 0s +// // ``` // {{}} // @@ -878,19 +900,22 @@ func (x *Subset) GetTrafficPolicy() *TrafficPolicy { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// consistentHash: -// httpCookie: -// name: user -// ttl: 0s +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// consistentHash: +// httpCookie: +// name: user +// ttl: 0s +// // ``` // {{}} // {{}} -// type LoadBalancerSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -899,6 +924,7 @@ type LoadBalancerSettings struct { // Upstream load balancing policy. // // Types that are assignable to LbPolicy: + // // *LoadBalancerSettings_Simple // *LoadBalancerSettings_ConsistentHash LbPolicy isLoadBalancerSettings_LbPolicy `protobuf_oneof:"lb_policy"` @@ -909,7 +935,7 @@ type LoadBalancerSettings struct { // remains in warmup mode starting from its creation time for the duration of this window and // Istio progressively increases amount of traffic for that endpoint instead of sending proportional amount of traffic. // This should be enabled for services that require warm up time to serve full production load with reasonable latency. - // Currently this is only supported for ROUND_ROBIN and LEAST_CONN load balancers. + // Currently this is only supported for ROUND_ROBIN and LEAST_REQUEST load balancers. WarmupDurationSecs *duration.Duration `protobuf:"bytes,4,opt,name=warmup_duration_secs,json=warmupDurationSecs,proto3" json:"warmup_duration_secs,omitempty"` } @@ -1011,17 +1037,21 @@ func (*LoadBalancerSettings_ConsistentHash) isLoadBalancerSettings_LbPolicy() {} // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: bookinfo-redis +// +// name: bookinfo-redis +// // spec: -// host: myredissrv.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// connectTimeout: 30ms -// tcpKeepalive: -// time: 7200s -// interval: 75s +// +// host: myredissrv.prod.svc.cluster.local +// trafficPolicy: +// connectionPool: +// tcp: +// maxConnections: 100 +// connectTimeout: 30ms +// tcpKeepalive: +// time: 7200s +// interval: 75s +// // ``` // {{}} // @@ -1030,21 +1060,24 @@ func (*LoadBalancerSettings_ConsistentHash) isLoadBalancerSettings_LbPolicy() {} // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: bookinfo-redis +// +// name: bookinfo-redis +// // spec: -// host: myredissrv.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// connectTimeout: 30ms -// tcpKeepalive: -// time: 7200s -// interval: 75s +// +// host: myredissrv.prod.svc.cluster.local +// trafficPolicy: +// connectionPool: +// tcp: +// maxConnections: 100 +// connectTimeout: 30ms +// tcpKeepalive: +// time: 7200s +// interval: 75s +// // ``` // {{}} // {{}} -// type ConnectionPoolSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1124,20 +1157,24 @@ func (x *ConnectionPoolSettings) GetHttp() *ConnectionPoolSettings_HTTPSettings // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: reviews-cb-policy +// +// name: reviews-cb-policy +// // spec: -// host: reviews.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// http: -// http2MaxRequests: 1000 -// maxRequestsPerConnection: 10 -// outlierDetection: -// consecutive5xxErrors: 7 -// interval: 5m -// baseEjectionTime: 15m +// +// host: reviews.prod.svc.cluster.local +// trafficPolicy: +// connectionPool: +// tcp: +// maxConnections: 100 +// http: +// http2MaxRequests: 1000 +// maxRequestsPerConnection: 10 +// outlierDetection: +// consecutive5xxErrors: 7 +// interval: 5m +// baseEjectionTime: 15m +// // ``` // {{}} // @@ -1146,24 +1183,27 @@ func (x *ConnectionPoolSettings) GetHttp() *ConnectionPoolSettings_HTTPSettings // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: reviews-cb-policy +// +// name: reviews-cb-policy +// // spec: -// host: reviews.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// http: -// http2MaxRequests: 1000 -// maxRequestsPerConnection: 10 -// outlierDetection: -// consecutive5xxErrors: 7 -// interval: 5m -// baseEjectionTime: 15m +// +// host: reviews.prod.svc.cluster.local +// trafficPolicy: +// connectionPool: +// tcp: +// maxConnections: 100 +// http: +// http2MaxRequests: 1000 +// maxRequestsPerConnection: 10 +// outlierDetection: +// consecutive5xxErrors: 7 +// interval: 5m +// baseEjectionTime: 15m +// // ``` // {{}} // {{}} -// type OutlierDetection struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1349,15 +1389,19 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: db-mtls +// +// name: db-mtls +// // spec: -// host: mydbserver.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem +// +// host: mydbserver.prod.svc.cluster.local +// trafficPolicy: +// tls: +// mode: MUTUAL +// clientCertificate: /etc/certs/myclientcert.pem +// privateKey: /etc/certs/client_private_key.pem +// caCertificates: /etc/certs/rootcacerts.pem +// // ``` // {{}} // @@ -1366,15 +1410,19 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: db-mtls +// +// name: db-mtls +// // spec: -// host: mydbserver.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem +// +// host: mydbserver.prod.svc.cluster.local +// trafficPolicy: +// tls: +// mode: MUTUAL +// clientCertificate: /etc/certs/myclientcert.pem +// privateKey: /etc/certs/client_private_key.pem +// caCertificates: /etc/certs/rootcacerts.pem +// // ``` // {{}} // {{}} @@ -1388,12 +1436,16 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: tls-foo +// +// name: tls-foo +// // spec: -// host: "*.foo.com" -// trafficPolicy: -// tls: -// mode: SIMPLE +// +// host: "*.foo.com" +// trafficPolicy: +// tls: +// mode: SIMPLE +// // ``` // {{}} // @@ -1402,12 +1454,16 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: tls-foo +// +// name: tls-foo +// // spec: -// host: "*.foo.com" -// trafficPolicy: -// tls: -// mode: SIMPLE +// +// host: "*.foo.com" +// trafficPolicy: +// tls: +// mode: SIMPLE +// // ``` // {{}} // {{}} @@ -1421,12 +1477,16 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: ratings-istio-mtls +// +// name: ratings-istio-mtls +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: ISTIO_MUTUAL +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// tls: +// mode: ISTIO_MUTUAL +// // ``` // {{}} // @@ -1435,16 +1495,19 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: ratings-istio-mtls +// +// name: ratings-istio-mtls +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: ISTIO_MUTUAL +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// tls: +// mode: ISTIO_MUTUAL +// // ``` // {{}} // {{}} -// type ClientTLSSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1487,7 +1550,10 @@ type ClientTLSSettings struct { // certificate. If specified, the proxy will verify that the server // certificate's subject alt name matches one of the specified values. // If specified, this list overrides the value of subject_alt_names - // from the ServiceEntry. + // from the ServiceEntry. If unspecified, automatic validation of upstream + // presented certificate for new upstream connections will be done based on the + // downstream HTTP host/authority header, provided `VERIFY_CERT_AT_CLIENT` + // and `ENABLE_AUTO_SNI` environmental variables are set to `true`. SubjectAltNames []string `protobuf:"bytes,5,rep,name=subject_alt_names,json=subjectAltNames,proto3" json:"subject_alt_names,omitempty"` // SNI string to present to the server during TLS handshake. // If unspecified, SNI will be automatically set based on downstream HTTP @@ -1614,15 +1680,17 @@ func (x *ClientTLSSettings) GetInsecureSkipVerify() *wrappers.BoolValue { // A similar setting is specified for traffic originating in "us-west/zone2/*". // // ```yaml -// distribute: -// - from: us-west/zone1/* -// to: -// "us-west/zone1/*": 80 -// "us-west/zone2/*": 20 -// - from: us-west/zone2/* -// to: -// "us-west/zone1/*": 20 -// "us-west/zone2/*": 80 +// +// distribute: +// - from: us-west/zone1/* +// to: +// "us-west/zone1/*": 80 +// "us-west/zone2/*": 20 +// - from: us-west/zone2/* +// to: +// "us-west/zone1/*": 20 +// "us-west/zone2/*": 80 +// // ``` // // If the goal of the operator is not to distribute load across zones and @@ -1637,11 +1705,13 @@ func (x *ClientTLSSettings) GetInsecureSkipVerify() *wrappers.BoolValue { // and similarly us-west should failover to us-east. // // ```yaml -// failover: -// - from: us-east -// to: eu-west -// - from: us-west -// to: us-east +// +// failover: +// - from: us-east +// to: eu-west +// - from: us-west +// to: us-east +// // ``` // Locality load balancing settings. type LocalityLoadBalancerSetting struct { @@ -1771,7 +1841,6 @@ type TrafficPolicy_PortTrafficPolicy struct { // Specifies the number of a port on the destination service // on which this policy is being applied. - // Port *PortSelector `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` // Settings controlling the load balancer algorithms. LoadBalancer *LoadBalancerSettings `protobuf:"bytes,2,opt,name=load_balancer,json=loadBalancer,proto3" json:"load_balancer,omitempty"` @@ -1857,8 +1926,11 @@ type TrafficPolicy_TunnelSettings struct { // Specifies which protocol to use for tunneling the downstream connection. // Supported protocols are: - // connect - uses HTTP CONNECT; - // post - uses HTTP POST. + // + // CONNECT - uses HTTP CONNECT; + // POST - uses HTTP POST. + // + // CONNECT is used by default if not specified. // HTTP version for upstream requests is determined by the service protocol defined for the proxy. Protocol string `protobuf:"bytes,1,opt,name=protocol,proto3" json:"protocol,omitempty"` // Specifies a host to which the downstream connection is tunneled. @@ -1934,6 +2006,7 @@ type LoadBalancerSettings_ConsistentHashLB struct { // The hash key to use. // // Types that are assignable to HashKey: + // // *LoadBalancerSettings_ConsistentHashLB_HttpHeaderName // *LoadBalancerSettings_ConsistentHashLB_HttpCookie // *LoadBalancerSettings_ConsistentHashLB_UseSourceIp @@ -2140,6 +2213,10 @@ type ConnectionPoolSettings_TCPSettings struct { ConnectTimeout *duration.Duration `protobuf:"bytes,2,opt,name=connect_timeout,json=connectTimeout,proto3" json:"connect_timeout,omitempty"` // If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives. TcpKeepalive *ConnectionPoolSettings_TCPSettings_TcpKeepalive `protobuf:"bytes,3,opt,name=tcp_keepalive,json=tcpKeepalive,proto3" json:"tcp_keepalive,omitempty"` + // The maximum duration of a connection. The duration is defined as the period since a connection + // was established. If not set, there is no max duration. When max_connection_duration + // is reached the connection will be closed. Duration must be at least 1ms. + MaxConnectionDuration *duration.Duration `protobuf:"bytes,4,opt,name=max_connection_duration,json=maxConnectionDuration,proto3" json:"max_connection_duration,omitempty"` } func (x *ConnectionPoolSettings_TCPSettings) Reset() { @@ -2195,15 +2272,27 @@ func (x *ConnectionPoolSettings_TCPSettings) GetTcpKeepalive() *ConnectionPoolSe return nil } +func (x *ConnectionPoolSettings_TCPSettings) GetMaxConnectionDuration() *duration.Duration { + if x != nil { + return x.MaxConnectionDuration + } + return nil +} + // Settings applicable to HTTP1.1/HTTP2/GRPC connections. type ConnectionPoolSettings_HTTPSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Maximum number of pending HTTP requests to a destination. Default 2^32-1. + // Maximum number of requests that will be queued while waiting for + // a ready connection pool connection. Default 1024. + // Refer to https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking + // under which conditions a new connection is created for HTTP2. + // Please note that this is applicable to both HTTP/1.1 and HTTP2. Http1MaxPendingRequests int32 `protobuf:"varint,1,opt,name=http1_max_pending_requests,json=http1MaxPendingRequests,proto3" json:"http1_max_pending_requests,omitempty"` - // Maximum number of requests to a backend. Default 2^32-1. + // Maximum number of active requests to a destination. Default 1024. + // Please note that this is applicable to both HTTP/1.1 and HTTP2. Http2MaxRequests int32 `protobuf:"varint,2,opt,name=http2_max_requests,json=http2MaxRequests,proto3" json:"http2_max_requests,omitempty"` // Maximum number of requests per connection to a backend. Setting this // parameter to 1 disables keep alive. Default 0, meaning "unlimited", @@ -2552,7 +2641,7 @@ var file_networking_v1alpha3_destination_rule_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, - 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xba, 0x08, 0x0a, + 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xb3, 0x08, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x54, 0x0a, 0x0d, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, @@ -2612,267 +2701,272 @@ var file_networking_v1alpha3_destination_rule_proto_rawDesc = []byte{ 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x0e, 0x54, 0x75, 0x6e, 0x6e, 0x65, - 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x02, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x25, 0x0a, 0x0b, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, - 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x72, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xf5, 0x01, 0x0a, 0x06, 0x53, 0x75, - 0x62, 0x73, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x45, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x65, - 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x4f, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, - 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xc6, 0x07, 0x0a, 0x14, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x52, 0x0a, 0x06, 0x73, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x4c, 0x42, 0x48, 0x00, 0x52, 0x06, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x6b, - 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, + 0x73, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x1a, 0x7a, 0x0a, 0x0e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x25, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, + 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, + 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0b, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, + 0x72, 0x74, 0x22, 0xf5, 0x01, 0x0a, 0x06, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x12, 0x18, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, + 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x42, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6f, 0x6e, - 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x66, 0x0a, 0x13, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x62, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, - 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, - 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x52, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x62, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x12, 0x4b, 0x0a, 0x14, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x5f, 0x64, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x73, 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, 0x12, 0x77, 0x61, - 0x72, 0x6d, 0x75, 0x70, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x73, - 0x1a, 0xb8, 0x03, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x4c, 0x42, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0e, 0x68, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, - 0x65, 0x12, 0x6e, 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, + 0x68, 0x61, 0x33, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x4f, + 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, - 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x42, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x43, 0x6f, 0x6f, - 0x6b, 0x69, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6f, 0x6b, 0x69, - 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x53, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x70, 0x12, 0x3b, 0x0a, 0x19, 0x68, 0x74, 0x74, 0x70, 0x5f, - 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, 0x68, 0x74, - 0x74, 0x70, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, - 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, - 0x1a, 0x6d, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x18, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x03, - 0x74, 0x74, 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, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x42, - 0x0a, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x70, 0x0a, 0x08, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x42, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, - 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0a, 0x4c, 0x45, 0x41, 0x53, - 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x10, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0a, 0x0a, 0x06, - 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x53, 0x53, - 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x4f, 0x55, - 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x42, 0x49, 0x4e, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x45, - 0x41, 0x53, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x05, 0x42, 0x0b, 0x0a, - 0x09, 0x6c, 0x62, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0xc1, 0x08, 0x0a, 0x16, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x4f, 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, 0x52, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, - 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, 0xfa, 0x02, 0x0a, 0x0b, 0x54, - 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x61, - 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x6f, 0x0a, 0x0d, 0x74, 0x63, 0x70, 0x5f, 0x6b, - 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x63, - 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x0c, 0x74, 0x63, 0x70, 0x4b, - 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x1a, 0x8c, 0x01, 0x0a, 0x0c, 0x54, 0x63, 0x70, - 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x6f, - 0x62, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, - 0x73, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 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, 0x04, 0x74, 0x69, 0x6d, 0x65, - 0x12, 0x35, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x61, 0x33, 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, + 0x52, 0x0d, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, + 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc6, 0x07, 0x0a, 0x14, 0x4c, + 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x52, 0x0a, 0x06, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, + 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x42, 0x48, 0x00, 0x52, + 0x06, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x6b, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x40, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x61, + 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, + 0x4c, 0x42, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, + 0x48, 0x61, 0x73, 0x68, 0x12, 0x66, 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, + 0x5f, 0x6c, 0x62, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x69, 0x74, 0x79, 0x4c, 0x62, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x4b, 0x0a, 0x14, + 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x73, 0x65, 0x63, 0x73, 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, 0x12, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x73, 0x1a, 0xb8, 0x03, 0x0a, 0x10, 0x43, 0x6f, + 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x42, 0x12, 0x2a, + 0x0a, 0x10, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x68, 0x74, 0x74, 0x70, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x6e, 0x0a, 0x0b, 0x68, 0x74, + 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x4b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x61, 0x64, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4c, + 0x42, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x48, 0x00, 0x52, 0x0a, + 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, + 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x70, + 0x12, 0x3b, 0x0a, 0x19, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, + 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, 0x68, 0x74, 0x74, 0x70, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, + 0x11, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, + 0x6d, 0x52, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x6d, 0x0a, 0x0a, 0x48, 0x54, 0x54, + 0x50, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x03, 0x74, 0x74, 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, 0x08, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x1a, 0x84, 0x04, 0x0a, 0x0c, 0x48, 0x54, 0x54, 0x50, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x68, 0x74, 0x74, 0x70, - 0x31, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x68, 0x74, - 0x74, 0x70, 0x31, 0x4d, 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x74, 0x74, 0x70, 0x32, 0x5f, 0x6d, - 0x61, 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x10, 0x68, 0x74, 0x74, 0x70, 0x32, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x05, 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, 0x0b, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, - 0x74, 0x12, 0x7a, 0x0a, 0x11, 0x68, 0x32, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4e, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, 0x32, 0x55, - 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x68, 0x32, - 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x0a, - 0x13, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x75, 0x73, 0x65, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x3f, 0x0a, - 0x0f, 0x48, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, - 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, - 0x0e, 0x44, 0x4f, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, - 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x02, 0x22, 0x8a, - 0x05, 0x0a, 0x10, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x76, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, - 0x02, 0x18, 0x01, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, - 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x22, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, - 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6f, - 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x1e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x12, 0x67, 0x0a, 0x21, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x66, - 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 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, 0x1e, 0x63, 0x6f, 0x6e, - 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x1a, 0x63, - 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x63, - 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, - 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x35, 0x78, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x73, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, - 0x76, 0x65, 0x35, 0x78, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x08, 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, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x12, 0x47, 0x0a, 0x12, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, + 0x41, 0x01, 0x02, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x42, 0x0a, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x68, + 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x70, 0x0a, 0x08, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x42, + 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x00, 0x12, 0x12, 0x0a, 0x0a, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x10, + 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x10, + 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, + 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x42, 0x49, + 0x4e, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x52, 0x45, 0x51, + 0x55, 0x45, 0x53, 0x54, 0x10, 0x05, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x62, 0x5f, 0x70, 0x6f, 0x6c, + 0x69, 0x63, 0x79, 0x22, 0x94, 0x09, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x4f, + 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x73, + 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, + 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, + 0x52, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, + 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, + 0x2e, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x68, + 0x74, 0x74, 0x70, 0x1a, 0xcd, 0x03, 0x0a, 0x0b, 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, + 0x78, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0f, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x12, 0x6f, 0x0a, 0x0d, 0x74, 0x63, 0x70, 0x5f, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, + 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, + 0x69, 0x76, 0x65, 0x52, 0x0c, 0x74, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, + 0x65, 0x12, 0x51, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 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, 0x15, 0x6d, + 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x8c, 0x01, 0x0a, 0x0c, 0x54, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, + 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x12, 0x2d, 0x0a, + 0x04, 0x74, 0x69, 0x6d, 0x65, 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, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, + 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, 0x62, 0x61, 0x73, 0x65, 0x45, - 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6d, - 0x61, 0x78, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x45, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, - 0x12, 0x6d, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x70, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6d, 0x69, 0x6e, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0xd3, 0x03, 0x0a, 0x11, - 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x12, 0x4e, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x34, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6c, 0x69, 0x65, - 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x4c, - 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, - 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x43, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, - 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, - 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, - 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, - 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6e, - 0x69, 0x12, 0x4c, 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x6b, - 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x69, 0x6e, 0x73, - 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, - 0x40, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x49, - 0x53, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4d, 0x50, 0x4c, - 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, - 0x10, 0x0a, 0x0c, 0x49, 0x53, 0x54, 0x49, 0x4f, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, - 0x03, 0x22, 0xa5, 0x04, 0x0a, 0x1b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x12, 0x61, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x33, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x12, 0x5b, 0x0a, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x46, - 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, - 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, - 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x66, 0x61, - 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x34, - 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x1a, 0xb2, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x59, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, - 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x02, - 0x74, 0x6f, 0x1a, 0x35, 0x0a, 0x07, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, - 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, - 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x2e, 0x0a, 0x08, 0x46, 0x61, 0x69, - 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x22, 0x5a, 0x20, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x76, 0x61, 0x6c, 0x1a, 0x84, 0x04, 0x0a, 0x0c, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, + 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x68, 0x74, 0x74, 0x70, 0x31, 0x5f, 0x6d, 0x61, + 0x78, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x17, 0x68, 0x74, 0x74, 0x70, 0x31, 0x4d, + 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x74, 0x74, 0x70, 0x32, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, + 0x74, 0x74, 0x70, 0x32, 0x4d, 0x61, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, + 0x3d, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, + 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x73, 0x50, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, + 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, + 0x3c, 0x0a, 0x0c, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, + 0x05, 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, 0x0b, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x7a, 0x0a, + 0x11, 0x68, 0x32, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x4e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, + 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, 0x54, 0x54, 0x50, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, + 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, 0x68, 0x32, 0x55, 0x70, 0x67, 0x72, + 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x73, 0x65, + 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x75, 0x73, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, 0x3f, 0x0a, 0x0f, 0x48, 0x32, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0b, 0x0a, 0x07, + 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x4f, 0x5f, + 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x02, 0x22, 0x8a, 0x05, 0x0a, 0x10, 0x4f, + 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x31, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x45, 0x72, 0x72, 0x6f, + 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x22, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, + 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, + 0x73, 0x70, 0x6c, 0x69, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x67, + 0x0a, 0x21, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, + 0x72, 0x65, 0x73, 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, 0x1e, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x76, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x46, + 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x12, 0x5a, 0x0a, 0x1a, 0x63, 0x6f, 0x6e, 0x73, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x65, + 0x72, 0x72, 0x6f, 0x72, 0x73, 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, 0x55, 0x49, + 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x73, 0x65, + 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x45, 0x72, 0x72, + 0x6f, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x76, 0x65, 0x5f, 0x35, 0x78, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x35, 0x78, + 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x35, 0x0a, 0x08, 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, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x47, + 0x0a, 0x12, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 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, 0x62, 0x61, 0x73, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x65, + 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x6d, 0x61, 0x78, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6e, + 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6d, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0xd3, 0x03, 0x0a, 0x11, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x4e, 0x0a, + 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x69, 0x73, + 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, + 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, + 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x0a, + 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, + 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, + 0x0f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x2a, 0x0a, 0x11, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, + 0x6e, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, 0x6e, 0x69, 0x12, 0x4c, 0x0a, + 0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76, + 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, + 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x40, 0x0a, 0x07, 0x54, + 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, + 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, + 0x0a, 0x0a, 0x06, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49, + 0x53, 0x54, 0x49, 0x4f, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x22, 0xa5, 0x04, + 0x0a, 0x1b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x61, 0x0a, + 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x41, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x12, 0x5b, 0x0a, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x6f, + 0x76, 0x65, 0x72, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2b, 0x0a, + 0x11, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, + 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, + 0x61, 0x62, 0x6c, 0x65, 0x64, 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, 0x42, 0x6f, + 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x1a, 0xb2, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, + 0x72, 0x6f, 0x6d, 0x12, 0x59, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x49, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x2e, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x02, 0x74, 0x6f, 0x1a, 0x35, + 0x0a, 0x07, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x2e, 0x0a, 0x08, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, + 0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x22, 0x5a, 0x20, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, + 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -2955,16 +3049,17 @@ var file_networking_v1alpha3_destination_rule_proto_depIdxs = []int32{ 23, // 33: istio.networking.v1alpha3.LoadBalancerSettings.ConsistentHashLB.HTTPCookie.ttl:type_name -> google.protobuf.Duration 23, // 34: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.connect_timeout:type_name -> google.protobuf.Duration 18, // 35: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.tcp_keepalive:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive - 23, // 36: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.idle_timeout:type_name -> google.protobuf.Duration - 1, // 37: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.h2_upgrade_policy:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy - 23, // 38: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive.time:type_name -> google.protobuf.Duration - 23, // 39: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive.interval:type_name -> google.protobuf.Duration - 21, // 40: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.to:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.ToEntry - 41, // [41:41] is the sub-list for method output_type - 41, // [41:41] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 23, // 36: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.max_connection_duration:type_name -> google.protobuf.Duration + 23, // 37: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.idle_timeout:type_name -> google.protobuf.Duration + 1, // 38: istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.h2_upgrade_policy:type_name -> istio.networking.v1alpha3.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy + 23, // 39: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive.time:type_name -> google.protobuf.Duration + 23, // 40: istio.networking.v1alpha3.ConnectionPoolSettings.TCPSettings.TcpKeepalive.interval:type_name -> google.protobuf.Duration + 21, // 41: istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.to:type_name -> istio.networking.v1alpha3.LocalityLoadBalancerSetting.Distribute.ToEntry + 42, // [42:42] is the sub-list for method output_type + 42, // [42:42] is the sub-list for method input_type + 42, // [42:42] is the sub-list for extension type_name + 42, // [42:42] is the sub-list for extension extendee + 0, // [0:42] is the sub-list for field type_name } func init() { file_networking_v1alpha3_destination_rule_proto_init() } diff --git a/vendor/istio.io/api/networking/v1alpha3/destination_rule.proto b/vendor/istio.io/api/networking/v1alpha3/destination_rule.proto index d38029e8b..68b7e4910 100644 --- a/vendor/istio.io/api/networking/v1alpha3/destination_rule.proto +++ b/vendor/istio.io/api/networking/v1alpha3/destination_rule.proto @@ -162,6 +162,7 @@ import "type/v1beta1/selector.proto"; // simple: ROUND_ROBIN // ``` // {{}} +// {{}} // // Destination Rules can be customized to specific workloads as well. // The following example shows how a destination rule can be applied to a @@ -174,19 +175,20 @@ import "type/v1beta1/selector.proto"; // kind: DestinationRule // metadata: // name: configure-client-mtls-dr-with-workloadselector -// spec: -// workloadSelector: -// matchLabels: -// app: ratings -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// portLevelSettings: -// - port: -// number: 31443 -// tls: -// credentialName: client-credential -// mode: MUTUAL +// spec: +// host: example.com +// workloadSelector: +// matchLabels: +// app: ratings +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// portLevelSettings: +// - port: +// number: 31443 +// tls: +// credentialName: client-credential +// mode: MUTUAL // ``` // {{}} // {{}} @@ -195,19 +197,20 @@ import "type/v1beta1/selector.proto"; // kind: DestinationRule // metadata: // name: configure-client-mtls-dr-with-workloadselector -// spec: -// workloadSelector: -// matchLabels: -// app: ratings -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN -// portLevelSettings: -// - port: -// number: 31443 -// tls: -// credentialName: client-credential -// mode: MUTUAL +// spec: +// host: example.com +// workloadSelector: +// matchLabels: +// app: ratings +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// portLevelSettings: +// - port: +// number: 31443 +// tls: +// credentialName: client-credential +// mode: MUTUAL // ``` // {{}} // {{}} @@ -344,10 +347,11 @@ message TrafficPolicy { message TunnelSettings { // Specifies which protocol to use for tunneling the downstream connection. // Supported protocols are: - // connect - uses HTTP CONNECT; - // post - uses HTTP POST. + // CONNECT - uses HTTP CONNECT; + // POST - uses HTTP POST. + // CONNECT is used by default if not specified. // HTTP version for upstream requests is determined by the service protocol defined for the proxy. - string protocol = 1 [(google.api.field_behavior) = REQUIRED]; + string protocol = 1; // Specifies a host to which the downstream connection is tunneled. // Target host must be an FQDN or IP address. @@ -613,7 +617,7 @@ message LoadBalancerSettings { // remains in warmup mode starting from its creation time for the duration of this window and // Istio progressively increases amount of traffic for that endpoint instead of sending proportional amount of traffic. // This should be enabled for services that require warm up time to serve full production load with reasonable latency. - // Currently this is only supported for ROUND_ROBIN and LEAST_CONN load balancers. + // Currently this is only supported for ROUND_ROBIN and LEAST_REQUEST load balancers. google.protobuf.Duration warmup_duration_secs = 4; } @@ -696,14 +700,24 @@ message ConnectionPoolSettings { // If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives. TcpKeepalive tcp_keepalive = 3; + + // The maximum duration of a connection. The duration is defined as the period since a connection + // was established. If not set, there is no max duration. When max_connection_duration + // is reached the connection will be closed. Duration must be at least 1ms. + google.protobuf.Duration max_connection_duration = 4; }; // Settings applicable to HTTP1.1/HTTP2/GRPC connections. message HTTPSettings { - // Maximum number of pending HTTP requests to a destination. Default 2^32-1. + // Maximum number of requests that will be queued while waiting for + // a ready connection pool connection. Default 1024. + // Refer to https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking + // under which conditions a new connection is created for HTTP2. + // Please note that this is applicable to both HTTP/1.1 and HTTP2. int32 http1_max_pending_requests = 1; - // Maximum number of requests to a backend. Default 2^32-1. + // Maximum number of active requests to a destination. Default 1024. + // Please note that this is applicable to both HTTP/1.1 and HTTP2. int32 http2_max_requests = 2; // Maximum number of requests per connection to a backend. Setting this @@ -1062,7 +1076,10 @@ message ClientTLSSettings { // certificate. If specified, the proxy will verify that the server // certificate's subject alt name matches one of the specified values. // If specified, this list overrides the value of subject_alt_names - // from the ServiceEntry. + // from the ServiceEntry. If unspecified, automatic validation of upstream + // presented certificate for new upstream connections will be done based on the + // downstream HTTP host/authority header, provided `VERIFY_CERT_AT_CLIENT` + // and `ENABLE_AUTO_SNI` environmental variables are set to `true`. repeated string subject_alt_names = 5; // SNI string to present to the server during TLS handshake. diff --git a/vendor/istio.io/api/networking/v1alpha3/envoy_filter.pb.go b/vendor/istio.io/api/networking/v1alpha3/envoy_filter.pb.go index 471972042..964670f53 100644 --- a/vendor/istio.io/api/networking/v1alpha3/envoy_filter.pb.go +++ b/vendor/istio.io/api/networking/v1alpha3/envoy_filter.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1alpha3/envoy_filter.proto @@ -83,9 +83,10 @@ // operation: INSERT_BEFORE // value: // # This is the full filter config including the name and typed_config section. -// name: "envoy.config.filter.network.custom_protocol" +// name: "envoy.extensions.filters.network.mongo_proxy" // typed_config: -// ... +// "@type": "type.googleapis.com/envoy.extensions.filters.network.mongo_proxy.v3.MongoProxy" +// ... // - applyTo: NETWORK_FILTER # http connection manager is a filter in Envoy // match: // # context omitted so that this applies to both sidecars and gateways @@ -211,7 +212,7 @@ // // The following example inserts an attributegen filter // that produces `istio_operationId` attribute which is consumed -// by the istio.stats fiter. `filterClass: STATS` encodes this dependency. +// by the istio.stats filter. `filterClass: STATS` encodes this dependency. // // // ```yaml @@ -1340,6 +1341,7 @@ type EnvoyFilter_EnvoyConfigObjectMatch struct { // Match on properties associated with a proxy. Proxy *EnvoyFilter_ProxyMatch `protobuf:"bytes,2,opt,name=proxy,proto3" json:"proxy,omitempty"` // Types that are assignable to ObjectTypes: + // // *EnvoyFilter_EnvoyConfigObjectMatch_Listener // *EnvoyFilter_EnvoyConfigObjectMatch_RouteConfiguration // *EnvoyFilter_EnvoyConfigObjectMatch_Cluster diff --git a/vendor/istio.io/api/networking/v1alpha3/envoy_filter.proto b/vendor/istio.io/api/networking/v1alpha3/envoy_filter.proto index 1d5c9c215..bb73f1a1b 100644 --- a/vendor/istio.io/api/networking/v1alpha3/envoy_filter.proto +++ b/vendor/istio.io/api/networking/v1alpha3/envoy_filter.proto @@ -83,9 +83,10 @@ import "networking/v1alpha3/sidecar.proto"; // operation: INSERT_BEFORE // value: // # This is the full filter config including the name and typed_config section. -// name: "envoy.config.filter.network.custom_protocol" +// name: "envoy.extensions.filters.network.mongo_proxy" // typed_config: -// ... +// "@type": "type.googleapis.com/envoy.extensions.filters.network.mongo_proxy.v3.MongoProxy" +// ... // - applyTo: NETWORK_FILTER # http connection manager is a filter in Envoy // match: // # context omitted so that this applies to both sidecars and gateways @@ -211,7 +212,7 @@ import "networking/v1alpha3/sidecar.proto"; // // The following example inserts an attributegen filter // that produces `istio_operationId` attribute which is consumed -// by the istio.stats fiter. `filterClass: STATS` encodes this dependency. +// by the istio.stats filter. `filterClass: STATS` encodes this dependency. // // // ```yaml diff --git a/vendor/istio.io/api/networking/v1alpha3/gateway.gen.json b/vendor/istio.io/api/networking/v1alpha3/gateway.gen.json index 1c348899a..960c7fc82 100644 --- a/vendor/istio.io/api/networking/v1alpha3/gateway.gen.json +++ b/vendor/istio.io/api/networking/v1alpha3/gateway.gen.json @@ -113,7 +113,7 @@ } }, "verifyCertificateSpki": { - "description": "An optional list of base64-encoded SHA-256 hashes of the SKPIs of authorized client certificates. Note: When both verify_certificate_hash and verify_certificate_spki are specified, a hash matching either value will result in the certificate being accepted.", + "description": "An optional list of base64-encoded SHA-256 hashes of the SPKIs of authorized client certificates. Note: When both verify_certificate_hash and verify_certificate_spki are specified, a hash matching either value will result in the certificate being accepted.", "type": "array", "items": { "type": "string" diff --git a/vendor/istio.io/api/networking/v1alpha3/gateway.pb.go b/vendor/istio.io/api/networking/v1alpha3/gateway.pb.go index fb82827c7..66881f4b5 100644 --- a/vendor/istio.io/api/networking/v1alpha3/gateway.pb.go +++ b/vendor/istio.io/api/networking/v1alpha3/gateway.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1alpha3/gateway.proto @@ -608,17 +608,21 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1alpha3 // kind: Gateway // metadata: -// name: my-ingress +// +// name: my-ingress +// // spec: -// selector: -// app: my-ingressgateway -// servers: -// - port: -// number: 80 -// name: http2 -// protocol: HTTP2 -// hosts: -// - "*" +// +// selector: +// app: my-ingressgateway +// servers: +// - port: +// number: 80 +// name: http2 +// protocol: HTTP2 +// hosts: +// - "*" +// // ``` // {{}} // @@ -627,22 +631,26 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1beta1 // kind: Gateway // metadata: -// name: my-ingress +// +// name: my-ingress +// // spec: -// selector: -// app: my-ingressgateway -// servers: -// - port: -// number: 80 -// name: http2 -// protocol: HTTP2 -// hosts: -// - "*" +// +// selector: +// app: my-ingressgateway +// servers: +// - port: +// number: 80 +// name: http2 +// protocol: HTTP2 +// hosts: +// - "*" +// // ``` // {{}} // {{}} // -// Another example +// # Another example // // {{}} // {{}} @@ -650,17 +658,21 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1alpha3 // kind: Gateway // metadata: -// name: my-tcp-ingress +// +// name: my-tcp-ingress +// // spec: -// selector: -// app: my-tcp-ingressgateway -// servers: -// - port: -// number: 27018 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" +// +// selector: +// app: my-tcp-ingressgateway +// servers: +// - port: +// number: 27018 +// name: mongo +// protocol: MONGO +// hosts: +// - "*" +// // ``` // {{}} // @@ -669,22 +681,26 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1beta1 // kind: Gateway // metadata: -// name: my-tcp-ingress +// +// name: my-tcp-ingress +// // spec: -// selector: -// app: my-tcp-ingressgateway -// servers: -// - port: -// number: 27018 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" +// +// selector: +// app: my-tcp-ingressgateway +// servers: +// - port: +// number: 27018 +// name: mongo +// protocol: MONGO +// hosts: +// - "*" +// // ``` // {{}} // {{}} // -// The following is an example of TLS configuration for port 443 +// # The following is an example of TLS configuration for port 443 // // {{}} // {{}} @@ -692,20 +708,24 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1alpha3 // kind: Gateway // metadata: -// name: my-tls-ingress +// +// name: my-tls-ingress +// // spec: -// selector: -// app: my-tls-ingressgateway -// servers: -// - port: -// number: 443 -// name: https -// protocol: HTTPS -// hosts: -// - "*" -// tls: -// mode: SIMPLE -// credentialName: tls-cert +// +// selector: +// app: my-tls-ingressgateway +// servers: +// - port: +// number: 443 +// name: https +// protocol: HTTPS +// hosts: +// - "*" +// tls: +// mode: SIMPLE +// credentialName: tls-cert +// // ``` // {{}} // @@ -714,24 +734,27 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1beta1 // kind: Gateway // metadata: -// name: my-tls-ingress +// +// name: my-tls-ingress +// // spec: -// selector: -// app: my-tls-ingressgateway -// servers: -// - port: -// number: 443 -// name: https -// protocol: HTTPS -// hosts: -// - "*" -// tls: -// mode: SIMPLE -// credentialName: tls-cert +// +// selector: +// app: my-tls-ingressgateway +// servers: +// - port: +// number: 443 +// name: https +// protocol: HTTPS +// hosts: +// - "*" +// tls: +// mode: SIMPLE +// credentialName: tls-cert +// // ``` // {{}} // {{}} -// type Server struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -986,7 +1009,7 @@ type ServerTLSSettings struct { // A list of alternate names to verify the subject identity in the // certificate presented by the client. SubjectAltNames []string `protobuf:"bytes,6,rep,name=subject_alt_names,json=subjectAltNames,proto3" json:"subject_alt_names,omitempty"` - // An optional list of base64-encoded SHA-256 hashes of the SKPIs of + // An optional list of base64-encoded SHA-256 hashes of the SPKIs of // authorized client certificates. // Note: When both verify_certificate_hash and verify_certificate_spki // are specified, a hash matching either value will result in the diff --git a/vendor/istio.io/api/networking/v1alpha3/gateway.proto b/vendor/istio.io/api/networking/v1alpha3/gateway.proto index 5867da5b4..b6060d06a 100644 --- a/vendor/istio.io/api/networking/v1alpha3/gateway.proto +++ b/vendor/istio.io/api/networking/v1alpha3/gateway.proto @@ -536,8 +536,8 @@ message Server { // to. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar` // (Linux abstract namespace). When using Unix domain sockets, the port // number should be 0. - // This can be used to restrict the reachability of this server to be gateway internal only. - // This is typically used when a gateway needs to communicate to another mesh service + // This can be used to restrict the reachability of this server to be gateway internal only. + // This is typically used when a gateway needs to communicate to another mesh service // e.g. publishing metrics. In such case, the server created with the // specified bind will not be available to external gateway clients. string bind = 4; @@ -686,7 +686,7 @@ message ServerTLSSettings { // certificate presented by the client. repeated string subject_alt_names = 6; - // An optional list of base64-encoded SHA-256 hashes of the SKPIs of + // An optional list of base64-encoded SHA-256 hashes of the SPKIs of // authorized client certificates. // Note: When both verify_certificate_hash and verify_certificate_spki // are specified, a hash matching either value will result in the diff --git a/vendor/istio.io/api/networking/v1alpha3/service_entry.pb.go b/vendor/istio.io/api/networking/v1alpha3/service_entry.pb.go index 8715ec155..8dc9da2b8 100644 --- a/vendor/istio.io/api/networking/v1alpha3/service_entry.pb.go +++ b/vendor/istio.io/api/networking/v1alpha3/service_entry.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1alpha3/service_entry.proto @@ -877,9 +877,9 @@ const ( // domain socket endpoints. ServiceEntry_DNS ServiceEntry_Resolution = 2 // Attempt to resolve the IP address by querying the ambient DNS, - // asynchronously. Unlike DNS, DNS_ROUND_ROBIN only uses the + // asynchronously. Unlike `DNS`, `DNS_ROUND_ROBIN` only uses the // first IP address returned when a new connection needs to be initiated - // without relying on complete results of DNS resolution and connections + // without relying on complete results of DNS resolution, and connections // made to hosts will be retained even if DNS records change frequently // eliminating draining connection pools and connection cycling. // This is best suited for large web scale services that @@ -990,10 +990,9 @@ type ServiceEntry struct { // Kubernetes service if applicable. Currently, the only the // following additional properties will be considered by `istiod`: // - // 1. subjectAltNames: In addition to verifying the SANs of the - // service accounts associated with the pods of the service, the - // SANs specified here will also be verified. - // + // 1. subjectAltNames: In addition to verifying the SANs of the + // service accounts associated with the pods of the service, the + // SANs specified here will also be verified. Hosts []string `protobuf:"bytes,1,rep,name=hosts,proto3" json:"hosts,omitempty"` // The virtual IP addresses associated with the service. Could be CIDR // prefix. For HTTP traffic, generated route configurations will include http route diff --git a/vendor/istio.io/api/networking/v1alpha3/service_entry.proto b/vendor/istio.io/api/networking/v1alpha3/service_entry.proto index c803dbc34..11cb8ff99 100644 --- a/vendor/istio.io/api/networking/v1alpha3/service_entry.proto +++ b/vendor/istio.io/api/networking/v1alpha3/service_entry.proto @@ -910,9 +910,9 @@ message ServiceEntry { DNS = 2; // Attempt to resolve the IP address by querying the ambient DNS, - // asynchronously. Unlike DNS, DNS_ROUND_ROBIN only uses the + // asynchronously. Unlike `DNS`, `DNS_ROUND_ROBIN` only uses the // first IP address returned when a new connection needs to be initiated - // without relying on complete results of DNS resolution and connections + // without relying on complete results of DNS resolution, and connections // made to hosts will be retained even if DNS records change frequently // eliminating draining connection pools and connection cycling. // This is best suited for large web scale services that diff --git a/vendor/istio.io/api/networking/v1alpha3/sidecar.gen.json b/vendor/istio.io/api/networking/v1alpha3/sidecar.gen.json index eb50a73f3..3ba9827bd 100644 --- a/vendor/istio.io/api/networking/v1alpha3/sidecar.gen.json +++ b/vendor/istio.io/api/networking/v1alpha3/sidecar.gen.json @@ -40,7 +40,7 @@ "$ref": "#/components/schemas/istio.networking.v1alpha3.Port" }, "bind": { - "description": "The IP or the Unix domain socket to which the listener should be bound to. Port MUST be specified if bind is not empty. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If omitted, Istio will automatically configure the defaults based on imported services, the workload instances to which this configuration is applied to and the captureMode. If captureMode is `NONE`, bind will default to 127.0.0.1.", + "description": "The IP(IPv4 or IPv6) or the Unix domain socket to which the listener should be bound to. Port MUST be specified if bind is not empty. Format: IPv4 or IPv6 address formats or `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If omitted, Istio will automatically configure the defaults based on imported services, the workload instances to which this configuration is applied to and the captureMode. If captureMode is `NONE`, bind will default to 127.0.0.1.", "type": "string" }, "captureMode": { @@ -63,14 +63,14 @@ "$ref": "#/components/schemas/istio.networking.v1alpha3.Port" }, "bind": { - "description": "The IP to which the listener should be bound. Must be in the format `x.x.x.x`. Unix domain socket addresses are not allowed in the bind field for ingress listeners. If omitted, Istio will automatically configure the defaults based on imported services and the workload instances to which this configuration is applied to.", + "description": "The IP(IPv4 or IPv6) to which the listener should be bound. Unix domain socket addresses are not allowed in the bind field for ingress listeners. If omitted, Istio will automatically configure the defaults based on imported services and the workload instances to which this configuration is applied to.", "type": "string" }, "captureMode": { "$ref": "#/components/schemas/istio.networking.v1alpha3.CaptureMode" }, "defaultEndpoint": { - "description": "The IP endpoint or Unix domain socket to which traffic should be forwarded to. This configuration can be used to redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` or Unix domain socket where the application workload instance is listening for connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `0.0.0.0:PORT` (which will forward to the instance IP), or `unix:///path/to/socket`", + "description": "The IP endpoint or Unix domain socket to which traffic should be forwarded to. This configuration can be used to redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` or Unix domain socket where the application workload instance is listening for connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `[::1]:PORT` (forward to localhost), `0.0.0.0:PORT`, `[::]:PORT` (forward to the instance IP), or `unix:///path/to/socket` (forward to Unix domain socket).", "type": "string" }, "tls": { @@ -163,7 +163,7 @@ } }, "verifyCertificateSpki": { - "description": "An optional list of base64-encoded SHA-256 hashes of the SKPIs of authorized client certificates. Note: When both verify_certificate_hash and verify_certificate_spki are specified, a hash matching either value will result in the certificate being accepted.", + "description": "An optional list of base64-encoded SHA-256 hashes of the SPKIs of authorized client certificates. Note: When both verify_certificate_hash and verify_certificate_spki are specified, a hash matching either value will result in the certificate being accepted.", "type": "array", "items": { "type": "string" diff --git a/vendor/istio.io/api/networking/v1alpha3/sidecar.pb.go b/vendor/istio.io/api/networking/v1alpha3/sidecar.pb.go index 97613de3c..e995b5807 100644 --- a/vendor/istio.io/api/networking/v1alpha3/sidecar.pb.go +++ b/vendor/istio.io/api/networking/v1alpha3/sidecar.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1alpha3/sidecar.proto @@ -728,8 +728,8 @@ type IstioIngressListener struct { // The port associated with the listener. Port *Port `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` - // The IP to which the listener should be bound. Must be in the - // format `x.x.x.x`. Unix domain socket addresses are not allowed in + // The IP(IPv4 or IPv6) to which the listener should be bound. + // Unix domain socket addresses are not allowed in // the bind field for ingress listeners. If omitted, Istio will // automatically configure the defaults based on imported services // and the workload instances to which this configuration is applied @@ -742,13 +742,14 @@ type IstioIngressListener struct { // traffic should be forwarded to. This configuration can be used to // redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` // or Unix domain socket where the application workload instance is listening for - // connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `0.0.0.0:PORT` - // (which will forward to the instance IP), or `unix:///path/to/socket` + // connections. Arbitrary IPs are not supported. Format should be one of + // `127.0.0.1:PORT`, `[::1]:PORT` (forward to localhost), + // `0.0.0.0:PORT`, `[::]:PORT` (forward to the instance IP), + // or `unix:///path/to/socket` (forward to Unix domain socket). DefaultEndpoint string `protobuf:"bytes,4,opt,name=default_endpoint,json=defaultEndpoint,proto3" json:"default_endpoint,omitempty"` // Set of TLS related options that will enable TLS termination on the // sidecar for requests originating from outside the mesh. // Currently supports only SIMPLE and MUTUAL TLS modes. - // $hide_from_docs Tls *ServerTLSSettings `protobuf:"bytes,7,opt,name=tls,proto3" json:"tls,omitempty"` } @@ -836,8 +837,8 @@ type IstioEgressListener struct { // listener port will be based on the listener with the most specific // port. Port *Port `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` - // The IP or the Unix domain socket to which the listener should be bound - // to. Port MUST be specified if bind is not empty. Format: `x.x.x.x` or + // The IP(IPv4 or IPv6) or the Unix domain socket to which the listener should be bound + // to. Port MUST be specified if bind is not empty. Format: IPv4 or IPv6 address formats or // `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If // omitted, Istio will automatically configure the defaults based on imported // services, the workload instances to which this configuration is applied to and diff --git a/vendor/istio.io/api/networking/v1alpha3/sidecar.proto b/vendor/istio.io/api/networking/v1alpha3/sidecar.proto index 544e21c68..f7baaf2da 100644 --- a/vendor/istio.io/api/networking/v1alpha3/sidecar.proto +++ b/vendor/istio.io/api/networking/v1alpha3/sidecar.proto @@ -545,8 +545,8 @@ message IstioIngressListener { // The port associated with the listener. Port port = 1 [(google.api.field_behavior) = REQUIRED]; - // The IP to which the listener should be bound. Must be in the - // format `x.x.x.x`. Unix domain socket addresses are not allowed in + // The IP(IPv4 or IPv6) to which the listener should be bound. + // Unix domain socket addresses are not allowed in // the bind field for ingress listeners. If omitted, Istio will // automatically configure the defaults based on imported services // and the workload instances to which this configuration is applied @@ -561,8 +561,10 @@ message IstioIngressListener { // traffic should be forwarded to. This configuration can be used to // redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` // or Unix domain socket where the application workload instance is listening for - // connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `0.0.0.0:PORT` - // (which will forward to the instance IP), or `unix:///path/to/socket` + // connections. Arbitrary IPs are not supported. Format should be one of + // `127.0.0.1:PORT`, `[::1]:PORT` (forward to localhost), + // `0.0.0.0:PORT`, `[::]:PORT` (forward to the instance IP), + // or `unix:///path/to/socket` (forward to Unix domain socket). string default_endpoint = 4 [(google.api.field_behavior) = REQUIRED]; reserved "localhost_client_tls"; @@ -571,7 +573,6 @@ message IstioIngressListener { // Set of TLS related options that will enable TLS termination on the // sidecar for requests originating from outside the mesh. // Currently supports only SIMPLE and MUTUAL TLS modes. - // $hide_from_docs ServerTLSSettings tls = 7; } @@ -589,8 +590,8 @@ message IstioEgressListener { // port. Port port = 1; - // The IP or the Unix domain socket to which the listener should be bound - // to. Port MUST be specified if bind is not empty. Format: `x.x.x.x` or + // The IP(IPv4 or IPv6) or the Unix domain socket to which the listener should be bound + // to. Port MUST be specified if bind is not empty. Format: IPv4 or IPv6 address formats or // `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If // omitted, Istio will automatically configure the defaults based on imported // services, the workload instances to which this configuration is applied to and diff --git a/vendor/istio.io/api/networking/v1alpha3/virtual_service.gen.json b/vendor/istio.io/api/networking/v1alpha3/virtual_service.gen.json index afcf090c1..e67a537ea 100644 --- a/vendor/istio.io/api/networking/v1alpha3/virtual_service.gen.json +++ b/vendor/istio.io/api/networking/v1alpha3/virtual_service.gen.json @@ -88,6 +88,76 @@ } } }, + "istio.networking.v1alpha3.HTTPBody": { + "type": "object", + "oneOf": [ + { + "not": { + "anyOf": [ + { + "required": [ + "string" + ], + "properties": { + "string": { + "description": "response body as a string", + "type": "string" + } + } + }, + { + "required": [ + "bytes" + ], + "properties": { + "bytes": { + "description": "response body as base64 encoded bytes.", + "type": "string", + "format": "binary" + } + } + } + ] + } + }, + { + "required": [ + "string" + ], + "properties": { + "string": { + "description": "response body as a string", + "type": "string" + } + } + }, + { + "required": [ + "bytes" + ], + "properties": { + "bytes": { + "description": "response body as base64 encoded bytes.", + "type": "string", + "format": "binary" + } + } + } + ] + }, + "istio.networking.v1alpha3.HTTPDirectResponse": { + "description": "HTTPDirectResponse can be used to send a fixed response to clients. For example, the following rule returns a fixed 503 status with a body to requests for /v1/getProductRatings API.", + "type": "object", + "properties": { + "status": { + "description": "Specifies the HTTP response status to be returned.", + "type": "integer" + }, + "body": { + "$ref": "#/components/schemas/istio.networking.v1alpha3.HTTPBody" + } + } + }, "istio.networking.v1alpha3.HTTPFaultInjection": { "description": "HTTPFaultInjection can be used to specify one or more faults to inject while forwarding HTTP requests to the destination specified in a route. Fault specification is part of a VirtualService rule. Faults include aborting the Http request from downstream service, and/or delaying proxying of requests. A fault rule MUST HAVE delay or abort or both.", "type": "object", @@ -130,6 +200,7 @@ ], "properties": { "grpcStatus": { + "description": "GRPC status code to use to abort the request. The supported codes are documented in https://github.com/grpc/grpc/blob/master/doc/statuscodes.md Note: If you want to return the status \"Unavailable\", then you should specify the code as `UNAVAILABLE`(all caps), but not `14`.", "type": "string" } } @@ -165,6 +236,7 @@ ], "properties": { "grpcStatus": { + "description": "GRPC status code to use to abort the request. The supported codes are documented in https://github.com/grpc/grpc/blob/master/doc/statuscodes.md Note: If you want to return the status \"Unavailable\", then you should specify the code as `UNAVAILABLE`(all caps), but not `14`.", "type": "string" } } @@ -312,6 +384,10 @@ "sourceNamespace": { "description": "Source namespace constraining the applicability of a rule to workloads in that namespace. If the VirtualService has a list of gateways specified in the top-level `gateways` field, it must include the reserved gateway `mesh` for this field to be applicable.", "type": "string" + }, + "statPrefix": { + "description": "The human readable prefix to use when emitting statistics for this route. The statistics are generated with prefix route.\u003cstat_prefix\u003e. This should be set for highly critical routes that one wishes to get \"per-route\" statistics on. This prefix is only for proxy-level statistics (envoy_*) and not service-level (istio_*) statistics. Refer to https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-field-config-route-v3-route-stat-prefix for statistics that are generated when this is configured.", + "type": "string" } } }, @@ -448,7 +524,7 @@ } }, "route": { - "description": "A HTTP rule can either redirect or forward (default) traffic. The forwarding target can be one of several versions of a service (see glossary in beginning of document). Weights associated with the service version determine the proportion of traffic it receives.", + "description": "A HTTP rule can either return a direct_response, redirect or forward (default) traffic. The forwarding target can be one of several versions of a service (see glossary in beginning of document). Weights associated with the service version determine the proportion of traffic it receives.", "type": "array", "items": { "$ref": "#/components/schemas/istio.networking.v1alpha3.HTTPRouteDestination" @@ -457,6 +533,9 @@ "redirect": { "$ref": "#/components/schemas/istio.networking.v1alpha3.HTTPRedirect" }, + "directResponse": { + "$ref": "#/components/schemas/istio.networking.v1alpha3.HTTPDirectResponse" + }, "delegate": { "$ref": "#/components/schemas/istio.networking.v1alpha3.Delegate" }, diff --git a/vendor/istio.io/api/networking/v1alpha3/virtual_service.pb.go b/vendor/istio.io/api/networking/v1alpha3/virtual_service.pb.go index 830b2af32..206c9e021 100644 --- a/vendor/istio.io/api/networking/v1alpha3/virtual_service.pb.go +++ b/vendor/istio.io/api/networking/v1alpha3/virtual_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1alpha3/virtual_service.proto @@ -452,27 +452,31 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route -// namespace: foo +// +// name: reviews-route +// namespace: foo +// // spec: -// hosts: -// - reviews # interpreted as reviews.foo.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v2 -// - route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v1 +// +// hosts: +// - reviews # interpreted as reviews.foo.svc.cluster.local +// http: +// - match: +// - uri: +// prefix: "/wpcatalog" +// - uri: +// prefix: "/consumercatalog" +// rewrite: +// uri: "/newcatalog" +// route: +// - destination: +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subset: v2 +// - route: +// - destination: +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subset: v1 +// // ``` // {{}} // @@ -481,32 +485,36 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route -// namespace: foo +// +// name: reviews-route +// namespace: foo +// // spec: -// hosts: -// - reviews # interpreted as reviews.foo.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v2 -// - route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v1 +// +// hosts: +// - reviews # interpreted as reviews.foo.svc.cluster.local +// http: +// - match: +// - uri: +// prefix: "/wpcatalog" +// - uri: +// prefix: "/consumercatalog" +// rewrite: +// uri: "/newcatalog" +// route: +// - destination: +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subset: v2 +// - route: +// - destination: +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subset: v1 +// // ``` // {{}} // {{}} // -// And the associated DestinationRule +// # And the associated DestinationRule // // {{}} // {{}} @@ -514,17 +522,21 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: reviews-destination -// namespace: foo +// +// name: reviews-destination +// namespace: foo +// // spec: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 +// +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subsets: +// - name: v1 +// labels: +// version: v1 +// - name: v2 +// labels: +// version: v2 +// // ``` // {{}} // @@ -533,17 +545,21 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: reviews-destination -// namespace: foo +// +// name: reviews-destination +// namespace: foo +// // spec: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 +// +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subsets: +// - name: v1 +// labels: +// version: v1 +// - name: v2 +// labels: +// version: v2 +// // ``` // {{}} // {{}} @@ -564,16 +580,20 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: my-productpage-rule -// namespace: istio-system +// +// name: my-productpage-rule +// namespace: istio-system +// // spec: -// hosts: -// - productpage.prod.svc.cluster.local # ignores rule namespace -// http: -// - timeout: 5s -// route: -// - destination: -// host: productpage.prod.svc.cluster.local +// +// hosts: +// - productpage.prod.svc.cluster.local # ignores rule namespace +// http: +// - timeout: 5s +// route: +// - destination: +// host: productpage.prod.svc.cluster.local +// // ``` // {{}} // @@ -582,16 +602,20 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: my-productpage-rule -// namespace: istio-system +// +// name: my-productpage-rule +// namespace: istio-system +// // spec: -// hosts: -// - productpage.prod.svc.cluster.local # ignores rule namespace -// http: -// - timeout: 5s -// route: -// - destination: -// host: productpage.prod.svc.cluster.local +// +// hosts: +// - productpage.prod.svc.cluster.local # ignores rule namespace +// http: +// - timeout: 5s +// route: +// - destination: +// host: productpage.prod.svc.cluster.local +// // ``` // {{}} // {{}} @@ -608,29 +632,37 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: ServiceEntry // metadata: -// name: external-svc-wikipedia +// +// name: external-svc-wikipedia +// // spec: -// hosts: -// - wikipedia.org -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: example-http -// protocol: HTTP -// resolution: DNS +// +// hosts: +// - wikipedia.org +// location: MESH_EXTERNAL +// ports: +// - number: 80 +// name: example-http +// protocol: HTTP +// resolution: DNS +// // --- // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: my-wiki-rule +// +// name: my-wiki-rule +// // spec: -// hosts: -// - wikipedia.org -// http: -// - timeout: 5s -// route: -// - destination: -// host: wikipedia.org +// +// hosts: +// - wikipedia.org +// http: +// - timeout: 5s +// route: +// - destination: +// host: wikipedia.org +// // ``` // {{}} // @@ -639,33 +671,40 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1beta1 // kind: ServiceEntry // metadata: -// name: external-svc-wikipedia +// +// name: external-svc-wikipedia +// // spec: -// hosts: -// - wikipedia.org -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: example-http -// protocol: HTTP -// resolution: DNS +// +// hosts: +// - wikipedia.org +// location: MESH_EXTERNAL +// ports: +// - number: 80 +// name: example-http +// protocol: HTTP +// resolution: DNS +// // --- // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: my-wiki-rule +// +// name: my-wiki-rule +// // spec: -// hosts: -// - wikipedia.org -// http: -// - timeout: 5s -// route: -// - destination: -// host: wikipedia.org +// +// hosts: +// - wikipedia.org +// http: +// - timeout: 5s +// route: +// - destination: +// host: wikipedia.org +// // ``` // {{}} // {{}} -// type Destination struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -766,16 +805,22 @@ type HTTPRoute struct { // semantics, while the list of match blocks have OR semantics. The rule // is matched if any one of the match blocks succeed. Match []*HTTPMatchRequest `protobuf:"bytes,1,rep,name=match,proto3" json:"match,omitempty"` - // A HTTP rule can either redirect or forward (default) traffic. The - // forwarding target can be one of several versions of a service (see + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // The forwarding target can be one of several versions of a service (see // glossary in beginning of document). Weights associated with the // service version determine the proportion of traffic it receives. Route []*HTTPRouteDestination `protobuf:"bytes,2,rep,name=route,proto3" json:"route,omitempty"` - // A HTTP rule can either redirect or forward (default) traffic. If - // traffic passthrough option is specified in the rule, + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // If traffic passthrough option is specified in the rule, // route/redirect will be ignored. The redirect primitive can be used to // send a HTTP 301 redirect to a different URI or Authority. Redirect *HTTPRedirect `protobuf:"bytes,3,opt,name=redirect,proto3" json:"redirect,omitempty"` + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // Direct Response is used to specify a fixed response that should + // be sent to clients. + // + // It can be set only when `Route` and `Redirect` are empty. + DirectResponse *HTTPDirectResponse `protobuf:"bytes,21,opt,name=direct_response,json=directResponse,proto3" json:"direct_response,omitempty"` // Delegate is used to specify the particular VirtualService which // can be used to define delegate HTTPRoute. // @@ -785,9 +830,9 @@ type HTTPRoute struct { // // **NOTE**: // - // 1. Only one level delegation is supported. - // 2. The delegate's HTTPMatchRequest must be a strict subset of the root's, - // otherwise there is a conflict and the HTTPRoute will not take effect. + // 1. Only one level delegation is supported. + // 2. The delegate's HTTPMatchRequest must be a strict subset of the root's, + // otherwise there is a conflict and the HTTPRoute will not take effect. Delegate *Delegate `protobuf:"bytes,20,opt,name=delegate,proto3" json:"delegate,omitempty"` // Rewrite HTTP URIs and Authority headers. Rewrite cannot be used with // Redirect primitive. Rewrite will be performed before forwarding. @@ -886,6 +931,13 @@ func (x *HTTPRoute) GetRedirect() *HTTPRedirect { return nil } +func (x *HTTPRoute) GetDirectResponse() *HTTPDirectResponse { + if x != nil { + return x.DirectResponse + } + return nil +} + func (x *HTTPRoute) GetDelegate() *Delegate { if x != nil { return x.Delegate @@ -965,57 +1017,69 @@ func (x *HTTPRoute) GetHeaders() *Headers { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: bookinfo +// +// name: bookinfo +// // spec: -// hosts: -// - "bookinfo.com" -// gateways: -// - mygateway -// http: -// - match: -// - uri: -// prefix: "/productpage" -// delegate: -// name: productpage -// namespace: nsA -// - match: -// - uri: -// prefix: "/reviews" -// delegate: -// name: reviews -// namespace: nsB +// +// hosts: +// - "bookinfo.com" +// gateways: +// - mygateway +// http: +// - match: +// - uri: +// prefix: "/productpage" +// delegate: +// name: productpage +// namespace: nsA +// - match: +// - uri: +// prefix: "/reviews" +// delegate: +// name: reviews +// namespace: nsB +// // ``` // // ```yaml // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: productpage -// namespace: nsA +// +// name: productpage +// namespace: nsA +// // spec: -// http: -// - match: -// - uri: -// prefix: "/productpage/v1/" -// route: -// - destination: -// host: productpage-v1.nsA.svc.cluster.local -// - route: -// - destination: -// host: productpage.nsA.svc.cluster.local +// +// http: +// - match: +// - uri: +// prefix: "/productpage/v1/" +// route: +// - destination: +// host: productpage-v1.nsA.svc.cluster.local +// - route: +// - destination: +// host: productpage.nsA.svc.cluster.local +// // ``` // // ```yaml // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews -// namespace: nsB +// +// name: reviews +// namespace: nsB +// // spec: -// http: -// - route: -// - destination: -// host: reviews.nsB.svc.cluster.local +// +// http: +// - route: +// - destination: +// host: reviews.nsB.svc.cluster.local +// // ``` type Delegate struct { state protoimpl.MessageState @@ -1089,28 +1153,32 @@ func (x *Delegate) GetNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - headers: -// request: -// set: -// test: "true" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// headers: -// response: -// remove: -// - foo -// weight: 75 +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - headers: +// request: +// set: +// test: "true" +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v2 +// weight: 25 +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// headers: +// response: +// remove: +// - foo +// weight: 75 +// // ``` // {{}} // @@ -1119,28 +1187,32 @@ func (x *Delegate) GetNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - headers: -// request: -// set: -// test: "true" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// headers: -// response: -// remove: -// - foo -// weight: 75 +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - headers: +// request: +// set: +// test: "true" +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v2 +// weight: 25 +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// headers: +// response: +// remove: +// - foo +// weight: 75 +// // ``` // {{}} // {{}} @@ -1214,27 +1286,31 @@ func (x *Headers) GetResponse() *Headers_HeaderOperations { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: bookinfo-sni +// +// name: bookinfo-sni +// // spec: -// hosts: -// - "*.bookinfo.com" -// gateways: -// - mygateway -// tls: -// - match: -// - port: 443 -// sniHosts: -// - login.bookinfo.com -// route: -// - destination: -// host: login.prod.svc.cluster.local -// - match: -// - port: 443 -// sniHosts: -// - reviews.bookinfo.com -// route: -// - destination: -// host: reviews.prod.svc.cluster.local +// +// hosts: +// - "*.bookinfo.com" +// gateways: +// - mygateway +// tls: +// - match: +// - port: 443 +// sniHosts: +// - login.bookinfo.com +// route: +// - destination: +// host: login.prod.svc.cluster.local +// - match: +// - port: 443 +// sniHosts: +// - reviews.bookinfo.com +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// // ``` // {{}} // @@ -1243,27 +1319,31 @@ func (x *Headers) GetResponse() *Headers_HeaderOperations { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: bookinfo-sni +// +// name: bookinfo-sni +// // spec: -// hosts: -// - "*.bookinfo.com" -// gateways: -// - mygateway -// tls: -// - match: -// - port: 443 -// sniHosts: -// - login.bookinfo.com -// route: -// - destination: -// host: login.prod.svc.cluster.local -// - match: -// - port: 443 -// sniHosts: -// - reviews.bookinfo.com -// route: -// - destination: -// host: reviews.prod.svc.cluster.local +// +// hosts: +// - "*.bookinfo.com" +// gateways: +// - mygateway +// tls: +// - match: +// - port: 443 +// sniHosts: +// - login.bookinfo.com +// route: +// - destination: +// host: login.prod.svc.cluster.local +// - match: +// - port: 443 +// sniHosts: +// - reviews.bookinfo.com +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// // ``` // {{}} // {{}} @@ -1337,18 +1417,22 @@ func (x *TLSRoute) GetRoute() []*RouteDestination { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: bookinfo-mongo +// +// name: bookinfo-mongo +// // spec: -// hosts: -// - mongo.prod.svc.cluster.local -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.backup.svc.cluster.local -// port: -// number: 5555 +// +// hosts: +// - mongo.prod.svc.cluster.local +// tcp: +// - match: +// - port: 27017 +// route: +// - destination: +// host: mongo.backup.svc.cluster.local +// port: +// number: 5555 +// // ``` // {{}} // @@ -1357,18 +1441,22 @@ func (x *TLSRoute) GetRoute() []*RouteDestination { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: bookinfo-mongo +// +// name: bookinfo-mongo +// // spec: -// hosts: -// - mongo.prod.svc.cluster.local -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.backup.svc.cluster.local -// port: -// number: 5555 +// +// hosts: +// - mongo.prod.svc.cluster.local +// tcp: +// - match: +// - port: 27017 +// route: +// - destination: +// host: mongo.backup.svc.cluster.local +// port: +// number: 5555 +// // ``` // {{}} // {{}} @@ -1444,21 +1532,25 @@ func (x *TCPRoute) GetRoute() []*RouteDestination { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - headers: -// end-user: -// exact: jason -// uri: -// prefix: "/ratings/v2/" -// ignoreUriCase: true -// route: -// - destination: -// host: ratings.prod.svc.cluster.local +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - headers: +// end-user: +// exact: jason +// uri: +// prefix: "/ratings/v2/" +// ignoreUriCase: true +// route: +// - destination: +// host: ratings.prod.svc.cluster.local +// // ``` // {{}} // @@ -1467,21 +1559,25 @@ func (x *TCPRoute) GetRoute() []*RouteDestination { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - headers: -// end-user: -// exact: jason -// uri: -// prefix: "/ratings/v2/" -// ignoreUriCase: true -// route: -// - destination: -// host: ratings.prod.svc.cluster.local +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - headers: +// end-user: +// exact: jason +// uri: +// prefix: "/ratings/v2/" +// ignoreUriCase: true +// route: +// - destination: +// host: ratings.prod.svc.cluster.local +// // ``` // {{}} // {{}} @@ -1517,7 +1613,6 @@ type HTTPMatchRequest struct { // - `prefix: "value"` for prefix-based match // // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // Scheme *StringMatch `protobuf:"bytes,2,opt,name=scheme,proto3" json:"scheme,omitempty"` // HTTP Method // values are case-sensitive and formatted as follows: @@ -1527,7 +1622,6 @@ type HTTPMatchRequest struct { // - `prefix: "value"` for prefix-based match // // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // Method *StringMatch `protobuf:"bytes,3,opt,name=method,proto3" json:"method,omitempty"` // HTTP Authority // values are case-sensitive and formatted as follows: @@ -1537,7 +1631,6 @@ type HTTPMatchRequest struct { // - `prefix: "value"` for prefix-based match // // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // Authority *StringMatch `protobuf:"bytes,4,opt,name=authority,proto3" json:"authority,omitempty"` // The header keys must be lowercase and use hyphen as the separator, // e.g. _x-request-id_. @@ -1570,15 +1663,15 @@ type HTTPMatchRequest struct { // // Ex: // - // - For a query parameter like "?key=true", the map key would be "key" and - // the string match could be defined as `exact: "true"`. + // - For a query parameter like "?key=true", the map key would be "key" and + // the string match could be defined as `exact: "true"`. // - // - For a query parameter like "?key", the map key would be "key" and the - // string match could be defined as `exact: ""`. + // - For a query parameter like "?key", the map key would be "key" and the + // string match could be defined as `exact: ""`. // - // - For a query parameter like "?key=123", the map key would be "key" and the - // string match could be defined as `regex: "\d+$"`. Note that this - // configuration will only match values like "123" but not "a123" or "123a". + // - For a query parameter like "?key=123", the map key would be "key" and the + // string match could be defined as `regex: "\d+$"`. Note that this + // configuration will only match values like "123" but not "a123" or "123a". // // **Note:** `prefix` matching is currently not supported. QueryParams map[string]*StringMatch `protobuf:"bytes,9,rep,name=query_params,json=queryParams,proto3" json:"query_params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -1594,6 +1687,13 @@ type HTTPMatchRequest struct { // If the VirtualService has a list of gateways specified in the top-level `gateways` field, // it must include the reserved gateway `mesh` for this field to be applicable. SourceNamespace string `protobuf:"bytes,13,opt,name=source_namespace,json=sourceNamespace,proto3" json:"source_namespace,omitempty"` + // The human readable prefix to use when emitting statistics for this route. + // The statistics are generated with prefix route.. + // This should be set for highly critical routes that one wishes to get "per-route" statistics on. + // This prefix is only for proxy-level statistics (envoy_*) and not service-level (istio_*) statistics. + // Refer to https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-field-config-route-v3-route-stat-prefix + // for statistics that are generated when this is configured. + StatPrefix string `protobuf:"bytes,14,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` } func (x *HTTPMatchRequest) Reset() { @@ -1719,6 +1819,13 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { return "" } +func (x *HTTPMatchRequest) GetStatPrefix() string { + if x != nil { + return x.StatPrefix + } + return "" +} + // Each routing rule is associated with one or more service versions (see // glossary in beginning of document). Weights associated with the version // determine the proportion of traffic it receives. For example, the @@ -1732,20 +1839,24 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// weight: 75 +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v2 +// weight: 25 +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// weight: 75 +// // ``` // {{}} // @@ -1754,25 +1865,29 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// weight: 75 +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v2 +// weight: 25 +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// weight: 75 +// // ``` // {{}} // {{}} // -// And the associated DestinationRule +// # And the associated DestinationRule // // {{}} // {{}} @@ -1780,16 +1895,20 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: reviews-destination +// +// name: reviews-destination +// // spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 +// +// host: reviews.prod.svc.cluster.local +// subsets: +// - name: v1 +// labels: +// version: v1 +// - name: v2 +// labels: +// version: v2 +// // ``` // {{}} // @@ -1798,16 +1917,20 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: reviews-destination +// +// name: reviews-destination +// // spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 +// +// host: reviews.prod.svc.cluster.local +// subsets: +// - name: v1 +// labels: +// version: v1 +// - name: v2 +// labels: +// version: v2 +// // ``` // {{}} // {{}} @@ -1822,18 +1945,22 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route-two-domains +// +// name: reviews-route-two-domains +// // spec: -// hosts: -// - reviews.com -// http: -// - route: -// - destination: -// host: dev.reviews.com -// weight: 25 -// - destination: -// host: reviews.com -// weight: 75 +// +// hosts: +// - reviews.com +// http: +// - route: +// - destination: +// host: dev.reviews.com +// weight: 25 +// - destination: +// host: reviews.com +// weight: 75 +// // ``` // {{}} // @@ -1842,22 +1969,25 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route-two-domains +// +// name: reviews-route-two-domains +// // spec: -// hosts: -// - reviews.com -// http: -// - route: -// - destination: -// host: dev.reviews.com -// weight: 25 -// - destination: -// host: reviews.com -// weight: 75 +// +// hosts: +// - reviews.com +// http: +// - route: +// - destination: +// host: dev.reviews.com +// weight: 25 +// - destination: +// host: reviews.com +// weight: 75 +// // ``` // {{}} // {{}} -// type HTTPRouteDestination struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2215,18 +2345,22 @@ func (x *TLSMatchAttributes) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// exact: /v1/getProductRatings -// redirect: -// uri: /v1/bookRatings -// authority: newratings.default.svc.cluster.local -// ... +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// redirect: +// uri: /v1/bookRatings +// authority: newratings.default.svc.cluster.local +// ... +// // ``` // {{}} // @@ -2235,22 +2369,25 @@ func (x *TLSMatchAttributes) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// exact: /v1/getProductRatings -// redirect: -// uri: /v1/bookRatings -// authority: newratings.default.svc.cluster.local -// ... +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// redirect: +// uri: /v1/bookRatings +// authority: newratings.default.svc.cluster.local +// ... +// // ``` // {{}} // {{}} -// type HTTPRedirect struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2264,6 +2401,7 @@ type HTTPRedirect struct { // this value. Authority string `protobuf:"bytes,2,opt,name=authority,proto3" json:"authority,omitempty"` // Types that are assignable to RedirectPort: + // // *HTTPRedirect_Port // *HTTPRedirect_DerivePort RedirectPort isHTTPRedirect_RedirectPort `protobuf_oneof:"redirect_port"` @@ -2341,42 +2479,357 @@ func (x *HTTPRedirect) GetDerivePort() HTTPRedirect_RedirectPortSelection { if x, ok := x.GetRedirectPort().(*HTTPRedirect_DerivePort); ok { return x.DerivePort } - return HTTPRedirect_FROM_PROTOCOL_DEFAULT + return HTTPRedirect_FROM_PROTOCOL_DEFAULT +} + +func (x *HTTPRedirect) GetScheme() string { + if x != nil { + return x.Scheme + } + return "" +} + +func (x *HTTPRedirect) GetRedirectCode() uint32 { + if x != nil { + return x.RedirectCode + } + return 0 +} + +type isHTTPRedirect_RedirectPort interface { + isHTTPRedirect_RedirectPort() +} + +type HTTPRedirect_Port struct { + // On a redirect, overwrite the port portion of the URL with this value. + Port uint32 `protobuf:"varint,4,opt,name=port,proto3,oneof"` +} + +type HTTPRedirect_DerivePort struct { + // On a redirect, dynamically set the port: + // * FROM_PROTOCOL_DEFAULT: automatically set to 80 for HTTP and 443 for HTTPS. + // * FROM_REQUEST_PORT: automatically use the port of the request. + DerivePort HTTPRedirect_RedirectPortSelection `protobuf:"varint,5,opt,name=derive_port,json=derivePort,proto3,enum=istio.networking.v1alpha3.HTTPRedirect_RedirectPortSelection,oneof"` +} + +func (*HTTPRedirect_Port) isHTTPRedirect_RedirectPort() {} + +func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {} + +// HTTPDirectResponse can be used to send a fixed response to clients. +// For example, the following rule returns a fixed 503 status with a body +// to requests for /v1/getProductRatings API. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "unknown error" +// ... +// +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "unknown error" +// ... +// +// ``` +// {{}} +// {{}} +// +// It is also possible to specify a binary response body. +// This is mostly useful for non text-based protocols such as gRPC. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64 +// ... +// +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64 +// ... +// +// ``` +// {{}} +// {{}} +// +// It is good practice to add headers in the HTTPRoute +// as well as the direct_response, for example to specify +// the returned Content-Type. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "{\"error\": \"unknown error\"}" +// headers: +// response: +// set: +// content-type: "appliation/json" +// ... +// +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "{\"error\": \"unknown error\"}" +// headers: +// response: +// set: +// content-type: "text/plain" +// ... +// +// ``` +// {{}} +// {{}} +type HTTPDirectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Specifies the HTTP response status to be returned. + Status uint32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` + // Specifies the content of the response body. If this setting is omitted, + // no body is included in the generated response. + Body *HTTPBody `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` +} + +func (x *HTTPDirectResponse) Reset() { + *x = HTTPDirectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HTTPDirectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HTTPDirectResponse) ProtoMessage() {} + +func (x *HTTPDirectResponse) ProtoReflect() protoreflect.Message { + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HTTPDirectResponse.ProtoReflect.Descriptor instead. +func (*HTTPDirectResponse) Descriptor() ([]byte, []int) { + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{13} +} + +func (x *HTTPDirectResponse) GetStatus() uint32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *HTTPDirectResponse) GetBody() *HTTPBody { + if x != nil { + return x.Body + } + return nil +} + +type HTTPBody struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Specifier: + // + // *HTTPBody_String_ + // *HTTPBody_Bytes + Specifier isHTTPBody_Specifier `protobuf_oneof:"specifier"` +} + +func (x *HTTPBody) Reset() { + *x = HTTPBody{} + if protoimpl.UnsafeEnabled { + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HTTPBody) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HTTPBody) ProtoMessage() {} + +func (x *HTTPBody) ProtoReflect() protoreflect.Message { + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HTTPBody.ProtoReflect.Descriptor instead. +func (*HTTPBody) Descriptor() ([]byte, []int) { + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{14} +} + +func (m *HTTPBody) GetSpecifier() isHTTPBody_Specifier { + if m != nil { + return m.Specifier + } + return nil } -func (x *HTTPRedirect) GetScheme() string { - if x != nil { - return x.Scheme +func (x *HTTPBody) GetString_() string { + if x, ok := x.GetSpecifier().(*HTTPBody_String_); ok { + return x.String_ } return "" } -func (x *HTTPRedirect) GetRedirectCode() uint32 { - if x != nil { - return x.RedirectCode +func (x *HTTPBody) GetBytes() []byte { + if x, ok := x.GetSpecifier().(*HTTPBody_Bytes); ok { + return x.Bytes } - return 0 + return nil } -type isHTTPRedirect_RedirectPort interface { - isHTTPRedirect_RedirectPort() +type isHTTPBody_Specifier interface { + isHTTPBody_Specifier() } -type HTTPRedirect_Port struct { - // On a redirect, overwrite the port portion of the URL with this value. - Port uint32 `protobuf:"varint,4,opt,name=port,proto3,oneof"` +type HTTPBody_String_ struct { + // response body as a string + String_ string `protobuf:"bytes,1,opt,name=string,proto3,oneof"` } -type HTTPRedirect_DerivePort struct { - // On a redirect, dynamically set the port: - // * FROM_PROTOCOL_DEFAULT: automatically set to 80 for HTTP and 443 for HTTPS. - // * FROM_REQUEST_PORT: automatically use the port of the request. - DerivePort HTTPRedirect_RedirectPortSelection `protobuf:"varint,5,opt,name=derive_port,json=derivePort,proto3,enum=istio.networking.v1alpha3.HTTPRedirect_RedirectPortSelection,oneof"` +type HTTPBody_Bytes struct { + // response body as base64 encoded bytes. + Bytes []byte `protobuf:"bytes,2,opt,name=bytes,proto3,oneof"` } -func (*HTTPRedirect_Port) isHTTPRedirect_RedirectPort() {} +func (*HTTPBody_String_) isHTTPBody_Specifier() {} -func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {} +func (*HTTPBody_Bytes) isHTTPBody_Specifier() {} // HTTPRewrite can be used to rewrite specific parts of a HTTP request // before forwarding the request to the destination. Rewrite primitive can @@ -2390,20 +2843,24 @@ func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {} // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: /ratings -// rewrite: -// uri: /v1/bookRatings -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// prefix: /ratings +// rewrite: +// uri: /v1/bookRatings +// route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// // ``` // {{}} // @@ -2412,24 +2869,27 @@ func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {} // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: /ratings -// rewrite: -// uri: /v1/bookRatings -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// prefix: /ratings +// rewrite: +// uri: /v1/bookRatings +// route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// // ``` // {{}} // {{}} -// type HTTPRewrite struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2446,7 +2906,7 @@ type HTTPRewrite struct { func (x *HTTPRewrite) Reset() { *x = HTTPRewrite{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[13] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2459,7 +2919,7 @@ func (x *HTTPRewrite) String() string { func (*HTTPRewrite) ProtoMessage() {} func (x *HTTPRewrite) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[13] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2472,7 +2932,7 @@ func (x *HTTPRewrite) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRewrite.ProtoReflect.Descriptor instead. func (*HTTPRewrite) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{13} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{15} } func (x *HTTPRewrite) GetUri() string { @@ -2497,6 +2957,7 @@ type StringMatch struct { unknownFields protoimpl.UnknownFields // Types that are assignable to MatchType: + // // *StringMatch_Exact // *StringMatch_Prefix // *StringMatch_Regex @@ -2506,7 +2967,7 @@ type StringMatch struct { func (x *StringMatch) Reset() { *x = StringMatch{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[14] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2519,7 +2980,7 @@ func (x *StringMatch) String() string { func (*StringMatch) ProtoMessage() {} func (x *StringMatch) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[14] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2532,7 +2993,7 @@ func (x *StringMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use StringMatch.ProtoReflect.Descriptor instead. func (*StringMatch) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{14} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{16} } func (m *StringMatch) GetMatchType() isStringMatch_MatchType { @@ -2600,19 +3061,23 @@ func (*StringMatch_Regex) isStringMatch_MatchType() {} // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// retries: -// attempts: 3 -// perTryTimeout: 2s -// retryOn: connect-failure,refused-stream,503 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// retries: +// attempts: 3 +// perTryTimeout: 2s +// retryOn: connect-failure,refused-stream,503 +// // ``` // {{}} // @@ -2621,23 +3086,26 @@ func (*StringMatch_Regex) isStringMatch_MatchType() {} // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// retries: -// attempts: 3 -// perTryTimeout: 2s -// retryOn: gateway-error,connect-failure,refused-stream +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// retries: +// attempts: 3 +// perTryTimeout: 2s +// retryOn: gateway-error,connect-failure,refused-stream +// // ``` // {{}} // {{}} -// type HTTPRetry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2668,7 +3136,7 @@ type HTTPRetry struct { func (x *HTTPRetry) Reset() { *x = HTTPRetry{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[15] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2681,7 +3149,7 @@ func (x *HTTPRetry) String() string { func (*HTTPRetry) ProtoMessage() {} func (x *HTTPRetry) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[15] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2694,7 +3162,7 @@ func (x *HTTPRetry) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRetry.ProtoReflect.Descriptor instead. func (*HTTPRetry) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{15} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{17} } func (x *HTTPRetry) GetAttempts() int32 { @@ -2739,25 +3207,29 @@ func (x *HTTPRetry) GetRetryRemoteLocalities() *wrappers.BoolValue { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// corsPolicy: -// allowOrigins: -// - exact: https://example.com -// allowMethods: -// - POST -// - GET -// allowCredentials: false -// allowHeaders: -// - X-Foo-Bar -// maxAge: "24h" +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// corsPolicy: +// allowOrigins: +// - exact: https://example.com +// allowMethods: +// - POST +// - GET +// allowCredentials: false +// allowHeaders: +// - X-Foo-Bar +// maxAge: "24h" +// // ``` // {{}} // @@ -2766,29 +3238,32 @@ func (x *HTTPRetry) GetRetryRemoteLocalities() *wrappers.BoolValue { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// corsPolicy: -// allowOrigins: -// - exact: https://example.com -// allowMethods: -// - POST -// - GET -// allowCredentials: false -// allowHeaders: -// - X-Foo-Bar -// maxAge: "24h" +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// corsPolicy: +// allowOrigins: +// - exact: https://example.com +// allowMethods: +// - POST +// - GET +// allowCredentials: false +// allowHeaders: +// - X-Foo-Bar +// maxAge: "24h" +// // ``` // {{}} // {{}} -// type CorsPolicy struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2826,7 +3301,7 @@ type CorsPolicy struct { func (x *CorsPolicy) Reset() { *x = CorsPolicy{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[16] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2839,7 +3314,7 @@ func (x *CorsPolicy) String() string { func (*CorsPolicy) ProtoMessage() {} func (x *CorsPolicy) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[16] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2852,7 +3327,7 @@ func (x *CorsPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use CorsPolicy.ProtoReflect.Descriptor instead. func (*CorsPolicy) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{16} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{18} } // Deprecated: Do not use. @@ -2929,7 +3404,7 @@ type HTTPFaultInjection struct { func (x *HTTPFaultInjection) Reset() { *x = HTTPFaultInjection{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[17] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2942,7 +3417,7 @@ func (x *HTTPFaultInjection) String() string { func (*HTTPFaultInjection) ProtoMessage() {} func (x *HTTPFaultInjection) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[17] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2955,7 +3430,7 @@ func (x *HTTPFaultInjection) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFaultInjection.ProtoReflect.Descriptor instead. func (*HTTPFaultInjection) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{17} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{19} } func (x *HTTPFaultInjection) GetDelay() *HTTPFaultInjection_Delay { @@ -2986,7 +3461,7 @@ type PortSelector struct { func (x *PortSelector) Reset() { *x = PortSelector{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[18] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2999,7 +3474,7 @@ func (x *PortSelector) String() string { func (*PortSelector) ProtoMessage() {} func (x *PortSelector) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[18] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3012,7 +3487,7 @@ func (x *PortSelector) ProtoReflect() protoreflect.Message { // Deprecated: Use PortSelector.ProtoReflect.Descriptor instead. func (*PortSelector) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{18} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{20} } func (x *PortSelector) GetNumber() uint32 { @@ -3034,7 +3509,7 @@ type Percent struct { func (x *Percent) Reset() { *x = Percent{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[19] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3047,7 +3522,7 @@ func (x *Percent) String() string { func (*Percent) ProtoMessage() {} func (x *Percent) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[19] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3060,7 +3535,7 @@ func (x *Percent) ProtoReflect() protoreflect.Message { // Deprecated: Use Percent.ProtoReflect.Descriptor instead. func (*Percent) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{19} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{21} } func (x *Percent) GetValue() float64 { @@ -3088,7 +3563,7 @@ type Headers_HeaderOperations struct { func (x *Headers_HeaderOperations) Reset() { *x = Headers_HeaderOperations{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[20] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3101,7 +3576,7 @@ func (x *Headers_HeaderOperations) String() string { func (*Headers_HeaderOperations) ProtoMessage() {} func (x *Headers_HeaderOperations) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[20] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3149,23 +3624,27 @@ func (x *Headers_HeaderOperations) GetRemove() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - match: -// - sourceLabels: -// env: prod -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// fault: -// delay: -// percentage: -// value: 0.1 -// fixedDelay: 5s +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - match: +// - sourceLabels: +// env: prod +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// fault: +// delay: +// percentage: +// value: 0.1 +// fixedDelay: 5s +// // ``` // {{}} // @@ -3174,23 +3653,27 @@ func (x *Headers_HeaderOperations) GetRemove() []string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - match: -// - sourceLabels: -// env: prod -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// fault: -// delay: -// percentage: -// value: 0.1 -// fixedDelay: 5s +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - match: +// - sourceLabels: +// env: prod +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// fault: +// delay: +// percentage: +// value: 0.1 +// fixedDelay: 5s +// // ``` // {{}} // {{}} @@ -3210,6 +3693,7 @@ type HTTPFaultInjection_Delay struct { // Deprecated: Do not use. Percent int32 `protobuf:"varint,1,opt,name=percent,proto3" json:"percent,omitempty"` // Types that are assignable to HttpDelayType: + // // *HTTPFaultInjection_Delay_FixedDelay // *HTTPFaultInjection_Delay_ExponentialDelay HttpDelayType isHTTPFaultInjection_Delay_HttpDelayType `protobuf_oneof:"http_delay_type"` @@ -3220,7 +3704,7 @@ type HTTPFaultInjection_Delay struct { func (x *HTTPFaultInjection_Delay) Reset() { *x = HTTPFaultInjection_Delay{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[29] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3233,7 +3717,7 @@ func (x *HTTPFaultInjection_Delay) String() string { func (*HTTPFaultInjection_Delay) ProtoMessage() {} func (x *HTTPFaultInjection_Delay) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[29] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3246,7 +3730,7 @@ func (x *HTTPFaultInjection_Delay) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFaultInjection_Delay.ProtoReflect.Descriptor instead. func (*HTTPFaultInjection_Delay) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{17, 0} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{19, 0} } // Deprecated: Do not use. @@ -3314,20 +3798,24 @@ func (*HTTPFaultInjection_Delay_ExponentialDelay) isHTTPFaultInjection_Delay_Htt // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// fault: -// abort: -// percentage: -// value: 0.1 -// httpStatus: 400 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// fault: +// abort: +// percentage: +// value: 0.1 +// httpStatus: 400 +// // ``` // {{}} // @@ -3336,20 +3824,24 @@ func (*HTTPFaultInjection_Delay_ExponentialDelay) isHTTPFaultInjection_Delay_Htt // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// fault: -// abort: -// percentage: -// value: 0.1 -// httpStatus: 400 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// fault: +// abort: +// percentage: +// value: 0.1 +// httpStatus: 400 +// // ``` // {{}} // {{}} @@ -3364,6 +3856,7 @@ type HTTPFaultInjection_Abort struct { unknownFields protoimpl.UnknownFields // Types that are assignable to ErrorType: + // // *HTTPFaultInjection_Abort_HttpStatus // *HTTPFaultInjection_Abort_GrpcStatus // *HTTPFaultInjection_Abort_Http2Error @@ -3375,7 +3868,7 @@ type HTTPFaultInjection_Abort struct { func (x *HTTPFaultInjection_Abort) Reset() { *x = HTTPFaultInjection_Abort{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[30] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3388,7 +3881,7 @@ func (x *HTTPFaultInjection_Abort) String() string { func (*HTTPFaultInjection_Abort) ProtoMessage() {} func (x *HTTPFaultInjection_Abort) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[30] + mi := &file_networking_v1alpha3_virtual_service_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3401,7 +3894,7 @@ func (x *HTTPFaultInjection_Abort) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFaultInjection_Abort.ProtoReflect.Descriptor instead. func (*HTTPFaultInjection_Abort) Descriptor() ([]byte, []int) { - return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{17, 1} + return file_networking_v1alpha3_virtual_service_proto_rawDescGZIP(), []int{19, 1} } func (m *HTTPFaultInjection_Abort) GetErrorType() isHTTPFaultInjection_Abort_ErrorType { @@ -3449,7 +3942,10 @@ type HTTPFaultInjection_Abort_HttpStatus struct { } type HTTPFaultInjection_Abort_GrpcStatus struct { - // $hide_from_docs + // GRPC status code to use to abort the request. The supported + // codes are documented in https://github.com/grpc/grpc/blob/master/doc/statuscodes.md + // Note: If you want to return the status "Unavailable", then you should + // specify the code as `UNAVAILABLE`(all caps), but not `14`. GrpcStatus string `protobuf:"bytes,3,opt,name=grpc_status,json=grpcStatus,proto3,oneof"` } @@ -3502,7 +3998,7 @@ var file_networking_v1alpha3_virtual_service_proto_rawDesc = []byte{ 0x32, 0x27, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, - 0x9c, 0x08, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, + 0xf4, 0x08, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x41, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, @@ -3517,376 +4013,395 @@ var file_networking_v1alpha3_virtual_service_proto_rawDesc = []byte{ 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x08, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x12, 0x3f, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, - 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x07, 0x72, 0x65, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, - 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, - 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3e, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, - 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x43, 0x0a, 0x05, 0x66, 0x61, 0x75, 0x6c, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x3e, 0x0a, - 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x47, 0x0a, - 0x0e, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, - 0x12, 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, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x50, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x11, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, - 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x50, 0x65, - 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x65, 0x72, - 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x73, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x3c, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, - 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x10, 0x52, 0x11, 0x77, 0x65, 0x62, 0x73, 0x6f, - 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x0e, 0x61, 0x70, - 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x3c, - 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xe6, 0x03, 0x0a, - 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4d, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, + 0x12, 0x56, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x08, - 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xba, 0x02, 0x0a, 0x10, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, - 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, + 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0e, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x4e, 0x0a, - 0x03, 0x61, 0x64, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, + 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x77, + 0x72, 0x69, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x61, 0x64, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a, 0x36, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x36, 0x0a, - 0x08, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x52, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 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, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x12, 0x3e, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, + 0x54, 0x50, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x12, 0x43, 0x0a, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, + 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x33, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, + 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0e, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x12, 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, 0x42, 0x02, 0x18, 0x01, 0x52, + 0x0d, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x4f, + 0x0a, 0x11, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, + 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6d, + 0x69, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, + 0x46, 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x73, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, + 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x72, + 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3c, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x0b, 0x10, + 0x10, 0x52, 0x11, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x75, 0x70, 0x67, + 0x72, 0x61, 0x64, 0x65, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, + 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, + 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x3c, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x22, 0xe6, 0x03, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x12, 0x4d, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x4f, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x1a, 0xba, 0x02, 0x0a, 0x10, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4e, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x4e, 0x0a, 0x03, 0x61, 0x64, 0x64, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x03, 0x61, 0x64, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a, 0x36, 0x0a, + 0x08, 0x53, 0x65, 0x74, 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, 0x98, 0x01, 0x0a, 0x08, 0x54, 0x4c, 0x53, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x12, 0x49, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x54, 0x4c, - 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x41, 0x0a, - 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, - 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x22, 0x91, 0x01, 0x0a, 0x08, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x42, 0x0a, - 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, - 0x68, 0x12, 0x41, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x52, 0x6f, 0x75, - 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, - 0x6f, 0x75, 0x74, 0x65, 0x22, 0xa4, 0x09, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, - 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x3e, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, - 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x52, 0x0a, - 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x62, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, - 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, - 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x5f, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x55, 0x72, 0x69, 0x43, 0x61, 0x73, 0x65, 0x12, 0x68, - 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, - 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x1a, 0x62, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x36, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x98, 0x01, + 0x0a, 0x08, 0x54, 0x4c, 0x53, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x49, 0x0a, 0x05, 0x6d, 0x61, + 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x69, 0x73, 0x74, 0x69, + 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x05, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x41, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, + 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x08, 0x54, 0x43, 0x50, + 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x42, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, + 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x41, 0x0a, 0x05, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x33, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0xc5, 0x09, 0x0a, + 0x10, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, + 0x3e, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, + 0x3e, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, + 0x44, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x52, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x62, 0x0a, + 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x5f, 0x0a, + 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, + 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x26, + 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x63, 0x61, 0x73, + 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x55, + 0x72, 0x69, 0x43, 0x61, 0x73, 0x65, 0x12, 0x68, 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, + 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x3f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x57, 0x69, 0x74, + 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, + 0x70, 0x61, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, + 0x74, 0x61, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x62, 0x0a, 0x0c, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x1a, 0x69, 0x0a, 0x13, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa4, 0x02, 0x0a, 0x14, - 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3c, 0x0a, 0x07, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x07, - 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, 0x65, 0x6e, - 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x52, 0x16, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, 0x70, 0x65, - 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x22, 0x7a, 0x0a, 0x10, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, - 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xea, - 0x02, 0x0a, 0x11, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, - 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, - 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x63, - 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x33, 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, - 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, - 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, - 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, - 0x75, 0x72, 0x63, 0x65, 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, 0xff, 0x02, 0x0a, 0x12, - 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x12, 0x21, 0x0a, 0x09, 0x73, 0x6e, 0x69, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x08, 0x73, 0x6e, 0x69, - 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x64, 0x0a, 0x0d, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x54, 0x4c, - 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, - 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x06, 0x20, 0x03, - 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 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, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, 0x0d, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x22, 0xcf, 0x02, - 0x0a, 0x0c, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x10, - 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, - 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, - 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x04, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x60, 0x0a, 0x0b, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x70, - 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3d, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x72, 0x69, - 0x76, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, - 0x6f, 0x64, 0x65, 0x22, 0x49, 0x0a, 0x15, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x50, - 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, - 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x45, - 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x52, 0x4f, 0x4d, 0x5f, - 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x42, 0x0f, - 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x22, - 0x3d, 0x0a, 0x0b, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x10, - 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, - 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x65, - 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, - 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, - 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, - 0x16, 0x0a, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x42, 0x0c, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, - 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, - 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x08, 0x61, 0x74, 0x74, - 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x72, 0x79, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0d, 0x70, 0x65, 0x72, 0x54, 0x72, - 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x74, 0x72, - 0x79, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, - 0x79, 0x4f, 0x6e, 0x12, 0x52, 0x0a, 0x17, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x72, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x15, 0x72, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xee, 0x02, 0x0a, 0x0a, 0x43, 0x6f, 0x72, 0x73, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x25, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, - 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, - 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x4b, 0x0a, - 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x18, 0x07, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, + 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, + 0x01, 0x1a, 0x66, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 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, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x69, 0x0a, 0x13, 0x57, 0x69, 0x74, + 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, + 0x65, 0x79, 0x12, 0x3c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa4, 0x02, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, + 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, + 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x44, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, + 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, + 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3c, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x33, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x07, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x7a, 0x0a, 0x10, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x4e, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0c, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, - 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x12, - 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x48, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x5f, 0x68, - 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, - 0x70, 0x6f, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x32, 0x0a, 0x07, 0x6d, - 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x05, 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, 0x06, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, 0x12, - 0x47, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 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, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x72, 0x65, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x91, 0x05, 0x0a, 0x12, 0x48, 0x54, 0x54, - 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x49, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, + 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xea, 0x02, 0x0a, 0x11, 0x4c, 0x34, 0x4d, 0x61, + 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, + 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, + 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, 0x62, + 0x6e, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x63, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, - 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x65, - 0x6c, 0x61, 0x79, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x61, 0x62, - 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, - 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, 0x05, - 0x61, 0x62, 0x6f, 0x72, 0x74, 0x1a, 0x8a, 0x02, 0x0a, 0x05, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, - 0x1c, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x42, 0x0a, - 0x0b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 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, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, 0x44, 0x65, 0x6c, 0x61, - 0x79, 0x12, 0x48, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 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, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, 0x70, 0x6f, 0x6e, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x42, 0x0a, 0x0a, 0x70, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x50, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, - 0x11, 0x0a, 0x0f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x1a, 0xd7, 0x01, 0x0a, 0x05, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x27, 0x0a, 0x0b, - 0x68, 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x67, 0x72, - 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, - 0x32, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x0a, 0x68, 0x74, 0x74, 0x70, 0x32, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x42, 0x0a, 0x0a, 0x70, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x50, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, - 0x0c, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, 0x08, - 0x01, 0x10, 0x02, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x32, 0x0a, 0x0c, - 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, - 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x22, 0x1f, 0x0a, 0x07, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x22, 0x5a, 0x20, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, + 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0xff, 0x02, 0x0a, 0x12, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, + 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x09, 0x73, + 0x6e, 0x69, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, + 0xe2, 0x41, 0x01, 0x02, 0x52, 0x08, 0x73, 0x6e, 0x69, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2f, + 0x0a, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, + 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, + 0x6f, 0x72, 0x74, 0x12, 0x64, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, + 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x73, 0x74, + 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, + 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x22, 0xcf, 0x02, 0x0a, 0x0c, 0x48, 0x54, 0x54, 0x50, 0x52, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x60, 0x0a, + 0x0b, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x3d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, + 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, + 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, + 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x49, 0x0a, 0x15, + 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, + 0x12, 0x15, 0x0a, 0x11, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, + 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x6b, 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1c, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x04, + 0xe2, 0x41, 0x01, 0x02, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x37, 0x0a, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x73, 0x74, + 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x42, 0x6f, 0x64, 0x79, 0x52, + 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x49, 0x0a, 0x08, 0x48, 0x54, 0x54, 0x50, 0x42, 0x6f, 0x64, + 0x79, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x05, 0x62, + 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x05, 0x62, 0x79, + 0x74, 0x65, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x65, 0x72, + 0x22, 0x3d, 0x0a, 0x0b, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, + 0x65, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x16, + 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x12, 0x16, 0x0a, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x00, 0x52, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x42, 0x0c, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, + 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x52, + 0x65, 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x08, 0x61, 0x74, + 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x72, + 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0d, 0x70, 0x65, 0x72, 0x54, + 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x65, 0x74, + 0x72, 0x79, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x74, + 0x72, 0x79, 0x4f, 0x6e, 0x12, 0x52, 0x0a, 0x17, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x52, 0x15, 0x72, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xee, 0x02, 0x0a, 0x0a, 0x43, 0x6f, 0x72, + 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x25, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, + 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x4b, + 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x33, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x0c, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, + 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x5f, + 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, + 0x78, 0x70, 0x6f, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x32, 0x0a, 0x07, + 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x05, 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, 0x06, 0x6d, 0x61, 0x78, 0x41, 0x67, 0x65, + 0x12, 0x47, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x61, 0x6c, 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, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x43, 0x72, + 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x91, 0x05, 0x0a, 0x12, 0x48, 0x54, + 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x49, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, + 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, + 0x65, 0x6c, 0x61, 0x79, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x49, 0x0a, 0x05, 0x61, + 0x62, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, + 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, + 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x52, + 0x05, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x1a, 0x8a, 0x02, 0x0a, 0x05, 0x44, 0x65, 0x6c, 0x61, 0x79, + 0x12, 0x1c, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x42, + 0x0a, 0x0b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 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, 0x42, 0x04, + 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, 0x44, 0x65, 0x6c, + 0x61, 0x79, 0x12, 0x48, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, + 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 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, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, 0x70, 0x6f, + 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x42, 0x0a, 0x0a, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x50, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, + 0x42, 0x11, 0x0a, 0x0f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x1a, 0xd7, 0x01, 0x0a, 0x05, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x27, 0x0a, + 0x0b, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x67, + 0x72, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x68, 0x74, 0x74, + 0x70, 0x32, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x32, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x42, 0x0a, 0x0a, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x2e, 0x50, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, + 0x42, 0x0c, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x32, 0x0a, + 0x0c, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x1f, 0x0a, 0x07, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x42, 0x22, 0x5a, 0x20, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x33, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3902,7 +4417,7 @@ func file_networking_v1alpha3_virtual_service_proto_rawDescGZIP() []byte { } var file_networking_v1alpha3_virtual_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_networking_v1alpha3_virtual_service_proto_msgTypes = make([]protoimpl.MessageInfo, 31) +var file_networking_v1alpha3_virtual_service_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_networking_v1alpha3_virtual_service_proto_goTypes = []interface{}{ (HTTPRedirect_RedirectPortSelection)(0), // 0: istio.networking.v1alpha3.HTTPRedirect.RedirectPortSelection (*VirtualService)(nil), // 1: istio.networking.v1alpha3.VirtualService @@ -3918,87 +4433,91 @@ var file_networking_v1alpha3_virtual_service_proto_goTypes = []interface{}{ (*L4MatchAttributes)(nil), // 11: istio.networking.v1alpha3.L4MatchAttributes (*TLSMatchAttributes)(nil), // 12: istio.networking.v1alpha3.TLSMatchAttributes (*HTTPRedirect)(nil), // 13: istio.networking.v1alpha3.HTTPRedirect - (*HTTPRewrite)(nil), // 14: istio.networking.v1alpha3.HTTPRewrite - (*StringMatch)(nil), // 15: istio.networking.v1alpha3.StringMatch - (*HTTPRetry)(nil), // 16: istio.networking.v1alpha3.HTTPRetry - (*CorsPolicy)(nil), // 17: istio.networking.v1alpha3.CorsPolicy - (*HTTPFaultInjection)(nil), // 18: istio.networking.v1alpha3.HTTPFaultInjection - (*PortSelector)(nil), // 19: istio.networking.v1alpha3.PortSelector - (*Percent)(nil), // 20: istio.networking.v1alpha3.Percent - (*Headers_HeaderOperations)(nil), // 21: istio.networking.v1alpha3.Headers.HeaderOperations - nil, // 22: istio.networking.v1alpha3.Headers.HeaderOperations.SetEntry - nil, // 23: istio.networking.v1alpha3.Headers.HeaderOperations.AddEntry - nil, // 24: istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry - nil, // 25: istio.networking.v1alpha3.HTTPMatchRequest.SourceLabelsEntry - nil, // 26: istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry - nil, // 27: istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry - nil, // 28: istio.networking.v1alpha3.L4MatchAttributes.SourceLabelsEntry - nil, // 29: istio.networking.v1alpha3.TLSMatchAttributes.SourceLabelsEntry - (*HTTPFaultInjection_Delay)(nil), // 30: istio.networking.v1alpha3.HTTPFaultInjection.Delay - (*HTTPFaultInjection_Abort)(nil), // 31: istio.networking.v1alpha3.HTTPFaultInjection.Abort - (*duration.Duration)(nil), // 32: google.protobuf.Duration - (*wrappers.UInt32Value)(nil), // 33: google.protobuf.UInt32Value - (*wrappers.BoolValue)(nil), // 34: google.protobuf.BoolValue + (*HTTPDirectResponse)(nil), // 14: istio.networking.v1alpha3.HTTPDirectResponse + (*HTTPBody)(nil), // 15: istio.networking.v1alpha3.HTTPBody + (*HTTPRewrite)(nil), // 16: istio.networking.v1alpha3.HTTPRewrite + (*StringMatch)(nil), // 17: istio.networking.v1alpha3.StringMatch + (*HTTPRetry)(nil), // 18: istio.networking.v1alpha3.HTTPRetry + (*CorsPolicy)(nil), // 19: istio.networking.v1alpha3.CorsPolicy + (*HTTPFaultInjection)(nil), // 20: istio.networking.v1alpha3.HTTPFaultInjection + (*PortSelector)(nil), // 21: istio.networking.v1alpha3.PortSelector + (*Percent)(nil), // 22: istio.networking.v1alpha3.Percent + (*Headers_HeaderOperations)(nil), // 23: istio.networking.v1alpha3.Headers.HeaderOperations + nil, // 24: istio.networking.v1alpha3.Headers.HeaderOperations.SetEntry + nil, // 25: istio.networking.v1alpha3.Headers.HeaderOperations.AddEntry + nil, // 26: istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry + nil, // 27: istio.networking.v1alpha3.HTTPMatchRequest.SourceLabelsEntry + nil, // 28: istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry + nil, // 29: istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry + nil, // 30: istio.networking.v1alpha3.L4MatchAttributes.SourceLabelsEntry + nil, // 31: istio.networking.v1alpha3.TLSMatchAttributes.SourceLabelsEntry + (*HTTPFaultInjection_Delay)(nil), // 32: istio.networking.v1alpha3.HTTPFaultInjection.Delay + (*HTTPFaultInjection_Abort)(nil), // 33: istio.networking.v1alpha3.HTTPFaultInjection.Abort + (*duration.Duration)(nil), // 34: google.protobuf.Duration + (*wrappers.UInt32Value)(nil), // 35: google.protobuf.UInt32Value + (*wrappers.BoolValue)(nil), // 36: google.protobuf.BoolValue } var file_networking_v1alpha3_virtual_service_proto_depIdxs = []int32{ 3, // 0: istio.networking.v1alpha3.VirtualService.http:type_name -> istio.networking.v1alpha3.HTTPRoute 6, // 1: istio.networking.v1alpha3.VirtualService.tls:type_name -> istio.networking.v1alpha3.TLSRoute 7, // 2: istio.networking.v1alpha3.VirtualService.tcp:type_name -> istio.networking.v1alpha3.TCPRoute - 19, // 3: istio.networking.v1alpha3.Destination.port:type_name -> istio.networking.v1alpha3.PortSelector + 21, // 3: istio.networking.v1alpha3.Destination.port:type_name -> istio.networking.v1alpha3.PortSelector 8, // 4: istio.networking.v1alpha3.HTTPRoute.match:type_name -> istio.networking.v1alpha3.HTTPMatchRequest 9, // 5: istio.networking.v1alpha3.HTTPRoute.route:type_name -> istio.networking.v1alpha3.HTTPRouteDestination 13, // 6: istio.networking.v1alpha3.HTTPRoute.redirect:type_name -> istio.networking.v1alpha3.HTTPRedirect - 4, // 7: istio.networking.v1alpha3.HTTPRoute.delegate:type_name -> istio.networking.v1alpha3.Delegate - 14, // 8: istio.networking.v1alpha3.HTTPRoute.rewrite:type_name -> istio.networking.v1alpha3.HTTPRewrite - 32, // 9: istio.networking.v1alpha3.HTTPRoute.timeout:type_name -> google.protobuf.Duration - 16, // 10: istio.networking.v1alpha3.HTTPRoute.retries:type_name -> istio.networking.v1alpha3.HTTPRetry - 18, // 11: istio.networking.v1alpha3.HTTPRoute.fault:type_name -> istio.networking.v1alpha3.HTTPFaultInjection - 2, // 12: istio.networking.v1alpha3.HTTPRoute.mirror:type_name -> istio.networking.v1alpha3.Destination - 33, // 13: istio.networking.v1alpha3.HTTPRoute.mirror_percent:type_name -> google.protobuf.UInt32Value - 20, // 14: istio.networking.v1alpha3.HTTPRoute.mirror_percentage:type_name -> istio.networking.v1alpha3.Percent - 17, // 15: istio.networking.v1alpha3.HTTPRoute.cors_policy:type_name -> istio.networking.v1alpha3.CorsPolicy - 5, // 16: istio.networking.v1alpha3.HTTPRoute.headers:type_name -> istio.networking.v1alpha3.Headers - 21, // 17: istio.networking.v1alpha3.Headers.request:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations - 21, // 18: istio.networking.v1alpha3.Headers.response:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations - 12, // 19: istio.networking.v1alpha3.TLSRoute.match:type_name -> istio.networking.v1alpha3.TLSMatchAttributes - 10, // 20: istio.networking.v1alpha3.TLSRoute.route:type_name -> istio.networking.v1alpha3.RouteDestination - 11, // 21: istio.networking.v1alpha3.TCPRoute.match:type_name -> istio.networking.v1alpha3.L4MatchAttributes - 10, // 22: istio.networking.v1alpha3.TCPRoute.route:type_name -> istio.networking.v1alpha3.RouteDestination - 15, // 23: istio.networking.v1alpha3.HTTPMatchRequest.uri:type_name -> istio.networking.v1alpha3.StringMatch - 15, // 24: istio.networking.v1alpha3.HTTPMatchRequest.scheme:type_name -> istio.networking.v1alpha3.StringMatch - 15, // 25: istio.networking.v1alpha3.HTTPMatchRequest.method:type_name -> istio.networking.v1alpha3.StringMatch - 15, // 26: istio.networking.v1alpha3.HTTPMatchRequest.authority:type_name -> istio.networking.v1alpha3.StringMatch - 24, // 27: istio.networking.v1alpha3.HTTPMatchRequest.headers:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry - 25, // 28: istio.networking.v1alpha3.HTTPMatchRequest.source_labels:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.SourceLabelsEntry - 26, // 29: istio.networking.v1alpha3.HTTPMatchRequest.query_params:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry - 27, // 30: istio.networking.v1alpha3.HTTPMatchRequest.without_headers:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry - 2, // 31: istio.networking.v1alpha3.HTTPRouteDestination.destination:type_name -> istio.networking.v1alpha3.Destination - 5, // 32: istio.networking.v1alpha3.HTTPRouteDestination.headers:type_name -> istio.networking.v1alpha3.Headers - 2, // 33: istio.networking.v1alpha3.RouteDestination.destination:type_name -> istio.networking.v1alpha3.Destination - 28, // 34: istio.networking.v1alpha3.L4MatchAttributes.source_labels:type_name -> istio.networking.v1alpha3.L4MatchAttributes.SourceLabelsEntry - 29, // 35: istio.networking.v1alpha3.TLSMatchAttributes.source_labels:type_name -> istio.networking.v1alpha3.TLSMatchAttributes.SourceLabelsEntry - 0, // 36: istio.networking.v1alpha3.HTTPRedirect.derive_port:type_name -> istio.networking.v1alpha3.HTTPRedirect.RedirectPortSelection - 32, // 37: istio.networking.v1alpha3.HTTPRetry.per_try_timeout:type_name -> google.protobuf.Duration - 34, // 38: istio.networking.v1alpha3.HTTPRetry.retry_remote_localities:type_name -> google.protobuf.BoolValue - 15, // 39: istio.networking.v1alpha3.CorsPolicy.allow_origins:type_name -> istio.networking.v1alpha3.StringMatch - 32, // 40: istio.networking.v1alpha3.CorsPolicy.max_age:type_name -> google.protobuf.Duration - 34, // 41: istio.networking.v1alpha3.CorsPolicy.allow_credentials:type_name -> google.protobuf.BoolValue - 30, // 42: istio.networking.v1alpha3.HTTPFaultInjection.delay:type_name -> istio.networking.v1alpha3.HTTPFaultInjection.Delay - 31, // 43: istio.networking.v1alpha3.HTTPFaultInjection.abort:type_name -> istio.networking.v1alpha3.HTTPFaultInjection.Abort - 22, // 44: istio.networking.v1alpha3.Headers.HeaderOperations.set:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations.SetEntry - 23, // 45: istio.networking.v1alpha3.Headers.HeaderOperations.add:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations.AddEntry - 15, // 46: istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry.value:type_name -> istio.networking.v1alpha3.StringMatch - 15, // 47: istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry.value:type_name -> istio.networking.v1alpha3.StringMatch - 15, // 48: istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry.value:type_name -> istio.networking.v1alpha3.StringMatch - 32, // 49: istio.networking.v1alpha3.HTTPFaultInjection.Delay.fixed_delay:type_name -> google.protobuf.Duration - 32, // 50: istio.networking.v1alpha3.HTTPFaultInjection.Delay.exponential_delay:type_name -> google.protobuf.Duration - 20, // 51: istio.networking.v1alpha3.HTTPFaultInjection.Delay.percentage:type_name -> istio.networking.v1alpha3.Percent - 20, // 52: istio.networking.v1alpha3.HTTPFaultInjection.Abort.percentage:type_name -> istio.networking.v1alpha3.Percent - 53, // [53:53] is the sub-list for method output_type - 53, // [53:53] is the sub-list for method input_type - 53, // [53:53] is the sub-list for extension type_name - 53, // [53:53] is the sub-list for extension extendee - 0, // [0:53] is the sub-list for field type_name + 14, // 7: istio.networking.v1alpha3.HTTPRoute.direct_response:type_name -> istio.networking.v1alpha3.HTTPDirectResponse + 4, // 8: istio.networking.v1alpha3.HTTPRoute.delegate:type_name -> istio.networking.v1alpha3.Delegate + 16, // 9: istio.networking.v1alpha3.HTTPRoute.rewrite:type_name -> istio.networking.v1alpha3.HTTPRewrite + 34, // 10: istio.networking.v1alpha3.HTTPRoute.timeout:type_name -> google.protobuf.Duration + 18, // 11: istio.networking.v1alpha3.HTTPRoute.retries:type_name -> istio.networking.v1alpha3.HTTPRetry + 20, // 12: istio.networking.v1alpha3.HTTPRoute.fault:type_name -> istio.networking.v1alpha3.HTTPFaultInjection + 2, // 13: istio.networking.v1alpha3.HTTPRoute.mirror:type_name -> istio.networking.v1alpha3.Destination + 35, // 14: istio.networking.v1alpha3.HTTPRoute.mirror_percent:type_name -> google.protobuf.UInt32Value + 22, // 15: istio.networking.v1alpha3.HTTPRoute.mirror_percentage:type_name -> istio.networking.v1alpha3.Percent + 19, // 16: istio.networking.v1alpha3.HTTPRoute.cors_policy:type_name -> istio.networking.v1alpha3.CorsPolicy + 5, // 17: istio.networking.v1alpha3.HTTPRoute.headers:type_name -> istio.networking.v1alpha3.Headers + 23, // 18: istio.networking.v1alpha3.Headers.request:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations + 23, // 19: istio.networking.v1alpha3.Headers.response:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations + 12, // 20: istio.networking.v1alpha3.TLSRoute.match:type_name -> istio.networking.v1alpha3.TLSMatchAttributes + 10, // 21: istio.networking.v1alpha3.TLSRoute.route:type_name -> istio.networking.v1alpha3.RouteDestination + 11, // 22: istio.networking.v1alpha3.TCPRoute.match:type_name -> istio.networking.v1alpha3.L4MatchAttributes + 10, // 23: istio.networking.v1alpha3.TCPRoute.route:type_name -> istio.networking.v1alpha3.RouteDestination + 17, // 24: istio.networking.v1alpha3.HTTPMatchRequest.uri:type_name -> istio.networking.v1alpha3.StringMatch + 17, // 25: istio.networking.v1alpha3.HTTPMatchRequest.scheme:type_name -> istio.networking.v1alpha3.StringMatch + 17, // 26: istio.networking.v1alpha3.HTTPMatchRequest.method:type_name -> istio.networking.v1alpha3.StringMatch + 17, // 27: istio.networking.v1alpha3.HTTPMatchRequest.authority:type_name -> istio.networking.v1alpha3.StringMatch + 26, // 28: istio.networking.v1alpha3.HTTPMatchRequest.headers:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry + 27, // 29: istio.networking.v1alpha3.HTTPMatchRequest.source_labels:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.SourceLabelsEntry + 28, // 30: istio.networking.v1alpha3.HTTPMatchRequest.query_params:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry + 29, // 31: istio.networking.v1alpha3.HTTPMatchRequest.without_headers:type_name -> istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry + 2, // 32: istio.networking.v1alpha3.HTTPRouteDestination.destination:type_name -> istio.networking.v1alpha3.Destination + 5, // 33: istio.networking.v1alpha3.HTTPRouteDestination.headers:type_name -> istio.networking.v1alpha3.Headers + 2, // 34: istio.networking.v1alpha3.RouteDestination.destination:type_name -> istio.networking.v1alpha3.Destination + 30, // 35: istio.networking.v1alpha3.L4MatchAttributes.source_labels:type_name -> istio.networking.v1alpha3.L4MatchAttributes.SourceLabelsEntry + 31, // 36: istio.networking.v1alpha3.TLSMatchAttributes.source_labels:type_name -> istio.networking.v1alpha3.TLSMatchAttributes.SourceLabelsEntry + 0, // 37: istio.networking.v1alpha3.HTTPRedirect.derive_port:type_name -> istio.networking.v1alpha3.HTTPRedirect.RedirectPortSelection + 15, // 38: istio.networking.v1alpha3.HTTPDirectResponse.body:type_name -> istio.networking.v1alpha3.HTTPBody + 34, // 39: istio.networking.v1alpha3.HTTPRetry.per_try_timeout:type_name -> google.protobuf.Duration + 36, // 40: istio.networking.v1alpha3.HTTPRetry.retry_remote_localities:type_name -> google.protobuf.BoolValue + 17, // 41: istio.networking.v1alpha3.CorsPolicy.allow_origins:type_name -> istio.networking.v1alpha3.StringMatch + 34, // 42: istio.networking.v1alpha3.CorsPolicy.max_age:type_name -> google.protobuf.Duration + 36, // 43: istio.networking.v1alpha3.CorsPolicy.allow_credentials:type_name -> google.protobuf.BoolValue + 32, // 44: istio.networking.v1alpha3.HTTPFaultInjection.delay:type_name -> istio.networking.v1alpha3.HTTPFaultInjection.Delay + 33, // 45: istio.networking.v1alpha3.HTTPFaultInjection.abort:type_name -> istio.networking.v1alpha3.HTTPFaultInjection.Abort + 24, // 46: istio.networking.v1alpha3.Headers.HeaderOperations.set:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations.SetEntry + 25, // 47: istio.networking.v1alpha3.Headers.HeaderOperations.add:type_name -> istio.networking.v1alpha3.Headers.HeaderOperations.AddEntry + 17, // 48: istio.networking.v1alpha3.HTTPMatchRequest.HeadersEntry.value:type_name -> istio.networking.v1alpha3.StringMatch + 17, // 49: istio.networking.v1alpha3.HTTPMatchRequest.QueryParamsEntry.value:type_name -> istio.networking.v1alpha3.StringMatch + 17, // 50: istio.networking.v1alpha3.HTTPMatchRequest.WithoutHeadersEntry.value:type_name -> istio.networking.v1alpha3.StringMatch + 34, // 51: istio.networking.v1alpha3.HTTPFaultInjection.Delay.fixed_delay:type_name -> google.protobuf.Duration + 34, // 52: istio.networking.v1alpha3.HTTPFaultInjection.Delay.exponential_delay:type_name -> google.protobuf.Duration + 22, // 53: istio.networking.v1alpha3.HTTPFaultInjection.Delay.percentage:type_name -> istio.networking.v1alpha3.Percent + 22, // 54: istio.networking.v1alpha3.HTTPFaultInjection.Abort.percentage:type_name -> istio.networking.v1alpha3.Percent + 55, // [55:55] is the sub-list for method output_type + 55, // [55:55] is the sub-list for method input_type + 55, // [55:55] is the sub-list for extension type_name + 55, // [55:55] is the sub-list for extension extendee + 0, // [0:55] is the sub-list for field type_name } func init() { file_networking_v1alpha3_virtual_service_proto_init() } @@ -4164,7 +4683,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { } } file_networking_v1alpha3_virtual_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRewrite); i { + switch v := v.(*HTTPDirectResponse); i { case 0: return &v.state case 1: @@ -4176,7 +4695,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { } } file_networking_v1alpha3_virtual_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StringMatch); i { + switch v := v.(*HTTPBody); i { case 0: return &v.state case 1: @@ -4188,7 +4707,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { } } file_networking_v1alpha3_virtual_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRetry); i { + switch v := v.(*HTTPRewrite); i { case 0: return &v.state case 1: @@ -4200,7 +4719,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { } } file_networking_v1alpha3_virtual_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CorsPolicy); i { + switch v := v.(*StringMatch); i { case 0: return &v.state case 1: @@ -4212,7 +4731,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { } } file_networking_v1alpha3_virtual_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPFaultInjection); i { + switch v := v.(*HTTPRetry); i { case 0: return &v.state case 1: @@ -4224,7 +4743,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { } } file_networking_v1alpha3_virtual_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PortSelector); i { + switch v := v.(*CorsPolicy); i { case 0: return &v.state case 1: @@ -4236,7 +4755,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { } } file_networking_v1alpha3_virtual_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Percent); i { + switch v := v.(*HTTPFaultInjection); i { case 0: return &v.state case 1: @@ -4248,6 +4767,30 @@ func file_networking_v1alpha3_virtual_service_proto_init() { } } file_networking_v1alpha3_virtual_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PortSelector); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_networking_v1alpha3_virtual_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Percent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_networking_v1alpha3_virtual_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Headers_HeaderOperations); i { case 0: return &v.state @@ -4259,7 +4802,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { return nil } } - file_networking_v1alpha3_virtual_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_networking_v1alpha3_virtual_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HTTPFaultInjection_Delay); i { case 0: return &v.state @@ -4271,7 +4814,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { return nil } } - file_networking_v1alpha3_virtual_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_networking_v1alpha3_virtual_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HTTPFaultInjection_Abort); i { case 0: return &v.state @@ -4289,15 +4832,19 @@ func file_networking_v1alpha3_virtual_service_proto_init() { (*HTTPRedirect_DerivePort)(nil), } file_networking_v1alpha3_virtual_service_proto_msgTypes[14].OneofWrappers = []interface{}{ + (*HTTPBody_String_)(nil), + (*HTTPBody_Bytes)(nil), + } + file_networking_v1alpha3_virtual_service_proto_msgTypes[16].OneofWrappers = []interface{}{ (*StringMatch_Exact)(nil), (*StringMatch_Prefix)(nil), (*StringMatch_Regex)(nil), } - file_networking_v1alpha3_virtual_service_proto_msgTypes[29].OneofWrappers = []interface{}{ + file_networking_v1alpha3_virtual_service_proto_msgTypes[31].OneofWrappers = []interface{}{ (*HTTPFaultInjection_Delay_FixedDelay)(nil), (*HTTPFaultInjection_Delay_ExponentialDelay)(nil), } - file_networking_v1alpha3_virtual_service_proto_msgTypes[30].OneofWrappers = []interface{}{ + file_networking_v1alpha3_virtual_service_proto_msgTypes[32].OneofWrappers = []interface{}{ (*HTTPFaultInjection_Abort_HttpStatus)(nil), (*HTTPFaultInjection_Abort_GrpcStatus)(nil), (*HTTPFaultInjection_Abort_Http2Error)(nil), @@ -4308,7 +4855,7 @@ func file_networking_v1alpha3_virtual_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_networking_v1alpha3_virtual_service_proto_rawDesc, NumEnums: 1, - NumMessages: 31, + NumMessages: 33, NumExtensions: 0, NumServices: 0, }, diff --git a/vendor/istio.io/api/networking/v1alpha3/virtual_service.proto b/vendor/istio.io/api/networking/v1alpha3/virtual_service.proto index 9d8b3f902..61e76cb18 100644 --- a/vendor/istio.io/api/networking/v1alpha3/virtual_service.proto +++ b/vendor/istio.io/api/networking/v1alpha3/virtual_service.proto @@ -574,18 +574,25 @@ message HTTPRoute { // is matched if any one of the match blocks succeed. repeated HTTPMatchRequest match = 1; - // A HTTP rule can either redirect or forward (default) traffic. The - // forwarding target can be one of several versions of a service (see + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // The forwarding target can be one of several versions of a service (see // glossary in beginning of document). Weights associated with the // service version determine the proportion of traffic it receives. repeated HTTPRouteDestination route = 2; - // A HTTP rule can either redirect or forward (default) traffic. If - // traffic passthrough option is specified in the rule, + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // If traffic passthrough option is specified in the rule, // route/redirect will be ignored. The redirect primitive can be used to // send a HTTP 301 redirect to a different URI or Authority. HTTPRedirect redirect = 3; + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // Direct Response is used to specify a fixed response that should + // be sent to clients. + // + // It can be set only when `Route` and `Redirect` are empty. + HTTPDirectResponse direct_response = 21; + // Delegate is used to specify the particular VirtualService which // can be used to define delegate HTTPRoute. // @@ -649,7 +656,7 @@ message HTTPRoute { Headers headers = 16; // $hide_from_docs - // Next available field number: 21 + // Next available field number: 22 } @@ -1112,6 +1119,14 @@ message HTTPMatchRequest { // If the VirtualService has a list of gateways specified in the top-level `gateways` field, // it must include the reserved gateway `mesh` for this field to be applicable. string source_namespace = 13; + + // The human readable prefix to use when emitting statistics for this route. + // The statistics are generated with prefix route.. + // This should be set for highly critical routes that one wishes to get "per-route" statistics on. + // This prefix is only for proxy-level statistics (envoy_*) and not service-level (istio_*) statistics. + // Refer to https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-field-config-route-v3-route-stat-prefix + // for statistics that are generated when this is configured. + string stat_prefix = 14; } // Each routing rule is associated with one or more service versions (see @@ -1436,6 +1451,176 @@ message HTTPRedirect { uint32 redirect_code = 3; } +// HTTPDirectResponse can be used to send a fixed response to clients. +// For example, the following rule returns a fixed 503 status with a body +// to requests for /v1/getProductRatings API. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "unknown error" +// ... +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "unknown error" +// ... +// ``` +// {{}} +// {{}} +// +// It is also possible to specify a binary response body. +// This is mostly useful for non text-based protocols such as gRPC. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64 +// ... +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64 +// ... +// ``` +// {{}} +// {{}} +// +// It is good practice to add headers in the HTTPRoute +// as well as the direct_response, for example to specify +// the returned Content-Type. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "{\"error\": \"unknown error\"}" +// headers: +// response: +// set: +// content-type: "appliation/json" +// ... +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "{\"error\": \"unknown error\"}" +// headers: +// response: +// set: +// content-type: "text/plain" +// ... +// ``` +// {{}} +// {{}} +// +message HTTPDirectResponse { + // Specifies the HTTP response status to be returned. + uint32 status = 1 [(google.api.field_behavior) = REQUIRED]; + + // Specifies the content of the response body. If this setting is omitted, + // no body is included in the generated response. + HTTPBody body = 2; +} + +message HTTPBody { + oneof specifier { + // response body as a string + string string = 1; + + // response body as base64 encoded bytes. + bytes bytes = 2; + } +} + // HTTPRewrite can be used to rewrite specific parts of a HTTP request // before forwarding the request to the destination. Rewrite primitive can // be used only with HTTPRouteDestination. The following example @@ -1846,7 +2031,10 @@ message HTTPFaultInjection { // HTTP status code to use to abort the Http request. int32 http_status = 2 [(google.api.field_behavior) = REQUIRED]; - // $hide_from_docs + // GRPC status code to use to abort the request. The supported + // codes are documented in https://github.com/grpc/grpc/blob/master/doc/statuscodes.md + // Note: If you want to return the status "Unavailable", then you should + // specify the code as `UNAVAILABLE`(all caps), but not `14`. string grpc_status = 3; // $hide_from_docs diff --git a/vendor/istio.io/api/networking/v1alpha3/virtual_service_deepcopy.gen.go b/vendor/istio.io/api/networking/v1alpha3/virtual_service_deepcopy.gen.go index 72ed61e87..fc8a56b8e 100644 --- a/vendor/istio.io/api/networking/v1alpha3/virtual_service_deepcopy.gen.go +++ b/vendor/istio.io/api/networking/v1alpha3/virtual_service_deepcopy.gen.go @@ -299,6 +299,48 @@ func (in *HTTPRedirect) DeepCopyInterface() interface{} { return in.DeepCopy() } +// DeepCopyInto supports using HTTPDirectResponse within kubernetes types, where deepcopy-gen is used. +func (in *HTTPDirectResponse) DeepCopyInto(out *HTTPDirectResponse) { + p := proto.Clone(in).(*HTTPDirectResponse) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPDirectResponse. Required by controller-gen. +func (in *HTTPDirectResponse) DeepCopy() *HTTPDirectResponse { + if in == nil { + return nil + } + out := new(HTTPDirectResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPDirectResponse. Required by controller-gen. +func (in *HTTPDirectResponse) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using HTTPBody within kubernetes types, where deepcopy-gen is used. +func (in *HTTPBody) DeepCopyInto(out *HTTPBody) { + p := proto.Clone(in).(*HTTPBody) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPBody. Required by controller-gen. +func (in *HTTPBody) DeepCopy() *HTTPBody { + if in == nil { + return nil + } + out := new(HTTPBody) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPBody. Required by controller-gen. +func (in *HTTPBody) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + // DeepCopyInto supports using HTTPRewrite within kubernetes types, where deepcopy-gen is used. func (in *HTTPRewrite) DeepCopyInto(out *HTTPRewrite) { p := proto.Clone(in).(*HTTPRewrite) diff --git a/vendor/istio.io/api/networking/v1alpha3/virtual_service_json.gen.go b/vendor/istio.io/api/networking/v1alpha3/virtual_service_json.gen.go index a456d5f03..e7dc64fd9 100644 --- a/vendor/istio.io/api/networking/v1alpha3/virtual_service_json.gen.go +++ b/vendor/istio.io/api/networking/v1alpha3/virtual_service_json.gen.go @@ -160,6 +160,28 @@ func (this *HTTPRedirect) UnmarshalJSON(b []byte) error { return VirtualServiceUnmarshaler.Unmarshal(bytes.NewReader(b), this) } +// MarshalJSON is a custom marshaler for HTTPDirectResponse +func (this *HTTPDirectResponse) MarshalJSON() ([]byte, error) { + str, err := VirtualServiceMarshaler.MarshalToString(this) + return []byte(str), err +} + +// UnmarshalJSON is a custom unmarshaler for HTTPDirectResponse +func (this *HTTPDirectResponse) UnmarshalJSON(b []byte) error { + return VirtualServiceUnmarshaler.Unmarshal(bytes.NewReader(b), this) +} + +// MarshalJSON is a custom marshaler for HTTPBody +func (this *HTTPBody) MarshalJSON() ([]byte, error) { + str, err := VirtualServiceMarshaler.MarshalToString(this) + return []byte(str), err +} + +// UnmarshalJSON is a custom unmarshaler for HTTPBody +func (this *HTTPBody) UnmarshalJSON(b []byte) error { + return VirtualServiceUnmarshaler.Unmarshal(bytes.NewReader(b), this) +} + // MarshalJSON is a custom marshaler for HTTPRewrite func (this *HTTPRewrite) MarshalJSON() ([]byte, error) { str, err := VirtualServiceMarshaler.MarshalToString(this) diff --git a/vendor/istio.io/api/networking/v1alpha3/workload_entry.pb.go b/vendor/istio.io/api/networking/v1alpha3/workload_entry.pb.go index 78228213f..bc58c468b 100644 --- a/vendor/istio.io/api/networking/v1alpha3/workload_entry.pb.go +++ b/vendor/istio.io/api/networking/v1alpha3/workload_entry.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1alpha3/workload_entry.proto diff --git a/vendor/istio.io/api/networking/v1alpha3/workload_group.pb.go b/vendor/istio.io/api/networking/v1alpha3/workload_group.pb.go index 3759245c8..c0b2cc8ef 100644 --- a/vendor/istio.io/api/networking/v1alpha3/workload_group.pb.go +++ b/vendor/istio.io/api/networking/v1alpha3/workload_group.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1alpha3/workload_group.proto @@ -218,6 +218,7 @@ type ReadinessProbe struct { // hold true for any of the healthcheck methods. // // Types that are assignable to HealthCheckMethod: + // // *ReadinessProbe_HttpGet // *ReadinessProbe_TcpSocket // *ReadinessProbe_Exec diff --git a/vendor/istio.io/api/networking/v1beta1/destination_rule.gen.json b/vendor/istio.io/api/networking/v1beta1/destination_rule.gen.json index 08256eb69..030400f97 100644 --- a/vendor/istio.io/api/networking/v1beta1/destination_rule.gen.json +++ b/vendor/istio.io/api/networking/v1beta1/destination_rule.gen.json @@ -30,7 +30,7 @@ "type": "string" }, "subjectAltNames": { - "description": "A list of alternate names to verify the subject identity in the certificate. If specified, the proxy will verify that the server certificate's subject alt name matches one of the specified values. If specified, this list overrides the value of subject_alt_names from the ServiceEntry.", + "description": "A list of alternate names to verify the subject identity in the certificate. If specified, the proxy will verify that the server certificate's subject alt name matches one of the specified values. If specified, this list overrides the value of subject_alt_names from the ServiceEntry. If unspecified, automatic validation of upstream presented certificate for new upstream connections will be done based on the downstream HTTP host/authority header, provided `VERIFY_CERT_AT_CLIENT` and `ENABLE_AUTO_SNI` environmental variables are set to `true`.", "type": "array", "items": { "type": "string" @@ -74,12 +74,12 @@ "type": "object", "properties": { "http1MaxPendingRequests": { - "description": "Maximum number of pending HTTP requests to a destination. Default 2^32-1.", + "description": "Maximum number of requests that will be queued while waiting for a ready connection pool connection. Default 1024. Refer to https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking under which conditions a new connection is created for HTTP2. Please note that this is applicable to both HTTP/1.1 and HTTP2.", "type": "integer", "format": "int32" }, "http2MaxRequests": { - "description": "Maximum number of requests to a backend. Default 2^32-1.", + "description": "Maximum number of active requests to a destination. Default 1024. Please note that this is applicable to both HTTP/1.1 and HTTP2.", "type": "integer", "format": "int32" }, @@ -130,6 +130,10 @@ }, "tcpKeepalive": { "$ref": "#/components/schemas/istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive" + }, + "maxConnectionDuration": { + "description": "The maximum duration of a connection. The duration is defined as the period since a connection was established. If not set, there is no max duration. When max_connection_duration is reached the connection will be closed. Duration must be at least 1ms.", + "type": "string" } } }, @@ -189,7 +193,7 @@ "$ref": "#/components/schemas/istio.networking.v1beta1.LocalityLoadBalancerSetting" }, "warmupDurationSecs": { - "description": "Represents the warmup duration of Service. If set, the newly created endpoint of service remains in warmup mode starting from its creation time for the duration of this window and Istio progressively increases amount of traffic for that endpoint instead of sending proportional amount of traffic. This should be enabled for services that require warm up time to serve full production load with reasonable latency. Currently this is only supported for ROUND_ROBIN and LEAST_CONN load balancers.", + "description": "Represents the warmup duration of Service. If set, the newly created endpoint of service remains in warmup mode starting from its creation time for the duration of this window and Istio progressively increases amount of traffic for that endpoint instead of sending proportional amount of traffic. This should be enabled for services that require warm up time to serve full production load with reasonable latency. Currently this is only supported for ROUND_ROBIN and LEAST_REQUEST load balancers.", "type": "string" } }, @@ -571,7 +575,7 @@ "type": "object", "properties": { "protocol": { - "description": "Specifies which protocol to use for tunneling the downstream connection. Supported protocols are: connect - uses HTTP CONNECT; post - uses HTTP POST. HTTP version for upstream requests is determined by the service protocol defined for the proxy.", + "description": "Specifies which protocol to use for tunneling the downstream connection. Supported protocols are: CONNECT - uses HTTP CONNECT; POST - uses HTTP POST. CONNECT is used by default if not specified. HTTP version for upstream requests is determined by the service protocol defined for the proxy.", "type": "string" }, "targetHost": { diff --git a/vendor/istio.io/api/networking/v1beta1/destination_rule.pb.go b/vendor/istio.io/api/networking/v1beta1/destination_rule.pb.go index 6044fe33c..5f8354865 100644 --- a/vendor/istio.io/api/networking/v1beta1/destination_rule.pb.go +++ b/vendor/istio.io/api/networking/v1beta1/destination_rule.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1beta1/destination_rule.proto @@ -453,7 +453,6 @@ type DestinationRule struct { // the destination rule is declared in. Similarly, the value "*" is reserved and // defines an export to all namespaces. ExportTo []string `protobuf:"bytes,4,rep,name=export_to,json=exportTo,proto3" json:"export_to,omitempty"` - // // Criteria used to select the specific set of pods/VMs on which this // `DestinationRule` configuration should be applied. If specified, the `DestinationRule` // configuration will be applied only to the workload instances matching the workload selector @@ -648,19 +647,23 @@ func (x *TrafficPolicy) GetTunnel() *TrafficPolicy_TunnelSettings { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_REQUEST -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// simple: LEAST_REQUEST +// subsets: +// - name: testversion +// labels: +// version: v3 +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// // ``` // {{}} // @@ -669,19 +672,23 @@ func (x *TrafficPolicy) GetTunnel() *TrafficPolicy_TunnelSettings { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: LEAST_REQUEST -// subsets: -// - name: testversion -// labels: -// version: v3 -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// simple: LEAST_REQUEST +// subsets: +// - name: testversion +// labels: +// version: v3 +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// // ``` // {{}} // {{}} @@ -779,12 +786,16 @@ func (x *Subset) GetTrafficPolicy() *TrafficPolicy { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// // ``` // {{}} // @@ -793,12 +804,16 @@ func (x *Subset) GetTrafficPolicy() *TrafficPolicy { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// simple: ROUND_ROBIN +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// simple: ROUND_ROBIN +// // ``` // {{}} // {{}} @@ -813,15 +828,19 @@ func (x *Subset) GetTrafficPolicy() *TrafficPolicy { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// consistentHash: -// httpCookie: -// name: user -// ttl: 0s +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// consistentHash: +// httpCookie: +// name: user +// ttl: 0s +// // ``` // {{}} // @@ -830,19 +849,22 @@ func (x *Subset) GetTrafficPolicy() *TrafficPolicy { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: bookinfo-ratings +// +// name: bookinfo-ratings +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// loadBalancer: -// consistentHash: -// httpCookie: -// name: user -// ttl: 0s +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// loadBalancer: +// consistentHash: +// httpCookie: +// name: user +// ttl: 0s +// // ``` // {{}} // {{}} -// type LoadBalancerSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -851,6 +873,7 @@ type LoadBalancerSettings struct { // Upstream load balancing policy. // // Types that are assignable to LbPolicy: + // // *LoadBalancerSettings_Simple // *LoadBalancerSettings_ConsistentHash LbPolicy isLoadBalancerSettings_LbPolicy `protobuf_oneof:"lb_policy"` @@ -861,7 +884,7 @@ type LoadBalancerSettings struct { // remains in warmup mode starting from its creation time for the duration of this window and // Istio progressively increases amount of traffic for that endpoint instead of sending proportional amount of traffic. // This should be enabled for services that require warm up time to serve full production load with reasonable latency. - // Currently this is only supported for ROUND_ROBIN and LEAST_CONN load balancers. + // Currently this is only supported for ROUND_ROBIN and LEAST_REQUEST load balancers. WarmupDurationSecs *duration.Duration `protobuf:"bytes,4,opt,name=warmup_duration_secs,json=warmupDurationSecs,proto3" json:"warmup_duration_secs,omitempty"` } @@ -963,17 +986,21 @@ func (*LoadBalancerSettings_ConsistentHash) isLoadBalancerSettings_LbPolicy() {} // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: bookinfo-redis +// +// name: bookinfo-redis +// // spec: -// host: myredissrv.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// connectTimeout: 30ms -// tcpKeepalive: -// time: 7200s -// interval: 75s +// +// host: myredissrv.prod.svc.cluster.local +// trafficPolicy: +// connectionPool: +// tcp: +// maxConnections: 100 +// connectTimeout: 30ms +// tcpKeepalive: +// time: 7200s +// interval: 75s +// // ``` // {{}} // @@ -982,21 +1009,24 @@ func (*LoadBalancerSettings_ConsistentHash) isLoadBalancerSettings_LbPolicy() {} // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: bookinfo-redis +// +// name: bookinfo-redis +// // spec: -// host: myredissrv.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// connectTimeout: 30ms -// tcpKeepalive: -// time: 7200s -// interval: 75s +// +// host: myredissrv.prod.svc.cluster.local +// trafficPolicy: +// connectionPool: +// tcp: +// maxConnections: 100 +// connectTimeout: 30ms +// tcpKeepalive: +// time: 7200s +// interval: 75s +// // ``` // {{}} // {{}} -// type ConnectionPoolSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1076,20 +1106,24 @@ func (x *ConnectionPoolSettings) GetHttp() *ConnectionPoolSettings_HTTPSettings // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: reviews-cb-policy +// +// name: reviews-cb-policy +// // spec: -// host: reviews.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// http: -// http2MaxRequests: 1000 -// maxRequestsPerConnection: 10 -// outlierDetection: -// consecutive5xxErrors: 7 -// interval: 5m -// baseEjectionTime: 15m +// +// host: reviews.prod.svc.cluster.local +// trafficPolicy: +// connectionPool: +// tcp: +// maxConnections: 100 +// http: +// http2MaxRequests: 1000 +// maxRequestsPerConnection: 10 +// outlierDetection: +// consecutive5xxErrors: 7 +// interval: 5m +// baseEjectionTime: 15m +// // ``` // {{}} // @@ -1098,24 +1132,27 @@ func (x *ConnectionPoolSettings) GetHttp() *ConnectionPoolSettings_HTTPSettings // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: reviews-cb-policy +// +// name: reviews-cb-policy +// // spec: -// host: reviews.prod.svc.cluster.local -// trafficPolicy: -// connectionPool: -// tcp: -// maxConnections: 100 -// http: -// http2MaxRequests: 1000 -// maxRequestsPerConnection: 10 -// outlierDetection: -// consecutive5xxErrors: 7 -// interval: 5m -// baseEjectionTime: 15m +// +// host: reviews.prod.svc.cluster.local +// trafficPolicy: +// connectionPool: +// tcp: +// maxConnections: 100 +// http: +// http2MaxRequests: 1000 +// maxRequestsPerConnection: 10 +// outlierDetection: +// consecutive5xxErrors: 7 +// interval: 5m +// baseEjectionTime: 15m +// // ``` // {{}} // {{}} -// type OutlierDetection struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1301,15 +1338,19 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: db-mtls +// +// name: db-mtls +// // spec: -// host: mydbserver.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem +// +// host: mydbserver.prod.svc.cluster.local +// trafficPolicy: +// tls: +// mode: MUTUAL +// clientCertificate: /etc/certs/myclientcert.pem +// privateKey: /etc/certs/client_private_key.pem +// caCertificates: /etc/certs/rootcacerts.pem +// // ``` // {{}} // @@ -1318,15 +1359,19 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: db-mtls +// +// name: db-mtls +// // spec: -// host: mydbserver.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: MUTUAL -// clientCertificate: /etc/certs/myclientcert.pem -// privateKey: /etc/certs/client_private_key.pem -// caCertificates: /etc/certs/rootcacerts.pem +// +// host: mydbserver.prod.svc.cluster.local +// trafficPolicy: +// tls: +// mode: MUTUAL +// clientCertificate: /etc/certs/myclientcert.pem +// privateKey: /etc/certs/client_private_key.pem +// caCertificates: /etc/certs/rootcacerts.pem +// // ``` // {{}} // {{}} @@ -1340,12 +1385,16 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: tls-foo +// +// name: tls-foo +// // spec: -// host: "*.foo.com" -// trafficPolicy: -// tls: -// mode: SIMPLE +// +// host: "*.foo.com" +// trafficPolicy: +// tls: +// mode: SIMPLE +// // ``` // {{}} // @@ -1354,12 +1403,16 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: tls-foo +// +// name: tls-foo +// // spec: -// host: "*.foo.com" -// trafficPolicy: -// tls: -// mode: SIMPLE +// +// host: "*.foo.com" +// trafficPolicy: +// tls: +// mode: SIMPLE +// // ``` // {{}} // {{}} @@ -1373,12 +1426,16 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: ratings-istio-mtls +// +// name: ratings-istio-mtls +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: ISTIO_MUTUAL +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// tls: +// mode: ISTIO_MUTUAL +// // ``` // {{}} // @@ -1387,16 +1444,19 @@ func (x *OutlierDetection) GetMinHealthPercent() int32 { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: ratings-istio-mtls +// +// name: ratings-istio-mtls +// // spec: -// host: ratings.prod.svc.cluster.local -// trafficPolicy: -// tls: -// mode: ISTIO_MUTUAL +// +// host: ratings.prod.svc.cluster.local +// trafficPolicy: +// tls: +// mode: ISTIO_MUTUAL +// // ``` // {{}} // {{}} -// type ClientTLSSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1439,7 +1499,10 @@ type ClientTLSSettings struct { // certificate. If specified, the proxy will verify that the server // certificate's subject alt name matches one of the specified values. // If specified, this list overrides the value of subject_alt_names - // from the ServiceEntry. + // from the ServiceEntry. If unspecified, automatic validation of upstream + // presented certificate for new upstream connections will be done based on the + // downstream HTTP host/authority header, provided `VERIFY_CERT_AT_CLIENT` + // and `ENABLE_AUTO_SNI` environmental variables are set to `true`. SubjectAltNames []string `protobuf:"bytes,5,rep,name=subject_alt_names,json=subjectAltNames,proto3" json:"subject_alt_names,omitempty"` // SNI string to present to the server during TLS handshake. // If unspecified, SNI will be automatically set based on downstream HTTP @@ -1566,15 +1629,17 @@ func (x *ClientTLSSettings) GetInsecureSkipVerify() *wrappers.BoolValue { // A similar setting is specified for traffic originating in "us-west/zone2/*". // // ```yaml -// distribute: -// - from: us-west/zone1/* -// to: -// "us-west/zone1/*": 80 -// "us-west/zone2/*": 20 -// - from: us-west/zone2/* -// to: -// "us-west/zone1/*": 20 -// "us-west/zone2/*": 80 +// +// distribute: +// - from: us-west/zone1/* +// to: +// "us-west/zone1/*": 80 +// "us-west/zone2/*": 20 +// - from: us-west/zone2/* +// to: +// "us-west/zone1/*": 20 +// "us-west/zone2/*": 80 +// // ``` // // If the goal of the operator is not to distribute load across zones and @@ -1589,11 +1654,13 @@ func (x *ClientTLSSettings) GetInsecureSkipVerify() *wrappers.BoolValue { // and similarly us-west should failover to us-east. // // ```yaml -// failover: -// - from: us-east -// to: eu-west -// - from: us-west -// to: us-east +// +// failover: +// - from: us-east +// to: eu-west +// - from: us-west +// to: us-east +// // ``` // Locality load balancing settings. type LocalityLoadBalancerSetting struct { @@ -1723,7 +1790,6 @@ type TrafficPolicy_PortTrafficPolicy struct { // Specifies the number of a port on the destination service // on which this policy is being applied. - // Port *PortSelector `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` // Settings controlling the load balancer algorithms. LoadBalancer *LoadBalancerSettings `protobuf:"bytes,2,opt,name=load_balancer,json=loadBalancer,proto3" json:"load_balancer,omitempty"` @@ -1809,8 +1875,11 @@ type TrafficPolicy_TunnelSettings struct { // Specifies which protocol to use for tunneling the downstream connection. // Supported protocols are: - // connect - uses HTTP CONNECT; - // post - uses HTTP POST. + // + // CONNECT - uses HTTP CONNECT; + // POST - uses HTTP POST. + // + // CONNECT is used by default if not specified. // HTTP version for upstream requests is determined by the service protocol defined for the proxy. Protocol string `protobuf:"bytes,1,opt,name=protocol,proto3" json:"protocol,omitempty"` // Specifies a host to which the downstream connection is tunneled. @@ -1886,6 +1955,7 @@ type LoadBalancerSettings_ConsistentHashLB struct { // The hash key to use. // // Types that are assignable to HashKey: + // // *LoadBalancerSettings_ConsistentHashLB_HttpHeaderName // *LoadBalancerSettings_ConsistentHashLB_HttpCookie // *LoadBalancerSettings_ConsistentHashLB_UseSourceIp @@ -2092,6 +2162,10 @@ type ConnectionPoolSettings_TCPSettings struct { ConnectTimeout *duration.Duration `protobuf:"bytes,2,opt,name=connect_timeout,json=connectTimeout,proto3" json:"connect_timeout,omitempty"` // If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives. TcpKeepalive *ConnectionPoolSettings_TCPSettings_TcpKeepalive `protobuf:"bytes,3,opt,name=tcp_keepalive,json=tcpKeepalive,proto3" json:"tcp_keepalive,omitempty"` + // The maximum duration of a connection. The duration is defined as the period since a connection + // was established. If not set, there is no max duration. When max_connection_duration + // is reached the connection will be closed. Duration must be at least 1ms. + MaxConnectionDuration *duration.Duration `protobuf:"bytes,4,opt,name=max_connection_duration,json=maxConnectionDuration,proto3" json:"max_connection_duration,omitempty"` } func (x *ConnectionPoolSettings_TCPSettings) Reset() { @@ -2147,15 +2221,27 @@ func (x *ConnectionPoolSettings_TCPSettings) GetTcpKeepalive() *ConnectionPoolSe return nil } +func (x *ConnectionPoolSettings_TCPSettings) GetMaxConnectionDuration() *duration.Duration { + if x != nil { + return x.MaxConnectionDuration + } + return nil +} + // Settings applicable to HTTP1.1/HTTP2/GRPC connections. type ConnectionPoolSettings_HTTPSettings struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Maximum number of pending HTTP requests to a destination. Default 2^32-1. + // Maximum number of requests that will be queued while waiting for + // a ready connection pool connection. Default 1024. + // Refer to https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking + // under which conditions a new connection is created for HTTP2. + // Please note that this is applicable to both HTTP/1.1 and HTTP2. Http1MaxPendingRequests int32 `protobuf:"varint,1,opt,name=http1_max_pending_requests,json=http1MaxPendingRequests,proto3" json:"http1_max_pending_requests,omitempty"` - // Maximum number of requests to a backend. Default 2^32-1. + // Maximum number of active requests to a destination. Default 1024. + // Please note that this is applicable to both HTTP/1.1 and HTTP2. Http2MaxRequests int32 `protobuf:"varint,2,opt,name=http2_max_requests,json=http2MaxRequests,proto3" json:"http2_max_requests,omitempty"` // Maximum number of requests per connection to a backend. Setting this // parameter to 1 disables keep alive. Default 0, meaning "unlimited", @@ -2504,7 +2590,7 @@ var file_networking_v1beta1_destination_rule_proto_rawDesc = []byte{ 0x24, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x52, 0x10, 0x77, 0x6f, 0x72, 0x6b, 0x6c, 0x6f, 0x61, 0x64, 0x53, - 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xaf, 0x08, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x66, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0xa8, 0x08, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x53, 0x0a, 0x0d, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, @@ -2563,266 +2649,271 @@ var file_networking_v1beta1_destination_rule_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x1a, 0x80, 0x01, 0x0a, 0x0e, 0x54, 0x75, 0x6e, 0x6e, 0x65, - 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x20, 0x0a, 0x08, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x02, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x25, 0x0a, 0x0b, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, - 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x72, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x22, 0xf3, 0x01, 0x0a, 0x06, 0x53, 0x75, - 0x62, 0x73, 0x65, 0x74, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x44, - 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, - 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x12, 0x4e, 0x0a, 0x0e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, - 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, - 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, - 0xc2, 0x07, 0x0a, 0x14, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x51, 0x0a, 0x06, 0x73, 0x69, 0x6d, 0x70, - 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x37, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, - 0x42, 0x48, 0x00, 0x52, 0x06, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x6a, 0x0a, 0x0f, 0x63, - 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, - 0x61, 0x73, 0x68, 0x4c, 0x42, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, 0x65, 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x62, 0x5f, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, - 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x62, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x4b, - 0x0a, 0x14, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x73, 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, 0x12, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x63, 0x73, 0x1a, 0xb7, 0x03, 0x0a, 0x10, - 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x42, - 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x68, 0x74, - 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x6d, 0x0a, 0x0b, - 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x4a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x73, 0x52, 0x03, 0x74, 0x6c, 0x73, 0x1a, 0x7a, 0x0a, 0x0e, 0x54, 0x75, 0x6e, 0x6e, 0x65, 0x6c, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x25, 0x0a, 0x0b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x68, + 0x6f, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, + 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x48, 0x6f, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0b, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, + 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x6f, + 0x72, 0x74, 0x22, 0xf3, 0x01, 0x0a, 0x06, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x12, 0x18, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, + 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x44, 0x0a, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, + 0x61, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x4e, 0x0a, + 0x0e, 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x54, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0d, + 0x74, 0x72, 0x61, 0x66, 0x66, 0x69, 0x63, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x1a, 0x39, 0x0a, + 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xc2, 0x07, 0x0a, 0x14, 0x4c, 0x6f, 0x61, + 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x12, 0x51, 0x0a, 0x06, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x37, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, - 0x4c, 0x42, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x48, 0x00, 0x52, - 0x0a, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x75, - 0x73, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, - 0x70, 0x12, 0x3b, 0x0a, 0x19, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x16, 0x68, 0x74, 0x74, 0x70, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, - 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, - 0x75, 0x6d, 0x52, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x7a, 0x65, 0x1a, 0x6d, 0x0a, 0x0a, 0x48, 0x54, - 0x54, 0x50, 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x31, 0x0a, 0x03, 0x74, 0x74, 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, 0x42, 0x04, - 0xe2, 0x41, 0x01, 0x02, 0x52, 0x03, 0x74, 0x74, 0x6c, 0x42, 0x0a, 0x0a, 0x08, 0x68, 0x61, 0x73, - 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x70, 0x0a, 0x08, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, - 0x42, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, - 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0a, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, - 0x10, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, - 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x50, 0x41, 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, - 0x48, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x42, - 0x49, 0x4e, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x52, 0x45, - 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x05, 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x62, 0x5f, 0x70, 0x6f, - 0x6c, 0x69, 0x63, 0x79, 0x22, 0xbd, 0x08, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x4e, 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, - 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, - 0x51, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, + 0x73, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x42, 0x48, 0x00, 0x52, 0x06, 0x73, 0x69, + 0x6d, 0x70, 0x6c, 0x65, 0x12, 0x6a, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3f, 0x2e, + 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, + 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x43, 0x6f, + 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x42, 0x48, 0x00, + 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, + 0x12, 0x65, 0x0a, 0x13, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x5f, 0x6c, 0x62, 0x5f, + 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, - 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x68, 0x74, - 0x74, 0x70, 0x1a, 0xf9, 0x02, 0x0a, 0x0b, 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78, - 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0f, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, - 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, - 0x6e, 0x0a, 0x0d, 0x74, 0x63, 0x70, 0x5f, 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x49, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, + 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x52, 0x11, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x62, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x4b, 0x0a, 0x14, 0x77, 0x61, 0x72, 0x6d, 0x75, + 0x70, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x63, 0x73, 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, 0x12, 0x77, 0x61, 0x72, 0x6d, 0x75, 0x70, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x65, 0x63, 0x73, 0x1a, 0xb7, 0x03, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x73, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x42, 0x12, 0x2a, 0x0a, 0x10, 0x68, 0x74, 0x74, + 0x70, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0e, 0x68, 0x74, 0x74, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x6d, 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x63, 0x6f, + 0x6f, 0x6b, 0x69, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x4a, 0x2e, 0x69, 0x73, 0x74, + 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x69, + 0x73, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x61, 0x73, 0x68, 0x4c, 0x42, 0x2e, 0x48, 0x54, 0x54, 0x50, + 0x43, 0x6f, 0x6f, 0x6b, 0x69, 0x65, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x43, 0x6f, + 0x6f, 0x6b, 0x69, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x5f, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x5f, 0x69, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x0b, 0x75, + 0x73, 0x65, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x70, 0x12, 0x3b, 0x0a, 0x19, 0x68, 0x74, + 0x74, 0x70, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, + 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x16, 0x68, 0x74, 0x74, 0x70, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, + 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6d, 0x69, 0x6e, 0x69, 0x6d, + 0x75, 0x6d, 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x52, 0x69, 0x6e, 0x67, 0x53, + 0x69, 0x7a, 0x65, 0x1a, 0x6d, 0x0a, 0x0a, 0x48, 0x54, 0x54, 0x50, 0x43, 0x6f, 0x6f, 0x6b, 0x69, + 0x65, 0x12, 0x18, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, + 0x31, 0x0a, 0x03, 0x74, 0x74, 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, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x03, 0x74, + 0x74, 0x6c, 0x42, 0x0a, 0x0a, 0x08, 0x68, 0x61, 0x73, 0x68, 0x5f, 0x6b, 0x65, 0x79, 0x22, 0x70, + 0x0a, 0x08, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x4c, 0x42, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, + 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0a, 0x4c, + 0x45, 0x41, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x10, 0x01, 0x1a, 0x02, 0x08, 0x01, 0x12, + 0x0a, 0x0a, 0x06, 0x52, 0x41, 0x4e, 0x44, 0x4f, 0x4d, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x50, + 0x41, 0x53, 0x53, 0x54, 0x48, 0x52, 0x4f, 0x55, 0x47, 0x48, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, + 0x52, 0x4f, 0x55, 0x4e, 0x44, 0x5f, 0x52, 0x4f, 0x42, 0x49, 0x4e, 0x10, 0x04, 0x12, 0x11, 0x0a, + 0x0d, 0x4c, 0x45, 0x41, 0x53, 0x54, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x05, + 0x42, 0x0b, 0x0a, 0x09, 0x6c, 0x62, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x22, 0x90, 0x09, + 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x4e, 0x0a, 0x03, 0x74, 0x63, 0x70, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x52, 0x03, 0x74, 0x63, 0x70, 0x12, 0x51, 0x0a, 0x04, 0x68, 0x74, 0x74, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, - 0x65, 0x52, 0x0c, 0x74, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x1a, - 0x8c, 0x01, 0x0a, 0x0c, 0x54, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, - 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, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x76, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x04, 0x68, 0x74, 0x74, 0x70, 0x1a, 0xcc, 0x03, 0x0a, 0x0b, + 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x6d, + 0x61, 0x78, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x42, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0e, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x6e, 0x0a, 0x0d, 0x74, 0x63, 0x70, 0x5f, + 0x6b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x49, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x54, 0x43, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, 0x63, + 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x0c, 0x74, 0x63, 0x70, 0x4b, + 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x51, 0x0a, 0x17, 0x6d, 0x61, 0x78, 0x5f, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x75, 0x72, 0x61, 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, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x1a, 0x83, - 0x04, 0x0a, 0x0c, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, - 0x3b, 0x0a, 0x1a, 0x68, 0x74, 0x74, 0x70, 0x31, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x17, 0x68, 0x74, 0x74, 0x70, 0x31, 0x4d, 0x61, 0x78, 0x50, 0x65, 0x6e, - 0x64, 0x69, 0x6e, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, - 0x68, 0x74, 0x74, 0x70, 0x32, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, 0x74, 0x74, 0x70, 0x32, 0x4d, - 0x61, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x6d, 0x61, - 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x18, 0x6d, 0x61, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, - 0x5f, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, - 0x6d, 0x61, 0x78, 0x52, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x69, 0x64, - 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x15, 0x6d, 0x61, 0x78, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x8c, 0x01, 0x0a, 0x0c, + 0x54, 0x63, 0x70, 0x4b, 0x65, 0x65, 0x70, 0x61, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x70, 0x72, 0x6f, 0x62, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x70, 0x72, + 0x6f, 0x62, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 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, 0x04, 0x74, + 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x08, 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, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x1a, 0x83, 0x04, 0x0a, 0x0c, 0x48, + 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x3b, 0x0a, 0x1a, 0x68, + 0x74, 0x74, 0x70, 0x31, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x17, 0x68, 0x74, 0x74, 0x70, 0x31, 0x4d, 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x12, 0x68, 0x74, 0x74, 0x70, + 0x32, 0x5f, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x68, 0x74, 0x74, 0x70, 0x32, 0x4d, 0x61, 0x78, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x1b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x18, 0x6d, 0x61, 0x78, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x50, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x72, 0x65, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6d, 0x61, 0x78, 0x52, + 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x3c, 0x0a, 0x0c, 0x69, 0x64, 0x6c, 0x65, 0x5f, 0x74, + 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x05, 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, 0x0b, 0x69, 0x64, 0x6c, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x11, 0x68, 0x32, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61, + 0x64, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x4d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, + 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0f, + 0x68, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, + 0x2e, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x75, 0x73, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x22, + 0x3f, 0x0a, 0x0f, 0x48, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, + 0x63, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, + 0x12, 0x0a, 0x0e, 0x44, 0x4f, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, + 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x02, + 0x22, 0x8a, 0x05, 0x0a, 0x10, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, 0x44, 0x65, 0x74, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, + 0x76, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x22, 0x73, 0x70, 0x6c, 0x69, + 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x45, 0x78, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x45, 0x72, + 0x72, 0x6f, 0x72, 0x73, 0x12, 0x67, 0x0a, 0x21, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 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, 0x1e, 0x63, + 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, + 0x72, 0x69, 0x67, 0x69, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 0x12, 0x5a, 0x0a, + 0x1a, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, + 0x18, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x47, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x52, 0x0a, 0x16, 0x63, 0x6f, 0x6e, + 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x35, 0x78, 0x78, 0x5f, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x73, 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, 0x55, 0x49, 0x6e, 0x74, + 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, + 0x74, 0x69, 0x76, 0x65, 0x35, 0x78, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x35, 0x0a, + 0x08, 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, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x12, 0x47, 0x0a, 0x12, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x65, 0x6a, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x0b, 0x69, 0x64, 0x6c, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x79, 0x0a, 0x11, 0x68, 0x32, 0x5f, 0x75, - 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x4d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x6f, 0x6c, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x2e, 0x48, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, 0x69, - 0x63, 0x79, 0x52, 0x0f, 0x68, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x12, 0x2e, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x65, 0x6e, - 0x74, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x11, 0x75, 0x73, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x22, 0x3f, 0x0a, 0x0f, 0x48, 0x32, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, - 0x54, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x4f, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x55, 0x50, - 0x47, 0x52, 0x41, 0x44, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x50, 0x47, 0x52, 0x41, - 0x44, 0x45, 0x10, 0x02, 0x22, 0x8a, 0x05, 0x0a, 0x10, 0x4f, 0x75, 0x74, 0x6c, 0x69, 0x65, 0x72, - 0x44, 0x65, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x12, 0x63, 0x6f, 0x6e, - 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x73, 0x65, - 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x4a, 0x0a, 0x22, - 0x73, 0x70, 0x6c, 0x69, 0x74, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x65, 0x72, 0x72, 0x6f, - 0x72, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x45, - 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x4f, 0x72, 0x69, 0x67, - 0x69, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x67, 0x0a, 0x21, 0x63, 0x6f, 0x6e, 0x73, - 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x5f, 0x6f, 0x72, - 0x69, 0x67, 0x69, 0x6e, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x73, 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, 0x1e, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, - 0x73, 0x12, 0x5a, 0x0a, 0x1a, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, - 0x5f, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 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, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, - 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x52, 0x0a, - 0x16, 0x63, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x35, 0x78, 0x78, - 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 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, - 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x63, 0x6f, 0x6e, - 0x73, 0x65, 0x63, 0x75, 0x74, 0x69, 0x76, 0x65, 0x35, 0x78, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x73, 0x12, 0x35, 0x0a, 0x08, 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, 0x08, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x47, 0x0a, 0x12, 0x62, 0x61, 0x73, 0x65, - 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 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, 0x62, 0x61, 0x73, 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, - 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x12, 0x6d, 0x61, 0x78, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x63, - 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x10, 0x6d, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, - 0x74, 0x22, 0xd2, 0x03, 0x0a, 0x11, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x4d, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x2e, 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, - 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x11, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, - 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0e, 0x63, 0x61, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, - 0x27, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x61, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x75, 0x62, 0x6a, - 0x65, 0x63, 0x74, 0x5f, 0x61, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, - 0x61, 0x6d, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x73, 0x6e, 0x69, 0x12, 0x4c, 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, - 0x72, 0x65, 0x5f, 0x73, 0x6b, 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x52, 0x12, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x22, 0x40, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x12, - 0x0b, 0x0a, 0x07, 0x44, 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x53, 0x49, 0x4d, 0x50, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x55, 0x54, 0x55, - 0x41, 0x4c, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x53, 0x54, 0x49, 0x4f, 0x5f, 0x4d, 0x55, - 0x54, 0x55, 0x41, 0x4c, 0x10, 0x03, 0x22, 0xa2, 0x04, 0x0a, 0x1b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, - 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, - 0x62, 0x75, 0x74, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x64, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x5a, 0x0a, 0x08, 0x66, 0x61, 0x69, 0x6c, - 0x6f, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, - 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x2e, 0x46, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, - 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, - 0x5f, 0x70, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x10, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, - 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x1a, 0xb1, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x58, 0x0a, 0x02, 0x74, 0x6f, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, + 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x62, 0x61, 0x73, + 0x65, 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x30, 0x0a, + 0x14, 0x6d, 0x61, 0x78, 0x5f, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x12, 0x6d, 0x61, 0x78, + 0x45, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, + 0x2c, 0x0a, 0x12, 0x6d, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x5f, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x10, 0x6d, 0x69, 0x6e, + 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0xd2, 0x03, + 0x0a, 0x11, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x12, 0x4d, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x33, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x54, 0x4c, 0x53, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x2e, 0x54, + 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x04, 0x6d, 0x6f, + 0x64, 0x65, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x63, 0x65, 0x72, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x43, + 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, + 0x61, 0x6c, 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x41, 0x6c, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x73, + 0x12, 0x10, 0x0a, 0x03, 0x73, 0x6e, 0x69, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x73, + 0x6e, 0x69, 0x12, 0x4c, 0x0a, 0x14, 0x69, 0x6e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x5f, 0x73, + 0x6b, 0x69, 0x70, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x69, 0x6e, + 0x73, 0x65, 0x63, 0x75, 0x72, 0x65, 0x53, 0x6b, 0x69, 0x70, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, + 0x22, 0x40, 0x0a, 0x07, 0x54, 0x4c, 0x53, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, + 0x49, 0x53, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4d, 0x50, + 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, 0x10, 0x02, + 0x12, 0x10, 0x0a, 0x0c, 0x49, 0x53, 0x54, 0x49, 0x4f, 0x5f, 0x4d, 0x55, 0x54, 0x55, 0x41, 0x4c, + 0x10, 0x03, 0x22, 0xa2, 0x04, 0x0a, 0x1b, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, + 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x12, 0x60, 0x0a, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x52, 0x02, 0x74, 0x6f, 0x1a, 0x35, 0x0a, 0x07, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, - 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, - 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x2e, 0x0a, 0x08, 0x46, - 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, - 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x21, 0x5a, 0x1f, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x64, 0x69, 0x73, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x12, 0x5a, 0x0a, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x46, 0x61, + 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, + 0x12, 0x2b, 0x0a, 0x11, 0x66, 0x61, 0x69, 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, 0x69, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x10, 0x66, 0x61, 0x69, + 0x6c, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x34, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 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, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, + 0x6c, 0x65, 0x64, 0x1a, 0xb1, 0x01, 0x0a, 0x0a, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x58, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x48, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x4c, 0x6f, 0x61, 0x64, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, + 0x65, 0x72, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x2e, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x02, 0x74, 0x6f, + 0x1a, 0x35, 0x0a, 0x07, 0x54, 0x6f, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x2e, 0x0a, 0x08, 0x46, 0x61, 0x69, 0x6c, 0x6f, + 0x76, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x42, 0x21, 0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, + 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -2905,16 +2996,17 @@ var file_networking_v1beta1_destination_rule_proto_depIdxs = []int32{ 23, // 33: istio.networking.v1beta1.LoadBalancerSettings.ConsistentHashLB.HTTPCookie.ttl:type_name -> google.protobuf.Duration 23, // 34: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.connect_timeout:type_name -> google.protobuf.Duration 18, // 35: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.tcp_keepalive:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive - 23, // 36: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.idle_timeout:type_name -> google.protobuf.Duration - 1, // 37: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.h2_upgrade_policy:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy - 23, // 38: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.time:type_name -> google.protobuf.Duration - 23, // 39: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.interval:type_name -> google.protobuf.Duration - 21, // 40: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.to:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.ToEntry - 41, // [41:41] is the sub-list for method output_type - 41, // [41:41] is the sub-list for method input_type - 41, // [41:41] is the sub-list for extension type_name - 41, // [41:41] is the sub-list for extension extendee - 0, // [0:41] is the sub-list for field type_name + 23, // 36: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.max_connection_duration:type_name -> google.protobuf.Duration + 23, // 37: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.idle_timeout:type_name -> google.protobuf.Duration + 1, // 38: istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.h2_upgrade_policy:type_name -> istio.networking.v1beta1.ConnectionPoolSettings.HTTPSettings.H2UpgradePolicy + 23, // 39: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.time:type_name -> google.protobuf.Duration + 23, // 40: istio.networking.v1beta1.ConnectionPoolSettings.TCPSettings.TcpKeepalive.interval:type_name -> google.protobuf.Duration + 21, // 41: istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.to:type_name -> istio.networking.v1beta1.LocalityLoadBalancerSetting.Distribute.ToEntry + 42, // [42:42] is the sub-list for method output_type + 42, // [42:42] is the sub-list for method input_type + 42, // [42:42] is the sub-list for extension type_name + 42, // [42:42] is the sub-list for extension extendee + 0, // [0:42] is the sub-list for field type_name } func init() { file_networking_v1beta1_destination_rule_proto_init() } diff --git a/vendor/istio.io/api/networking/v1beta1/destination_rule.proto b/vendor/istio.io/api/networking/v1beta1/destination_rule.proto index d2b9d33ff..1cd55a9aa 100644 --- a/vendor/istio.io/api/networking/v1beta1/destination_rule.proto +++ b/vendor/istio.io/api/networking/v1beta1/destination_rule.proto @@ -296,10 +296,11 @@ message TrafficPolicy { message TunnelSettings { // Specifies which protocol to use for tunneling the downstream connection. // Supported protocols are: - // connect - uses HTTP CONNECT; - // post - uses HTTP POST. + // CONNECT - uses HTTP CONNECT; + // POST - uses HTTP POST. + // CONNECT is used by default if not specified. // HTTP version for upstream requests is determined by the service protocol defined for the proxy. - string protocol = 1 [(google.api.field_behavior) = REQUIRED]; + string protocol = 1; // Specifies a host to which the downstream connection is tunneled. // Target host must be an FQDN or IP address. @@ -565,7 +566,7 @@ message LoadBalancerSettings { // remains in warmup mode starting from its creation time for the duration of this window and // Istio progressively increases amount of traffic for that endpoint instead of sending proportional amount of traffic. // This should be enabled for services that require warm up time to serve full production load with reasonable latency. - // Currently this is only supported for ROUND_ROBIN and LEAST_CONN load balancers. + // Currently this is only supported for ROUND_ROBIN and LEAST_REQUEST load balancers. google.protobuf.Duration warmup_duration_secs = 4; } @@ -648,14 +649,24 @@ message ConnectionPoolSettings { // If set then set SO_KEEPALIVE on the socket to enable TCP Keepalives. TcpKeepalive tcp_keepalive = 3; + + // The maximum duration of a connection. The duration is defined as the period since a connection + // was established. If not set, there is no max duration. When max_connection_duration + // is reached the connection will be closed. Duration must be at least 1ms. + google.protobuf.Duration max_connection_duration = 4; }; // Settings applicable to HTTP1.1/HTTP2/GRPC connections. message HTTPSettings { - // Maximum number of pending HTTP requests to a destination. Default 2^32-1. + // Maximum number of requests that will be queued while waiting for + // a ready connection pool connection. Default 1024. + // Refer to https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/circuit_breaking + // under which conditions a new connection is created for HTTP2. + // Please note that this is applicable to both HTTP/1.1 and HTTP2. int32 http1_max_pending_requests = 1; - // Maximum number of requests to a backend. Default 2^32-1. + // Maximum number of active requests to a destination. Default 1024. + // Please note that this is applicable to both HTTP/1.1 and HTTP2. int32 http2_max_requests = 2; // Maximum number of requests per connection to a backend. Setting this @@ -1014,7 +1025,10 @@ message ClientTLSSettings { // certificate. If specified, the proxy will verify that the server // certificate's subject alt name matches one of the specified values. // If specified, this list overrides the value of subject_alt_names - // from the ServiceEntry. + // from the ServiceEntry. If unspecified, automatic validation of upstream + // presented certificate for new upstream connections will be done based on the + // downstream HTTP host/authority header, provided `VERIFY_CERT_AT_CLIENT` + // and `ENABLE_AUTO_SNI` environmental variables are set to `true`. repeated string subject_alt_names = 5; // SNI string to present to the server during TLS handshake. diff --git a/vendor/istio.io/api/networking/v1beta1/gateway.gen.json b/vendor/istio.io/api/networking/v1beta1/gateway.gen.json index 88d32ba7f..3f160cec7 100644 --- a/vendor/istio.io/api/networking/v1beta1/gateway.gen.json +++ b/vendor/istio.io/api/networking/v1beta1/gateway.gen.json @@ -113,7 +113,7 @@ } }, "verifyCertificateSpki": { - "description": "An optional list of base64-encoded SHA-256 hashes of the SKPIs of authorized client certificates. Note: When both verify_certificate_hash and verify_certificate_spki are specified, a hash matching either value will result in the certificate being accepted.", + "description": "An optional list of base64-encoded SHA-256 hashes of the SPKIs of authorized client certificates. Note: When both verify_certificate_hash and verify_certificate_spki are specified, a hash matching either value will result in the certificate being accepted.", "type": "array", "items": { "type": "string" diff --git a/vendor/istio.io/api/networking/v1beta1/gateway.pb.go b/vendor/istio.io/api/networking/v1beta1/gateway.pb.go index f74e7d80a..63389eb53 100644 --- a/vendor/istio.io/api/networking/v1beta1/gateway.pb.go +++ b/vendor/istio.io/api/networking/v1beta1/gateway.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1beta1/gateway.proto @@ -608,17 +608,21 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1alpha3 // kind: Gateway // metadata: -// name: my-ingress +// +// name: my-ingress +// // spec: -// selector: -// app: my-ingressgateway -// servers: -// - port: -// number: 80 -// name: http2 -// protocol: HTTP2 -// hosts: -// - "*" +// +// selector: +// app: my-ingressgateway +// servers: +// - port: +// number: 80 +// name: http2 +// protocol: HTTP2 +// hosts: +// - "*" +// // ``` // {{}} // @@ -627,22 +631,26 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1beta1 // kind: Gateway // metadata: -// name: my-ingress +// +// name: my-ingress +// // spec: -// selector: -// app: my-ingressgateway -// servers: -// - port: -// number: 80 -// name: http2 -// protocol: HTTP2 -// hosts: -// - "*" +// +// selector: +// app: my-ingressgateway +// servers: +// - port: +// number: 80 +// name: http2 +// protocol: HTTP2 +// hosts: +// - "*" +// // ``` // {{}} // {{}} // -// Another example +// # Another example // // {{}} // {{}} @@ -650,17 +658,21 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1alpha3 // kind: Gateway // metadata: -// name: my-tcp-ingress +// +// name: my-tcp-ingress +// // spec: -// selector: -// app: my-tcp-ingressgateway -// servers: -// - port: -// number: 27018 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" +// +// selector: +// app: my-tcp-ingressgateway +// servers: +// - port: +// number: 27018 +// name: mongo +// protocol: MONGO +// hosts: +// - "*" +// // ``` // {{}} // @@ -669,22 +681,26 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1beta1 // kind: Gateway // metadata: -// name: my-tcp-ingress +// +// name: my-tcp-ingress +// // spec: -// selector: -// app: my-tcp-ingressgateway -// servers: -// - port: -// number: 27018 -// name: mongo -// protocol: MONGO -// hosts: -// - "*" +// +// selector: +// app: my-tcp-ingressgateway +// servers: +// - port: +// number: 27018 +// name: mongo +// protocol: MONGO +// hosts: +// - "*" +// // ``` // {{}} // {{}} // -// The following is an example of TLS configuration for port 443 +// # The following is an example of TLS configuration for port 443 // // {{}} // {{}} @@ -692,20 +708,24 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1alpha3 // kind: Gateway // metadata: -// name: my-tls-ingress +// +// name: my-tls-ingress +// // spec: -// selector: -// app: my-tls-ingressgateway -// servers: -// - port: -// number: 443 -// name: https -// protocol: HTTPS -// hosts: -// - "*" -// tls: -// mode: SIMPLE -// credentialName: tls-cert +// +// selector: +// app: my-tls-ingressgateway +// servers: +// - port: +// number: 443 +// name: https +// protocol: HTTPS +// hosts: +// - "*" +// tls: +// mode: SIMPLE +// credentialName: tls-cert +// // ``` // {{}} // @@ -714,24 +734,27 @@ func (x *Gateway) GetSelector() map[string]string { // apiVersion: networking.istio.io/v1beta1 // kind: Gateway // metadata: -// name: my-tls-ingress +// +// name: my-tls-ingress +// // spec: -// selector: -// app: my-tls-ingressgateway -// servers: -// - port: -// number: 443 -// name: https -// protocol: HTTPS -// hosts: -// - "*" -// tls: -// mode: SIMPLE -// credentialName: tls-cert +// +// selector: +// app: my-tls-ingressgateway +// servers: +// - port: +// number: 443 +// name: https +// protocol: HTTPS +// hosts: +// - "*" +// tls: +// mode: SIMPLE +// credentialName: tls-cert +// // ``` // {{}} // {{}} -// type Server struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -986,7 +1009,7 @@ type ServerTLSSettings struct { // A list of alternate names to verify the subject identity in the // certificate presented by the client. SubjectAltNames []string `protobuf:"bytes,6,rep,name=subject_alt_names,json=subjectAltNames,proto3" json:"subject_alt_names,omitempty"` - // An optional list of base64-encoded SHA-256 hashes of the SKPIs of + // An optional list of base64-encoded SHA-256 hashes of the SPKIs of // authorized client certificates. // Note: When both verify_certificate_hash and verify_certificate_spki // are specified, a hash matching either value will result in the diff --git a/vendor/istio.io/api/networking/v1beta1/gateway.proto b/vendor/istio.io/api/networking/v1beta1/gateway.proto index 7f0883807..15ffc0b23 100644 --- a/vendor/istio.io/api/networking/v1beta1/gateway.proto +++ b/vendor/istio.io/api/networking/v1beta1/gateway.proto @@ -536,8 +536,8 @@ message Server { // to. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar` // (Linux abstract namespace). When using Unix domain sockets, the port // number should be 0. - // This can be used to restrict the reachability of this server to be gateway internal only. - // This is typically used when a gateway needs to communicate to another mesh service + // This can be used to restrict the reachability of this server to be gateway internal only. + // This is typically used when a gateway needs to communicate to another mesh service // e.g. publishing metrics. In such case, the server created with the // specified bind will not be available to external gateway clients. string bind = 4; @@ -686,7 +686,7 @@ message ServerTLSSettings { // certificate presented by the client. repeated string subject_alt_names = 6; - // An optional list of base64-encoded SHA-256 hashes of the SKPIs of + // An optional list of base64-encoded SHA-256 hashes of the SPKIs of // authorized client certificates. // Note: When both verify_certificate_hash and verify_certificate_spki // are specified, a hash matching either value will result in the diff --git a/vendor/istio.io/api/networking/v1beta1/proxy_config.gen.json b/vendor/istio.io/api/networking/v1beta1/proxy_config.gen.json index 66b343560..d051b7125 100644 --- a/vendor/istio.io/api/networking/v1beta1/proxy_config.gen.json +++ b/vendor/istio.io/api/networking/v1beta1/proxy_config.gen.json @@ -31,7 +31,7 @@ } }, "istio.networking.v1beta1.ProxyImage": { - "description": "The following values are used to construct proxy image url. $hub/$image_name/$tag-$image_type example: docker.io/istio/proxyv2:1.11.1 or docker.io/istio/proxyv2:1.11.1-distroless This information was previously part of the Values API.", + "description": "The following values are used to construct proxy image url. format: `${hub}/${image_name}/${tag}-${image_type}`, example: `docker.io/istio/proxyv2:1.11.1` or `docker.io/istio/proxyv2:1.11.1-distroless`. This information was previously part of the Values API.", "type": "object", "properties": { "imageType": { diff --git a/vendor/istio.io/api/networking/v1beta1/proxy_config.pb.go b/vendor/istio.io/api/networking/v1beta1/proxy_config.pb.go index 9f5dce35a..ad6d3b1ea 100644 --- a/vendor/istio.io/api/networking/v1beta1/proxy_config.pb.go +++ b/vendor/istio.io/api/networking/v1beta1/proxy_config.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1beta1/proxy_config.proto @@ -49,7 +49,7 @@ // spec: // concurrency: 0 // image: -// type: distroless +// imageType: distroless // ``` // // For namespace level configuration, put the resource in the desired namespace without a workload selector: @@ -74,11 +74,11 @@ // namespace: example // spec: // selector: -// labels: +// matchLabels: // app: ratings // concurrency: 0 // image: -// type: debug +// imageType: debug // ``` // // If a `ProxyConfig` CR is defined that matches a workload it will merge with its `proxy.istio.io/config` annotation if present, @@ -204,8 +204,8 @@ func (x *ProxyConfig) GetImage() *ProxyImage { } // The following values are used to construct proxy image url. -// $hub/$image_name/$tag-$image_type -// example: docker.io/istio/proxyv2:1.11.1 or docker.io/istio/proxyv2:1.11.1-distroless +// format: `${hub}/${image_name}/${tag}-${image_type}`, +// example: `docker.io/istio/proxyv2:1.11.1` or `docker.io/istio/proxyv2:1.11.1-distroless`. // This information was previously part of the Values API. type ProxyImage struct { state protoimpl.MessageState diff --git a/vendor/istio.io/api/networking/v1beta1/proxy_config.proto b/vendor/istio.io/api/networking/v1beta1/proxy_config.proto index 28fa4ca0e..8be1051ed 100644 --- a/vendor/istio.io/api/networking/v1beta1/proxy_config.proto +++ b/vendor/istio.io/api/networking/v1beta1/proxy_config.proto @@ -48,7 +48,7 @@ import "type/v1beta1/selector.proto"; // spec: // concurrency: 0 // image: -// type: distroless +// imageType: distroless // ``` // // For namespace level configuration, put the resource in the desired namespace without a workload selector: @@ -73,11 +73,11 @@ import "type/v1beta1/selector.proto"; // namespace: example // spec: // selector: -// labels: +// matchLabels: // app: ratings // concurrency: 0 // image: -// type: debug +// imageType: debug // ``` // // If a `ProxyConfig` CR is defined that matches a workload it will merge with its `proxy.istio.io/config` annotation if present, @@ -127,8 +127,8 @@ message ProxyConfig { } // The following values are used to construct proxy image url. -// $hub/$image_name/$tag-$image_type -// example: docker.io/istio/proxyv2:1.11.1 or docker.io/istio/proxyv2:1.11.1-distroless +// format: `${hub}/${image_name}/${tag}-${image_type}`, +// example: `docker.io/istio/proxyv2:1.11.1` or `docker.io/istio/proxyv2:1.11.1-distroless`. // This information was previously part of the Values API. message ProxyImage { // The image type of the image. diff --git a/vendor/istio.io/api/networking/v1beta1/service_entry.pb.go b/vendor/istio.io/api/networking/v1beta1/service_entry.pb.go index 0572fc8dc..45e94599d 100644 --- a/vendor/istio.io/api/networking/v1beta1/service_entry.pb.go +++ b/vendor/istio.io/api/networking/v1beta1/service_entry.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1beta1/service_entry.proto @@ -878,9 +878,9 @@ const ( // domain socket endpoints. ServiceEntry_DNS ServiceEntry_Resolution = 2 // Attempt to resolve the IP address by querying the ambient DNS, - // asynchronously. Unlike DNS, DNS_ROUND_ROBIN only uses the + // asynchronously. Unlike `DNS`, `DNS_ROUND_ROBIN` only uses the // first IP address returned when a new connection needs to be initiated - // without relying on complete results of DNS resolution and connections + // without relying on complete results of DNS resolution, and connections // made to hosts will be retained even if DNS records change frequently // eliminating draining connection pools and connection cycling. // This is best suited for large web scale services that @@ -990,10 +990,9 @@ type ServiceEntry struct { // Kubernetes service if applicable. Currently, the only the // following additional properties will be considered by `istiod`: // - // 1. subjectAltNames: In addition to verifying the SANs of the - // service accounts associated with the pods of the service, the - // SANs specified here will also be verified. - // + // 1. subjectAltNames: In addition to verifying the SANs of the + // service accounts associated with the pods of the service, the + // SANs specified here will also be verified. Hosts []string `protobuf:"bytes,1,rep,name=hosts,proto3" json:"hosts,omitempty"` // The virtual IP addresses associated with the service. Could be CIDR // prefix. For HTTP traffic, generated route configurations will include http route diff --git a/vendor/istio.io/api/networking/v1beta1/service_entry.proto b/vendor/istio.io/api/networking/v1beta1/service_entry.proto index 32482a7db..25d5540f7 100644 --- a/vendor/istio.io/api/networking/v1beta1/service_entry.proto +++ b/vendor/istio.io/api/networking/v1beta1/service_entry.proto @@ -910,9 +910,9 @@ message ServiceEntry { DNS = 2; // Attempt to resolve the IP address by querying the ambient DNS, - // asynchronously. Unlike DNS, DNS_ROUND_ROBIN only uses the + // asynchronously. Unlike `DNS`, `DNS_ROUND_ROBIN` only uses the // first IP address returned when a new connection needs to be initiated - // without relying on complete results of DNS resolution and connections + // without relying on complete results of DNS resolution, and connections // made to hosts will be retained even if DNS records change frequently // eliminating draining connection pools and connection cycling. // This is best suited for large web scale services that diff --git a/vendor/istio.io/api/networking/v1beta1/sidecar.gen.json b/vendor/istio.io/api/networking/v1beta1/sidecar.gen.json index c8d7d8ad3..797f65ad9 100644 --- a/vendor/istio.io/api/networking/v1beta1/sidecar.gen.json +++ b/vendor/istio.io/api/networking/v1beta1/sidecar.gen.json @@ -40,7 +40,7 @@ "$ref": "#/components/schemas/istio.networking.v1beta1.Port" }, "bind": { - "description": "The IP or the Unix domain socket to which the listener should be bound to. Port MUST be specified if bind is not empty. Format: `x.x.x.x` or `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If omitted, Istio will automatically configure the defaults based on imported services, the workload instances to which this configuration is applied to and the captureMode. If captureMode is `NONE`, bind will default to 127.0.0.1.", + "description": "The IP(IPv4 or IPv6) or the Unix domain socket to which the listener should be bound to. Port MUST be specified if bind is not empty. Format: IPv4 or IPv6 address formats or `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If omitted, Istio will automatically configure the defaults based on imported services, the workload instances to which this configuration is applied to and the captureMode. If captureMode is `NONE`, bind will default to 127.0.0.1.", "type": "string" }, "captureMode": { @@ -63,14 +63,14 @@ "$ref": "#/components/schemas/istio.networking.v1beta1.Port" }, "bind": { - "description": "The IP to which the listener should be bound. Must be in the format `x.x.x.x`. Unix domain socket addresses are not allowed in the bind field for ingress listeners. If omitted, Istio will automatically configure the defaults based on imported services and the workload instances to which this configuration is applied to.", + "description": "The IP(IPv4 or IPv6) to which the listener should be bound. Unix domain socket addresses are not allowed in the bind field for ingress listeners. If omitted, Istio will automatically configure the defaults based on imported services and the workload instances to which this configuration is applied to.", "type": "string" }, "captureMode": { "$ref": "#/components/schemas/istio.networking.v1beta1.CaptureMode" }, "defaultEndpoint": { - "description": "The IP endpoint or Unix domain socket to which traffic should be forwarded to. This configuration can be used to redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` or Unix domain socket where the application workload instance is listening for connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `0.0.0.0:PORT` (which will forward to the instance IP), or `unix:///path/to/socket`", + "description": "The IP endpoint or Unix domain socket to which traffic should be forwarded to. This configuration can be used to redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` or Unix domain socket where the application workload instance is listening for connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `[::1]:PORT` (forward to localhost), `0.0.0.0:PORT`, `[::]:PORT` (forward to the instance IP), or `unix:///path/to/socket` (forward to Unix domain socket).", "type": "string" }, "tls": { @@ -163,7 +163,7 @@ } }, "verifyCertificateSpki": { - "description": "An optional list of base64-encoded SHA-256 hashes of the SKPIs of authorized client certificates. Note: When both verify_certificate_hash and verify_certificate_spki are specified, a hash matching either value will result in the certificate being accepted.", + "description": "An optional list of base64-encoded SHA-256 hashes of the SPKIs of authorized client certificates. Note: When both verify_certificate_hash and verify_certificate_spki are specified, a hash matching either value will result in the certificate being accepted.", "type": "array", "items": { "type": "string" diff --git a/vendor/istio.io/api/networking/v1beta1/sidecar.pb.go b/vendor/istio.io/api/networking/v1beta1/sidecar.pb.go index fa6199a88..9cdc5f869 100644 --- a/vendor/istio.io/api/networking/v1beta1/sidecar.pb.go +++ b/vendor/istio.io/api/networking/v1beta1/sidecar.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1beta1/sidecar.proto @@ -652,8 +652,8 @@ type IstioIngressListener struct { // The port associated with the listener. Port *Port `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` - // The IP to which the listener should be bound. Must be in the - // format `x.x.x.x`. Unix domain socket addresses are not allowed in + // The IP(IPv4 or IPv6) to which the listener should be bound. + // Unix domain socket addresses are not allowed in // the bind field for ingress listeners. If omitted, Istio will // automatically configure the defaults based on imported services // and the workload instances to which this configuration is applied @@ -666,13 +666,14 @@ type IstioIngressListener struct { // traffic should be forwarded to. This configuration can be used to // redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` // or Unix domain socket where the application workload instance is listening for - // connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `0.0.0.0:PORT` - // (which will forward to the instance IP), or `unix:///path/to/socket` + // connections. Arbitrary IPs are not supported. Format should be one of + // `127.0.0.1:PORT`, `[::1]:PORT` (forward to localhost), + // `0.0.0.0:PORT`, `[::]:PORT` (forward to the instance IP), + // or `unix:///path/to/socket` (forward to Unix domain socket). DefaultEndpoint string `protobuf:"bytes,4,opt,name=default_endpoint,json=defaultEndpoint,proto3" json:"default_endpoint,omitempty"` // Set of TLS related options that will enable TLS termination on the // sidecar for requests originating from outside the mesh. // Currently supports only SIMPLE and MUTUAL TLS modes. - // $hide_from_docs Tls *ServerTLSSettings `protobuf:"bytes,7,opt,name=tls,proto3" json:"tls,omitempty"` } @@ -760,8 +761,8 @@ type IstioEgressListener struct { // listener port will be based on the listener with the most specific // port. Port *Port `protobuf:"bytes,1,opt,name=port,proto3" json:"port,omitempty"` - // The IP or the Unix domain socket to which the listener should be bound - // to. Port MUST be specified if bind is not empty. Format: `x.x.x.x` or + // The IP(IPv4 or IPv6) or the Unix domain socket to which the listener should be bound + // to. Port MUST be specified if bind is not empty. Format: IPv4 or IPv6 address formats or // `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If // omitted, Istio will automatically configure the defaults based on imported // services, the workload instances to which this configuration is applied to and diff --git a/vendor/istio.io/api/networking/v1beta1/sidecar.proto b/vendor/istio.io/api/networking/v1beta1/sidecar.proto index ff63b104f..5d2dcad9d 100644 --- a/vendor/istio.io/api/networking/v1beta1/sidecar.proto +++ b/vendor/istio.io/api/networking/v1beta1/sidecar.proto @@ -469,8 +469,8 @@ message IstioIngressListener { // The port associated with the listener. Port port = 1 [(google.api.field_behavior) = REQUIRED]; - // The IP to which the listener should be bound. Must be in the - // format `x.x.x.x`. Unix domain socket addresses are not allowed in + // The IP(IPv4 or IPv6) to which the listener should be bound. + // Unix domain socket addresses are not allowed in // the bind field for ingress listeners. If omitted, Istio will // automatically configure the defaults based on imported services // and the workload instances to which this configuration is applied @@ -485,8 +485,10 @@ message IstioIngressListener { // traffic should be forwarded to. This configuration can be used to // redirect traffic arriving at the bind `IP:Port` on the sidecar to a `localhost:port` // or Unix domain socket where the application workload instance is listening for - // connections. Arbitrary IPs are not supported. Format should be one of `127.0.0.1:PORT`, `0.0.0.0:PORT` - // (which will forward to the instance IP), or `unix:///path/to/socket` + // connections. Arbitrary IPs are not supported. Format should be one of + // `127.0.0.1:PORT`, `[::1]:PORT` (forward to localhost), + // `0.0.0.0:PORT`, `[::]:PORT` (forward to the instance IP), + // or `unix:///path/to/socket` (forward to Unix domain socket). string default_endpoint = 4 [(google.api.field_behavior) = REQUIRED]; reserved "localhost_client_tls"; @@ -495,7 +497,6 @@ message IstioIngressListener { // Set of TLS related options that will enable TLS termination on the // sidecar for requests originating from outside the mesh. // Currently supports only SIMPLE and MUTUAL TLS modes. - // $hide_from_docs ServerTLSSettings tls = 7; } @@ -513,8 +514,8 @@ message IstioEgressListener { // port. Port port = 1; - // The IP or the Unix domain socket to which the listener should be bound - // to. Port MUST be specified if bind is not empty. Format: `x.x.x.x` or + // The IP(IPv4 or IPv6) or the Unix domain socket to which the listener should be bound + // to. Port MUST be specified if bind is not empty. Format: IPv4 or IPv6 address formats or // `unix:///path/to/uds` or `unix://@foobar` (Linux abstract namespace). If // omitted, Istio will automatically configure the defaults based on imported // services, the workload instances to which this configuration is applied to and diff --git a/vendor/istio.io/api/networking/v1beta1/virtual_service.gen.json b/vendor/istio.io/api/networking/v1beta1/virtual_service.gen.json index 3b364056c..439a6aa0a 100644 --- a/vendor/istio.io/api/networking/v1beta1/virtual_service.gen.json +++ b/vendor/istio.io/api/networking/v1beta1/virtual_service.gen.json @@ -88,6 +88,76 @@ } } }, + "istio.networking.v1beta1.HTTPBody": { + "type": "object", + "oneOf": [ + { + "not": { + "anyOf": [ + { + "required": [ + "string" + ], + "properties": { + "string": { + "description": "response body as a string", + "type": "string" + } + } + }, + { + "required": [ + "bytes" + ], + "properties": { + "bytes": { + "description": "response body as base64 encoded bytes.", + "type": "string", + "format": "binary" + } + } + } + ] + } + }, + { + "required": [ + "string" + ], + "properties": { + "string": { + "description": "response body as a string", + "type": "string" + } + } + }, + { + "required": [ + "bytes" + ], + "properties": { + "bytes": { + "description": "response body as base64 encoded bytes.", + "type": "string", + "format": "binary" + } + } + } + ] + }, + "istio.networking.v1beta1.HTTPDirectResponse": { + "description": "HTTPDirectResponse can be used to send a fixed response to clients. For example, the following rule returns a fixed 503 status with a body to requests for /v1/getProductRatings API.", + "type": "object", + "properties": { + "status": { + "description": "Specifies the HTTP response status to be returned.", + "type": "integer" + }, + "body": { + "$ref": "#/components/schemas/istio.networking.v1beta1.HTTPBody" + } + } + }, "istio.networking.v1beta1.HTTPFaultInjection": { "description": "HTTPFaultInjection can be used to specify one or more faults to inject while forwarding HTTP requests to the destination specified in a route. Fault specification is part of a VirtualService rule. Faults include aborting the Http request from downstream service, and/or delaying proxying of requests. A fault rule MUST HAVE delay or abort or both.", "type": "object", @@ -130,6 +200,7 @@ ], "properties": { "grpcStatus": { + "description": "GRPC status code to use to abort the request. The supported codes are documented in https://github.com/grpc/grpc/blob/master/doc/statuscodes.md Note: If you want to return the status \"Unavailable\", then you should specify the code as `UNAVAILABLE`(all caps), but not `14`.", "type": "string" } } @@ -165,6 +236,7 @@ ], "properties": { "grpcStatus": { + "description": "GRPC status code to use to abort the request. The supported codes are documented in https://github.com/grpc/grpc/blob/master/doc/statuscodes.md Note: If you want to return the status \"Unavailable\", then you should specify the code as `UNAVAILABLE`(all caps), but not `14`.", "type": "string" } } @@ -312,6 +384,10 @@ "sourceNamespace": { "description": "Source namespace constraining the applicability of a rule to workloads in that namespace. If the VirtualService has a list of gateways specified in the top-level `gateways` field, it must include the reserved gateway `mesh` for this field to be applicable.", "type": "string" + }, + "statPrefix": { + "description": "The human readable prefix to use when emitting statistics for this route. The statistics are generated with prefix route.\u003cstat_prefix\u003e. This should be set for highly critical routes that one wishes to get \"per-route\" statistics on. This prefix is only for proxy-level statistics (envoy_*) and not service-level (istio_*) statistics. Refer to https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-field-config-route-v3-route-stat-prefix for statistics that are generated when this is configured.", + "type": "string" } } }, @@ -448,7 +524,7 @@ } }, "route": { - "description": "A HTTP rule can either redirect or forward (default) traffic. The forwarding target can be one of several versions of a service (see glossary in beginning of document). Weights associated with the service version determine the proportion of traffic it receives.", + "description": "A HTTP rule can either return a direct_response, redirect or forward (default) traffic. The forwarding target can be one of several versions of a service (see glossary in beginning of document). Weights associated with the service version determine the proportion of traffic it receives.", "type": "array", "items": { "$ref": "#/components/schemas/istio.networking.v1beta1.HTTPRouteDestination" @@ -457,6 +533,9 @@ "redirect": { "$ref": "#/components/schemas/istio.networking.v1beta1.HTTPRedirect" }, + "directResponse": { + "$ref": "#/components/schemas/istio.networking.v1beta1.HTTPDirectResponse" + }, "delegate": { "$ref": "#/components/schemas/istio.networking.v1beta1.Delegate" }, diff --git a/vendor/istio.io/api/networking/v1beta1/virtual_service.pb.go b/vendor/istio.io/api/networking/v1beta1/virtual_service.pb.go index b4b844d3d..f366b24a5 100644 --- a/vendor/istio.io/api/networking/v1beta1/virtual_service.pb.go +++ b/vendor/istio.io/api/networking/v1beta1/virtual_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1beta1/virtual_service.proto @@ -452,27 +452,31 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route -// namespace: foo +// +// name: reviews-route +// namespace: foo +// // spec: -// hosts: -// - reviews # interpreted as reviews.foo.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v2 -// - route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v1 +// +// hosts: +// - reviews # interpreted as reviews.foo.svc.cluster.local +// http: +// - match: +// - uri: +// prefix: "/wpcatalog" +// - uri: +// prefix: "/consumercatalog" +// rewrite: +// uri: "/newcatalog" +// route: +// - destination: +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subset: v2 +// - route: +// - destination: +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subset: v1 +// // ``` // {{}} // @@ -481,32 +485,36 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route -// namespace: foo +// +// name: reviews-route +// namespace: foo +// // spec: -// hosts: -// - reviews # interpreted as reviews.foo.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: "/wpcatalog" -// - uri: -// prefix: "/consumercatalog" -// rewrite: -// uri: "/newcatalog" -// route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v2 -// - route: -// - destination: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subset: v1 +// +// hosts: +// - reviews # interpreted as reviews.foo.svc.cluster.local +// http: +// - match: +// - uri: +// prefix: "/wpcatalog" +// - uri: +// prefix: "/consumercatalog" +// rewrite: +// uri: "/newcatalog" +// route: +// - destination: +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subset: v2 +// - route: +// - destination: +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subset: v1 +// // ``` // {{}} // {{}} // -// And the associated DestinationRule +// # And the associated DestinationRule // // {{}} // {{}} @@ -514,17 +522,21 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: reviews-destination -// namespace: foo +// +// name: reviews-destination +// namespace: foo +// // spec: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 +// +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subsets: +// - name: v1 +// labels: +// version: v1 +// - name: v2 +// labels: +// version: v2 +// // ``` // {{}} // @@ -533,17 +545,21 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: reviews-destination -// namespace: foo +// +// name: reviews-destination +// namespace: foo +// // spec: -// host: reviews # interpreted as reviews.foo.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 +// +// host: reviews # interpreted as reviews.foo.svc.cluster.local +// subsets: +// - name: v1 +// labels: +// version: v1 +// - name: v2 +// labels: +// version: v2 +// // ``` // {{}} // {{}} @@ -564,16 +580,20 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: my-productpage-rule -// namespace: istio-system +// +// name: my-productpage-rule +// namespace: istio-system +// // spec: -// hosts: -// - productpage.prod.svc.cluster.local # ignores rule namespace -// http: -// - timeout: 5s -// route: -// - destination: -// host: productpage.prod.svc.cluster.local +// +// hosts: +// - productpage.prod.svc.cluster.local # ignores rule namespace +// http: +// - timeout: 5s +// route: +// - destination: +// host: productpage.prod.svc.cluster.local +// // ``` // {{}} // @@ -582,16 +602,20 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: my-productpage-rule -// namespace: istio-system +// +// name: my-productpage-rule +// namespace: istio-system +// // spec: -// hosts: -// - productpage.prod.svc.cluster.local # ignores rule namespace -// http: -// - timeout: 5s -// route: -// - destination: -// host: productpage.prod.svc.cluster.local +// +// hosts: +// - productpage.prod.svc.cluster.local # ignores rule namespace +// http: +// - timeout: 5s +// route: +// - destination: +// host: productpage.prod.svc.cluster.local +// // ``` // {{}} // {{}} @@ -608,29 +632,37 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: ServiceEntry // metadata: -// name: external-svc-wikipedia +// +// name: external-svc-wikipedia +// // spec: -// hosts: -// - wikipedia.org -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: example-http -// protocol: HTTP -// resolution: DNS +// +// hosts: +// - wikipedia.org +// location: MESH_EXTERNAL +// ports: +// - number: 80 +// name: example-http +// protocol: HTTP +// resolution: DNS +// // --- // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: my-wiki-rule +// +// name: my-wiki-rule +// // spec: -// hosts: -// - wikipedia.org -// http: -// - timeout: 5s -// route: -// - destination: -// host: wikipedia.org +// +// hosts: +// - wikipedia.org +// http: +// - timeout: 5s +// route: +// - destination: +// host: wikipedia.org +// // ``` // {{}} // @@ -639,33 +671,40 @@ func (x *VirtualService) GetExportTo() []string { // apiVersion: networking.istio.io/v1beta1 // kind: ServiceEntry // metadata: -// name: external-svc-wikipedia +// +// name: external-svc-wikipedia +// // spec: -// hosts: -// - wikipedia.org -// location: MESH_EXTERNAL -// ports: -// - number: 80 -// name: example-http -// protocol: HTTP -// resolution: DNS +// +// hosts: +// - wikipedia.org +// location: MESH_EXTERNAL +// ports: +// - number: 80 +// name: example-http +// protocol: HTTP +// resolution: DNS +// // --- // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: my-wiki-rule +// +// name: my-wiki-rule +// // spec: -// hosts: -// - wikipedia.org -// http: -// - timeout: 5s -// route: -// - destination: -// host: wikipedia.org +// +// hosts: +// - wikipedia.org +// http: +// - timeout: 5s +// route: +// - destination: +// host: wikipedia.org +// // ``` // {{}} // {{}} -// type Destination struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -766,16 +805,22 @@ type HTTPRoute struct { // semantics, while the list of match blocks have OR semantics. The rule // is matched if any one of the match blocks succeed. Match []*HTTPMatchRequest `protobuf:"bytes,1,rep,name=match,proto3" json:"match,omitempty"` - // A HTTP rule can either redirect or forward (default) traffic. The - // forwarding target can be one of several versions of a service (see + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // The forwarding target can be one of several versions of a service (see // glossary in beginning of document). Weights associated with the // service version determine the proportion of traffic it receives. Route []*HTTPRouteDestination `protobuf:"bytes,2,rep,name=route,proto3" json:"route,omitempty"` - // A HTTP rule can either redirect or forward (default) traffic. If - // traffic passthrough option is specified in the rule, + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // If traffic passthrough option is specified in the rule, // route/redirect will be ignored. The redirect primitive can be used to // send a HTTP 301 redirect to a different URI or Authority. Redirect *HTTPRedirect `protobuf:"bytes,3,opt,name=redirect,proto3" json:"redirect,omitempty"` + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // Direct Response is used to specify a fixed response that should + // be sent to clients. + // + // It can be set only when `Route` and `Redirect` are empty. + DirectResponse *HTTPDirectResponse `protobuf:"bytes,21,opt,name=direct_response,json=directResponse,proto3" json:"direct_response,omitempty"` // Delegate is used to specify the particular VirtualService which // can be used to define delegate HTTPRoute. // @@ -785,9 +830,9 @@ type HTTPRoute struct { // // **NOTE**: // - // 1. Only one level delegation is supported. - // 2. The delegate's HTTPMatchRequest must be a strict subset of the root's, - // otherwise there is a conflict and the HTTPRoute will not take effect. + // 1. Only one level delegation is supported. + // 2. The delegate's HTTPMatchRequest must be a strict subset of the root's, + // otherwise there is a conflict and the HTTPRoute will not take effect. Delegate *Delegate `protobuf:"bytes,20,opt,name=delegate,proto3" json:"delegate,omitempty"` // Rewrite HTTP URIs and Authority headers. Rewrite cannot be used with // Redirect primitive. Rewrite will be performed before forwarding. @@ -886,6 +931,13 @@ func (x *HTTPRoute) GetRedirect() *HTTPRedirect { return nil } +func (x *HTTPRoute) GetDirectResponse() *HTTPDirectResponse { + if x != nil { + return x.DirectResponse + } + return nil +} + func (x *HTTPRoute) GetDelegate() *Delegate { if x != nil { return x.Delegate @@ -965,57 +1017,69 @@ func (x *HTTPRoute) GetHeaders() *Headers { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: bookinfo +// +// name: bookinfo +// // spec: -// hosts: -// - "bookinfo.com" -// gateways: -// - mygateway -// http: -// - match: -// - uri: -// prefix: "/productpage" -// delegate: -// name: productpage -// namespace: nsA -// - match: -// - uri: -// prefix: "/reviews" -// delegate: -// name: reviews -// namespace: nsB +// +// hosts: +// - "bookinfo.com" +// gateways: +// - mygateway +// http: +// - match: +// - uri: +// prefix: "/productpage" +// delegate: +// name: productpage +// namespace: nsA +// - match: +// - uri: +// prefix: "/reviews" +// delegate: +// name: reviews +// namespace: nsB +// // ``` // // ```yaml // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: productpage -// namespace: nsA +// +// name: productpage +// namespace: nsA +// // spec: -// http: -// - match: -// - uri: -// prefix: "/productpage/v1/" -// route: -// - destination: -// host: productpage-v1.nsA.svc.cluster.local -// - route: -// - destination: -// host: productpage.nsA.svc.cluster.local +// +// http: +// - match: +// - uri: +// prefix: "/productpage/v1/" +// route: +// - destination: +// host: productpage-v1.nsA.svc.cluster.local +// - route: +// - destination: +// host: productpage.nsA.svc.cluster.local +// // ``` // // ```yaml // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews -// namespace: nsB +// +// name: reviews +// namespace: nsB +// // spec: -// http: -// - route: -// - destination: -// host: reviews.nsB.svc.cluster.local +// +// http: +// - route: +// - destination: +// host: reviews.nsB.svc.cluster.local +// // ``` type Delegate struct { state protoimpl.MessageState @@ -1089,28 +1153,32 @@ func (x *Delegate) GetNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - headers: -// request: -// set: -// test: "true" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// headers: -// response: -// remove: -// - foo -// weight: 75 +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - headers: +// request: +// set: +// test: "true" +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v2 +// weight: 25 +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// headers: +// response: +// remove: +// - foo +// weight: 75 +// // ``` // {{}} // @@ -1119,28 +1187,32 @@ func (x *Delegate) GetNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - headers: -// request: -// set: -// test: "true" -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// headers: -// response: -// remove: -// - foo -// weight: 75 +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - headers: +// request: +// set: +// test: "true" +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v2 +// weight: 25 +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// headers: +// response: +// remove: +// - foo +// weight: 75 +// // ``` // {{}} // {{}} @@ -1214,27 +1286,31 @@ func (x *Headers) GetResponse() *Headers_HeaderOperations { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: bookinfo-sni +// +// name: bookinfo-sni +// // spec: -// hosts: -// - "*.bookinfo.com" -// gateways: -// - mygateway -// tls: -// - match: -// - port: 443 -// sniHosts: -// - login.bookinfo.com -// route: -// - destination: -// host: login.prod.svc.cluster.local -// - match: -// - port: 443 -// sniHosts: -// - reviews.bookinfo.com -// route: -// - destination: -// host: reviews.prod.svc.cluster.local +// +// hosts: +// - "*.bookinfo.com" +// gateways: +// - mygateway +// tls: +// - match: +// - port: 443 +// sniHosts: +// - login.bookinfo.com +// route: +// - destination: +// host: login.prod.svc.cluster.local +// - match: +// - port: 443 +// sniHosts: +// - reviews.bookinfo.com +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// // ``` // {{}} // @@ -1243,27 +1319,31 @@ func (x *Headers) GetResponse() *Headers_HeaderOperations { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: bookinfo-sni +// +// name: bookinfo-sni +// // spec: -// hosts: -// - "*.bookinfo.com" -// gateways: -// - mygateway -// tls: -// - match: -// - port: 443 -// sniHosts: -// - login.bookinfo.com -// route: -// - destination: -// host: login.prod.svc.cluster.local -// - match: -// - port: 443 -// sniHosts: -// - reviews.bookinfo.com -// route: -// - destination: -// host: reviews.prod.svc.cluster.local +// +// hosts: +// - "*.bookinfo.com" +// gateways: +// - mygateway +// tls: +// - match: +// - port: 443 +// sniHosts: +// - login.bookinfo.com +// route: +// - destination: +// host: login.prod.svc.cluster.local +// - match: +// - port: 443 +// sniHosts: +// - reviews.bookinfo.com +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// // ``` // {{}} // {{}} @@ -1337,18 +1417,22 @@ func (x *TLSRoute) GetRoute() []*RouteDestination { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: bookinfo-mongo +// +// name: bookinfo-mongo +// // spec: -// hosts: -// - mongo.prod.svc.cluster.local -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.backup.svc.cluster.local -// port: -// number: 5555 +// +// hosts: +// - mongo.prod.svc.cluster.local +// tcp: +// - match: +// - port: 27017 +// route: +// - destination: +// host: mongo.backup.svc.cluster.local +// port: +// number: 5555 +// // ``` // {{}} // @@ -1357,18 +1441,22 @@ func (x *TLSRoute) GetRoute() []*RouteDestination { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: bookinfo-mongo +// +// name: bookinfo-mongo +// // spec: -// hosts: -// - mongo.prod.svc.cluster.local -// tcp: -// - match: -// - port: 27017 -// route: -// - destination: -// host: mongo.backup.svc.cluster.local -// port: -// number: 5555 +// +// hosts: +// - mongo.prod.svc.cluster.local +// tcp: +// - match: +// - port: 27017 +// route: +// - destination: +// host: mongo.backup.svc.cluster.local +// port: +// number: 5555 +// // ``` // {{}} // {{}} @@ -1444,21 +1532,25 @@ func (x *TCPRoute) GetRoute() []*RouteDestination { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - headers: -// end-user: -// exact: jason -// uri: -// prefix: "/ratings/v2/" -// ignoreUriCase: true -// route: -// - destination: -// host: ratings.prod.svc.cluster.local +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - headers: +// end-user: +// exact: jason +// uri: +// prefix: "/ratings/v2/" +// ignoreUriCase: true +// route: +// - destination: +// host: ratings.prod.svc.cluster.local +// // ``` // {{}} // @@ -1467,21 +1559,25 @@ func (x *TCPRoute) GetRoute() []*RouteDestination { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - headers: -// end-user: -// exact: jason -// uri: -// prefix: "/ratings/v2/" -// ignoreUriCase: true -// route: -// - destination: -// host: ratings.prod.svc.cluster.local +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - headers: +// end-user: +// exact: jason +// uri: +// prefix: "/ratings/v2/" +// ignoreUriCase: true +// route: +// - destination: +// host: ratings.prod.svc.cluster.local +// // ``` // {{}} // {{}} @@ -1517,7 +1613,6 @@ type HTTPMatchRequest struct { // - `prefix: "value"` for prefix-based match // // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // Scheme *StringMatch `protobuf:"bytes,2,opt,name=scheme,proto3" json:"scheme,omitempty"` // HTTP Method // values are case-sensitive and formatted as follows: @@ -1527,7 +1622,6 @@ type HTTPMatchRequest struct { // - `prefix: "value"` for prefix-based match // // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // Method *StringMatch `protobuf:"bytes,3,opt,name=method,proto3" json:"method,omitempty"` // HTTP Authority // values are case-sensitive and formatted as follows: @@ -1537,7 +1631,6 @@ type HTTPMatchRequest struct { // - `prefix: "value"` for prefix-based match // // - `regex: "value"` for RE2 style regex-based match (https://github.com/google/re2/wiki/Syntax). - // Authority *StringMatch `protobuf:"bytes,4,opt,name=authority,proto3" json:"authority,omitempty"` // The header keys must be lowercase and use hyphen as the separator, // e.g. _x-request-id_. @@ -1570,15 +1663,15 @@ type HTTPMatchRequest struct { // // Ex: // - // - For a query parameter like "?key=true", the map key would be "key" and - // the string match could be defined as `exact: "true"`. + // - For a query parameter like "?key=true", the map key would be "key" and + // the string match could be defined as `exact: "true"`. // - // - For a query parameter like "?key", the map key would be "key" and the - // string match could be defined as `exact: ""`. + // - For a query parameter like "?key", the map key would be "key" and the + // string match could be defined as `exact: ""`. // - // - For a query parameter like "?key=123", the map key would be "key" and the - // string match could be defined as `regex: "\d+$"`. Note that this - // configuration will only match values like "123" but not "a123" or "123a". + // - For a query parameter like "?key=123", the map key would be "key" and the + // string match could be defined as `regex: "\d+$"`. Note that this + // configuration will only match values like "123" but not "a123" or "123a". // // **Note:** `prefix` matching is currently not supported. QueryParams map[string]*StringMatch `protobuf:"bytes,9,rep,name=query_params,json=queryParams,proto3" json:"query_params,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` @@ -1594,6 +1687,13 @@ type HTTPMatchRequest struct { // If the VirtualService has a list of gateways specified in the top-level `gateways` field, // it must include the reserved gateway `mesh` for this field to be applicable. SourceNamespace string `protobuf:"bytes,13,opt,name=source_namespace,json=sourceNamespace,proto3" json:"source_namespace,omitempty"` + // The human readable prefix to use when emitting statistics for this route. + // The statistics are generated with prefix route.. + // This should be set for highly critical routes that one wishes to get "per-route" statistics on. + // This prefix is only for proxy-level statistics (envoy_*) and not service-level (istio_*) statistics. + // Refer to https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-field-config-route-v3-route-stat-prefix + // for statistics that are generated when this is configured. + StatPrefix string `protobuf:"bytes,14,opt,name=stat_prefix,json=statPrefix,proto3" json:"stat_prefix,omitempty"` } func (x *HTTPMatchRequest) Reset() { @@ -1719,6 +1819,13 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { return "" } +func (x *HTTPMatchRequest) GetStatPrefix() string { + if x != nil { + return x.StatPrefix + } + return "" +} + // Each routing rule is associated with one or more service versions (see // glossary in beginning of document). Weights associated with the version // determine the proportion of traffic it receives. For example, the @@ -1732,20 +1839,24 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// weight: 75 +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v2 +// weight: 25 +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// weight: 75 +// // ``` // {{}} // @@ -1754,25 +1865,29 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v2 -// weight: 25 -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// weight: 75 +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v2 +// weight: 25 +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// weight: 75 +// // ``` // {{}} // {{}} // -// And the associated DestinationRule +// # And the associated DestinationRule // // {{}} // {{}} @@ -1780,16 +1895,20 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: DestinationRule // metadata: -// name: reviews-destination +// +// name: reviews-destination +// // spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 +// +// host: reviews.prod.svc.cluster.local +// subsets: +// - name: v1 +// labels: +// version: v1 +// - name: v2 +// labels: +// version: v2 +// // ``` // {{}} // @@ -1798,16 +1917,20 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: DestinationRule // metadata: -// name: reviews-destination +// +// name: reviews-destination +// // spec: -// host: reviews.prod.svc.cluster.local -// subsets: -// - name: v1 -// labels: -// version: v1 -// - name: v2 -// labels: -// version: v2 +// +// host: reviews.prod.svc.cluster.local +// subsets: +// - name: v1 +// labels: +// version: v1 +// - name: v2 +// labels: +// version: v2 +// // ``` // {{}} // {{}} @@ -1822,18 +1945,22 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route-two-domains +// +// name: reviews-route-two-domains +// // spec: -// hosts: -// - reviews.com -// http: -// - route: -// - destination: -// host: dev.reviews.com -// weight: 25 -// - destination: -// host: reviews.com -// weight: 75 +// +// hosts: +// - reviews.com +// http: +// - route: +// - destination: +// host: dev.reviews.com +// weight: 25 +// - destination: +// host: reviews.com +// weight: 75 +// // ``` // {{}} // @@ -1842,22 +1969,25 @@ func (x *HTTPMatchRequest) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route-two-domains +// +// name: reviews-route-two-domains +// // spec: -// hosts: -// - reviews.com -// http: -// - route: -// - destination: -// host: dev.reviews.com -// weight: 25 -// - destination: -// host: reviews.com -// weight: 75 +// +// hosts: +// - reviews.com +// http: +// - route: +// - destination: +// host: dev.reviews.com +// weight: 25 +// - destination: +// host: reviews.com +// weight: 75 +// // ``` // {{}} // {{}} -// type HTTPRouteDestination struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2215,18 +2345,22 @@ func (x *TLSMatchAttributes) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// exact: /v1/getProductRatings -// redirect: -// uri: /v1/bookRatings -// authority: newratings.default.svc.cluster.local -// ... +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// redirect: +// uri: /v1/bookRatings +// authority: newratings.default.svc.cluster.local +// ... +// // ``` // {{}} // @@ -2235,22 +2369,25 @@ func (x *TLSMatchAttributes) GetSourceNamespace() string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// exact: /v1/getProductRatings -// redirect: -// uri: /v1/bookRatings -// authority: newratings.default.svc.cluster.local -// ... +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// redirect: +// uri: /v1/bookRatings +// authority: newratings.default.svc.cluster.local +// ... +// // ``` // {{}} // {{}} -// type HTTPRedirect struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2264,6 +2401,7 @@ type HTTPRedirect struct { // this value. Authority string `protobuf:"bytes,2,opt,name=authority,proto3" json:"authority,omitempty"` // Types that are assignable to RedirectPort: + // // *HTTPRedirect_Port // *HTTPRedirect_DerivePort RedirectPort isHTTPRedirect_RedirectPort `protobuf_oneof:"redirect_port"` @@ -2344,39 +2482,354 @@ func (x *HTTPRedirect) GetDerivePort() HTTPRedirect_RedirectPortSelection { return HTTPRedirect_FROM_PROTOCOL_DEFAULT } -func (x *HTTPRedirect) GetScheme() string { - if x != nil { - return x.Scheme +func (x *HTTPRedirect) GetScheme() string { + if x != nil { + return x.Scheme + } + return "" +} + +func (x *HTTPRedirect) GetRedirectCode() uint32 { + if x != nil { + return x.RedirectCode + } + return 0 +} + +type isHTTPRedirect_RedirectPort interface { + isHTTPRedirect_RedirectPort() +} + +type HTTPRedirect_Port struct { + // On a redirect, overwrite the port portion of the URL with this value. + Port uint32 `protobuf:"varint,4,opt,name=port,proto3,oneof"` +} + +type HTTPRedirect_DerivePort struct { + // On a redirect, dynamically set the port: + // * FROM_PROTOCOL_DEFAULT: automatically set to 80 for HTTP and 443 for HTTPS. + // * FROM_REQUEST_PORT: automatically use the port of the request. + DerivePort HTTPRedirect_RedirectPortSelection `protobuf:"varint,5,opt,name=derive_port,json=derivePort,proto3,enum=istio.networking.v1beta1.HTTPRedirect_RedirectPortSelection,oneof"` +} + +func (*HTTPRedirect_Port) isHTTPRedirect_RedirectPort() {} + +func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {} + +// HTTPDirectResponse can be used to send a fixed response to clients. +// For example, the following rule returns a fixed 503 status with a body +// to requests for /v1/getProductRatings API. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "unknown error" +// ... +// +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "unknown error" +// ... +// +// ``` +// {{}} +// {{}} +// +// It is also possible to specify a binary response body. +// This is mostly useful for non text-based protocols such as gRPC. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64 +// ... +// +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64 +// ... +// +// ``` +// {{}} +// {{}} +// +// It is good practice to add headers in the HTTPRoute +// as well as the direct_response, for example to specify +// the returned Content-Type. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "{\"error\": \"unknown error\"}" +// headers: +// response: +// set: +// content-type: "appliation/json" +// ... +// +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// +// name: ratings-route +// +// spec: +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "{\"error\": \"unknown error\"}" +// headers: +// response: +// set: +// content-type: "text/plain" +// ... +// +// ``` +// {{}} +// {{}} +type HTTPDirectResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Specifies the HTTP response status to be returned. + Status uint32 `protobuf:"varint,1,opt,name=status,proto3" json:"status,omitempty"` + // Specifies the content of the response body. If this setting is omitted, + // no body is included in the generated response. + Body *HTTPBody `protobuf:"bytes,2,opt,name=body,proto3" json:"body,omitempty"` +} + +func (x *HTTPDirectResponse) Reset() { + *x = HTTPDirectResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HTTPDirectResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HTTPDirectResponse) ProtoMessage() {} + +func (x *HTTPDirectResponse) ProtoReflect() protoreflect.Message { + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[13] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HTTPDirectResponse.ProtoReflect.Descriptor instead. +func (*HTTPDirectResponse) Descriptor() ([]byte, []int) { + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{13} +} + +func (x *HTTPDirectResponse) GetStatus() uint32 { + if x != nil { + return x.Status + } + return 0 +} + +func (x *HTTPDirectResponse) GetBody() *HTTPBody { + if x != nil { + return x.Body + } + return nil +} + +type HTTPBody struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Specifier: + // + // *HTTPBody_String_ + // *HTTPBody_Bytes + Specifier isHTTPBody_Specifier `protobuf_oneof:"specifier"` +} + +func (x *HTTPBody) Reset() { + *x = HTTPBody{} + if protoimpl.UnsafeEnabled { + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *HTTPBody) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HTTPBody) ProtoMessage() {} + +func (x *HTTPBody) ProtoReflect() protoreflect.Message { + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[14] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use HTTPBody.ProtoReflect.Descriptor instead. +func (*HTTPBody) Descriptor() ([]byte, []int) { + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{14} +} + +func (m *HTTPBody) GetSpecifier() isHTTPBody_Specifier { + if m != nil { + return m.Specifier + } + return nil +} + +func (x *HTTPBody) GetString_() string { + if x, ok := x.GetSpecifier().(*HTTPBody_String_); ok { + return x.String_ } return "" } -func (x *HTTPRedirect) GetRedirectCode() uint32 { - if x != nil { - return x.RedirectCode +func (x *HTTPBody) GetBytes() []byte { + if x, ok := x.GetSpecifier().(*HTTPBody_Bytes); ok { + return x.Bytes } - return 0 + return nil } -type isHTTPRedirect_RedirectPort interface { - isHTTPRedirect_RedirectPort() +type isHTTPBody_Specifier interface { + isHTTPBody_Specifier() } -type HTTPRedirect_Port struct { - // On a redirect, overwrite the port portion of the URL with this value. - Port uint32 `protobuf:"varint,4,opt,name=port,proto3,oneof"` +type HTTPBody_String_ struct { + // response body as a string + String_ string `protobuf:"bytes,1,opt,name=string,proto3,oneof"` } -type HTTPRedirect_DerivePort struct { - // On a redirect, dynamically set the port: - // * FROM_PROTOCOL_DEFAULT: automatically set to 80 for HTTP and 443 for HTTPS. - // * FROM_REQUEST_PORT: automatically use the port of the request. - DerivePort HTTPRedirect_RedirectPortSelection `protobuf:"varint,5,opt,name=derive_port,json=derivePort,proto3,enum=istio.networking.v1beta1.HTTPRedirect_RedirectPortSelection,oneof"` +type HTTPBody_Bytes struct { + // response body as base64 encoded bytes. + Bytes []byte `protobuf:"bytes,2,opt,name=bytes,proto3,oneof"` } -func (*HTTPRedirect_Port) isHTTPRedirect_RedirectPort() {} +func (*HTTPBody_String_) isHTTPBody_Specifier() {} -func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {} +func (*HTTPBody_Bytes) isHTTPBody_Specifier() {} // HTTPRewrite can be used to rewrite specific parts of a HTTP request // before forwarding the request to the destination. Rewrite primitive can @@ -2390,20 +2843,24 @@ func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {} // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: /ratings -// rewrite: -// uri: /v1/bookRatings -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// prefix: /ratings +// rewrite: +// uri: /v1/bookRatings +// route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// // ``` // {{}} // @@ -2412,24 +2869,27 @@ func (*HTTPRedirect_DerivePort) isHTTPRedirect_RedirectPort() {} // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - match: -// - uri: -// prefix: /ratings -// rewrite: -// uri: /v1/bookRatings -// route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// prefix: /ratings +// rewrite: +// uri: /v1/bookRatings +// route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// // ``` // {{}} // {{}} -// type HTTPRewrite struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2446,7 +2906,7 @@ type HTTPRewrite struct { func (x *HTTPRewrite) Reset() { *x = HTTPRewrite{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[13] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2459,7 +2919,7 @@ func (x *HTTPRewrite) String() string { func (*HTTPRewrite) ProtoMessage() {} func (x *HTTPRewrite) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[13] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2472,7 +2932,7 @@ func (x *HTTPRewrite) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRewrite.ProtoReflect.Descriptor instead. func (*HTTPRewrite) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{13} + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{15} } func (x *HTTPRewrite) GetUri() string { @@ -2497,6 +2957,7 @@ type StringMatch struct { unknownFields protoimpl.UnknownFields // Types that are assignable to MatchType: + // // *StringMatch_Exact // *StringMatch_Prefix // *StringMatch_Regex @@ -2506,7 +2967,7 @@ type StringMatch struct { func (x *StringMatch) Reset() { *x = StringMatch{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[14] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2519,7 +2980,7 @@ func (x *StringMatch) String() string { func (*StringMatch) ProtoMessage() {} func (x *StringMatch) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[14] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2532,7 +2993,7 @@ func (x *StringMatch) ProtoReflect() protoreflect.Message { // Deprecated: Use StringMatch.ProtoReflect.Descriptor instead. func (*StringMatch) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{14} + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{16} } func (m *StringMatch) GetMatchType() isStringMatch_MatchType { @@ -2600,19 +3061,23 @@ func (*StringMatch_Regex) isStringMatch_MatchType() {} // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// retries: -// attempts: 3 -// perTryTimeout: 2s -// retryOn: connect-failure,refused-stream,503 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// retries: +// attempts: 3 +// perTryTimeout: 2s +// retryOn: connect-failure,refused-stream,503 +// // ``` // {{}} // @@ -2621,23 +3086,26 @@ func (*StringMatch_Regex) isStringMatch_MatchType() {} // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// retries: -// attempts: 3 -// perTryTimeout: 2s -// retryOn: gateway-error,connect-failure,refused-stream +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// retries: +// attempts: 3 +// perTryTimeout: 2s +// retryOn: gateway-error,connect-failure,refused-stream +// // ``` // {{}} // {{}} -// type HTTPRetry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2668,7 +3136,7 @@ type HTTPRetry struct { func (x *HTTPRetry) Reset() { *x = HTTPRetry{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[15] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2681,7 +3149,7 @@ func (x *HTTPRetry) String() string { func (*HTTPRetry) ProtoMessage() {} func (x *HTTPRetry) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[15] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2694,7 +3162,7 @@ func (x *HTTPRetry) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPRetry.ProtoReflect.Descriptor instead. func (*HTTPRetry) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{15} + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{17} } func (x *HTTPRetry) GetAttempts() int32 { @@ -2739,25 +3207,29 @@ func (x *HTTPRetry) GetRetryRemoteLocalities() *wrappers.BoolValue { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// corsPolicy: -// allowOrigins: -// - exact: https://example.com -// allowMethods: -// - POST -// - GET -// allowCredentials: false -// allowHeaders: -// - X-Foo-Bar -// maxAge: "24h" +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// corsPolicy: +// allowOrigins: +// - exact: https://example.com +// allowMethods: +// - POST +// - GET +// allowCredentials: false +// allowHeaders: +// - X-Foo-Bar +// maxAge: "24h" +// // ``` // {{}} // @@ -2766,29 +3238,32 @@ func (x *HTTPRetry) GetRetryRemoteLocalities() *wrappers.BoolValue { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// corsPolicy: -// allowOrigins: -// - exact: https://example.com -// allowMethods: -// - POST -// - GET -// allowCredentials: false -// allowHeaders: -// - X-Foo-Bar -// maxAge: "24h" +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// corsPolicy: +// allowOrigins: +// - exact: https://example.com +// allowMethods: +// - POST +// - GET +// allowCredentials: false +// allowHeaders: +// - X-Foo-Bar +// maxAge: "24h" +// // ``` // {{}} // {{}} -// type CorsPolicy struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2826,7 +3301,7 @@ type CorsPolicy struct { func (x *CorsPolicy) Reset() { *x = CorsPolicy{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[16] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2839,7 +3314,7 @@ func (x *CorsPolicy) String() string { func (*CorsPolicy) ProtoMessage() {} func (x *CorsPolicy) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[16] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2852,7 +3327,7 @@ func (x *CorsPolicy) ProtoReflect() protoreflect.Message { // Deprecated: Use CorsPolicy.ProtoReflect.Descriptor instead. func (*CorsPolicy) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{16} + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{18} } // Deprecated: Do not use. @@ -2929,7 +3404,7 @@ type HTTPFaultInjection struct { func (x *HTTPFaultInjection) Reset() { *x = HTTPFaultInjection{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[17] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2942,7 +3417,7 @@ func (x *HTTPFaultInjection) String() string { func (*HTTPFaultInjection) ProtoMessage() {} func (x *HTTPFaultInjection) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[17] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2955,7 +3430,7 @@ func (x *HTTPFaultInjection) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFaultInjection.ProtoReflect.Descriptor instead. func (*HTTPFaultInjection) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{17} + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{19} } func (x *HTTPFaultInjection) GetDelay() *HTTPFaultInjection_Delay { @@ -2986,7 +3461,7 @@ type PortSelector struct { func (x *PortSelector) Reset() { *x = PortSelector{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[18] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2999,7 +3474,7 @@ func (x *PortSelector) String() string { func (*PortSelector) ProtoMessage() {} func (x *PortSelector) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[18] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3012,7 +3487,7 @@ func (x *PortSelector) ProtoReflect() protoreflect.Message { // Deprecated: Use PortSelector.ProtoReflect.Descriptor instead. func (*PortSelector) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{18} + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{20} } func (x *PortSelector) GetNumber() uint32 { @@ -3034,7 +3509,7 @@ type Percent struct { func (x *Percent) Reset() { *x = Percent{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[19] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3047,7 +3522,7 @@ func (x *Percent) String() string { func (*Percent) ProtoMessage() {} func (x *Percent) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[19] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3060,7 +3535,7 @@ func (x *Percent) ProtoReflect() protoreflect.Message { // Deprecated: Use Percent.ProtoReflect.Descriptor instead. func (*Percent) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{19} + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{21} } func (x *Percent) GetValue() float64 { @@ -3088,7 +3563,7 @@ type Headers_HeaderOperations struct { func (x *Headers_HeaderOperations) Reset() { *x = Headers_HeaderOperations{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[20] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3101,7 +3576,7 @@ func (x *Headers_HeaderOperations) String() string { func (*Headers_HeaderOperations) ProtoMessage() {} func (x *Headers_HeaderOperations) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[20] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3149,23 +3624,27 @@ func (x *Headers_HeaderOperations) GetRemove() []string { // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - match: -// - sourceLabels: -// env: prod -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// fault: -// delay: -// percentage: -// value: 0.1 -// fixedDelay: 5s +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - match: +// - sourceLabels: +// env: prod +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// fault: +// delay: +// percentage: +// value: 0.1 +// fixedDelay: 5s +// // ``` // {{}} // @@ -3174,23 +3653,27 @@ func (x *Headers_HeaderOperations) GetRemove() []string { // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: reviews-route +// +// name: reviews-route +// // spec: -// hosts: -// - reviews.prod.svc.cluster.local -// http: -// - match: -// - sourceLabels: -// env: prod -// route: -// - destination: -// host: reviews.prod.svc.cluster.local -// subset: v1 -// fault: -// delay: -// percentage: -// value: 0.1 -// fixedDelay: 5s +// +// hosts: +// - reviews.prod.svc.cluster.local +// http: +// - match: +// - sourceLabels: +// env: prod +// route: +// - destination: +// host: reviews.prod.svc.cluster.local +// subset: v1 +// fault: +// delay: +// percentage: +// value: 0.1 +// fixedDelay: 5s +// // ``` // {{}} // {{}} @@ -3210,6 +3693,7 @@ type HTTPFaultInjection_Delay struct { // Deprecated: Do not use. Percent int32 `protobuf:"varint,1,opt,name=percent,proto3" json:"percent,omitempty"` // Types that are assignable to HttpDelayType: + // // *HTTPFaultInjection_Delay_FixedDelay // *HTTPFaultInjection_Delay_ExponentialDelay HttpDelayType isHTTPFaultInjection_Delay_HttpDelayType `protobuf_oneof:"http_delay_type"` @@ -3220,7 +3704,7 @@ type HTTPFaultInjection_Delay struct { func (x *HTTPFaultInjection_Delay) Reset() { *x = HTTPFaultInjection_Delay{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[29] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3233,7 +3717,7 @@ func (x *HTTPFaultInjection_Delay) String() string { func (*HTTPFaultInjection_Delay) ProtoMessage() {} func (x *HTTPFaultInjection_Delay) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[29] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3246,7 +3730,7 @@ func (x *HTTPFaultInjection_Delay) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFaultInjection_Delay.ProtoReflect.Descriptor instead. func (*HTTPFaultInjection_Delay) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{17, 0} + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{19, 0} } // Deprecated: Do not use. @@ -3314,20 +3798,24 @@ func (*HTTPFaultInjection_Delay_ExponentialDelay) isHTTPFaultInjection_Delay_Htt // apiVersion: networking.istio.io/v1alpha3 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// fault: -// abort: -// percentage: -// value: 0.1 -// httpStatus: 400 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// fault: +// abort: +// percentage: +// value: 0.1 +// httpStatus: 400 +// // ``` // {{}} // @@ -3336,20 +3824,24 @@ func (*HTTPFaultInjection_Delay_ExponentialDelay) isHTTPFaultInjection_Delay_Htt // apiVersion: networking.istio.io/v1beta1 // kind: VirtualService // metadata: -// name: ratings-route +// +// name: ratings-route +// // spec: -// hosts: -// - ratings.prod.svc.cluster.local -// http: -// - route: -// - destination: -// host: ratings.prod.svc.cluster.local -// subset: v1 -// fault: -// abort: -// percentage: -// value: 0.1 -// httpStatus: 400 +// +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - route: +// - destination: +// host: ratings.prod.svc.cluster.local +// subset: v1 +// fault: +// abort: +// percentage: +// value: 0.1 +// httpStatus: 400 +// // ``` // {{}} // {{}} @@ -3364,6 +3856,7 @@ type HTTPFaultInjection_Abort struct { unknownFields protoimpl.UnknownFields // Types that are assignable to ErrorType: + // // *HTTPFaultInjection_Abort_HttpStatus // *HTTPFaultInjection_Abort_GrpcStatus // *HTTPFaultInjection_Abort_Http2Error @@ -3375,7 +3868,7 @@ type HTTPFaultInjection_Abort struct { func (x *HTTPFaultInjection_Abort) Reset() { *x = HTTPFaultInjection_Abort{} if protoimpl.UnsafeEnabled { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[30] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3388,7 +3881,7 @@ func (x *HTTPFaultInjection_Abort) String() string { func (*HTTPFaultInjection_Abort) ProtoMessage() {} func (x *HTTPFaultInjection_Abort) ProtoReflect() protoreflect.Message { - mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[30] + mi := &file_networking_v1beta1_virtual_service_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3401,7 +3894,7 @@ func (x *HTTPFaultInjection_Abort) ProtoReflect() protoreflect.Message { // Deprecated: Use HTTPFaultInjection_Abort.ProtoReflect.Descriptor instead. func (*HTTPFaultInjection_Abort) Descriptor() ([]byte, []int) { - return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{17, 1} + return file_networking_v1beta1_virtual_service_proto_rawDescGZIP(), []int{19, 1} } func (m *HTTPFaultInjection_Abort) GetErrorType() isHTTPFaultInjection_Abort_ErrorType { @@ -3449,7 +3942,10 @@ type HTTPFaultInjection_Abort_HttpStatus struct { } type HTTPFaultInjection_Abort_GrpcStatus struct { - // $hide_from_docs + // GRPC status code to use to abort the request. The supported + // codes are documented in https://github.com/grpc/grpc/blob/master/doc/statuscodes.md + // Note: If you want to return the status "Unavailable", then you should + // specify the code as `UNAVAILABLE`(all caps), but not `14`. GrpcStatus string `protobuf:"bytes,3,opt,name=grpc_status,json=grpcStatus,proto3,oneof"` } @@ -3501,7 +3997,7 @@ var file_networking_v1beta1_virtual_service_proto_rawDesc = []byte{ 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x91, 0x08, 0x0a, 0x09, 0x48, 0x54, + 0x74, 0x6f, 0x72, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x22, 0xe8, 0x08, 0x0a, 0x09, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x73, 0x74, @@ -3516,374 +4012,393 @@ var file_networking_v1beta1_virtual_service_proto_rawDesc = []byte{ 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x08, 0x72, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x3e, 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, - 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x08, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x3f, 0x0a, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, - 0x6f, 0x75, 0x74, 0x18, 0x06, 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, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3d, 0x0a, - 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, - 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x05, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, - 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x12, 0x3d, 0x0a, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12, - 0x47, 0x0a, 0x0e, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, - 0x74, 0x18, 0x12, 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, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0d, 0x6d, 0x69, 0x72, 0x72, 0x6f, - 0x72, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x4e, 0x0a, 0x11, 0x6d, 0x69, 0x72, 0x72, - 0x6f, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x65, - 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x73, - 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, - 0x69, 0x63, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, - 0x3b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x05, - 0x10, 0x06, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x10, 0x52, 0x11, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, - 0x6b, 0x65, 0x74, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x0e, 0x61, 0x70, 0x70, - 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x3c, 0x0a, - 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0xe2, 0x03, 0x0a, 0x07, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4c, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, - 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, + 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x55, 0x0a, 0x0f, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x0e, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, + 0x0a, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x12, 0x3f, + 0x0a, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, + 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x52, 0x07, 0x72, 0x65, 0x77, 0x72, 0x69, 0x74, 0x65, 0x12, + 0x33, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x06, 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, 0x07, 0x74, 0x69, 0x6d, + 0x65, 0x6f, 0x75, 0x74, 0x12, 0x3d, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x74, 0x72, 0x79, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, + 0x69, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, + 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x05, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x6d, 0x69, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb8, 0x02, 0x0a, 0x10, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x4d, 0x0a, 0x03, 0x73, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, + 0x61, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, + 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x47, 0x0a, 0x0e, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, + 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x12, 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, 0x42, 0x02, 0x18, 0x01, + 0x52, 0x0d, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, + 0x4e, 0x0a, 0x11, 0x6d, 0x69, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x61, 0x67, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, + 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x10, 0x6d, + 0x69, 0x72, 0x72, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x12, + 0x45, 0x0a, 0x0b, 0x63, 0x6f, 0x72, 0x73, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x18, 0x0a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x52, 0x0a, 0x63, 0x6f, 0x72, 0x73, + 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x3b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x73, 0x65, 0x74, 0x12, 0x4d, 0x0a, 0x03, 0x61, 0x64, 0x64, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x52, 0x03, 0x61, 0x64, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x1a, 0x36, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, - 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x36, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, - 0x22, 0x96, 0x01, 0x0a, 0x08, 0x54, 0x4c, 0x53, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x48, 0x0a, - 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, + 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x10, 0x52, + 0x11, 0x77, 0x65, 0x62, 0x73, 0x6f, 0x63, 0x6b, 0x65, 0x74, 0x5f, 0x75, 0x70, 0x67, 0x72, 0x61, + 0x64, 0x65, 0x52, 0x0e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, + 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, + 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x22, 0x3c, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x22, 0xe2, 0x03, 0x0a, 0x07, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x4c, + 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x08, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x52, 0x08, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x1a, 0xb8, 0x02, 0x0a, + 0x10, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x4d, 0x0a, 0x03, 0x73, 0x65, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, + 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x73, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x73, 0x65, 0x74, + 0x12, 0x4d, 0x0a, 0x03, 0x61, 0x64, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, + 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, + 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x03, 0x61, 0x64, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x1a, 0x36, 0x0a, 0x08, 0x53, 0x65, 0x74, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, + 0x36, 0x0a, 0x08, 0x41, 0x64, 0x64, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x96, 0x01, 0x0a, 0x08, 0x54, 0x4c, 0x53, 0x52, + 0x6f, 0x75, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, + 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, + 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x40, + 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, + 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, + 0x22, 0x8f, 0x01, 0x0a, 0x08, 0x54, 0x43, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x41, 0x0a, + 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, - 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x40, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x08, 0x54, 0x43, - 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x41, 0x0a, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, + 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, + 0x12, 0x40, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, + 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, + 0x74, 0x65, 0x22, 0xba, 0x09, 0x0a, 0x10, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x03, 0x75, + 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, + 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, + 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x03, 0x75, 0x72, 0x69, 0x12, 0x3d, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x06, 0x73, 0x63, 0x68, + 0x65, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x73, 0x52, 0x05, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x12, 0x40, 0x0a, 0x05, 0x72, 0x6f, 0x75, - 0x74, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, + 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x09, 0x61, 0x75, + 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, + 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x22, 0x99, 0x09, 0x0a, 0x10, - 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, - 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x3d, 0x0a, - 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, - 0x61, 0x74, 0x63, 0x68, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x3d, 0x0a, 0x06, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, - 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, - 0x12, 0x51, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x37, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, - 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x61, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, + 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x61, + 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, + 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, + 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x08, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x5e, 0x0a, + 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x09, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, + 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x26, 0x0a, + 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x63, 0x61, 0x73, 0x65, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x55, 0x72, + 0x69, 0x43, 0x61, 0x73, 0x65, 0x12, 0x67, 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, + 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, - 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x5e, 0x0a, 0x0c, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, - 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x69, - 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, - 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, - 0x5f, 0x75, 0x72, 0x69, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0d, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x55, 0x72, 0x69, 0x43, 0x61, 0x73, 0x65, 0x12, 0x67, - 0x0a, 0x0f, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, - 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x1a, 0x61, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, + 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x57, 0x69, 0x74, 0x68, 0x6f, + 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, + 0x77, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x29, + 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x61, + 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x73, 0x74, 0x61, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x1a, 0x61, 0x0a, 0x0c, 0x48, 0x65, + 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, + 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, + 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, + 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 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, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, - 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x10, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 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, 0x3b, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, - 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, - 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x68, 0x0a, - 0x13, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, - 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa2, 0x02, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x3b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, - 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x68, 0x0a, 0x13, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, + 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, + 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0xa2, 0x02, 0x0a, 0x14, 0x48, 0x54, 0x54, 0x50, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, + 0x3b, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, + 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x03, + 0x10, 0x07, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, + 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, + 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x22, 0x79, 0x0a, 0x10, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, + 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0xe9, 0x02, 0x0a, 0x11, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, + 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, + 0x62, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, + 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, + 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, + 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, + 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 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, 0xfe, 0x02, 0x0a, 0x12, + 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, + 0x65, 0x73, 0x12, 0x21, 0x0a, 0x09, 0x73, 0x6e, 0x69, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x08, 0x73, 0x6e, 0x69, + 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x63, 0x0a, 0x0d, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, + 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x4c, 0x53, + 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, + 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, + 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, + 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, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, 0x0d, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x22, 0xce, 0x02, 0x0a, + 0x0c, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, + 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, + 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x04, 0x70, + 0x6f, 0x72, 0x74, 0x12, 0x5f, 0x0a, 0x0b, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, + 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x07, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x07, 0x52, 0x17, 0x72, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x5f, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x73, 0x52, 0x17, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, - 0x64, 0x65, 0x72, 0x73, 0x52, 0x16, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x22, 0x79, 0x0a, 0x10, - 0x52, 0x6f, 0x75, 0x74, 0x65, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4d, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, - 0x2e, 0x44, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x04, 0xe2, 0x41, - 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x16, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0xe9, 0x02, 0x0a, 0x11, 0x4c, 0x34, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x2f, 0x0a, - 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, - 0x6e, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, 0x62, - 0x6e, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x12, 0x62, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, - 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x4c, 0x34, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, - 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x1a, 0x3f, 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0xfe, 0x02, 0x0a, 0x12, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, - 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x09, 0x73, 0x6e, - 0x69, 0x5f, 0x68, 0x6f, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x42, 0x04, 0xe2, - 0x41, 0x01, 0x02, 0x52, 0x08, 0x73, 0x6e, 0x69, 0x48, 0x6f, 0x73, 0x74, 0x73, 0x12, 0x2f, 0x0a, - 0x13, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x75, 0x62, - 0x6e, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x12, 0x64, 0x65, 0x73, 0x74, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x75, 0x62, 0x6e, 0x65, 0x74, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x70, 0x6f, - 0x72, 0x74, 0x12, 0x63, 0x0a, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x62, - 0x65, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x69, 0x73, 0x74, 0x69, + 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0a, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, + 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, + 0x65, 0x22, 0x49, 0x0a, 0x15, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x72, + 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x52, + 0x4f, 0x4d, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x45, 0x46, 0x41, + 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x52, 0x45, + 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x01, 0x42, 0x0f, 0x0a, 0x0d, + 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x6a, 0x0a, + 0x12, 0x48, 0x54, 0x54, 0x50, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1c, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x36, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x22, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x42, + 0x6f, 0x64, 0x79, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, 0x49, 0x0a, 0x08, 0x48, 0x54, 0x54, + 0x50, 0x42, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, + 0x16, 0x0a, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, + 0x52, 0x05, 0x62, 0x79, 0x74, 0x65, 0x73, 0x42, 0x0b, 0x0a, 0x09, 0x73, 0x70, 0x65, 0x63, 0x69, + 0x66, 0x69, 0x65, 0x72, 0x22, 0x3d, 0x0a, 0x0b, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, 0x72, + 0x69, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, + 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, + 0x69, 0x74, 0x79, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, + 0x63, 0x68, 0x12, 0x16, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x70, 0x72, + 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x42, 0x0c, 0x0a, 0x0a, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x09, 0x48, + 0x54, 0x54, 0x50, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x08, 0x61, 0x74, 0x74, 0x65, + 0x6d, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, + 0x52, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x70, 0x65, + 0x72, 0x5f, 0x74, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 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, 0x0d, + 0x70, 0x65, 0x72, 0x54, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x72, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x12, 0x52, 0x0a, 0x17, 0x72, 0x65, 0x74, 0x72, + 0x79, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, + 0x69, 0x65, 0x73, 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, 0x42, 0x6f, 0x6f, 0x6c, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xed, 0x02, 0x0a, + 0x0a, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x25, 0x0a, 0x0c, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x12, 0x4a, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, 0x67, + 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, - 0x65, 0x74, 0x61, 0x31, 0x2e, 0x54, 0x4c, 0x53, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x41, 0x74, 0x74, - 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x73, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, - 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x67, 0x61, 0x74, 0x65, 0x77, - 0x61, 0x79, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x1a, 0x3f, - 0x0a, 0x11, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 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, 0x4a, - 0x04, 0x08, 0x04, 0x10, 0x05, 0x52, 0x0d, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x73, 0x75, - 0x62, 0x6e, 0x65, 0x74, 0x22, 0xce, 0x02, 0x0a, 0x0c, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x14, 0x0a, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x5f, 0x0a, 0x0b, 0x64, - 0x65, 0x72, 0x69, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x3c, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, - 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, - 0x52, 0x0a, 0x64, 0x65, 0x72, 0x69, 0x76, 0x65, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, - 0x68, 0x65, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x72, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x49, 0x0a, 0x15, 0x52, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x15, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, - 0x43, 0x4f, 0x4c, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x15, 0x0a, - 0x11, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x5f, 0x50, 0x4f, - 0x52, 0x54, 0x10, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x5f, 0x70, 0x6f, 0x72, 0x74, 0x22, 0x3d, 0x0a, 0x0b, 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x75, 0x72, 0x69, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, - 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x22, 0x65, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x12, 0x16, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x06, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x70, - 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x16, 0x0a, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x05, 0x72, 0x65, 0x67, 0x65, 0x78, 0x42, 0x0c, 0x0a, - 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xdf, 0x01, 0x0a, 0x09, - 0x48, 0x54, 0x54, 0x50, 0x52, 0x65, 0x74, 0x72, 0x79, 0x12, 0x20, 0x0a, 0x08, 0x61, 0x74, 0x74, - 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, - 0x02, 0x52, 0x08, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x70, - 0x65, 0x72, 0x5f, 0x74, 0x72, 0x79, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x02, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x12, 0x23, + 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x68, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, 0x6f, + 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, + 0x32, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x05, 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, 0x06, 0x6d, 0x61, 0x78, + 0x41, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, 0x65, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 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, 0x10, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x8d, 0x05, 0x0a, + 0x12, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, + 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x48, 0x0a, + 0x05, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, + 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, + 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x62, 0x6f, 0x72, 0x74, + 0x52, 0x05, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x1a, 0x89, 0x02, 0x0a, 0x05, 0x44, 0x65, 0x6c, 0x61, + 0x79, 0x12, 0x1c, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, + 0x42, 0x0a, 0x0b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 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, - 0x0d, 0x70, 0x65, 0x72, 0x54, 0x72, 0x79, 0x54, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x72, 0x65, 0x74, 0x72, 0x79, 0x5f, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x79, 0x4f, 0x6e, 0x12, 0x52, 0x0a, 0x17, 0x72, 0x65, 0x74, - 0x72, 0x79, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x74, 0x69, 0x65, 0x73, 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, 0x42, 0x6f, 0x6f, - 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x74, 0x72, 0x79, 0x52, 0x65, 0x6d, - 0x6f, 0x74, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x22, 0xed, 0x02, - 0x0a, 0x0a, 0x43, 0x6f, 0x72, 0x73, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x12, 0x25, 0x0a, 0x0c, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x0b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x12, 0x4a, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6f, 0x72, 0x69, - 0x67, 0x69, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x69, 0x73, 0x74, - 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x61, 0x74, 0x63, - 0x68, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x73, 0x12, - 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x4d, 0x65, 0x74, - 0x68, 0x6f, 0x64, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x70, - 0x6f, 0x73, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x6f, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x12, 0x32, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x67, 0x65, 0x18, 0x05, 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, 0x06, 0x6d, 0x61, - 0x78, 0x41, 0x67, 0x65, 0x12, 0x47, 0x0a, 0x11, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x63, 0x72, - 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 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, 0x10, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x73, 0x22, 0x8d, 0x05, - 0x0a, 0x12, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, - 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x48, - 0x0a, 0x05, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x48, 0x54, 0x54, 0x50, 0x46, 0x61, 0x75, - 0x6c, 0x74, 0x49, 0x6e, 0x6a, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x41, 0x62, 0x6f, 0x72, - 0x74, 0x52, 0x05, 0x61, 0x62, 0x6f, 0x72, 0x74, 0x1a, 0x89, 0x02, 0x0a, 0x05, 0x44, 0x65, 0x6c, - 0x61, 0x79, 0x12, 0x1c, 0x0a, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x05, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x12, 0x42, 0x0a, 0x0b, 0x66, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 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, - 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, 0x44, - 0x65, 0x6c, 0x61, 0x79, 0x12, 0x48, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x69, 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 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, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x41, - 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x65, - 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, - 0x65, 0x42, 0x11, 0x0a, 0x0f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x1a, 0xd6, 0x01, 0x0a, 0x05, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x27, - 0x0a, 0x0b, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x67, 0x72, 0x70, 0x63, 0x5f, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, - 0x67, 0x72, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x68, 0x74, - 0x74, 0x70, 0x32, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x32, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, + 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x66, 0x69, 0x78, 0x65, 0x64, 0x44, 0x65, + 0x6c, 0x61, 0x79, 0x12, 0x48, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, + 0x61, 0x6c, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 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, 0x48, 0x00, 0x52, 0x10, 0x65, 0x78, 0x70, + 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x12, 0x41, 0x0a, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x42, 0x0c, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, - 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x32, 0x0a, - 0x0c, 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, - 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, - 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x1f, 0x0a, 0x07, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x42, 0x21, 0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x42, 0x11, 0x0a, 0x0f, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x5f, 0x74, + 0x79, 0x70, 0x65, 0x1a, 0xd6, 0x01, 0x0a, 0x05, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x27, 0x0a, + 0x0b, 0x68, 0x74, 0x74, 0x70, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x05, 0x42, 0x04, 0xe2, 0x41, 0x01, 0x02, 0x48, 0x00, 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x67, 0x72, 0x70, 0x63, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x67, + 0x72, 0x70, 0x63, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x0b, 0x68, 0x74, 0x74, + 0x70, 0x32, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x32, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x0a, 0x0a, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x42, + 0x0c, 0x0a, 0x0a, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x4a, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x52, 0x07, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x22, 0x32, 0x0a, 0x0c, + 0x50, 0x6f, 0x72, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x22, 0x1f, 0x0a, 0x07, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x42, 0x21, 0x5a, 0x1f, 0x69, 0x73, 0x74, 0x69, 0x6f, 0x2e, 0x69, 0x6f, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x69, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3899,7 +4414,7 @@ func file_networking_v1beta1_virtual_service_proto_rawDescGZIP() []byte { } var file_networking_v1beta1_virtual_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_networking_v1beta1_virtual_service_proto_msgTypes = make([]protoimpl.MessageInfo, 31) +var file_networking_v1beta1_virtual_service_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_networking_v1beta1_virtual_service_proto_goTypes = []interface{}{ (HTTPRedirect_RedirectPortSelection)(0), // 0: istio.networking.v1beta1.HTTPRedirect.RedirectPortSelection (*VirtualService)(nil), // 1: istio.networking.v1beta1.VirtualService @@ -3915,87 +4430,91 @@ var file_networking_v1beta1_virtual_service_proto_goTypes = []interface{}{ (*L4MatchAttributes)(nil), // 11: istio.networking.v1beta1.L4MatchAttributes (*TLSMatchAttributes)(nil), // 12: istio.networking.v1beta1.TLSMatchAttributes (*HTTPRedirect)(nil), // 13: istio.networking.v1beta1.HTTPRedirect - (*HTTPRewrite)(nil), // 14: istio.networking.v1beta1.HTTPRewrite - (*StringMatch)(nil), // 15: istio.networking.v1beta1.StringMatch - (*HTTPRetry)(nil), // 16: istio.networking.v1beta1.HTTPRetry - (*CorsPolicy)(nil), // 17: istio.networking.v1beta1.CorsPolicy - (*HTTPFaultInjection)(nil), // 18: istio.networking.v1beta1.HTTPFaultInjection - (*PortSelector)(nil), // 19: istio.networking.v1beta1.PortSelector - (*Percent)(nil), // 20: istio.networking.v1beta1.Percent - (*Headers_HeaderOperations)(nil), // 21: istio.networking.v1beta1.Headers.HeaderOperations - nil, // 22: istio.networking.v1beta1.Headers.HeaderOperations.SetEntry - nil, // 23: istio.networking.v1beta1.Headers.HeaderOperations.AddEntry - nil, // 24: istio.networking.v1beta1.HTTPMatchRequest.HeadersEntry - nil, // 25: istio.networking.v1beta1.HTTPMatchRequest.SourceLabelsEntry - nil, // 26: istio.networking.v1beta1.HTTPMatchRequest.QueryParamsEntry - nil, // 27: istio.networking.v1beta1.HTTPMatchRequest.WithoutHeadersEntry - nil, // 28: istio.networking.v1beta1.L4MatchAttributes.SourceLabelsEntry - nil, // 29: istio.networking.v1beta1.TLSMatchAttributes.SourceLabelsEntry - (*HTTPFaultInjection_Delay)(nil), // 30: istio.networking.v1beta1.HTTPFaultInjection.Delay - (*HTTPFaultInjection_Abort)(nil), // 31: istio.networking.v1beta1.HTTPFaultInjection.Abort - (*duration.Duration)(nil), // 32: google.protobuf.Duration - (*wrappers.UInt32Value)(nil), // 33: google.protobuf.UInt32Value - (*wrappers.BoolValue)(nil), // 34: google.protobuf.BoolValue + (*HTTPDirectResponse)(nil), // 14: istio.networking.v1beta1.HTTPDirectResponse + (*HTTPBody)(nil), // 15: istio.networking.v1beta1.HTTPBody + (*HTTPRewrite)(nil), // 16: istio.networking.v1beta1.HTTPRewrite + (*StringMatch)(nil), // 17: istio.networking.v1beta1.StringMatch + (*HTTPRetry)(nil), // 18: istio.networking.v1beta1.HTTPRetry + (*CorsPolicy)(nil), // 19: istio.networking.v1beta1.CorsPolicy + (*HTTPFaultInjection)(nil), // 20: istio.networking.v1beta1.HTTPFaultInjection + (*PortSelector)(nil), // 21: istio.networking.v1beta1.PortSelector + (*Percent)(nil), // 22: istio.networking.v1beta1.Percent + (*Headers_HeaderOperations)(nil), // 23: istio.networking.v1beta1.Headers.HeaderOperations + nil, // 24: istio.networking.v1beta1.Headers.HeaderOperations.SetEntry + nil, // 25: istio.networking.v1beta1.Headers.HeaderOperations.AddEntry + nil, // 26: istio.networking.v1beta1.HTTPMatchRequest.HeadersEntry + nil, // 27: istio.networking.v1beta1.HTTPMatchRequest.SourceLabelsEntry + nil, // 28: istio.networking.v1beta1.HTTPMatchRequest.QueryParamsEntry + nil, // 29: istio.networking.v1beta1.HTTPMatchRequest.WithoutHeadersEntry + nil, // 30: istio.networking.v1beta1.L4MatchAttributes.SourceLabelsEntry + nil, // 31: istio.networking.v1beta1.TLSMatchAttributes.SourceLabelsEntry + (*HTTPFaultInjection_Delay)(nil), // 32: istio.networking.v1beta1.HTTPFaultInjection.Delay + (*HTTPFaultInjection_Abort)(nil), // 33: istio.networking.v1beta1.HTTPFaultInjection.Abort + (*duration.Duration)(nil), // 34: google.protobuf.Duration + (*wrappers.UInt32Value)(nil), // 35: google.protobuf.UInt32Value + (*wrappers.BoolValue)(nil), // 36: google.protobuf.BoolValue } var file_networking_v1beta1_virtual_service_proto_depIdxs = []int32{ 3, // 0: istio.networking.v1beta1.VirtualService.http:type_name -> istio.networking.v1beta1.HTTPRoute 6, // 1: istio.networking.v1beta1.VirtualService.tls:type_name -> istio.networking.v1beta1.TLSRoute 7, // 2: istio.networking.v1beta1.VirtualService.tcp:type_name -> istio.networking.v1beta1.TCPRoute - 19, // 3: istio.networking.v1beta1.Destination.port:type_name -> istio.networking.v1beta1.PortSelector + 21, // 3: istio.networking.v1beta1.Destination.port:type_name -> istio.networking.v1beta1.PortSelector 8, // 4: istio.networking.v1beta1.HTTPRoute.match:type_name -> istio.networking.v1beta1.HTTPMatchRequest 9, // 5: istio.networking.v1beta1.HTTPRoute.route:type_name -> istio.networking.v1beta1.HTTPRouteDestination 13, // 6: istio.networking.v1beta1.HTTPRoute.redirect:type_name -> istio.networking.v1beta1.HTTPRedirect - 4, // 7: istio.networking.v1beta1.HTTPRoute.delegate:type_name -> istio.networking.v1beta1.Delegate - 14, // 8: istio.networking.v1beta1.HTTPRoute.rewrite:type_name -> istio.networking.v1beta1.HTTPRewrite - 32, // 9: istio.networking.v1beta1.HTTPRoute.timeout:type_name -> google.protobuf.Duration - 16, // 10: istio.networking.v1beta1.HTTPRoute.retries:type_name -> istio.networking.v1beta1.HTTPRetry - 18, // 11: istio.networking.v1beta1.HTTPRoute.fault:type_name -> istio.networking.v1beta1.HTTPFaultInjection - 2, // 12: istio.networking.v1beta1.HTTPRoute.mirror:type_name -> istio.networking.v1beta1.Destination - 33, // 13: istio.networking.v1beta1.HTTPRoute.mirror_percent:type_name -> google.protobuf.UInt32Value - 20, // 14: istio.networking.v1beta1.HTTPRoute.mirror_percentage:type_name -> istio.networking.v1beta1.Percent - 17, // 15: istio.networking.v1beta1.HTTPRoute.cors_policy:type_name -> istio.networking.v1beta1.CorsPolicy - 5, // 16: istio.networking.v1beta1.HTTPRoute.headers:type_name -> istio.networking.v1beta1.Headers - 21, // 17: istio.networking.v1beta1.Headers.request:type_name -> istio.networking.v1beta1.Headers.HeaderOperations - 21, // 18: istio.networking.v1beta1.Headers.response:type_name -> istio.networking.v1beta1.Headers.HeaderOperations - 12, // 19: istio.networking.v1beta1.TLSRoute.match:type_name -> istio.networking.v1beta1.TLSMatchAttributes - 10, // 20: istio.networking.v1beta1.TLSRoute.route:type_name -> istio.networking.v1beta1.RouteDestination - 11, // 21: istio.networking.v1beta1.TCPRoute.match:type_name -> istio.networking.v1beta1.L4MatchAttributes - 10, // 22: istio.networking.v1beta1.TCPRoute.route:type_name -> istio.networking.v1beta1.RouteDestination - 15, // 23: istio.networking.v1beta1.HTTPMatchRequest.uri:type_name -> istio.networking.v1beta1.StringMatch - 15, // 24: istio.networking.v1beta1.HTTPMatchRequest.scheme:type_name -> istio.networking.v1beta1.StringMatch - 15, // 25: istio.networking.v1beta1.HTTPMatchRequest.method:type_name -> istio.networking.v1beta1.StringMatch - 15, // 26: istio.networking.v1beta1.HTTPMatchRequest.authority:type_name -> istio.networking.v1beta1.StringMatch - 24, // 27: istio.networking.v1beta1.HTTPMatchRequest.headers:type_name -> istio.networking.v1beta1.HTTPMatchRequest.HeadersEntry - 25, // 28: istio.networking.v1beta1.HTTPMatchRequest.source_labels:type_name -> istio.networking.v1beta1.HTTPMatchRequest.SourceLabelsEntry - 26, // 29: istio.networking.v1beta1.HTTPMatchRequest.query_params:type_name -> istio.networking.v1beta1.HTTPMatchRequest.QueryParamsEntry - 27, // 30: istio.networking.v1beta1.HTTPMatchRequest.without_headers:type_name -> istio.networking.v1beta1.HTTPMatchRequest.WithoutHeadersEntry - 2, // 31: istio.networking.v1beta1.HTTPRouteDestination.destination:type_name -> istio.networking.v1beta1.Destination - 5, // 32: istio.networking.v1beta1.HTTPRouteDestination.headers:type_name -> istio.networking.v1beta1.Headers - 2, // 33: istio.networking.v1beta1.RouteDestination.destination:type_name -> istio.networking.v1beta1.Destination - 28, // 34: istio.networking.v1beta1.L4MatchAttributes.source_labels:type_name -> istio.networking.v1beta1.L4MatchAttributes.SourceLabelsEntry - 29, // 35: istio.networking.v1beta1.TLSMatchAttributes.source_labels:type_name -> istio.networking.v1beta1.TLSMatchAttributes.SourceLabelsEntry - 0, // 36: istio.networking.v1beta1.HTTPRedirect.derive_port:type_name -> istio.networking.v1beta1.HTTPRedirect.RedirectPortSelection - 32, // 37: istio.networking.v1beta1.HTTPRetry.per_try_timeout:type_name -> google.protobuf.Duration - 34, // 38: istio.networking.v1beta1.HTTPRetry.retry_remote_localities:type_name -> google.protobuf.BoolValue - 15, // 39: istio.networking.v1beta1.CorsPolicy.allow_origins:type_name -> istio.networking.v1beta1.StringMatch - 32, // 40: istio.networking.v1beta1.CorsPolicy.max_age:type_name -> google.protobuf.Duration - 34, // 41: istio.networking.v1beta1.CorsPolicy.allow_credentials:type_name -> google.protobuf.BoolValue - 30, // 42: istio.networking.v1beta1.HTTPFaultInjection.delay:type_name -> istio.networking.v1beta1.HTTPFaultInjection.Delay - 31, // 43: istio.networking.v1beta1.HTTPFaultInjection.abort:type_name -> istio.networking.v1beta1.HTTPFaultInjection.Abort - 22, // 44: istio.networking.v1beta1.Headers.HeaderOperations.set:type_name -> istio.networking.v1beta1.Headers.HeaderOperations.SetEntry - 23, // 45: istio.networking.v1beta1.Headers.HeaderOperations.add:type_name -> istio.networking.v1beta1.Headers.HeaderOperations.AddEntry - 15, // 46: istio.networking.v1beta1.HTTPMatchRequest.HeadersEntry.value:type_name -> istio.networking.v1beta1.StringMatch - 15, // 47: istio.networking.v1beta1.HTTPMatchRequest.QueryParamsEntry.value:type_name -> istio.networking.v1beta1.StringMatch - 15, // 48: istio.networking.v1beta1.HTTPMatchRequest.WithoutHeadersEntry.value:type_name -> istio.networking.v1beta1.StringMatch - 32, // 49: istio.networking.v1beta1.HTTPFaultInjection.Delay.fixed_delay:type_name -> google.protobuf.Duration - 32, // 50: istio.networking.v1beta1.HTTPFaultInjection.Delay.exponential_delay:type_name -> google.protobuf.Duration - 20, // 51: istio.networking.v1beta1.HTTPFaultInjection.Delay.percentage:type_name -> istio.networking.v1beta1.Percent - 20, // 52: istio.networking.v1beta1.HTTPFaultInjection.Abort.percentage:type_name -> istio.networking.v1beta1.Percent - 53, // [53:53] is the sub-list for method output_type - 53, // [53:53] is the sub-list for method input_type - 53, // [53:53] is the sub-list for extension type_name - 53, // [53:53] is the sub-list for extension extendee - 0, // [0:53] is the sub-list for field type_name + 14, // 7: istio.networking.v1beta1.HTTPRoute.direct_response:type_name -> istio.networking.v1beta1.HTTPDirectResponse + 4, // 8: istio.networking.v1beta1.HTTPRoute.delegate:type_name -> istio.networking.v1beta1.Delegate + 16, // 9: istio.networking.v1beta1.HTTPRoute.rewrite:type_name -> istio.networking.v1beta1.HTTPRewrite + 34, // 10: istio.networking.v1beta1.HTTPRoute.timeout:type_name -> google.protobuf.Duration + 18, // 11: istio.networking.v1beta1.HTTPRoute.retries:type_name -> istio.networking.v1beta1.HTTPRetry + 20, // 12: istio.networking.v1beta1.HTTPRoute.fault:type_name -> istio.networking.v1beta1.HTTPFaultInjection + 2, // 13: istio.networking.v1beta1.HTTPRoute.mirror:type_name -> istio.networking.v1beta1.Destination + 35, // 14: istio.networking.v1beta1.HTTPRoute.mirror_percent:type_name -> google.protobuf.UInt32Value + 22, // 15: istio.networking.v1beta1.HTTPRoute.mirror_percentage:type_name -> istio.networking.v1beta1.Percent + 19, // 16: istio.networking.v1beta1.HTTPRoute.cors_policy:type_name -> istio.networking.v1beta1.CorsPolicy + 5, // 17: istio.networking.v1beta1.HTTPRoute.headers:type_name -> istio.networking.v1beta1.Headers + 23, // 18: istio.networking.v1beta1.Headers.request:type_name -> istio.networking.v1beta1.Headers.HeaderOperations + 23, // 19: istio.networking.v1beta1.Headers.response:type_name -> istio.networking.v1beta1.Headers.HeaderOperations + 12, // 20: istio.networking.v1beta1.TLSRoute.match:type_name -> istio.networking.v1beta1.TLSMatchAttributes + 10, // 21: istio.networking.v1beta1.TLSRoute.route:type_name -> istio.networking.v1beta1.RouteDestination + 11, // 22: istio.networking.v1beta1.TCPRoute.match:type_name -> istio.networking.v1beta1.L4MatchAttributes + 10, // 23: istio.networking.v1beta1.TCPRoute.route:type_name -> istio.networking.v1beta1.RouteDestination + 17, // 24: istio.networking.v1beta1.HTTPMatchRequest.uri:type_name -> istio.networking.v1beta1.StringMatch + 17, // 25: istio.networking.v1beta1.HTTPMatchRequest.scheme:type_name -> istio.networking.v1beta1.StringMatch + 17, // 26: istio.networking.v1beta1.HTTPMatchRequest.method:type_name -> istio.networking.v1beta1.StringMatch + 17, // 27: istio.networking.v1beta1.HTTPMatchRequest.authority:type_name -> istio.networking.v1beta1.StringMatch + 26, // 28: istio.networking.v1beta1.HTTPMatchRequest.headers:type_name -> istio.networking.v1beta1.HTTPMatchRequest.HeadersEntry + 27, // 29: istio.networking.v1beta1.HTTPMatchRequest.source_labels:type_name -> istio.networking.v1beta1.HTTPMatchRequest.SourceLabelsEntry + 28, // 30: istio.networking.v1beta1.HTTPMatchRequest.query_params:type_name -> istio.networking.v1beta1.HTTPMatchRequest.QueryParamsEntry + 29, // 31: istio.networking.v1beta1.HTTPMatchRequest.without_headers:type_name -> istio.networking.v1beta1.HTTPMatchRequest.WithoutHeadersEntry + 2, // 32: istio.networking.v1beta1.HTTPRouteDestination.destination:type_name -> istio.networking.v1beta1.Destination + 5, // 33: istio.networking.v1beta1.HTTPRouteDestination.headers:type_name -> istio.networking.v1beta1.Headers + 2, // 34: istio.networking.v1beta1.RouteDestination.destination:type_name -> istio.networking.v1beta1.Destination + 30, // 35: istio.networking.v1beta1.L4MatchAttributes.source_labels:type_name -> istio.networking.v1beta1.L4MatchAttributes.SourceLabelsEntry + 31, // 36: istio.networking.v1beta1.TLSMatchAttributes.source_labels:type_name -> istio.networking.v1beta1.TLSMatchAttributes.SourceLabelsEntry + 0, // 37: istio.networking.v1beta1.HTTPRedirect.derive_port:type_name -> istio.networking.v1beta1.HTTPRedirect.RedirectPortSelection + 15, // 38: istio.networking.v1beta1.HTTPDirectResponse.body:type_name -> istio.networking.v1beta1.HTTPBody + 34, // 39: istio.networking.v1beta1.HTTPRetry.per_try_timeout:type_name -> google.protobuf.Duration + 36, // 40: istio.networking.v1beta1.HTTPRetry.retry_remote_localities:type_name -> google.protobuf.BoolValue + 17, // 41: istio.networking.v1beta1.CorsPolicy.allow_origins:type_name -> istio.networking.v1beta1.StringMatch + 34, // 42: istio.networking.v1beta1.CorsPolicy.max_age:type_name -> google.protobuf.Duration + 36, // 43: istio.networking.v1beta1.CorsPolicy.allow_credentials:type_name -> google.protobuf.BoolValue + 32, // 44: istio.networking.v1beta1.HTTPFaultInjection.delay:type_name -> istio.networking.v1beta1.HTTPFaultInjection.Delay + 33, // 45: istio.networking.v1beta1.HTTPFaultInjection.abort:type_name -> istio.networking.v1beta1.HTTPFaultInjection.Abort + 24, // 46: istio.networking.v1beta1.Headers.HeaderOperations.set:type_name -> istio.networking.v1beta1.Headers.HeaderOperations.SetEntry + 25, // 47: istio.networking.v1beta1.Headers.HeaderOperations.add:type_name -> istio.networking.v1beta1.Headers.HeaderOperations.AddEntry + 17, // 48: istio.networking.v1beta1.HTTPMatchRequest.HeadersEntry.value:type_name -> istio.networking.v1beta1.StringMatch + 17, // 49: istio.networking.v1beta1.HTTPMatchRequest.QueryParamsEntry.value:type_name -> istio.networking.v1beta1.StringMatch + 17, // 50: istio.networking.v1beta1.HTTPMatchRequest.WithoutHeadersEntry.value:type_name -> istio.networking.v1beta1.StringMatch + 34, // 51: istio.networking.v1beta1.HTTPFaultInjection.Delay.fixed_delay:type_name -> google.protobuf.Duration + 34, // 52: istio.networking.v1beta1.HTTPFaultInjection.Delay.exponential_delay:type_name -> google.protobuf.Duration + 22, // 53: istio.networking.v1beta1.HTTPFaultInjection.Delay.percentage:type_name -> istio.networking.v1beta1.Percent + 22, // 54: istio.networking.v1beta1.HTTPFaultInjection.Abort.percentage:type_name -> istio.networking.v1beta1.Percent + 55, // [55:55] is the sub-list for method output_type + 55, // [55:55] is the sub-list for method input_type + 55, // [55:55] is the sub-list for extension type_name + 55, // [55:55] is the sub-list for extension extendee + 0, // [0:55] is the sub-list for field type_name } func init() { file_networking_v1beta1_virtual_service_proto_init() } @@ -4161,7 +4680,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { } } file_networking_v1beta1_virtual_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRewrite); i { + switch v := v.(*HTTPDirectResponse); i { case 0: return &v.state case 1: @@ -4173,7 +4692,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { } } file_networking_v1beta1_virtual_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StringMatch); i { + switch v := v.(*HTTPBody); i { case 0: return &v.state case 1: @@ -4185,7 +4704,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { } } file_networking_v1beta1_virtual_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPRetry); i { + switch v := v.(*HTTPRewrite); i { case 0: return &v.state case 1: @@ -4197,7 +4716,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { } } file_networking_v1beta1_virtual_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CorsPolicy); i { + switch v := v.(*StringMatch); i { case 0: return &v.state case 1: @@ -4209,7 +4728,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { } } file_networking_v1beta1_virtual_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HTTPFaultInjection); i { + switch v := v.(*HTTPRetry); i { case 0: return &v.state case 1: @@ -4221,7 +4740,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { } } file_networking_v1beta1_virtual_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PortSelector); i { + switch v := v.(*CorsPolicy); i { case 0: return &v.state case 1: @@ -4233,7 +4752,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { } } file_networking_v1beta1_virtual_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Percent); i { + switch v := v.(*HTTPFaultInjection); i { case 0: return &v.state case 1: @@ -4245,6 +4764,30 @@ func file_networking_v1beta1_virtual_service_proto_init() { } } file_networking_v1beta1_virtual_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*PortSelector); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_networking_v1beta1_virtual_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Percent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_networking_v1beta1_virtual_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Headers_HeaderOperations); i { case 0: return &v.state @@ -4256,7 +4799,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { return nil } } - file_networking_v1beta1_virtual_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_networking_v1beta1_virtual_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HTTPFaultInjection_Delay); i { case 0: return &v.state @@ -4268,7 +4811,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { return nil } } - file_networking_v1beta1_virtual_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_networking_v1beta1_virtual_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HTTPFaultInjection_Abort); i { case 0: return &v.state @@ -4286,15 +4829,19 @@ func file_networking_v1beta1_virtual_service_proto_init() { (*HTTPRedirect_DerivePort)(nil), } file_networking_v1beta1_virtual_service_proto_msgTypes[14].OneofWrappers = []interface{}{ + (*HTTPBody_String_)(nil), + (*HTTPBody_Bytes)(nil), + } + file_networking_v1beta1_virtual_service_proto_msgTypes[16].OneofWrappers = []interface{}{ (*StringMatch_Exact)(nil), (*StringMatch_Prefix)(nil), (*StringMatch_Regex)(nil), } - file_networking_v1beta1_virtual_service_proto_msgTypes[29].OneofWrappers = []interface{}{ + file_networking_v1beta1_virtual_service_proto_msgTypes[31].OneofWrappers = []interface{}{ (*HTTPFaultInjection_Delay_FixedDelay)(nil), (*HTTPFaultInjection_Delay_ExponentialDelay)(nil), } - file_networking_v1beta1_virtual_service_proto_msgTypes[30].OneofWrappers = []interface{}{ + file_networking_v1beta1_virtual_service_proto_msgTypes[32].OneofWrappers = []interface{}{ (*HTTPFaultInjection_Abort_HttpStatus)(nil), (*HTTPFaultInjection_Abort_GrpcStatus)(nil), (*HTTPFaultInjection_Abort_Http2Error)(nil), @@ -4305,7 +4852,7 @@ func file_networking_v1beta1_virtual_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_networking_v1beta1_virtual_service_proto_rawDesc, NumEnums: 1, - NumMessages: 31, + NumMessages: 33, NumExtensions: 0, NumServices: 0, }, diff --git a/vendor/istio.io/api/networking/v1beta1/virtual_service.proto b/vendor/istio.io/api/networking/v1beta1/virtual_service.proto index 6d7e6eaa4..c7eb50ee2 100644 --- a/vendor/istio.io/api/networking/v1beta1/virtual_service.proto +++ b/vendor/istio.io/api/networking/v1beta1/virtual_service.proto @@ -574,18 +574,25 @@ message HTTPRoute { // is matched if any one of the match blocks succeed. repeated HTTPMatchRequest match = 1; - // A HTTP rule can either redirect or forward (default) traffic. The - // forwarding target can be one of several versions of a service (see + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // The forwarding target can be one of several versions of a service (see // glossary in beginning of document). Weights associated with the // service version determine the proportion of traffic it receives. repeated HTTPRouteDestination route = 2; - // A HTTP rule can either redirect or forward (default) traffic. If - // traffic passthrough option is specified in the rule, + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // If traffic passthrough option is specified in the rule, // route/redirect will be ignored. The redirect primitive can be used to // send a HTTP 301 redirect to a different URI or Authority. HTTPRedirect redirect = 3; + // A HTTP rule can either return a direct_response, redirect or forward (default) traffic. + // Direct Response is used to specify a fixed response that should + // be sent to clients. + // + // It can be set only when `Route` and `Redirect` are empty. + HTTPDirectResponse direct_response = 21; + // Delegate is used to specify the particular VirtualService which // can be used to define delegate HTTPRoute. // @@ -649,7 +656,7 @@ message HTTPRoute { Headers headers = 16; // $hide_from_docs - // Next available field number: 21 + // Next available field number: 22 } @@ -1112,6 +1119,14 @@ message HTTPMatchRequest { // If the VirtualService has a list of gateways specified in the top-level `gateways` field, // it must include the reserved gateway `mesh` for this field to be applicable. string source_namespace = 13; + + // The human readable prefix to use when emitting statistics for this route. + // The statistics are generated with prefix route.. + // This should be set for highly critical routes that one wishes to get "per-route" statistics on. + // This prefix is only for proxy-level statistics (envoy_*) and not service-level (istio_*) statistics. + // Refer to https://www.envoyproxy.io/docs/envoy/latest/api-v3/config/route/v3/route_components.proto#envoy-v3-api-field-config-route-v3-route-stat-prefix + // for statistics that are generated when this is configured. + string stat_prefix = 14; } // Each routing rule is associated with one or more service versions (see @@ -1436,6 +1451,176 @@ message HTTPRedirect { uint32 redirect_code = 3; } +// HTTPDirectResponse can be used to send a fixed response to clients. +// For example, the following rule returns a fixed 503 status with a body +// to requests for /v1/getProductRatings API. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "unknown error" +// ... +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "unknown error" +// ... +// ``` +// {{}} +// {{}} +// +// It is also possible to specify a binary response body. +// This is mostly useful for non text-based protocols such as gRPC. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64 +// ... +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// bytes: "dW5rbm93biBlcnJvcg==" # "unknown error" in base64 +// ... +// ``` +// {{}} +// {{}} +// +// It is good practice to add headers in the HTTPRoute +// as well as the direct_response, for example to specify +// the returned Content-Type. +// +// {{}} +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1alpha3 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "{\"error\": \"unknown error\"}" +// headers: +// response: +// set: +// content-type: "appliation/json" +// ... +// ``` +// {{}} +// +// {{}} +// ```yaml +// apiVersion: networking.istio.io/v1beta1 +// kind: VirtualService +// metadata: +// name: ratings-route +// spec: +// hosts: +// - ratings.prod.svc.cluster.local +// http: +// - match: +// - uri: +// exact: /v1/getProductRatings +// directResponse: +// status: 503 +// body: +// string: "{\"error\": \"unknown error\"}" +// headers: +// response: +// set: +// content-type: "text/plain" +// ... +// ``` +// {{}} +// {{}} +// +message HTTPDirectResponse { + // Specifies the HTTP response status to be returned. + uint32 status = 1 [(google.api.field_behavior) = REQUIRED]; + + // Specifies the content of the response body. If this setting is omitted, + // no body is included in the generated response. + HTTPBody body = 2; +} + +message HTTPBody { + oneof specifier { + // response body as a string + string string = 1; + + // response body as base64 encoded bytes. + bytes bytes = 2; + } +} + // HTTPRewrite can be used to rewrite specific parts of a HTTP request // before forwarding the request to the destination. Rewrite primitive can // be used only with HTTPRouteDestination. The following example @@ -1846,7 +2031,10 @@ message HTTPFaultInjection { // HTTP status code to use to abort the Http request. int32 http_status = 2 [(google.api.field_behavior) = REQUIRED]; - // $hide_from_docs + // GRPC status code to use to abort the request. The supported + // codes are documented in https://github.com/grpc/grpc/blob/master/doc/statuscodes.md + // Note: If you want to return the status "Unavailable", then you should + // specify the code as `UNAVAILABLE`(all caps), but not `14`. string grpc_status = 3; // $hide_from_docs diff --git a/vendor/istio.io/api/networking/v1beta1/virtual_service_deepcopy.gen.go b/vendor/istio.io/api/networking/v1beta1/virtual_service_deepcopy.gen.go index 5b6c176d2..ed41c1a28 100644 --- a/vendor/istio.io/api/networking/v1beta1/virtual_service_deepcopy.gen.go +++ b/vendor/istio.io/api/networking/v1beta1/virtual_service_deepcopy.gen.go @@ -299,6 +299,48 @@ func (in *HTTPRedirect) DeepCopyInterface() interface{} { return in.DeepCopy() } +// DeepCopyInto supports using HTTPDirectResponse within kubernetes types, where deepcopy-gen is used. +func (in *HTTPDirectResponse) DeepCopyInto(out *HTTPDirectResponse) { + p := proto.Clone(in).(*HTTPDirectResponse) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPDirectResponse. Required by controller-gen. +func (in *HTTPDirectResponse) DeepCopy() *HTTPDirectResponse { + if in == nil { + return nil + } + out := new(HTTPDirectResponse) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPDirectResponse. Required by controller-gen. +func (in *HTTPDirectResponse) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + +// DeepCopyInto supports using HTTPBody within kubernetes types, where deepcopy-gen is used. +func (in *HTTPBody) DeepCopyInto(out *HTTPBody) { + p := proto.Clone(in).(*HTTPBody) + *out = *p +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPBody. Required by controller-gen. +func (in *HTTPBody) DeepCopy() *HTTPBody { + if in == nil { + return nil + } + out := new(HTTPBody) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInterface is an autogenerated deepcopy function, copying the receiver, creating a new HTTPBody. Required by controller-gen. +func (in *HTTPBody) DeepCopyInterface() interface{} { + return in.DeepCopy() +} + // DeepCopyInto supports using HTTPRewrite within kubernetes types, where deepcopy-gen is used. func (in *HTTPRewrite) DeepCopyInto(out *HTTPRewrite) { p := proto.Clone(in).(*HTTPRewrite) diff --git a/vendor/istio.io/api/networking/v1beta1/virtual_service_json.gen.go b/vendor/istio.io/api/networking/v1beta1/virtual_service_json.gen.go index 48e1cb4b8..8aae39cbd 100644 --- a/vendor/istio.io/api/networking/v1beta1/virtual_service_json.gen.go +++ b/vendor/istio.io/api/networking/v1beta1/virtual_service_json.gen.go @@ -160,6 +160,28 @@ func (this *HTTPRedirect) UnmarshalJSON(b []byte) error { return VirtualServiceUnmarshaler.Unmarshal(bytes.NewReader(b), this) } +// MarshalJSON is a custom marshaler for HTTPDirectResponse +func (this *HTTPDirectResponse) MarshalJSON() ([]byte, error) { + str, err := VirtualServiceMarshaler.MarshalToString(this) + return []byte(str), err +} + +// UnmarshalJSON is a custom unmarshaler for HTTPDirectResponse +func (this *HTTPDirectResponse) UnmarshalJSON(b []byte) error { + return VirtualServiceUnmarshaler.Unmarshal(bytes.NewReader(b), this) +} + +// MarshalJSON is a custom marshaler for HTTPBody +func (this *HTTPBody) MarshalJSON() ([]byte, error) { + str, err := VirtualServiceMarshaler.MarshalToString(this) + return []byte(str), err +} + +// UnmarshalJSON is a custom unmarshaler for HTTPBody +func (this *HTTPBody) UnmarshalJSON(b []byte) error { + return VirtualServiceUnmarshaler.Unmarshal(bytes.NewReader(b), this) +} + // MarshalJSON is a custom marshaler for HTTPRewrite func (this *HTTPRewrite) MarshalJSON() ([]byte, error) { str, err := VirtualServiceMarshaler.MarshalToString(this) diff --git a/vendor/istio.io/api/networking/v1beta1/workload_entry.pb.go b/vendor/istio.io/api/networking/v1beta1/workload_entry.pb.go index 7976b3f6d..8520b17f9 100644 --- a/vendor/istio.io/api/networking/v1beta1/workload_entry.pb.go +++ b/vendor/istio.io/api/networking/v1beta1/workload_entry.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1beta1/workload_entry.proto diff --git a/vendor/istio.io/api/networking/v1beta1/workload_group.pb.go b/vendor/istio.io/api/networking/v1beta1/workload_group.pb.go index ce218e102..e69713aa7 100644 --- a/vendor/istio.io/api/networking/v1beta1/workload_group.pb.go +++ b/vendor/istio.io/api/networking/v1beta1/workload_group.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: networking/v1beta1/workload_group.proto @@ -217,6 +217,7 @@ type ReadinessProbe struct { // hold true for any of the healthcheck methods. // // Types that are assignable to HealthCheckMethod: + // // *ReadinessProbe_HttpGet // *ReadinessProbe_TcpSocket // *ReadinessProbe_Exec diff --git a/vendor/istio.io/api/type/v1beta1/selector.pb.go b/vendor/istio.io/api/type/v1beta1/selector.pb.go index a719ff714..284940f40 100644 --- a/vendor/istio.io/api/type/v1beta1/selector.pb.go +++ b/vendor/istio.io/api/type/v1beta1/selector.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc (unknown) // source: type/v1beta1/selector.proto diff --git a/vendor/k8s.io/code-generator/generate-groups.sh b/vendor/k8s.io/code-generator/generate-groups.sh old mode 100755 new mode 100644 diff --git a/vendor/k8s.io/code-generator/generate-internal-groups.sh b/vendor/k8s.io/code-generator/generate-internal-groups.sh old mode 100755 new mode 100644 diff --git a/vendor/modules.txt b/vendor/modules.txt index f21a4938b..c64642e36 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -57,7 +57,7 @@ github.com/fsnotify/fsnotify # github.com/gardener/etcd-druid/api v0.6.0 ## explicit; go 1.15 github.com/gardener/etcd-druid/api/v1alpha1 -# github.com/gardener/gardener v1.59.1 +# github.com/gardener/gardener v1.62.0 ## explicit; go 1.19 github.com/gardener/gardener/.github github.com/gardener/gardener/.github/ISSUE_TEMPLATE @@ -105,6 +105,8 @@ github.com/gardener/gardener/pkg/apis/extensions/v1alpha1/helper github.com/gardener/gardener/pkg/apis/operations github.com/gardener/gardener/pkg/apis/operations/install github.com/gardener/gardener/pkg/apis/operations/v1alpha1 +github.com/gardener/gardener/pkg/apis/operator +github.com/gardener/gardener/pkg/apis/operator/v1alpha1 github.com/gardener/gardener/pkg/apis/resources github.com/gardener/gardener/pkg/apis/resources/v1alpha1 github.com/gardener/gardener/pkg/apis/seedmanagement @@ -402,11 +404,11 @@ github.com/spf13/cobra # github.com/spf13/pflag v1.0.5 ## explicit; go 1.12 github.com/spf13/pflag -# go.uber.org/atomic v1.7.0 +# go.uber.org/atomic v1.9.0 ## explicit; go 1.13 go.uber.org/atomic -# go.uber.org/multierr v1.6.0 -## explicit; go 1.12 +# go.uber.org/multierr v1.7.0 +## explicit; go 1.14 go.uber.org/multierr # go.uber.org/zap v1.21.0 ## explicit; go 1.13 @@ -523,7 +525,7 @@ google.golang.org/appengine/internal/log google.golang.org/appengine/internal/remote_api google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/urlfetch -# google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21 +# google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03 ## explicit; go 1.15 google.golang.org/genproto/googleapis/api/annotations # google.golang.org/protobuf v1.28.0 @@ -571,14 +573,14 @@ gopkg.in/yaml.v2 # gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 -# istio.io/api v0.0.0-20220512181135-e8ec1e1d89de +# istio.io/api v0.0.0-20221013011440-bc935762d2b9 ## explicit; go 1.18 istio.io/api/analysis/v1alpha1 istio.io/api/meta/v1alpha1 istio.io/api/networking/v1alpha3 istio.io/api/networking/v1beta1 istio.io/api/type/v1beta1 -# istio.io/client-go v1.14.0 +# istio.io/client-go v1.15.3 ## explicit; go 1.17 istio.io/client-go/pkg/apis/networking/v1alpha3 istio.io/client-go/pkg/apis/networking/v1beta1