From fcb1b6217b1cfac31b64bd4995d47d00dc415012 Mon Sep 17 00:00:00 2001 From: Manuel Alejandro de Brito Fontes Date: Wed, 31 Jul 2019 20:55:11 -0400 Subject: [PATCH] Update go dependencies --- go.mod | 47 +- go.sum | 272 +- vendor/cloud.google.com/go/AUTHORS | 15 - vendor/cloud.google.com/go/CONTRIBUTORS | 40 - .../go/compute/metadata/metadata.go | 24 +- .../go-openapi/jsonpointer/.travis.yml | 10 +- .../github.com/go-openapi/jsonpointer/go.mod | 8 +- .../github.com/go-openapi/jsonpointer/go.sum | 25 +- .../go-openapi/jsonreference/.travis.yml | 11 +- .../go-openapi/jsonreference/go.mod | 15 +- .../go-openapi/jsonreference/go.sum | 42 +- .../github.com/go-openapi/spec/.golangci.yml | 6 +- vendor/github.com/go-openapi/spec/.travis.yml | 13 +- vendor/github.com/go-openapi/spec/bindata.go | 95 +- vendor/github.com/go-openapi/spec/cache.go | 60 - vendor/github.com/go-openapi/spec/debug.go | 4 +- vendor/github.com/go-openapi/spec/expander.go | 783 ++++- vendor/github.com/go-openapi/spec/go.mod | 22 +- vendor/github.com/go-openapi/spec/go.sum | 56 +- vendor/github.com/go-openapi/spec/header.go | 6 +- vendor/github.com/go-openapi/spec/info.go | 5 +- vendor/github.com/go-openapi/spec/items.go | 15 +- .../github.com/go-openapi/spec/normalizer.go | 152 - .../github.com/go-openapi/spec/operation.go | 159 +- .../github.com/go-openapi/spec/parameter.go | 51 +- .../github.com/go-openapi/spec/path_item.go | 7 +- vendor/github.com/go-openapi/spec/ref.go | 24 - vendor/github.com/go-openapi/spec/response.go | 5 +- vendor/github.com/go-openapi/spec/schema.go | 60 +- .../go-openapi/spec/schema_loader.go | 275 -- .../go-openapi/spec/security_scheme.go | 5 +- vendor/github.com/go-openapi/spec/swagger.go | 142 +- vendor/github.com/go-openapi/spec/tag.go | 5 +- vendor/github.com/go-openapi/spec/unused.go | 174 -- vendor/github.com/go-openapi/swag/.travis.yml | 11 +- vendor/github.com/go-openapi/swag/README.md | 1 + vendor/github.com/go-openapi/swag/doc.go | 1 + vendor/github.com/go-openapi/swag/go.mod | 13 +- vendor/github.com/go-openapi/swag/go.sum | 21 +- .../github.com/go-openapi/swag/name_lexem.go | 87 - vendor/github.com/go-openapi/swag/split.go | 262 -- vendor/github.com/go-openapi/swag/util.go | 92 +- vendor/github.com/google/btree/btree.go | 407 ++- .../gophercloud/gophercloud/.travis.yml | 14 +- .../gophercloud/gophercloud/.zuul.yaml | 28 +- .../gophercloud/gophercloud/auth_result.go | 52 - .../github.com/gophercloud/gophercloud/doc.go | 63 +- .../gophercloud/gophercloud/errors.go | 11 - .../github.com/gophercloud/gophercloud/go.mod | 7 - .../github.com/gophercloud/gophercloud/go.sum | 8 - .../gophercloud/openstack/auth_env.go | 23 +- .../gophercloud/openstack/client.go | 31 +- .../openstack/identity/v2/tokens/results.go | 15 - .../openstack/identity/v3/tokens/requests.go | 2 +- .../openstack/identity/v3/tokens/results.go | 7 - .../gophercloud/provider_client.go | 111 +- .../gophercloud/gophercloud/service_client.go | 4 - .../mailru/easyjson/jlexer/lexer.go | 9 +- .../x/crypto/ssh/terminal/terminal.go | 67 +- vendor/golang.org/x/time/rate/rate.go | 11 +- .../x/tools/go/packages/external.go | 2 +- .../golang.org/x/tools/go/packages/golist.go | 73 +- .../x/tools/go/packages/golist_overlay.go | 222 +- .../x/tools/go/packages/packages.go | 195 +- .../x/tools/{internal => }/imports/fix.go | 108 +- vendor/golang.org/x/tools/imports/forward.go | 62 - .../x/tools/{internal => }/imports/imports.go | 28 +- .../x/tools/{internal => }/imports/mkindex.go | 2 +- .../tools/{internal => }/imports/mkstdlib.go | 22 +- .../x/tools/{internal => }/imports/mod.go | 8 +- .../{internal => }/imports/sortimports.go | 33 +- .../x/tools/{internal => }/imports/zstdlib.go | 23 - .../googleapis/rpc/status/status.pb.go | 37 +- .../api/admission/v1beta1/generated.pb.go | 6 +- .../k8s.io/api/apps/v1beta1/generated.pb.go | 10 +- .../k8s.io/api/apps/v1beta2/generated.pb.go | 6 +- .../api/authentication/v1/generated.pb.go | 6 +- .../authentication/v1beta1/generated.pb.go | 6 +- .../api/authorization/v1/generated.pb.go | 6 +- .../api/authorization/v1beta1/generated.pb.go | 6 +- .../api/certificates/v1beta1/generated.pb.go | 6 +- vendor/k8s.io/api/core/v1/generated.pb.go | 2672 +++++++---------- vendor/k8s.io/api/core/v1/generated.proto | 37 - vendor/k8s.io/api/core/v1/types.go | 40 +- .../core/v1/types_swagger_doc_generated.go | 14 +- .../api/core/v1/zz_generated.deepcopy.go | 33 - .../api/extensions/v1beta1/generated.pb.go | 10 +- .../k8s.io/api/node/v1alpha1/generated.pb.go | 401 +-- .../k8s.io/api/node/v1alpha1/generated.proto | 16 - vendor/k8s.io/api/node/v1alpha1/types.go | 15 - .../v1alpha1/types_swagger_doc_generated.go | 10 - .../node/v1alpha1/zz_generated.deepcopy.go | 31 +- .../k8s.io/api/node/v1beta1/generated.pb.go | 391 +-- .../k8s.io/api/node/v1beta1/generated.proto | 16 - vendor/k8s.io/api/node/v1beta1/types.go | 15 - .../v1beta1/types_swagger_doc_generated.go | 10 - .../api/node/v1beta1/zz_generated.deepcopy.go | 29 - .../k8s.io/api/policy/v1beta1/generated.pb.go | 6 +- vendor/k8s.io/api/storage/v1/generated.pb.go | 10 +- .../api/storage/v1alpha1/generated.pb.go | 6 +- .../api/storage/v1beta1/generated.pb.go | 384 +-- .../api/storage/v1beta1/generated.proto | 14 - vendor/k8s.io/api/storage/v1beta1/types.go | 16 +- .../v1beta1/types_swagger_doc_generated.go | 10 - .../storage/v1beta1/zz_generated.deepcopy.go | 26 - .../pkg/features/OWNERS | 4 + .../pkg/features/kube_features.go | 77 + .../apimachinery/pkg/util/intstr/intstr.go | 4 +- vendor/k8s.io/apiserver/pkg/features/OWNERS | 4 + .../apiserver/pkg/features/kube_features.go | 158 + .../apiserver/pkg/server/healthz/healthz.go | 8 - .../pkg/util/feature/feature_gate.go | 33 + .../k8s.io/cli-runtime/pkg/printers/json.go | 42 +- .../k8s.io/cli-runtime/pkg/printers/name.go | 6 - .../k8s.io/cloud-provider/SECURITY_CONTACTS | 5 - vendor/k8s.io/cloud-provider/go.mod | 17 +- vendor/k8s.io/cloud-provider/go.sum | 59 +- vendor/k8s.io/cloud-provider/plugins.go | 3 + vendor/k8s.io/code-generator/go.mod | 2 +- vendor/k8s.io/code-generator/go.sum | 4 +- .../featuregate/feature_gate.go | 333 ++ vendor/k8s.io/cri-api/LICENSE | 201 ++ .../pkg/apis}/runtime/v1alpha2/api.pb.go | 637 ++-- .../pkg/apis}/runtime/v1alpha2/api.proto | 3 + .../pkg/apis}/runtime/v1alpha2/constants.go | 0 .../kubernetes/pkg/api/legacyscheme/scheme.go | 26 +- vendor/k8s.io/kubernetes/pkg/features/BUILD | 32 + vendor/k8s.io/kubernetes/pkg/features/OWNERS | 4 + .../kubernetes/pkg/features/kube_features.go | 585 ++++ .../kubelet/apis/cri/runtime/v1alpha2/BUILD | 35 - .../kubernetes/pkg/kubelet/container/BUILD | 2 +- .../pkg/kubelet/container/helpers.go | 2 +- .../kubernetes/pkg/kubelet/container/ref.go | 8 +- .../pkg/kubelet/container/runtime.go | 2 +- vendor/k8s.io/kubernetes/pkg/util/mount/BUILD | 37 - .../kubernetes/pkg/util/mount/exec_mount.go | 161 - .../pkg/util/mount/exec_mount_unsupported.go | 108 - .../k8s.io/kubernetes/pkg/util/mount/fake.go | 8 +- .../k8s.io/kubernetes/pkg/util/mount/mount.go | 42 +- .../pkg/util/mount/mount_helper_common.go | 2 +- .../kubernetes/pkg/util/mount/mount_linux.go | 100 +- .../pkg/util/mount/mount_unsupported.go | 8 +- .../pkg/util/mount/mount_windows.go | 17 +- .../pkg/util/mount/nsenter_mount.go | 333 -- .../util/mount/nsenter_mount_unsupported.go | 110 - vendor/k8s.io/kubernetes/pkg/volume/BUILD | 6 +- .../k8s.io/kubernetes/pkg/volume/plugins.go | 86 +- .../kubernetes/pkg/volume/util/fs/BUILD | 2 + .../kubernetes/pkg/volume/util/fs/fs.go | 19 + .../kubernetes/pkg/volume/util/quota/BUILD | 61 + .../pkg/volume/util/quota/common/BUILD | 31 + .../util/quota/common/quota_linux_common.go | 105 + .../quota/common/quota_linux_common_impl.go | 286 ++ .../pkg/volume/util/quota/project.go | 357 +++ .../kubernetes/pkg/volume/util/quota/quota.go | 48 + .../pkg/volume/util/quota/quota_linux.go | 440 +++ .../volume/util/quota/quota_unsupported.go | 55 + .../util/recyclerclient/recycler_client.go | 10 +- .../kubernetes/pkg/volume/util/subpath/BUILD | 1 + .../pkg/volume/util/subpath/subpath_linux.go | 4 +- vendor/k8s.io/kubernetes/pkg/volume/volume.go | 11 +- vendor/modules.txt | 59 +- 162 files changed, 6702 insertions(+), 7171 deletions(-) delete mode 100644 vendor/cloud.google.com/go/AUTHORS delete mode 100644 vendor/cloud.google.com/go/CONTRIBUTORS delete mode 100644 vendor/github.com/go-openapi/spec/cache.go delete mode 100644 vendor/github.com/go-openapi/spec/normalizer.go delete mode 100644 vendor/github.com/go-openapi/spec/schema_loader.go delete mode 100644 vendor/github.com/go-openapi/spec/unused.go delete mode 100644 vendor/github.com/go-openapi/swag/name_lexem.go delete mode 100644 vendor/github.com/go-openapi/swag/split.go delete mode 100644 vendor/github.com/gophercloud/gophercloud/auth_result.go delete mode 100644 vendor/github.com/gophercloud/gophercloud/go.mod delete mode 100644 vendor/github.com/gophercloud/gophercloud/go.sum rename vendor/golang.org/x/tools/{internal => }/imports/fix.go (93%) delete mode 100644 vendor/golang.org/x/tools/imports/forward.go rename vendor/golang.org/x/tools/{internal => }/imports/imports.go (90%) rename vendor/golang.org/x/tools/{internal => }/imports/mkindex.go (99%) rename vendor/golang.org/x/tools/{internal => }/imports/mkstdlib.go (79%) rename vendor/golang.org/x/tools/{internal => }/imports/mod.go (98%) rename vendor/golang.org/x/tools/{internal => }/imports/sortimports.go (85%) rename vendor/golang.org/x/tools/{internal => }/imports/zstdlib.go (99%) create mode 100644 vendor/k8s.io/apiextensions-apiserver/pkg/features/OWNERS create mode 100644 vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go create mode 100644 vendor/k8s.io/apiserver/pkg/features/OWNERS create mode 100644 vendor/k8s.io/apiserver/pkg/features/kube_features.go create mode 100644 vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go create mode 100644 vendor/k8s.io/component-base/featuregate/feature_gate.go create mode 100644 vendor/k8s.io/cri-api/LICENSE rename vendor/k8s.io/{kubernetes/pkg/kubelet/apis/cri => cri-api/pkg/apis}/runtime/v1alpha2/api.pb.go (95%) rename vendor/k8s.io/{kubernetes/pkg/kubelet/apis/cri => cri-api/pkg/apis}/runtime/v1alpha2/api.proto (99%) rename vendor/k8s.io/{kubernetes/pkg/kubelet/apis/cri => cri-api/pkg/apis}/runtime/v1alpha2/constants.go (100%) create mode 100644 vendor/k8s.io/kubernetes/pkg/features/BUILD create mode 100644 vendor/k8s.io/kubernetes/pkg/features/OWNERS create mode 100644 vendor/k8s.io/kubernetes/pkg/features/kube_features.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/BUILD delete mode 100644 vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount_unsupported.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount_unsupported.go create mode 100644 vendor/k8s.io/kubernetes/pkg/volume/util/quota/BUILD create mode 100644 vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/BUILD create mode 100644 vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/quota_linux_common.go create mode 100644 vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/quota_linux_common_impl.go create mode 100644 vendor/k8s.io/kubernetes/pkg/volume/util/quota/project.go create mode 100644 vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota.go create mode 100644 vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota_linux.go create mode 100644 vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota_unsupported.go diff --git a/go.mod b/go.mod index f7ba0754fb..0c7daccb37 100644 --- a/go.mod +++ b/go.mod @@ -3,14 +3,17 @@ module k8s.io/ingress-nginx go 1.12 require ( + cloud.google.com/go v0.38.0 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect github.com/Sirupsen/logrus v0.0.0-00010101000000-000000000000 // indirect github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e - github.com/docker/distribution v2.7.1+incompatible // indirect github.com/eapache/channels v1.1.0 github.com/eapache/queue v1.1.0 // indirect + github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa // indirect github.com/go-logr/logr v0.1.0 // indirect github.com/go-logr/zapr v0.1.1 // indirect + github.com/go-openapi/swag v0.19.0 // indirect github.com/google/uuid v1.1.1 github.com/imdario/mergo v0.3.7 github.com/json-iterator/go v1.1.6 @@ -25,7 +28,6 @@ require ( github.com/ncabatoff/procfs v0.0.0-20180903163354-e1a38cb53622 // indirect github.com/onsi/ginkgo v1.8.0 github.com/onsi/gomega v1.5.0 - github.com/opencontainers/go-digest v1.0.0-rc1 // indirect github.com/opencontainers/runc v0.1.1 github.com/parnurzeal/gorequest v0.2.15 github.com/paultag/sniff v0.0.0-20170624152000-87325c3dddf4 @@ -34,7 +36,6 @@ require ( github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f github.com/prometheus/common v0.2.0 github.com/prometheus/procfs v0.0.0-20190328153300-af7bedc223fb // indirect - github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945 // indirect github.com/spf13/cobra v0.0.4 github.com/spf13/pflag v1.0.3 github.com/tallclair/mdtoc v0.0.0-20190627191617-4dc3d6f90813 @@ -47,24 +48,42 @@ require ( gopkg.in/go-playground/pool.v3 v3.1.1 k8s.io/api v0.0.0 - k8s.io/apiextensions-apiserver v0.0.0-20190626210203-fdc73e13f9a6 + k8s.io/apiextensions-apiserver v0.0.0 k8s.io/apimachinery v0.0.0 - k8s.io/apiserver v0.0.0-20190625052034-8c075cba2f8c - k8s.io/cli-runtime v0.0.0-20190711111425-61e036b70227 + k8s.io/apiserver v0.0.0 + k8s.io/cli-runtime v0.0.0 k8s.io/client-go v12.0.0+incompatible - k8s.io/cloud-provider v0.0.0-20190711113108-0d51509e0ef5 // indirect - k8s.io/code-generator v0.0.0-20190620073620-d55040311883 - k8s.io/component-base v0.0.0-20190626045757-ca439aa083f5 + k8s.io/code-generator v0.0.0 + k8s.io/component-base v0.0.0 k8s.io/klog v0.3.3 - k8s.io/kubernetes v0.0.0 + k8s.io/kubernetes v1.15.1 + k8s.io/utils v0.0.0-20190607212802-c55fbcfc754a // indirect sigs.k8s.io/controller-runtime v0.1.10 sigs.k8s.io/testing_frameworks v0.1.1 // indirect ) replace ( github.com/Sirupsen/logrus => github.com/sirupsen/logrus v1.4.1 - - k8s.io/api => k8s.io/api v0.0.0-20190703205437-39734b2a72fe - k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190703205208-4cfb76a8bf76 - k8s.io/kubernetes => k8s.io/kubernetes v1.14.3 + k8s.io/api => k8s.io/api v0.0.0-20190718183219-b59d8169aab5 + k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.0.0-20190620085550-3a2f62f126c9 + k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190711103026-7bf792636534 + k8s.io/apiserver => k8s.io/apiserver v0.0.0-20190718184206-a1aa83af71a7 + k8s.io/cli-runtime => k8s.io/cli-runtime v0.0.0-20190620085659-429467d76d0e + k8s.io/client-go => k8s.io/client-go v0.0.0-20190718183610-8e956561bbf5 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.0.0-20190620090041-1a7e1f6630cd + k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.0.0-20190620090010-a60497bb9ffa + k8s.io/code-generator => k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b + k8s.io/component-base => k8s.io/component-base v0.0.0-20190620085131-4cd66be69262 + k8s.io/cri-api => k8s.io/cri-api v0.0.0-20190531030430-6117653b35f1 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.0.0-20190620090114-816aa063c73d + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.0.0-20190620085316-c835efc41000 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.0.0-20190620085943-52018c8ce3c1 + k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.0.0-20190620085811-cc0b23ba60a9 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.0.0-20190620085909-5dfb14b3a101 + k8s.io/kubelet => k8s.io/kubelet v0.0.0-20190620085837-98477dc0c87c + k8s.io/kubernetes => k8s.io/kubernetes v1.15.1 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.0.0-20190620090159-a9e4f3cb5bf3 + k8s.io/metrics => k8s.io/metrics v0.0.0-20190620085627-5b02f62e9559 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.0.0-20190620085357-8191e314a1f7 ) diff --git a/go.sum b/go.sum index dcf5306734..289f2747ce 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,22 @@ +bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +cloud.google.com/go v0.38.0 h1:ROfEUZz+Gh5pa62DJWXSaonyu3StP6EA6lPEXPI6mCo= +cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= +github.com/Azure/azure-sdk-for-go v21.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-autorest v11.1.2+incompatible h1:viZ3tV5l4gE2Sw0xrasFHytCGtzYCrT+um/rrSQ1BfA= github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= +github.com/BurntSushi/toml v0.3.0/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= +github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20181220005116-f8e995905100/go.mod h1:iroGtC8B3tQiqtds1l+mgk/BBOrxbqjH+eUfFQYRc14= +github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA= +github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E= +github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= +github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -14,36 +24,64 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/Rican7/retry v0.1.0/go.mod h1:FgOROf8P5bebcC1DS0PdOQiqGUridaZvikzUmkFW6gg= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e h1:h0gP0hBU6DsA5IQduhLWGOEfIUKzJS5hhXQBSgHuF/g= github.com/armon/go-proxyproto v0.0.0-20190211145416-68259f75880e/go.mod h1:QmP9hvJ91BbJmGVGSbutW19IC0Q9phDCLGaomwTJbgU= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= +github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7/go.mod h1:LWMyo4iOLWXHGdBki7NIht1kHru/0wM179h+d3g8ATM= +github.com/aws/aws-sdk-go v1.16.26/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/bazelbuild/bazel-gazelle v0.0.0-20181012220611-c728ce9f663e/go.mod h1:uHBSeeATKpVazAACZBDPL/Nk/UhQDDsJWDlqYJo8/Us= +github.com/bazelbuild/buildtools v0.0.0-20180226164855-80c7f0d45d7e/go.mod h1:5JP0TXzWDHXv8qvxRC4InIazwdyDseBDbzESUMKk1yU= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= +github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= +github.com/cespare/prettybench v0.0.0-20150116022406-03b8cfe5406c/go.mod h1:Xe6ZsFhtM8HrDku0pxJ3/Lr51rwykrzgFwpmTzleatY= +github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= +github.com/client9/misspell v0.0.0-20170928000206-9ce5d979ffda/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cloudflare/cfssl v0.0.0-20180726162950-56268a613adf/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA= +github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0= +github.com/codedellemc/goscaleio v0.0.0-20170830184815-20e2ce2cf885/go.mod h1:JIHmDHNZO4tmA3y3RHp6+Gap6kFsNf55W9Pn/3YS9IY= +github.com/codegangsta/negroni v1.0.0/go.mod h1:v0y3T5G7Y1UlFfyxFn/QLRU4a2EuNau2iZY63YTKWo0= +github.com/container-storage-interface/spec v1.1.0/go.mod h1:6URME8mwIBbpVyZV93Ce5St17xBiQJQY67NDsuohiy4= +github.com/containerd/console v0.0.0-20170925154832-84eeaae905fa/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= +github.com/containerd/containerd v1.0.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= +github.com/containerd/typeurl v0.0.0-20190228175220-2a93cfde8c20/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= +github.com/containernetworking/cni v0.6.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY= github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-oidc v0.0.0-20180117170138-065b426bd416/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= +github.com/coreos/go-semver v0.0.0-20180108230905-e214231b295a/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/rkt v1.30.0/go.mod h1:O634mlH6U7qk87poQifK6M2rsFNt+FyUTWNMnP1hF1U= +github.com/cpuguy83/go-md2man v1.0.4/go.mod h1:N6JayAiVKtlHSnuTCeuLSQVs75hb8q+dYQLjr7cDsKY= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cyphar/filepath-securejoin v0.0.0-20170720062807-ae69057f2299/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/d2g/dhcp4 v0.0.0-20170904100407-a1d1b6c41b1c/go.mod h1:Ct2BUK8SB0YC1SMSibvLzxjeJLnrYEVLULFNiHY9YfQ= +github.com/d2g/dhcp4client v0.0.0-20170829104524-6e570ed0a266/go.mod h1:j0hNfjhrt2SxUOw55nL0ATM/z4Yt3t2Kd1mW34z5W5s= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda h1:NyywMz59neOoVRFDz+ccfKWxn784fiHMDnZSy6T+JXY= github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug= -github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= +github.com/docker/distribution v0.0.0-20170726174610-edc3ab29cdff h1:FKH02LHYqSmeWd3GBh0KIkM8JBpw3RrShgtcWShdWJg= +github.com/docker/distribution v0.0.0-20170726174610-edc3ab29cdff/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-connections v0.3.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/libnetwork v0.0.0-20180830151422-a9cd636e3789/go.mod h1:93m0aTqz6z+g32wla4l4WxTrdtvBRmVzYRkYvasA5Z8= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 h1:cenwrSVm+Z7QLSV/BsnenAOcDXdX4cMv4wP0B/5QbPg= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/eapache/channels v1.1.0 h1:F1taHcn7/F0i8DYqKXJnyhJcVpp2kgFcNePxXtnyu4k= @@ -53,11 +91,16 @@ github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFP github.com/ekalinin/github-markdown-toc v0.0.0-20190514155158-83fadb60a7f1/go.mod h1:XfZS1iyC28CnllR54Ou2Ero6qs4Rmn7GpVumNSj1DZo= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e h1:p1yVGRW3nmb85p1Sh1ZJSDm4A4iKLS5QNbvUHMgGu/M= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633 h1:H2pdYOb3KQ1/YsqVWoWNLQO+fusocsw354rqGTZtAgw= +github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= +github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw= github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v4.2.0+incompatible h1:fUDGZCv/7iAN7u0puUVhvKCcsR6vRfwrJatElLBEf0I= github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/fatih/camelcase v0.0.0-20160318181535-f6a740d52f96/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa h1:RDBNVkRviHZtvDvId8XSGPu3rmpmSe+wKRcEWNgsfWU= @@ -77,36 +120,30 @@ github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpR github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.17.2/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/jsonpointer v0.17.0 h1:nH6xp8XdXHx8dqveo0ZuJBluCO2qGrPbDNZ0dwoRHP0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= github.com/go-openapi/jsonpointer v0.19.0 h1:FTUMcX77w5rQkClIzDtTxvn6Bsa894CcrzNj2MMfeg8= github.com/go-openapi/jsonpointer v0.19.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonreference v0.17.0 h1:yJW3HCkTHg7NOA+gZ83IPHzUSnUzGXhGmsdiCcMexbA= github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= github.com/go-openapi/jsonreference v0.19.0 h1:BqWKpV1dFd+AuiKlgtddwVIFQsuMpxfBDBHGfM2yNpk= github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.17.2/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= github.com/go-openapi/runtime v0.17.2/go.mod h1:QO936ZXeisByFmZEO1IS1Dqhtf4QV1sYYFtIq6Ld86Q= github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.17.2 h1:eb2NbuCnoe8cWAxhtK6CfMWUYmiFEZJ9Hx3Z2WRwJ5M= github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2 h1:SStNd1jRcYtfKCN7R0laGNs80WYYvn5CbBjM2sOmCrE= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/swag v0.17.0 h1:iqrgMg7Q7SvtbWLlltPrkMs0UBJI6oTSs79JFRUi880= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.17.2 h1:K/ycE/XTUDFltNHSO32cGRUhrVGJD64o8WgAIZNyc3k= github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.0 h1:Kg7Wl7LkTPlmc393QZQ/5rQadPhi7pBVEMZxyTi0Ii8= +github.com/go-openapi/swag v0.19.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/validate v0.17.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw= github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1 h1:72R+M5VuhED/KujmZVcIquuo8mBgX4oVda//DQb3PXo= @@ -115,31 +152,45 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekf github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v0.0.0-20160127222235-bd3c8e81be01/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.1.1 h1:G5FRp8JnTd7RQH5kemVNlMeyXQAztQ3mOWV95KxsXH8= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk= +github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho= +github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995/go.mod h1:lJgMEyOkYFkPcDKwRXegd+iM6E7matEszMG5HhwytU8= +github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= github.com/gomarkdown/markdown v0.0.0-20190222000725-ee6a7931a1e4 h1:vELsocEzlhM4lk2nhxolEaQrMp25u7/i9IX8s9uLads= github.com/gomarkdown/markdown v0.0.0-20190222000725-ee6a7931a1e4/go.mod h1:gmFANS06wAVmF0B9yi65QKsRmPQ97tze7FRLswua+OY= github.com/google/btree v0.0.0-20160524151835-7d79101e329e h1:JHB7F/4TJCrYBW8+GZO8VkWDj1jxcWuCl6uxKODiyi4= github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/cadvisor v0.33.2-0.20190411163913-9db8c7dee20a/go.mod h1:1nql6U13uTHaLYB8rLS5x9IJc2qT6Xd/Tr1sTX6NE48= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.0.0 h1:b4Gk+7WdP/d3HZH8EJsZpvV7EtDOgaZLtnaNGIu1adA= +github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= +github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8 h1:L9JPKrtsHMQ4VCRQfHvbbHBfB2Urn8xf6QZeXZ+OrN4= github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= -github.com/gophercloud/gophercloud v0.1.0 h1:P/nh25+rzXouhytV2pUHBb65fnds26Ghl8/391+sT5o= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= +github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= +github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= +github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7 h1:6TSoaYExHper8PYsJu23GWVNOyYRCSnIFyxKgLSZ54w= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= @@ -147,7 +198,12 @@ github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20170330212424-2500245aa611/ github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/hcl v0.0.0-20160711231752-d8c773c4cba1/go.mod h1:oZtUIOe8dh44I2q6ScRibXws4Ajl+d+nod3AaR9vL5w= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= +github.com/heketi/heketi v0.0.0-20181109135656-558b29266ce0/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o= +github.com/heketi/rest v0.0.0-20180404230133-aa6a65207413/go.mod h1:BeS3M108VzVlmAue3lv2WcGuPAX94/KN63MUURzbYSI= +github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4= +github.com/heketi/utils v0.0.0-20170317161834-435bc5bdfa64/go.mod h1:RYlF4ghFZPPmk2TC5REt5OFwvfb6lzxFWrTWB+qs28s= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= @@ -155,33 +211,52 @@ github.com/imdario/mergo v0.3.7 h1:Y+UAYTZ7gDEuOfhxKWy+dvb5dRQ6rJjFSdX2HZY1/gI= github.com/imdario/mergo v0.3.7/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= +github.com/jonboulle/clockwork v0.0.0-20141017032234-72f9bd7c4e0c/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jteeuwen/go-bindata v0.0.0-20151023091102-a0ff2567cfb7/go.mod h1:JVvhzYOiGBnFSYRyV00iY8q7/0PThjIYav1p9h5dmKs= github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kardianos/osext v0.0.0-20150410034420-8fef92e41e22/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= +github.com/karrick/godirwalk v1.7.5/go.mod h1:2c9FRhkDxdIbgkOnCEvnSWs71Bhugbl46shStcFDJ34= github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/fs v0.0.0-20131111012553-2788f0dbd169/go.mod h1:glhvuHOU9Hy7/8PwwdtnarXqLagOX0b/TbZx2zLMqEg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= +github.com/kr/pretty v0.0.0-20140812000539-f31442d60e51/go.mod h1:Bvhd+E3laJ0AVkG0c9rmtZcnhV0HQ3+c3YxxqTvc/gA= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= +github.com/kr/text v0.0.0-20130911015532-6807e777504f/go.mod h1:sjUstKUATFIcff4qlB53Kml0wQPtJVc/3fWrmuUmcfA= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 h1:MtvEpTB6LX3vkb4ax0b5D2DHbNAUsen0Gx5wZoq3lV4= github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= +github.com/libopenstorage/openstorage v0.0.0-20170906232338-093a0c388875/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc= +github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= +github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= +github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA= +github.com/magiconair/properties v0.0.0-20160816085511-61b492c03cf4/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/marstr/guid v0.0.0-20170427235115-8bdf7d1a087c/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= +github.com/mattn/go-shellwords v0.0.0-20180605041737-f8471b0a71de/go.mod h1:3xCvwCdWdlDJUrvuMn7Wuy9eWs4pE8vqg+NOMyg4B2o= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +github.com/mesos/mesos-go v0.0.9/go.mod h1:kPYCMQ9gsOXVAle1OsoY4I1+9kPu8GHkf88aV59fDr4= +github.com/mholt/caddy v0.0.0-20180213163048-2de495001514/go.mod h1:Wb1PlT4DAYSqOEd03MsqkdkXnTxA8v9pKjdpxbqM1kY= +github.com/miekg/dns v0.0.0-20160614162101-5d001d020961/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= +github.com/mindprince/gonvml v0.0.0-20171110221305-fee913ce8fb2/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY= +github.com/mistifyio/go-zfs v0.0.0-20151009155749-1b4ae6fb4e77/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936 h1:kw1v0NlnN+GZcU8Ma8CLF2Zzgjfx95gs3/GN3vYAPpo= github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936/go.mod h1:r1VsdOzOPt1ZSrGZWFoNhsAedKnEd6r9Np1+5blZCWk= +github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/hashstructure v1.0.0 h1:ZkRJX1CyOoTkar7p/mLS5TZU4nJ1Rn/F8u9dGS02Q3Y= github.com/mitchellh/hashstructure v1.0.0/go.mod h1:QjSHrPWS+BGUVBYkbTZWEnOh3G1DutKwClXU/ABz6AQ= github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= @@ -192,13 +267,18 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= +github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/moul/http2curl v1.0.0 h1:dRMWoAtb+ePxMlLkrCbAqh4TlPHXvoGUSQ323/9Zahs= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/moul/pb v0.0.0-20180404114147-54bdd96e6a52 h1:8zDEa5yAIWYBHSDpPbSgGIBL/SvPSE9/FlB3aQ54d/A= github.com/moul/pb v0.0.0-20180404114147-54bdd96e6a52/go.mod h1:jE2HT8eoucYyUPBFJMreiVlC3KPHkDMtN8wn+ef7Y64= +github.com/mrunalp/fileutils v0.0.0-20160930181131-4ee1cc9a8058/go.mod h1:x8F1gnqOkIEiO4rqoeEEEqQbo7HjGMTvyoq3gej4iT0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= +github.com/mvdan/xurls v0.0.0-20160110113200-1b768d7c393a/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= github.com/ncabatoff/go-seq v0.0.0-20180805175032-b08ef85ed833 h1:t4WWQ9I797y7QUgeEjeXnVb+oYuEDQc6gLvrZJTYo94= github.com/ncabatoff/go-seq v0.0.0-20180805175032-b08ef85ed833/go.mod h1:0CznHmXSjMEqs5Tezj/w2emQoM41wzYM9KpDKUHPYag= github.com/ncabatoff/process-exporter v0.0.0-20180915144445-bdf24ef23850 h1:+N9D9mM5Nr4iDYOrZBVDT7w7wGhFNTvEXWX80LNXJMo= @@ -208,26 +288,34 @@ github.com/ncabatoff/procfs v0.0.0-20180903163354-e1a38cb53622/go.mod h1:1Sa4zSa github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420 h1:Yu3681ykYHDfLoI6XVjL4JWmkE+3TX9yfIWwRCh1kFM= +github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= +github.com/opencontainers/image-spec v0.0.0-20170604055404-372ad780f634/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +github.com/opencontainers/runc v0.0.0-20181113202123-f000fe11ece1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y= github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= +github.com/opencontainers/runtime-spec v1.0.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v0.0.0-20170621221121-4a2974bf1ee9/go.mod h1:+BLncwf63G4dgOzykXAxcmnFlUaOlkDdmw/CqsW6pjs= github.com/parnurzeal/gorequest v0.2.15 h1:oPjDCsF5IkD4gUk6vIgsxYNaSgvAnIh1EJeROn3HdJU= github.com/parnurzeal/gorequest v0.2.15/go.mod h1:3Kh2QUMJoqw3icWAecsyzkpY7UzRfDhbRdTjtNwNiUE= github.com/paultag/sniff v0.0.0-20170624152000-87325c3dddf4 h1:bOK8V55gl1AEWE9KiXSZ0fzARvVBehdmYZOTFcQ5kUo= github.com/paultag/sniff v0.0.0-20170624152000-87325c3dddf4/go.mod h1:J3XXNGJINXLa4yIivdUT0Ad/srv2q0pSOWbbm6El2EY= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= +github.com/pelletier/go-toml v1.0.1/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v0.0.0-20160930220758-4d0e916071f6/go.mod h1:NxmoDg/QLVWluQDUYG7XBZTLUpKeFa8e3aMf1BfjyHk= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/pquerna/ffjson v0.0.0-20180717144149-af8b230fcd20/go.mod h1:YARuvh7BUWHNhzDq2OM5tzR2RiCcN2D7sapiKyCel/M= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829 h1:D+CiwcpGTW6pL6bv6KI3KbyEyCKyS+1JWS2h8PNDnGA= @@ -243,48 +331,68 @@ github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190328153300-af7bedc223fb h1:LvNCMEj0FFZQYsxZb7o3xQPrtqOOB6lrTUOWshC+ZTs= github.com/prometheus/procfs v0.0.0-20190328153300-af7bedc223fb/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/quobyte/api v0.1.2/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= +github.com/robfig/cron v0.0.0-20170309132418-df38d32658d8/go.mod h1:JGuDeoQd7Z6yL4zQhZ3OPEVHB7fL6Ka6skscFHfmt2k= +github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto= +github.com/russross/blackfriday v0.0.0-20151117072312-300106c228d5/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= +github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/seccomp/libseccomp-golang v0.0.0-20150813023252-1b506fc7c24e/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/shurcooL/sanitized_anchor_name v0.0.0-20151028001915-10ef21a441db/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= +github.com/sigma/go-inotify v0.0.0-20181102212354-c87b6cf5033d/go.mod h1:stlh9OsqBQSdwxTxX73mu41BBtRbIpZLQ7flcAoxAfo= github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k= github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945 h1:N8Bg45zpk/UcpNGnfJt2y/3lRWASHNTUET8owPYCgYI= -github.com/smartystreets/goconvey v0.0.0-20190710185942-9d28bd7c0945/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs= +github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.3/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/spf13/afero v0.0.0-20160816080757-b28a7effac97/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc= github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spf13/cast v0.0.0-20160730092037-e31f36ffc91a/go.mod h1:r2rcYCSwa1IExKTDiTfzaxqT2FNHs8hODu4LnUfgKEg= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cobra v0.0.0-20180319062004-c439c4fa0937/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.4 h1:S0tLZ3VOKl2Te0hpq8+ke0eSJPfCnNTPiDlsfwi1/NE= github.com/spf13/cobra v0.0.4/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= +github.com/spf13/jwalterweatherman v0.0.0-20160311093646-33c24e77fb80/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/viper v0.0.0-20160820190039-7fb2782df3d8/go.mod h1:A8kyI5cUJhb8N+3pkfONlcEcZbueH6nhAm0Fq7SrnBM= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= +github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/syndtr/gocapability v0.0.0-20160928074757-e7cb7fa329f4/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/tallclair/mdtoc v0.0.0-20190627191617-4dc3d6f90813 h1:1Q3NGZNH8/oSGhSe0J8WjkFCeIOb0JSy7M4RpqY64XI= github.com/tallclair/mdtoc v0.0.0-20190627191617-4dc3d6f90813/go.mod h1:BjDk9nfX4091pXLHhvf6Ejr4/r//9NslWmweWb2Hkbs= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= +github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4= +github.com/vishvananda/netlink v0.0.0-20171020171820-b2de5d10e38e/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk= +github.com/vishvananda/netns v0.0.0-20171111001504-be1fbeda1936/go.mod h1:ZjcWmFBXmLKZu9Nxj3WKYEafiSqer2rnvPr0en9UNpI= +github.com/vmware/govmomi v0.20.1/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU= +github.com/vmware/photon-controller-go-sdk v0.0.0-20170310013346-4a435daef6cc/go.mod h1:e6humHha1ekIwTCm+A5Qed5mG8V4JL+ChHcUOJ+L/8U= +github.com/xanzy/go-cloudstack v0.0.0-20160728180336-1e2cbf647e57/go.mod h1:s3eL3z5pNXF5FVybcT+LIVdId8pYn709yv6v5mrkrQE= github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1/go.mod h1:QcJo0QPSfTONNIgpN5RA8prR7fF8nkF6cTWTcNerRO8= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= github.com/zakjan/cert-chain-resolver v0.0.0-20180703112424-6076e1ded272 h1:scDk3LAM8x+NPuywVGC0q0/G+5Ed8M0+YXecz4XnWRM= github.com/zakjan/cert-chain-resolver v0.0.0-20180703112424-6076e1ded272/go.mod h1:KNkcm66cr4ilOiEcjydK+tc2ShPUhqmuoXCljXUBPu8= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569 h1:nSQar3Y0E3VQF/VdZ8PTAilaXpER+d7ypdABCrpwMdg= go.uber.org/atomic v0.0.0-20181018215023-8dc6146f7569/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/multierr v0.0.0-20180122172545-ddea229ff1df h1:shvkWr0NAZkg4nPuE3XrKP0VuBPijjk3TfX6Y6acFNg= @@ -294,17 +402,17 @@ go.uber.org/zap v0.0.0-20180814183419-67bc79d13d15/go.mod h1:vwi/ZaCAaUcBkycHslx golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190228161510-8dd112bcdc25/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20181217174547-8f45f776aaf1/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -315,51 +423,55 @@ golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190328230028-74de082e2cca h1:hyA6yiAgbUwuWqtscNvWAI7U1CtlaD1KilQ6iudt1aI= -golang.org/x/net v0.0.0-20190328230028-74de082e2cca/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI= +golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20181004145325-8469e314837c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313 h1:pczuHS43Cp2ktBEEmLwScxgjWsBSzdaQiKzUyf3DTTc= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f h1:25KHgbfyiSm6vwQLbM3zZIe1v9p/3ea4Rz+nnM5K/i4= golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20161028155119-f51c12702a4d h1:TnM+PKb3ylGmZvyPXmo9m/wktg7Jn/a/fNmr33HSj8g= golang.org/x/time v0.0.0-20161028155119-f51c12702a4d/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg= +golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20170824195420-5d2fd3ccab98/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384 h1:TFlARGu6Czu1z7q93HTxcP1P+/ZFC/IKythI5RzrnRg= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59 h1:QjA/9ArTfVTLfEhClDCG7SGrZkZixxWpwNCDiwJfh88= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 h1:OB/uP/Puiu5vS5QMRPrXCDWUPb+kt8f1KW8oQzFejQw= gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e h1:jRyg0XfpwWlhEV8mDfdNGBeSJM2fuyh9Yjrnd8kF2Ts= gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= +google.golang.org/api v0.0.0-20181220000619-583d854617af/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= @@ -367,7 +479,11 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/genproto v0.0.0-20170731182057-09f6ed296fc6/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7 h1:ZUjXAXmrAyrmmCPHgCA/vChHcpsX27MZ3yBonD/z1KE= +google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/grpc v1.13.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.19.1 h1:TrBcJ1yqAl1G++wO39nD/qtgpsW9/1+QGrluyMGEYgM= google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -378,54 +494,67 @@ gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/fsnotify/fsnotify.v1 v1.4.7 h1:XNNYLJHt73EyYiCZi6+xjupS9CpvmiDgjPTAjrBlQbo= gopkg.in/fsnotify/fsnotify.v1 v1.4.7/go.mod h1:Fyux9zXlo4rWoMSIzpn9fDAYjalPqJ/K1qJ27s+7ltE= +gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= gopkg.in/go-playground/pool.v3 v3.1.1 h1:4Qcj91IsYTpIeRhe/eo6Fz+w6uKWPEghx8vHFTYMfhw= gopkg.in/go-playground/pool.v3 v3.1.1/go.mod h1:pUAGBximS/hccTTSzEop6wvvQhVa3QPDFFW+8REdutg= gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o= gopkg.in/inf.v0 v0.9.0/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/natefinch/lumberjack.v2 v2.0.0-20150622162204-20b71e5b60d7/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= +gopkg.in/square/go-jose.v2 v2.0.0-20180411045311-89060dee6a84/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.0.0-20190703205437-39734b2a72fe h1:MFaHtAyhZcfBZocN91muHSqnwiF5yfXx7yGoehneNYg= -k8s.io/api v0.0.0-20190703205437-39734b2a72fe/go.mod h1:J5EZ0KSEjvyKOBy5BDHSF3zn82madLLWg7nUKaOHZKU= -k8s.io/apiextensions-apiserver v0.0.0-20190626210203-fdc73e13f9a6 h1:qmQstpcwzWz3sF4IdIdHNd+QqEW27NtIl3g1Hc64pKo= -k8s.io/apiextensions-apiserver v0.0.0-20190626210203-fdc73e13f9a6/go.mod h1:BtPMQLDJSVfn7fHhoZrhbSHNrEFnXjKNVefNBc7M4/c= -k8s.io/apimachinery v0.0.0-20190703205208-4cfb76a8bf76 h1:vxMYBaJgczGAIpJAOBco2eHuFYIyDdNIebt60jxLauA= -k8s.io/apimachinery v0.0.0-20190703205208-4cfb76a8bf76/go.mod h1:M2fZgZL9DbLfeJaPBCDqSqNsdsmLN+V29knYJnIXlMA= -k8s.io/apiserver v0.0.0-20190625052034-8c075cba2f8c h1:hQTBSsQW7vz11pD5H+u8CJDPH5tPMZU7fZNrngblrkI= -k8s.io/apiserver v0.0.0-20190625052034-8c075cba2f8c/go.mod h1:iv88XxGh9TIPUnSeQVGhypLx6/n0xn1/8OxMRrkKUP4= -k8s.io/cli-runtime v0.0.0-20190711111425-61e036b70227 h1:q8pjgm8GrV8Zsnb2bdy4SHM41rASdMH59D8LHQDoKQM= -k8s.io/cli-runtime v0.0.0-20190711111425-61e036b70227/go.mod h1:ZJEA9p+Wpusb5qdOk+B2TSXNY6xFrcduZrWaVaZI0V4= -k8s.io/client-go v0.0.0-20190624085356-2c6e35a5b9cf/go.mod h1:rQMvHbaXi4pHSLf91Z1YI3h2Av+T3jsFKEIAWucw7hc= -k8s.io/client-go v0.0.0-20190626045420-1ec4b74c7bda/go.mod h1:+MutroXOEjjw9n8kfVq8ZJEE/Fk3YVww/+4uIg+m/S0= -k8s.io/client-go v0.0.0-20190711103903-4a0861cac5e0/go.mod h1:MdhWxiGHTqqubuL4pqFLTAhEjVr0Oa6nj8mAy3kFIEI= -k8s.io/client-go v12.0.0+incompatible h1:YlJxncpeVUC98/WMZKC3JZGk/OXQWCZjAB4Xr3B17RY= -k8s.io/client-go v12.0.0+incompatible/go.mod h1:E95RaSlHr79aHaX0aGSwcPNfygDiPKOVXdmivCIZT0k= -k8s.io/cloud-provider v0.0.0-20190711113108-0d51509e0ef5 h1:sRUsF1Fop2aeMJOfCT4xlQJUvMhk+EznyzY7RMW6ZzQ= -k8s.io/cloud-provider v0.0.0-20190711113108-0d51509e0ef5/go.mod h1:5LDt9VVqCTfW59z7dQ8QXZ3L+CwHP/6P1rRSBCgdb3o= -k8s.io/code-generator v0.0.0-20190620073620-d55040311883 h1:NWWNvN6IdpmQvZ43rVccCI8GPUrheK8XNdqeKycw0DI= -k8s.io/code-generator v0.0.0-20190620073620-d55040311883/go.mod h1:+a+9g9W0llgbgvx6qOb+VbeZPH5km1FrVyMQe9/jkQY= -k8s.io/component-base v0.0.0-20190624085813-dd74dcc4bb91/go.mod h1:rzptoTTLijQSUO6SiDWhyXGRbVquvfM7QY0fvdPyXSU= -k8s.io/component-base v0.0.0-20190626045757-ca439aa083f5 h1:q/LCzptcxSw9EyZFILhgkvgSh3TBPM8UhLWCq19sV7I= -k8s.io/component-base v0.0.0-20190626045757-ca439aa083f5/go.mod h1:rzptoTTLijQSUO6SiDWhyXGRbVquvfM7QY0fvdPyXSU= +honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/api v0.0.0-20190718183219-b59d8169aab5 h1:X3LHYU4fwu75lvvWypbppCKuhqg1KrvcZ1lLaAgmE/g= +k8s.io/api v0.0.0-20190718183219-b59d8169aab5/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= +k8s.io/apiextensions-apiserver v0.0.0-20190620085550-3a2f62f126c9 h1:k9vwVsnIfkX2eTHTTfJoYo6pGwwVBUAr7VZzinSrjLM= +k8s.io/apiextensions-apiserver v0.0.0-20190620085550-3a2f62f126c9/go.mod h1:di7nkarEFC6V6WvJIq4rLpWymXYPM3wwqZFtYIA0Xg0= +k8s.io/apimachinery v0.0.0-20190711103026-7bf792636534 h1:Iz41otzY4YmgjBECtotKCfHHKm9FSZ5x/1ykagnI30s= +k8s.io/apimachinery v0.0.0-20190711103026-7bf792636534/go.mod h1:M2fZgZL9DbLfeJaPBCDqSqNsdsmLN+V29knYJnIXlMA= +k8s.io/apiserver v0.0.0-20190718184206-a1aa83af71a7 h1:8mEhvrlegNEsADNHBah9RiCpEGaG1WVLall4pitumBs= +k8s.io/apiserver v0.0.0-20190718184206-a1aa83af71a7/go.mod h1:U+p3oErZ9CNJpjYE9Kx0IZ0VHFiDC92/xM4znOfwqaU= +k8s.io/cli-runtime v0.0.0-20190620085659-429467d76d0e h1:54KOxJkSycxbYrueshmFp1cUAfVbEP9sjYKVbIXYw9M= +k8s.io/cli-runtime v0.0.0-20190620085659-429467d76d0e/go.mod h1:nxflCnMaMcLCeQNRLyGeoY2crlsPMVmCPc0iGTUvajE= +k8s.io/client-go v0.0.0-20190718183610-8e956561bbf5 h1:ZIHnBytv9H1jiI7K/Szva829lP6zKsluhjVRdxf5kHA= +k8s.io/client-go v0.0.0-20190718183610-8e956561bbf5/go.mod h1:ozblAqkW495yoAX60QZyxQBq5W0YixE9Ffn4F91RO0g= +k8s.io/cloud-provider v0.0.0-20190620090041-1a7e1f6630cd h1:3rNeJmlNQjzcuUi6h1loRsqKjMQSxWDAWYDMittuTGE= +k8s.io/cloud-provider v0.0.0-20190620090041-1a7e1f6630cd/go.mod h1:Un5YLpjmC+XZ9zO19edNEnyy9bQ9gt2H210665c4FWc= +k8s.io/cluster-bootstrap v0.0.0-20190620090010-a60497bb9ffa/go.mod h1:nKdJhweDROdvToPucD2iin6nuJ0zg8qRxBu2i/LqxL0= +k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b h1:p+PRuwXWwk5e+UYvicGiavEupapqM5NOxUl3y1GkD6c= +k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b/go.mod h1:G8bQwmHm2eafm5bgtX67XDZQ8CWKSGu9DekI+yN4Y5I= +k8s.io/component-base v0.0.0-20190620085131-4cd66be69262 h1:2j4mE+jKntnIcQjOOWyzb/2GsJIuPqjORLMDeHnagpM= +k8s.io/component-base v0.0.0-20190620085131-4cd66be69262/go.mod h1:VLedAFwENz2swOjm0zmUXpAP2mV55c49xgaOzPBI/QQ= +k8s.io/cri-api v0.0.0-20190531030430-6117653b35f1 h1:NVZIgq492plCUB4GlZUTdgGQRPOKmBWpw2HlOJDm9OQ= +k8s.io/cri-api v0.0.0-20190531030430-6117653b35f1/go.mod h1:K6Ux7uDbzKhacgqW0OJg3rjXk/SR9kprCPfSUDXGB5A= +k8s.io/csi-translation-lib v0.0.0-20190620090114-816aa063c73d/go.mod h1:q5k0Vv3qsOTu2PUrTh+4mRAj+Pt+1BRyWiiwr5LBFOM= k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af h1:SwjZbO0u5ZuaV6TRMWOGB40iaycX8sbdMQHtjNZ19dk= k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/heapster v1.2.0-beta.1/go.mod h1:h1uhptVXMwC8xtZBYsPXKVi8fpdlYkTs6k949KozGrM= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v0.3.1 h1:RVgyDHY/kFKtLqh67NvEWIgkMneNoIrdkN0CxDSQc68= k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.3 h1:niceAagH1tzskmaie/icWd7ci1wbG7Bf2c6YGcQv+3c= k8s.io/klog v0.3.3/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/kube-aggregator v0.0.0-20190620085316-c835efc41000/go.mod h1:VQ+wumV2o4KXe3arqjS/+4l3Hd+3cZOOCf1wcGPzPJg= +k8s.io/kube-controller-manager v0.0.0-20190620085943-52018c8ce3c1/go.mod h1:E2bR8dj02P7Ydp/oaGjos0ydxIps1dcqvA21BsAGr9I= k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 h1:TRb4wNWoBVrH9plmkp2q86FIDppkbrEXdXlxU3a3BMI= k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= -k8s.io/kubernetes v1.14.3 h1:/FQkOJpjc1jGA37s7Rt3U10VwIKW685ejrgOp4UDRFE= -k8s.io/kubernetes v1.14.3/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk= +k8s.io/kube-proxy v0.0.0-20190620085811-cc0b23ba60a9/go.mod h1:s7TcaJtcwsGGyi9q1gmmDuTBwJcJn/rfyAOIUUh3JjI= +k8s.io/kube-scheduler v0.0.0-20190620085909-5dfb14b3a101/go.mod h1:aiWD0dWmuCnURY1+o3E0WgKQOlWFFqHESjz4nhzXXh8= +k8s.io/kubelet v0.0.0-20190620085837-98477dc0c87c/go.mod h1:L9fEppwvpkTrPZju8XolATHatuUt4Vscd/SVHZZGHKc= +k8s.io/kubernetes v1.15.1 h1:bCoCfn9sRFf47U5wn/y6I397hduMEpJ2gh4uN8BUYGI= +k8s.io/kubernetes v1.15.1/go.mod h1:3RE5ikMc73WK+dSxk4pQuQ6ZaJcPXiZX2dj98RcdCuM= +k8s.io/legacy-cloud-providers v0.0.0-20190620090159-a9e4f3cb5bf3/go.mod h1:vN4qQ5sBl+8105txtOVlFFNAXTc8lYvM41krV0K7xXc= +k8s.io/metrics v0.0.0-20190620085627-5b02f62e9559/go.mod h1:f5M7Wu7aoJPaYxys9OpQdzhfOVWhuS/WE20voRy8KEY= +k8s.io/repo-infra v0.0.0-20181204233714-00fe14e3d1a3/go.mod h1:+G1xBfZDfVFsm1Tj/HNCvg4QqWx8rJ2Fxpqr1rqp/gQ= +k8s.io/sample-apiserver v0.0.0-20190620085357-8191e314a1f7/go.mod h1:RVMdQ03C5ZqPz82uV82L72wju27+zFFnyzKje9DVBZI= k8s.io/utils v0.0.0-20190221042446-c2654d5206da h1:ElyM7RPonbKnQqOcw7dG2IK5uvQQn3b/WPHqD5mBvP4= k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= k8s.io/utils v0.0.0-20190607212802-c55fbcfc754a h1:2jUDc9gJja832Ftp+QbDV0tVhQHMISFn01els+2ZAcw= @@ -444,3 +573,4 @@ sigs.k8s.io/testing_frameworks v0.1.1 h1:cP2l8fkA3O9vekpy5Ks8mmA0NW/F7yBdXf8brkW sigs.k8s.io/testing_frameworks v0.1.1/go.mod h1:VVBKrHmJ6Ekkfz284YKhQePcdycOzNH9qL6ht1zEr/U= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc/go.mod h1:so/NYdZXCz+E3ZpW0uAoCj6uzU2+8OWDFv/HxUSs7kI= diff --git a/vendor/cloud.google.com/go/AUTHORS b/vendor/cloud.google.com/go/AUTHORS deleted file mode 100644 index c364af1da0..0000000000 --- a/vendor/cloud.google.com/go/AUTHORS +++ /dev/null @@ -1,15 +0,0 @@ -# This is the official list of cloud authors for copyright purposes. -# This file is distinct from the CONTRIBUTORS files. -# See the latter for an explanation. - -# Names should be added to this file as: -# Name or Organization -# The email address is not required for organizations. - -Filippo Valsorda -Google Inc. -Ingo Oeser -Palm Stone Games, Inc. -PaweÅ‚ Knap -Péter Szilágyi -Tyler Treat diff --git a/vendor/cloud.google.com/go/CONTRIBUTORS b/vendor/cloud.google.com/go/CONTRIBUTORS deleted file mode 100644 index 3b3cbed98e..0000000000 --- a/vendor/cloud.google.com/go/CONTRIBUTORS +++ /dev/null @@ -1,40 +0,0 @@ -# People who have agreed to one of the CLAs and can contribute patches. -# The AUTHORS file lists the copyright holders; this file -# lists people. For example, Google employees are listed here -# but not in AUTHORS, because Google holds the copyright. -# -# https://developers.google.com/open-source/cla/individual -# https://developers.google.com/open-source/cla/corporate -# -# Names should be added to this file as: -# Name - -# Keep the list alphabetically sorted. - -Alexis Hunt -Andreas Litt -Andrew Gerrand -Brad Fitzpatrick -Burcu Dogan -Dave Day -David Sansome -David Symonds -Filippo Valsorda -Glenn Lewis -Ingo Oeser -James Hall -Johan Euphrosine -Jonathan Amsterdam -Kunpei Sakai -Luna Duclos -Magnus Hiie -Mario Castro -Michael McGreevy -Omar Jarjur -PaweÅ‚ Knap -Péter Szilágyi -Sarah Adams -Thanatat Tamtan -Toby Burress -Tuo Shan -Tyler Treat diff --git a/vendor/cloud.google.com/go/compute/metadata/metadata.go b/vendor/cloud.google.com/go/compute/metadata/metadata.go index 0d929a6192..125b7033c9 100644 --- a/vendor/cloud.google.com/go/compute/metadata/metadata.go +++ b/vendor/cloud.google.com/go/compute/metadata/metadata.go @@ -137,7 +137,7 @@ func testOnGCE() bool { resc := make(chan bool, 2) // Try two strategies in parallel. - // See https://github.com/GoogleCloudPlatform/google-cloud-go/issues/194 + // See https://github.com/googleapis/google-cloud-go/issues/194 go func() { req, _ := http.NewRequest("GET", "http://"+metadataIP, nil) req.Header.Set("User-Agent", userAgent) @@ -300,8 +300,8 @@ func (c *Client) getETag(suffix string) (value, etag string, err error) { // being stable anyway. host = metadataIP } - url := "http://" + host + "/computeMetadata/v1/" + suffix - req, _ := http.NewRequest("GET", url, nil) + u := "http://" + host + "/computeMetadata/v1/" + suffix + req, _ := http.NewRequest("GET", u, nil) req.Header.Set("Metadata-Flavor", "Google") req.Header.Set("User-Agent", userAgent) res, err := c.hc.Do(req) @@ -312,13 +312,13 @@ func (c *Client) getETag(suffix string) (value, etag string, err error) { if res.StatusCode == http.StatusNotFound { return "", "", NotDefinedError(suffix) } - if res.StatusCode != 200 { - return "", "", fmt.Errorf("status code %d trying to fetch %s", res.StatusCode, url) - } all, err := ioutil.ReadAll(res.Body) if err != nil { return "", "", err } + if res.StatusCode != 200 { + return "", "", &Error{Code: res.StatusCode, Message: string(all)} + } return string(all), res.Header.Get("Etag"), nil } @@ -499,3 +499,15 @@ func (c *Client) Subscribe(suffix string, fn func(v string, ok bool) error) erro } } } + +// Error contains an error response from the server. +type Error struct { + // Code is the HTTP response status code. + Code int + // Message is the server response message. + Message string +} + +func (e *Error) Error() string { + return fmt.Sprintf("compute: Received %d `%s`", e.Code, e.Message) +} diff --git a/vendor/github.com/go-openapi/jsonpointer/.travis.yml b/vendor/github.com/go-openapi/jsonpointer/.travis.yml index 9aef9184e8..3436c4590c 100644 --- a/vendor/github.com/go-openapi/jsonpointer/.travis.yml +++ b/vendor/github.com/go-openapi/jsonpointer/.travis.yml @@ -1,15 +1,15 @@ after_success: - bash <(curl -s https://codecov.io/bash) go: +- '1.9' +- 1.10.x - 1.11.x -- 1.12.x install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -env: -- GO111MODULE=on +- go get -u github.com/stretchr/testify/assert +- go get -u github.com/go-openapi/swag language: go notifications: slack: secure: a5VgoiwB1G/AZqzmephPZIhEB9avMlsWSlVnM1dSAtYAwdrQHGTQxAmpOxYIoSPDhWNN5bfZmjd29++UlTwLcHSR+e0kJhH6IfDlsHj/HplNCJ9tyI0zYc7XchtdKgeMxMzBKCzgwFXGSbQGydXTliDNBo0HOzmY3cou/daMFTP60K+offcjS+3LRAYb1EroSRXZqrk1nuF/xDL3792DZUdPMiFR/L/Df6y74D6/QP4sTkTDFQitz4Wy/7jbsfj8dG6qK2zivgV6/l+w4OVjFkxVpPXogDWY10vVXNVynqxfJ7to2d1I9lNCHE2ilBCkWMIPdyJF7hjF8pKW+82yP4EzRh0vu8Xn0HT5MZpQxdRY/YMxNrWaG7SxsoEaO4q5uhgdzAqLYY3TRa7MjIK+7Ur+aqOeTXn6OKwVi0CjvZ6mIU3WUKSwiwkFZMbjRAkSb5CYwMEfGFO/z964xz83qGt6WAtBXNotqCQpTIiKtDHQeLOMfksHImCg6JLhQcWBVxamVgu0G3Pdh8Y6DyPnxraXY95+QDavbjqv7TeYT9T/FNnrkXaTTK0s4iWE5H4ACU0Qvz0wUYgfQrZv0/Hp7V17+rabUwnzYySHCy9SWX/7OV9Cfh31iMp9ZIffr76xmmThtOEqs8TrTtU6BWI3rWwvA9cXQipZTVtL0oswrGw= script: -- gotestsum -f short-verbose -- -race -coverprofile=coverage.txt -covermode=atomic ./... +- go test -v -race -cover -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/jsonpointer/go.mod b/vendor/github.com/go-openapi/jsonpointer/go.mod index 422045df2d..eb4d623c59 100644 --- a/vendor/github.com/go-openapi/jsonpointer/go.mod +++ b/vendor/github.com/go-openapi/jsonpointer/go.mod @@ -1,6 +1,10 @@ module github.com/go-openapi/jsonpointer require ( - github.com/go-openapi/swag v0.19.2 - github.com/stretchr/testify v1.3.0 + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-openapi/swag v0.17.0 + github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/testify v1.2.2 + gopkg.in/yaml.v2 v2.2.1 // indirect ) diff --git a/vendor/github.com/go-openapi/jsonpointer/go.sum b/vendor/github.com/go-openapi/jsonpointer/go.sum index f5e28beb4b..c71f4d7a29 100644 --- a/vendor/github.com/go-openapi/jsonpointer/go.sum +++ b/vendor/github.com/go-openapi/jsonpointer/go.sum @@ -1,22 +1,11 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/go-openapi/swag v0.17.0 h1:7wu+dZ5k83kvUWeAb+WUkFiUhDzwGqzTR/NhWzeo1JU= +github.com/go-openapi/swag v0.17.0/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/jsonreference/.travis.yml b/vendor/github.com/go-openapi/jsonreference/.travis.yml index 40b90757d8..40034d28dc 100644 --- a/vendor/github.com/go-openapi/jsonreference/.travis.yml +++ b/vendor/github.com/go-openapi/jsonreference/.travis.yml @@ -1,15 +1,16 @@ after_success: - bash <(curl -s https://codecov.io/bash) go: +- '1.9' +- 1.10.x - 1.11.x -- 1.12.x install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -env: -- GO111MODULE=on +- go get -u github.com/stretchr/testify/assert +- go get -u github.com/PuerkitoBio/purell +- go get -u github.com/go-openapi/jsonpointer language: go notifications: slack: secure: OpQG/36F7DSF00HLm9WZMhyqFCYYyYTsVDObW226cWiR8PWYiNfLZiSEvIzT1Gx4dDjhigKTIqcLhG34CkL5iNXDjm9Yyo2RYhQPlK8NErNqUEXuBqn4RqYHW48VGhEhOyDd4Ei0E2FN5ZbgpvHgtpkdZ6XDi64r3Ac89isP9aPHXQTuv2Jog6b4/OKKiUTftLcTIst0p4Cp3gqOJWf1wnoj+IadWiECNVQT6zb47IYjtyw6+uV8iUjTzdKcRB6Zc6b4Dq7JAg1Zd7Jfxkql3hlKp4PNlRf9Cy7y5iA3G7MLyg3FcPX5z2kmcyPt2jOTRMBWUJ5zIQpOxizAcN8WsT3WWBL5KbuYK6k0PzujrIDLqdxGpNmjkkMfDBT9cKmZpm2FdW+oZgPFJP+oKmAo4u4KJz/vjiPTXgQlN5bmrLuRMCp+AwC5wkIohTqWZVPE2TK6ZSnMYcg/W39s+RP/9mJoyryAvPSpBOLTI+biCgaUCTOAZxNTWpMFc3tPYntc41WWkdKcooZ9JA5DwfcaVFyTGQ3YXz+HvX6G1z/gW0Q/A4dBi9mj2iE1xm7tRTT+4VQ2AXFvSEI1HJpfPgYnwAtwOD1v3Qm2EUHk9sCdtEDR4wVGEPIVn44GnwFMnGKx9JWppMPYwFu3SVDdHt+E+LOlhZUply11Aa+IVrT2KUQ= script: -- gotestsum -f short-verbose -- -race -coverprofile=coverage.txt -covermode=atomic ./... +- go test -v -race -cover -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/jsonreference/go.mod b/vendor/github.com/go-openapi/jsonreference/go.mod index 35adddfe40..6d15a70503 100644 --- a/vendor/github.com/go-openapi/jsonreference/go.mod +++ b/vendor/github.com/go-openapi/jsonreference/go.mod @@ -1,10 +1,15 @@ module github.com/go-openapi/jsonreference require ( - github.com/PuerkitoBio/purell v1.1.1 + github.com/PuerkitoBio/purell v1.1.0 github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect - github.com/go-openapi/jsonpointer v0.19.2 - github.com/stretchr/testify v1.3.0 - golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 // indirect - golang.org/x/text v0.3.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-openapi/jsonpointer v0.17.0 + github.com/go-openapi/swag v0.17.0 // indirect + github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/testify v1.2.2 + golang.org/x/net v0.0.0-20181005035420-146acd28ed58 // indirect + golang.org/x/text v0.3.0 // indirect + gopkg.in/yaml.v2 v2.2.1 // indirect ) diff --git a/vendor/github.com/go-openapi/jsonreference/go.sum b/vendor/github.com/go-openapi/jsonreference/go.sum index f1a7a34e3c..ec9bdbc286 100644 --- a/vendor/github.com/go-openapi/jsonreference/go.sum +++ b/vendor/github.com/go-openapi/jsonreference/go.sum @@ -1,36 +1,20 @@ -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/go-openapi/jsonpointer v0.17.0 h1:Bpl2DtZ6k7wKqfFs7e+4P08+M9I3FQgn09a1UsRUQbk= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/swag v0.17.0 h1:7wu+dZ5k83kvUWeAb+WUkFiUhDzwGqzTR/NhWzeo1JU= +github.com/go-openapi/swag v0.17.0/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58 h1:otZG8yDCO4LVps5+9bxOeNiCvgmOyt96J3roHTYs7oE= +golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/spec/.golangci.yml b/vendor/github.com/go-openapi/spec/.golangci.yml index 3e33f9f2e3..ed53e5cd76 100644 --- a/vendor/github.com/go-openapi/spec/.golangci.yml +++ b/vendor/github.com/go-openapi/spec/.golangci.yml @@ -4,11 +4,11 @@ linters-settings: golint: min-confidence: 0 gocyclo: - min-complexity: 45 + min-complexity: 25 maligned: suggest-new: true dupl: - threshold: 200 + threshold: 100 goconst: min-len: 2 min-occurrences: 2 @@ -19,5 +19,3 @@ linters: - maligned - unparam - lll - - gochecknoinits - - gochecknoglobals diff --git a/vendor/github.com/go-openapi/spec/.travis.yml b/vendor/github.com/go-openapi/spec/.travis.yml index aa26d8763a..a4f03484b7 100644 --- a/vendor/github.com/go-openapi/spec/.travis.yml +++ b/vendor/github.com/go-openapi/spec/.travis.yml @@ -1,15 +1,18 @@ after_success: - bash <(curl -s https://codecov.io/bash) go: +- '1.9' +- 1.10.x - 1.11.x -- 1.12.x install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -env: -- GO111MODULE=on +- go get -u github.com/stretchr/testify +- go get -u github.com/go-openapi/swag +- go get -u gopkg.in/yaml.v2 +- go get -u github.com/go-openapi/jsonpointer +- go get -u github.com/go-openapi/jsonreference language: go notifications: slack: secure: QUWvCkBBK09GF7YtEvHHVt70JOkdlNBG0nIKu/5qc4/nW5HP8I2w0SEf/XR2je0eED1Qe3L/AfMCWwrEj+IUZc3l4v+ju8X8R3Lomhme0Eb0jd1MTMCuPcBT47YCj0M7RON7vXtbFfm1hFJ/jLe5+9FXz0hpXsR24PJc5ZIi/ogNwkaPqG4BmndzecpSh0vc2FJPZUD9LT0I09REY/vXR0oQAalLkW0asGD5taHZTUZq/kBpsNxaAFrLM23i4mUcf33M5fjLpvx5LRICrX/57XpBrDh2TooBU6Qj3CgoY0uPRYUmSNxbVx1czNzl2JtEpb5yjoxfVPQeg0BvQM00G8LJINISR+ohrjhkZmAqchDupAX+yFrxTtORa78CtnIL6z/aTNlgwwVD8kvL/1pFA/JWYmKDmz93mV/+6wubGzNSQCstzjkFA4/iZEKewKUoRIAi/fxyscP6L/rCpmY/4llZZvrnyTqVbt6URWpopUpH4rwYqreXAtJxJsfBJIeSmUIiDIOMGkCTvyTEW3fWGmGoqWtSHLoaWDyAIGb7azb+KvfpWtEcoPFWfSWU+LGee0A/YsUhBl7ADB9A0CJEuR8q4BPpKpfLwPKSiKSAXL7zDkyjExyhtgqbSl2jS+rKIHOZNL8JkCcTP2MKMVd563C5rC5FMKqu3S9m2b6380E= script: -- gotestsum -f short-verbose -- -race -coverprofile=coverage.txt -covermode=atomic ./... +- go test -v -race -cover -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/spec/bindata.go b/vendor/github.com/go-openapi/spec/bindata.go index d5ec7b900a..1717ea1052 100644 --- a/vendor/github.com/go-openapi/spec/bindata.go +++ b/vendor/github.com/go-openapi/spec/bindata.go @@ -1,14 +1,14 @@ -// Code generated by go-bindata. DO NOT EDIT. +// Code generated by go-bindata. // sources: -// schemas/jsonschema-draft-04.json (4.357kB) -// schemas/v2/schema.json (40.249kB) +// schemas/jsonschema-draft-04.json +// schemas/v2/schema.json +// DO NOT EDIT! package spec import ( "bytes" "compress/gzip" - "crypto/sha256" "fmt" "io" "io/ioutil" @@ -39,9 +39,8 @@ func bindataRead(data []byte, name string) ([]byte, error) { } type asset struct { - bytes []byte - info os.FileInfo - digest [sha256.Size]byte + bytes []byte + info os.FileInfo } type bindataFileInfo struct { @@ -85,8 +84,8 @@ func jsonschemaDraft04JSON() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "jsonschema-draft-04.json", size: 4357, mode: os.FileMode(436), modTime: time.Unix(1540282154, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xe1, 0x48, 0x9d, 0xb, 0x47, 0x55, 0xf0, 0x27, 0x93, 0x30, 0x25, 0x91, 0xd3, 0xfc, 0xb8, 0xf0, 0x7b, 0x68, 0x93, 0xa8, 0x2a, 0x94, 0xf2, 0x48, 0x95, 0xf8, 0xe4, 0xed, 0xf1, 0x1b, 0x82, 0xe2}} + info := bindataFileInfo{name: "jsonschema-draft-04.json", size: 4357, mode: os.FileMode(420), modTime: time.Unix(1523760398, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -105,8 +104,8 @@ func v2SchemaJSON() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "v2/schema.json", size: 40249, mode: os.FileMode(436), modTime: time.Unix(1540282154, 0)} - a := &asset{bytes: bytes, info: info, digest: [32]uint8{0xcb, 0x25, 0x27, 0xe8, 0x46, 0xae, 0x22, 0xc4, 0xf4, 0x8b, 0x1, 0x32, 0x4d, 0x1f, 0xf8, 0xdf, 0x75, 0x15, 0xc8, 0x2d, 0xc7, 0xed, 0xe, 0x7e, 0x0, 0x75, 0xc0, 0xf9, 0xd2, 0x1f, 0x75, 0x57}} + info := bindataFileInfo{name: "v2/schema.json", size: 40249, mode: os.FileMode(420), modTime: time.Unix(1523760397, 0)} + a := &asset{bytes: bytes, info: info} return a, nil } @@ -114,8 +113,8 @@ func v2SchemaJSON() (*asset, error) { // It returns an error if the asset could not be found or // could not be loaded. func Asset(name string) ([]byte, error) { - canonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[canonicalName]; ok { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) @@ -125,12 +124,6 @@ func Asset(name string) ([]byte, error) { return nil, fmt.Errorf("Asset %s not found", name) } -// AssetString returns the asset contents as a string (instead of a []byte). -func AssetString(name string) (string, error) { - data, err := Asset(name) - return string(data), err -} - // MustAsset is like Asset but panics when Asset would return an error. // It simplifies safe initialization of global variables. func MustAsset(name string) []byte { @@ -142,18 +135,12 @@ func MustAsset(name string) []byte { return a } -// MustAssetString is like AssetString but panics when Asset would return an -// error. It simplifies safe initialization of global variables. -func MustAssetString(name string) string { - return string(MustAsset(name)) -} - // AssetInfo loads and returns the asset info for the given name. // It returns an error if the asset could not be found or // could not be loaded. func AssetInfo(name string) (os.FileInfo, error) { - canonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[canonicalName]; ok { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { a, err := f() if err != nil { return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) @@ -163,33 +150,6 @@ func AssetInfo(name string) (os.FileInfo, error) { return nil, fmt.Errorf("AssetInfo %s not found", name) } -// AssetDigest returns the digest of the file with the given name. It returns an -// error if the asset could not be found or the digest could not be loaded. -func AssetDigest(name string) ([sha256.Size]byte, error) { - canonicalName := strings.Replace(name, "\\", "/", -1) - if f, ok := _bindata[canonicalName]; ok { - a, err := f() - if err != nil { - return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s can't read by error: %v", name, err) - } - return a.digest, nil - } - return [sha256.Size]byte{}, fmt.Errorf("AssetDigest %s not found", name) -} - -// Digests returns a map of all known files and their checksums. -func Digests() (map[string][sha256.Size]byte, error) { - mp := make(map[string][sha256.Size]byte, len(_bindata)) - for name := range _bindata { - a, err := _bindata[name]() - if err != nil { - return nil, err - } - mp[name] = a.digest - } - return mp, nil -} - // AssetNames returns the names of the assets. func AssetNames() []string { names := make([]string, 0, len(_bindata)) @@ -202,8 +162,7 @@ func AssetNames() []string { // _bindata is a table, holding each asset generator, mapped to its name. var _bindata = map[string]func() (*asset, error){ "jsonschema-draft-04.json": jsonschemaDraft04JSON, - - "v2/schema.json": v2SchemaJSON, + "v2/schema.json": v2SchemaJSON, } // AssetDir returns the file names below a certain @@ -215,15 +174,15 @@ var _bindata = map[string]func() (*asset, error){ // img/ // a.png // b.png -// then AssetDir("data") would return []string{"foo.txt", "img"}, -// AssetDir("data/img") would return []string{"a.png", "b.png"}, -// AssetDir("foo.txt") and AssetDir("notexist") would return an error, and +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error // AssetDir("") will return []string{"data"}. func AssetDir(name string) ([]string, error) { node := _bintree if len(name) != 0 { - canonicalName := strings.Replace(name, "\\", "/", -1) - pathList := strings.Split(canonicalName, "/") + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") for _, p := range pathList { node = node.Children[p] if node == nil { @@ -253,7 +212,7 @@ var _bintree = &bintree{nil, map[string]*bintree{ }}, }} -// RestoreAsset restores an asset under the given directory. +// RestoreAsset restores an asset under the given directory func RestoreAsset(dir, name string) error { data, err := Asset(name) if err != nil { @@ -271,10 +230,14 @@ func RestoreAsset(dir, name string) error { if err != nil { return err } - return os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil } -// RestoreAssets restores an asset under the given directory recursively. +// RestoreAssets restores an asset under the given directory recursively func RestoreAssets(dir, name string) error { children, err := AssetDir(name) // File @@ -292,6 +255,6 @@ func RestoreAssets(dir, name string) error { } func _filePath(dir, name string) string { - canonicalName := strings.Replace(name, "\\", "/", -1) - return filepath.Join(append([]string{dir}, strings.Split(canonicalName, "/")...)...) + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) } diff --git a/vendor/github.com/go-openapi/spec/cache.go b/vendor/github.com/go-openapi/spec/cache.go deleted file mode 100644 index 3fada0daef..0000000000 --- a/vendor/github.com/go-openapi/spec/cache.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// 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 spec - -import "sync" - -// ResolutionCache a cache for resolving urls -type ResolutionCache interface { - Get(string) (interface{}, bool) - Set(string, interface{}) -} - -type simpleCache struct { - lock sync.RWMutex - store map[string]interface{} -} - -// Get retrieves a cached URI -func (s *simpleCache) Get(uri string) (interface{}, bool) { - debugLog("getting %q from resolution cache", uri) - s.lock.RLock() - v, ok := s.store[uri] - debugLog("got %q from resolution cache: %t", uri, ok) - - s.lock.RUnlock() - return v, ok -} - -// Set caches a URI -func (s *simpleCache) Set(uri string, data interface{}) { - s.lock.Lock() - s.store[uri] = data - s.lock.Unlock() -} - -var resCache ResolutionCache - -func init() { - resCache = initResolutionCache() -} - -// initResolutionCache initializes the URI resolution cache -func initResolutionCache() ResolutionCache { - return &simpleCache{store: map[string]interface{}{ - "http://swagger.io/v2/schema.json": MustLoadSwagger20Schema(), - "http://json-schema.org/draft-04/schema": MustLoadJSONSchemaDraft04(), - }} -} diff --git a/vendor/github.com/go-openapi/spec/debug.go b/vendor/github.com/go-openapi/spec/debug.go index 389c528ff6..7edb95a614 100644 --- a/vendor/github.com/go-openapi/spec/debug.go +++ b/vendor/github.com/go-openapi/spec/debug.go @@ -24,9 +24,9 @@ import ( var ( // Debug is true when the SWAGGER_DEBUG env var is not empty. - // It enables a more verbose logging of this package. + // It enables a more verbose logging of validators. Debug = os.Getenv("SWAGGER_DEBUG") != "" - // specLogger is a debug logger for this package + // validateLogger is a debug logger for this package specLogger *log.Logger ) diff --git a/vendor/github.com/go-openapi/spec/expander.go b/vendor/github.com/go-openapi/spec/expander.go index 1e7fc8c490..456a9dd7ef 100644 --- a/vendor/github.com/go-openapi/spec/expander.go +++ b/vendor/github.com/go-openapi/spec/expander.go @@ -17,10 +17,20 @@ package spec import ( "encoding/json" "fmt" + "log" + "net/url" + "os" + "path" + "path/filepath" + "reflect" "strings" + "sync" + + "github.com/go-openapi/jsonpointer" + "github.com/go-openapi/swag" ) -// ExpandOptions provides options for spec expand +// ExpandOptions provides options for expand. type ExpandOptions struct { RelativeBase string SkipSchemas bool @@ -28,6 +38,68 @@ type ExpandOptions struct { AbsoluteCircularRef bool } +// ResolutionCache a cache for resolving urls +type ResolutionCache interface { + Get(string) (interface{}, bool) + Set(string, interface{}) +} + +type simpleCache struct { + lock sync.RWMutex + store map[string]interface{} +} + +var resCache ResolutionCache + +func init() { + resCache = initResolutionCache() +} + +// initResolutionCache initializes the URI resolution cache +func initResolutionCache() ResolutionCache { + return &simpleCache{store: map[string]interface{}{ + "http://swagger.io/v2/schema.json": MustLoadSwagger20Schema(), + "http://json-schema.org/draft-04/schema": MustLoadJSONSchemaDraft04(), + }} +} + +// resolverContext allows to share a context during spec processing. +// At the moment, it just holds the index of circular references found. +type resolverContext struct { + // circulars holds all visited circular references, which allows shortcuts. + // NOTE: this is not just a performance improvement: it is required to figure out + // circular references which participate several cycles. + // This structure is privately instantiated and needs not be locked against + // concurrent access, unless we chose to implement a parallel spec walking. + circulars map[string]bool + basePath string +} + +func newResolverContext(originalBasePath string) *resolverContext { + return &resolverContext{ + circulars: make(map[string]bool), + basePath: originalBasePath, // keep the root base path in context + } +} + +// Get retrieves a cached URI +func (s *simpleCache) Get(uri string) (interface{}, bool) { + debugLog("getting %q from resolution cache", uri) + s.lock.RLock() + v, ok := s.store[uri] + debugLog("got %q from resolution cache: %t", uri, ok) + + s.lock.RUnlock() + return v, ok +} + +// Set caches a URI +func (s *simpleCache) Set(uri string, data interface{}) { + s.lock.Lock() + s.store[uri] = data + s.lock.Unlock() +} + // ResolveRefWithBase resolves a reference against a context root with preservation of base path func ResolveRefWithBase(root interface{}, ref *Ref, opts *ExpandOptions) (*Schema, error) { resolver, err := defaultSchemaLoader(root, opts, nil, nil) @@ -107,10 +179,7 @@ func ResolveResponseWithBase(root interface{}, ref Ref, opts *ExpandOptions) (*R return result, nil } -// ResolveItems resolves parameter items reference against a context root and base path. -// -// NOTE: stricly speaking, this construct is not supported by Swagger 2.0. -// Similarly, $ref are forbidden in response headers. +// ResolveItems resolves header and parameter items reference against a context root and base path func ResolveItems(root interface{}, ref Ref, opts *ExpandOptions) (*Items, error) { resolver, err := defaultSchemaLoader(root, opts, nil, nil) if err != nil { @@ -144,11 +213,341 @@ func ResolvePathItem(root interface{}, ref Ref, opts *ExpandOptions) (*PathItem, return result, nil } +type schemaLoader struct { + root interface{} + options *ExpandOptions + cache ResolutionCache + context *resolverContext + loadDoc func(string) (json.RawMessage, error) +} + +var idPtr, _ = jsonpointer.New("/id") +var refPtr, _ = jsonpointer.New("/$ref") + +// PathLoader function to use when loading remote refs +var PathLoader func(string) (json.RawMessage, error) + +func init() { + PathLoader = func(path string) (json.RawMessage, error) { + data, err := swag.LoadFromFileOrHTTP(path) + if err != nil { + return nil, err + } + return json.RawMessage(data), nil + } +} + +func defaultSchemaLoader( + root interface{}, + expandOptions *ExpandOptions, + cache ResolutionCache, + context *resolverContext) (*schemaLoader, error) { + + if cache == nil { + cache = resCache + } + if expandOptions == nil { + expandOptions = &ExpandOptions{} + } + absBase, _ := absPath(expandOptions.RelativeBase) + if context == nil { + context = newResolverContext(absBase) + } + return &schemaLoader{ + root: root, + options: expandOptions, + cache: cache, + context: context, + loadDoc: func(path string) (json.RawMessage, error) { + debugLog("fetching document at %q", path) + return PathLoader(path) + }, + }, nil +} + +func idFromNode(node interface{}) (*Ref, error) { + if idValue, _, err := idPtr.Get(node); err == nil { + if refStr, ok := idValue.(string); ok && refStr != "" { + idRef, err := NewRef(refStr) + if err != nil { + return nil, err + } + return &idRef, nil + } + } + return nil, nil +} + +func nextRef(startingNode interface{}, startingRef *Ref, ptr *jsonpointer.Pointer) *Ref { + if startingRef == nil { + return nil + } + + if ptr == nil { + return startingRef + } + + ret := startingRef + var idRef *Ref + node := startingNode + + for _, tok := range ptr.DecodedTokens() { + node, _, _ = jsonpointer.GetForToken(node, tok) + if node == nil { + break + } + + idRef, _ = idFromNode(node) + if idRef != nil { + nw, err := ret.Inherits(*idRef) + if err != nil { + break + } + ret = nw + } + + refRef, _, _ := refPtr.Get(node) + if refRef != nil { + var rf Ref + switch value := refRef.(type) { + case string: + rf, _ = NewRef(value) + } + nw, err := ret.Inherits(rf) + if err != nil { + break + } + nwURL := nw.GetURL() + if nwURL.Scheme == "file" || (nwURL.Scheme == "" && nwURL.Host == "") { + nwpt := filepath.ToSlash(nwURL.Path) + if filepath.IsAbs(nwpt) { + _, err := os.Stat(nwpt) + if err != nil { + nwURL.Path = filepath.Join(".", nwpt) + } + } + } + + ret = nw + } + + } + + return ret +} + +// normalize absolute path for cache. +// on Windows, drive letters should be converted to lower as scheme in net/url.URL +func normalizeAbsPath(path string) string { + u, err := url.Parse(path) + if err != nil { + debugLog("normalize absolute path failed: %s", err) + return path + } + return u.String() +} + +// base or refPath could be a file path or a URL +// given a base absolute path and a ref path, return the absolute path of refPath +// 1) if refPath is absolute, return it +// 2) if refPath is relative, join it with basePath keeping the scheme, hosts, and ports if exists +// base could be a directory or a full file path +func normalizePaths(refPath, base string) string { + refURL, _ := url.Parse(refPath) + if path.IsAbs(refURL.Path) || filepath.IsAbs(refPath) { + // refPath is actually absolute + if refURL.Host != "" { + return refPath + } + parts := strings.Split(refPath, "#") + result := filepath.FromSlash(parts[0]) + if len(parts) == 2 { + result += "#" + parts[1] + } + return result + } + + // relative refPath + baseURL, _ := url.Parse(base) + if !strings.HasPrefix(refPath, "#") { + // combining paths + if baseURL.Host != "" { + baseURL.Path = path.Join(path.Dir(baseURL.Path), refURL.Path) + } else { // base is a file + newBase := fmt.Sprintf("%s#%s", filepath.Join(filepath.Dir(base), filepath.FromSlash(refURL.Path)), refURL.Fragment) + return newBase + } + + } + // copying fragment from ref to base + baseURL.Fragment = refURL.Fragment + return baseURL.String() +} + +// denormalizePaths returns to simplest notation on file $ref, +// i.e. strips the absolute path and sets a path relative to the base path. +// +// This is currently used when we rewrite ref after a circular ref has been detected +func denormalizeFileRef(ref *Ref, relativeBase, originalRelativeBase string) *Ref { + debugLog("denormalizeFileRef for: %s", ref.String()) + + if ref.String() == "" || ref.IsRoot() || ref.HasFragmentOnly { + return ref + } + // strip relativeBase from URI + relativeBaseURL, _ := url.Parse(relativeBase) + relativeBaseURL.Fragment = "" + + if relativeBaseURL.IsAbs() && strings.HasPrefix(ref.String(), relativeBase) { + // this should work for absolute URI (e.g. http://...): we have an exact match, just trim prefix + r, _ := NewRef(strings.TrimPrefix(ref.String(), relativeBase)) + return &r + } + + if relativeBaseURL.IsAbs() { + // other absolute URL get unchanged (i.e. with a non-empty scheme) + return ref + } + + // for relative file URIs: + originalRelativeBaseURL, _ := url.Parse(originalRelativeBase) + originalRelativeBaseURL.Fragment = "" + if strings.HasPrefix(ref.String(), originalRelativeBaseURL.String()) { + // the resulting ref is in the expanded spec: return a local ref + r, _ := NewRef(strings.TrimPrefix(ref.String(), originalRelativeBaseURL.String())) + return &r + } + + // check if we may set a relative path, considering the original base path for this spec. + // Example: + // spec is located at /mypath/spec.json + // my normalized ref points to: /mypath/item.json#/target + // expected result: item.json#/target + parts := strings.Split(ref.String(), "#") + relativePath, err := filepath.Rel(path.Dir(originalRelativeBaseURL.String()), parts[0]) + if err != nil { + // there is no common ancestor (e.g. different drives on windows) + // leaves the ref unchanged + return ref + } + if len(parts) == 2 { + relativePath += "#" + parts[1] + } + r, _ := NewRef(relativePath) + return &r +} + +// relativeBase could be an ABSOLUTE file path or an ABSOLUTE URL +func normalizeFileRef(ref *Ref, relativeBase string) *Ref { + // This is important for when the reference is pointing to the root schema + if ref.String() == "" { + r, _ := NewRef(relativeBase) + return &r + } + + debugLog("normalizing %s against %s", ref.String(), relativeBase) + + s := normalizePaths(ref.String(), relativeBase) + r, _ := NewRef(s) + return &r +} + +func (r *schemaLoader) resolveRef(ref *Ref, target interface{}, basePath string) error { + tgt := reflect.ValueOf(target) + if tgt.Kind() != reflect.Ptr { + return fmt.Errorf("resolve ref: target needs to be a pointer") + } + + refURL := ref.GetURL() + if refURL == nil { + return nil + } + + var res interface{} + var data interface{} + var err error + // Resolve against the root if it isn't nil, and if ref is pointing at the root, or has a fragment only which means + // it is pointing somewhere in the root. + root := r.root + if (ref.IsRoot() || ref.HasFragmentOnly) && root == nil && basePath != "" { + if baseRef, erb := NewRef(basePath); erb == nil { + root, _, _, _ = r.load(baseRef.GetURL()) + } + } + if (ref.IsRoot() || ref.HasFragmentOnly) && root != nil { + data = root + } else { + baseRef := normalizeFileRef(ref, basePath) + debugLog("current ref is: %s", ref.String()) + debugLog("current ref normalized file: %s", baseRef.String()) + data, _, _, err = r.load(baseRef.GetURL()) + if err != nil { + return err + } + } + + res = data + if ref.String() != "" { + res, _, err = ref.GetPointer().Get(data) + if err != nil { + return err + } + } + if err := swag.DynamicJSONToStruct(res, target); err != nil { + return err + } + + return nil +} + +func (r *schemaLoader) load(refURL *url.URL) (interface{}, url.URL, bool, error) { + debugLog("loading schema from url: %s", refURL) + toFetch := *refURL + toFetch.Fragment = "" + + normalized := normalizeAbsPath(toFetch.String()) + + data, fromCache := r.cache.Get(normalized) + if !fromCache { + b, err := r.loadDoc(normalized) + if err != nil { + return nil, url.URL{}, false, err + } + + if err := json.Unmarshal(b, &data); err != nil { + return nil, url.URL{}, false, err + } + r.cache.Set(normalized, data) + } + + return data, toFetch, fromCache, nil +} + +// Resolve resolves a reference against basePath and stores the result in target +// Resolve is not in charge of following references, it only resolves ref by following its URL +// if the schema that ref is referring to has more refs in it. Resolve doesn't resolve them +// if basePath is an empty string, ref is resolved against the root schema stored in the schemaLoader struct +func (r *schemaLoader) Resolve(ref *Ref, target interface{}, basePath string) error { + return r.resolveRef(ref, target, basePath) +} + +// absPath returns the absolute path of a file +func absPath(fname string) (string, error) { + if strings.HasPrefix(fname, "http") { + return fname, nil + } + if filepath.IsAbs(fname) { + return fname, nil + } + wd, err := os.Getwd() + return filepath.Join(wd, fname), err +} + // ExpandSpec expands the references in a swagger spec func ExpandSpec(spec *Swagger, options *ExpandOptions) error { resolver, err := defaultSchemaLoader(spec, options, nil, nil) // Just in case this ever returns an error. - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return err } @@ -162,7 +561,7 @@ func ExpandSpec(spec *Swagger, options *ExpandOptions) error { for key, definition := range spec.Definitions { var def *Schema var err error - if def, err = expandSchema(definition, []string{fmt.Sprintf("#/definitions/%s", key)}, resolver, specBasePath); resolver.shouldStopOnError(err) { + if def, err = expandSchema(definition, []string{fmt.Sprintf("#/definitions/%s", key)}, resolver, specBasePath); shouldStopOnError(err, resolver.options) { return err } if def != nil { @@ -171,26 +570,23 @@ func ExpandSpec(spec *Swagger, options *ExpandOptions) error { } } - for key := range spec.Parameters { - parameter := spec.Parameters[key] - if err := expandParameterOrResponse(¶meter, resolver, specBasePath); resolver.shouldStopOnError(err) { + for key, parameter := range spec.Parameters { + if err := expandParameter(¶meter, resolver, specBasePath); shouldStopOnError(err, resolver.options) { return err } spec.Parameters[key] = parameter } - for key := range spec.Responses { - response := spec.Responses[key] - if err := expandParameterOrResponse(&response, resolver, specBasePath); resolver.shouldStopOnError(err) { + for key, response := range spec.Responses { + if err := expandResponse(&response, resolver, specBasePath); shouldStopOnError(err, resolver.options) { return err } spec.Responses[key] = response } if spec.Paths != nil { - for key := range spec.Paths.Paths { - path := spec.Paths.Paths[key] - if err := expandPathItem(&path, resolver, specBasePath); resolver.shouldStopOnError(err) { + for key, path := range spec.Paths.Paths { + if err := expandPathItem(&path, resolver, specBasePath); shouldStopOnError(err, resolver.options) { return err } spec.Paths.Paths[key] = path @@ -200,6 +596,18 @@ func ExpandSpec(spec *Swagger, options *ExpandOptions) error { return nil } +func shouldStopOnError(err error, opts *ExpandOptions) bool { + if err != nil && !opts.ContinueOnError { + return true + } + + if err != nil { + log.Println(err) + } + + return false +} + // baseForRoot loads in the cache the root document and produces a fake "root" base path entry // for further $ref resolution func baseForRoot(root interface{}, cache ResolutionCache) string { @@ -278,6 +686,52 @@ func expandItems(target Schema, parentRefs []string, resolver *schemaLoader, bas return &target, nil } +// basePathFromSchemaID returns a new basePath based on an existing basePath and a schema ID +func basePathFromSchemaID(oldBasePath, id string) string { + u, err := url.Parse(oldBasePath) + if err != nil { + panic(err) + } + uid, err := url.Parse(id) + if err != nil { + panic(err) + } + + if path.IsAbs(uid.Path) { + return id + } + u.Path = path.Join(path.Dir(u.Path), uid.Path) + return u.String() +} + +// isCircular detects cycles in sequences of $ref. +// It relies on a private context (which needs not be locked). +func (r *schemaLoader) isCircular(ref *Ref, basePath string, parentRefs ...string) (foundCycle bool) { + normalizedRef := normalizePaths(ref.String(), basePath) + if _, ok := r.context.circulars[normalizedRef]; ok { + // circular $ref has been already detected in another explored cycle + foundCycle = true + return + } + foundCycle = swag.ContainsStringsCI(parentRefs, normalizedRef) + if foundCycle { + r.context.circulars[normalizedRef] = true + } + return +} + +func updateBasePath(transitive *schemaLoader, resolver *schemaLoader, basePath string) string { + if transitive != resolver { + debugLog("got a new resolver") + if transitive.options != nil && transitive.options.RelativeBase != "" { + basePath, _ = absPath(transitive.options.RelativeBase) + debugLog("new basePath = %s", basePath) + } + } + + return basePath +} + func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, basePath string) (*Schema, error) { if target.Ref.String() == "" && target.Ref.IsRoot() { // normalizing is important @@ -287,8 +741,8 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba } - // change the base path of resolution when an ID is encountered - // otherwise the basePath should inherit the parent's + /* change the base path of resolution when an ID is encountered + otherwise the basePath should inherit the parent's */ // important: ID can be relative path if target.ID != "" { debugLog("schema has ID: %s", target.ID) @@ -302,11 +756,12 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba basePath = normalizePaths(refPath, basePath) } + /* Explain here what this function does */ var t *Schema - // if Ref is found, everything else doesn't matter - // Ref also changes the resolution scope of children expandSchema + /* if Ref is found, everything else doesn't matter */ + /* Ref also changes the resolution scope of children expandSchema */ if target.Ref.String() != "" { - // here the resolution scope is changed because a $ref was encountered + /* Here the resolution scope is changed because a $ref was encountered */ normalizedRef := normalizeFileRef(&target.Ref, basePath) normalizedBasePath := normalizedRef.RemoteURI() @@ -324,27 +779,31 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba return &target, nil } - debugLog("basePath: %s: calling Resolve with target: %#v", basePath, target) - if err := resolver.Resolve(&target.Ref, &t, basePath); resolver.shouldStopOnError(err) { + debugLog("basePath: %s", basePath) + if Debug { + b, _ := json.Marshal(target) + debugLog("calling Resolve with target: %s", string(b)) + } + if err := resolver.Resolve(&target.Ref, &t, basePath); shouldStopOnError(err, resolver.options) { return nil, err } if t != nil { parentRefs = append(parentRefs, normalizedRef.String()) var err error - transitiveResolver, err := resolver.transitiveResolver(basePath, target.Ref) - if transitiveResolver.shouldStopOnError(err) { + transitiveResolver, err := transitiveResolver(basePath, target.Ref, resolver) + if shouldStopOnError(err, resolver.options) { return nil, err } - basePath = resolver.updateBasePath(transitiveResolver, normalizedBasePath) + basePath = updateBasePath(transitiveResolver, resolver, normalizedBasePath) return expandSchema(*t, parentRefs, transitiveResolver, basePath) } } t, err := expandItems(target, parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } if t != nil { @@ -353,21 +812,21 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba for i := range target.AllOf { t, err := expandSchema(target.AllOf[i], parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } target.AllOf[i] = *t } for i := range target.AnyOf { t, err := expandSchema(target.AnyOf[i], parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } target.AnyOf[i] = *t } for i := range target.OneOf { t, err := expandSchema(target.OneOf[i], parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } if t != nil { @@ -376,7 +835,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba } if target.Not != nil { t, err := expandSchema(*target.Not, parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } if t != nil { @@ -385,7 +844,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba } for k := range target.Properties { t, err := expandSchema(target.Properties[k], parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } if t != nil { @@ -394,7 +853,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba } if target.AdditionalProperties != nil && target.AdditionalProperties.Schema != nil { t, err := expandSchema(*target.AdditionalProperties.Schema, parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } if t != nil { @@ -403,7 +862,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba } for k := range target.PatternProperties { t, err := expandSchema(target.PatternProperties[k], parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } if t != nil { @@ -413,7 +872,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba for k := range target.Dependencies { if target.Dependencies[k].Schema != nil { t, err := expandSchema(*target.Dependencies[k].Schema, parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } if t != nil { @@ -423,7 +882,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba } if target.AdditionalItems != nil && target.AdditionalItems.Schema != nil { t, err := expandSchema(*target.AdditionalItems.Schema, parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } if t != nil { @@ -432,7 +891,7 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba } for k := range target.Definitions { t, err := expandSchema(target.Definitions[k], parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + if shouldStopOnError(err, resolver.options) { return &target, err } if t != nil { @@ -442,42 +901,75 @@ func expandSchema(target Schema, parentRefs []string, resolver *schemaLoader, ba return &target, nil } +func derefPathItem(pathItem *PathItem, parentRefs []string, resolver *schemaLoader, basePath string) error { + curRef := pathItem.Ref.String() + if curRef != "" { + normalizedRef := normalizeFileRef(&pathItem.Ref, basePath) + normalizedBasePath := normalizedRef.RemoteURI() + + if resolver.isCircular(normalizedRef, basePath, parentRefs...) { + return nil + } + + if err := resolver.Resolve(&pathItem.Ref, pathItem, basePath); shouldStopOnError(err, resolver.options) { + return err + } + + if pathItem.Ref.String() != "" && pathItem.Ref.String() != curRef && basePath != normalizedBasePath { + parentRefs = append(parentRefs, normalizedRef.String()) + return derefPathItem(pathItem, parentRefs, resolver, normalizedBasePath) + } + } + + return nil +} + func expandPathItem(pathItem *PathItem, resolver *schemaLoader, basePath string) error { if pathItem == nil { return nil } parentRefs := []string{} - if err := resolver.deref(pathItem, parentRefs, basePath); resolver.shouldStopOnError(err) { + if err := derefPathItem(pathItem, parentRefs, resolver, basePath); shouldStopOnError(err, resolver.options) { return err } if pathItem.Ref.String() != "" { var err error - resolver, err = resolver.transitiveResolver(basePath, pathItem.Ref) - if resolver.shouldStopOnError(err) { + resolver, err = transitiveResolver(basePath, pathItem.Ref, resolver) + if shouldStopOnError(err, resolver.options) { return err } } pathItem.Ref = Ref{} + // Currently unused: + //parentRefs = parentRefs[0:] + for idx := range pathItem.Parameters { - if err := expandParameterOrResponse(&(pathItem.Parameters[idx]), resolver, basePath); resolver.shouldStopOnError(err) { + if err := expandParameter(&(pathItem.Parameters[idx]), resolver, basePath); shouldStopOnError(err, resolver.options) { return err } } - ops := []*Operation{ - pathItem.Get, - pathItem.Head, - pathItem.Options, - pathItem.Put, - pathItem.Post, - pathItem.Patch, - pathItem.Delete, + if err := expandOperation(pathItem.Get, resolver, basePath); shouldStopOnError(err, resolver.options) { + return err } - for _, op := range ops { - if err := expandOperation(op, resolver, basePath); resolver.shouldStopOnError(err) { - return err - } + if err := expandOperation(pathItem.Head, resolver, basePath); shouldStopOnError(err, resolver.options) { + return err + } + if err := expandOperation(pathItem.Options, resolver, basePath); shouldStopOnError(err, resolver.options) { + return err + } + if err := expandOperation(pathItem.Put, resolver, basePath); shouldStopOnError(err, resolver.options) { + return err + } + if err := expandOperation(pathItem.Post, resolver, basePath); shouldStopOnError(err, resolver.options) { + return err + } + if err := expandOperation(pathItem.Patch, resolver, basePath); shouldStopOnError(err, resolver.options) { + return err + } + if err := expandOperation(pathItem.Delete, resolver, basePath); shouldStopOnError(err, resolver.options) { + return err } return nil } @@ -487,9 +979,8 @@ func expandOperation(op *Operation, resolver *schemaLoader, basePath string) err return nil } - for i := range op.Parameters { - param := op.Parameters[i] - if err := expandParameterOrResponse(¶m, resolver, basePath); resolver.shouldStopOnError(err) { + for i, param := range op.Parameters { + if err := expandParameter(¶m, resolver, basePath); shouldStopOnError(err, resolver.options) { return err } op.Parameters[i] = param @@ -497,12 +988,11 @@ func expandOperation(op *Operation, resolver *schemaLoader, basePath string) err if op.Responses != nil { responses := op.Responses - if err := expandParameterOrResponse(responses.Default, resolver, basePath); resolver.shouldStopOnError(err) { + if err := expandResponse(responses.Default, resolver, basePath); shouldStopOnError(err, resolver.options) { return err } - for code := range responses.StatusCodeResponses { - response := responses.StatusCodeResponses[code] - if err := expandParameterOrResponse(&response, resolver, basePath); resolver.shouldStopOnError(err) { + for code, response := range responses.StatusCodeResponses { + if err := expandResponse(&response, resolver, basePath); shouldStopOnError(err, resolver.options) { return err } responses.StatusCodeResponses[code] = response @@ -511,6 +1001,34 @@ func expandOperation(op *Operation, resolver *schemaLoader, basePath string) err return nil } +func transitiveResolver(basePath string, ref Ref, resolver *schemaLoader) (*schemaLoader, error) { + if ref.IsRoot() || ref.HasFragmentOnly { + return resolver, nil + } + + baseRef, _ := NewRef(basePath) + currentRef := normalizeFileRef(&ref, basePath) + // Set a new root to resolve against + if !strings.HasPrefix(currentRef.String(), baseRef.String()) { + rootURL := currentRef.GetURL() + rootURL.Fragment = "" + root, _ := resolver.cache.Get(rootURL.String()) + var err error + + // shallow copy of resolver options to set a new RelativeBase when + // traversing multiple documents + newOptions := resolver.options + newOptions.RelativeBase = rootURL.String() + debugLog("setting new root: %s", newOptions.RelativeBase) + resolver, err = defaultSchemaLoader(root, newOptions, resolver.cache, resolver.context) + if err != nil { + return nil, err + } + } + + return resolver, nil +} + // ExpandResponseWithRoot expands a response based on a root document, not a fetchable document func ExpandResponseWithRoot(response *Response, root interface{}, cache ResolutionCache) error { opts := &ExpandOptions{ @@ -525,7 +1043,7 @@ func ExpandResponseWithRoot(response *Response, root interface{}, cache Resoluti return err } - return expandParameterOrResponse(response, resolver, opts.RelativeBase) + return expandResponse(response, resolver, opts.RelativeBase) } // ExpandResponse expands a response based on a basepath @@ -544,7 +1062,70 @@ func ExpandResponse(response *Response, basePath string) error { return err } - return expandParameterOrResponse(response, resolver, opts.RelativeBase) + return expandResponse(response, resolver, opts.RelativeBase) +} + +func derefResponse(response *Response, parentRefs []string, resolver *schemaLoader, basePath string) error { + curRef := response.Ref.String() + if curRef != "" { + /* Here the resolution scope is changed because a $ref was encountered */ + normalizedRef := normalizeFileRef(&response.Ref, basePath) + normalizedBasePath := normalizedRef.RemoteURI() + + if resolver.isCircular(normalizedRef, basePath, parentRefs...) { + return nil + } + + if err := resolver.Resolve(&response.Ref, response, basePath); shouldStopOnError(err, resolver.options) { + return err + } + + if response.Ref.String() != "" && response.Ref.String() != curRef && basePath != normalizedBasePath { + parentRefs = append(parentRefs, normalizedRef.String()) + return derefResponse(response, parentRefs, resolver, normalizedBasePath) + } + } + + return nil +} + +func expandResponse(response *Response, resolver *schemaLoader, basePath string) error { + if response == nil { + return nil + } + parentRefs := []string{} + if err := derefResponse(response, parentRefs, resolver, basePath); shouldStopOnError(err, resolver.options) { + return err + } + if response.Ref.String() != "" { + transitiveResolver, err := transitiveResolver(basePath, response.Ref, resolver) + if shouldStopOnError(err, transitiveResolver.options) { + return err + } + basePath = updateBasePath(transitiveResolver, resolver, basePath) + resolver = transitiveResolver + } + if response.Schema != nil && response.Schema.Ref.String() != "" { + // schema expanded to a $ref in another root + var ern error + response.Schema.Ref, ern = NewRef(normalizePaths(response.Schema.Ref.String(), response.Ref.RemoteURI())) + if ern != nil { + return ern + } + } + response.Ref = Ref{} + + parentRefs = parentRefs[0:] + if !resolver.options.SkipSchemas && response.Schema != nil { + // parentRefs = append(parentRefs, response.Schema.Ref.String()) + s, err := expandSchema(*response.Schema, parentRefs, resolver, basePath) + if shouldStopOnError(err, resolver.options) { + return err + } + *response.Schema = *s + } + + return nil } // ExpandParameterWithRoot expands a parameter based on a root document, not a fetchable document @@ -561,10 +1142,10 @@ func ExpandParameterWithRoot(parameter *Parameter, root interface{}, cache Resol return err } - return expandParameterOrResponse(parameter, resolver, opts.RelativeBase) + return expandParameter(parameter, resolver, opts.RelativeBase) } -// ExpandParameter expands a parameter based on a basepath. +// ExpandParameter expands a parameter based on a basepath // This is the exported version of expandParameter // all refs inside parameter will be resolved relative to basePath func ExpandParameter(parameter *Parameter, basePath string) error { @@ -580,71 +1161,67 @@ func ExpandParameter(parameter *Parameter, basePath string) error { return err } - return expandParameterOrResponse(parameter, resolver, opts.RelativeBase) + return expandParameter(parameter, resolver, opts.RelativeBase) } -func getRefAndSchema(input interface{}) (*Ref, *Schema, error) { - var ref *Ref - var sch *Schema - switch refable := input.(type) { - case *Parameter: - if refable == nil { - return nil, nil, nil +func derefParameter(parameter *Parameter, parentRefs []string, resolver *schemaLoader, basePath string) error { + curRef := parameter.Ref.String() + if curRef != "" { + normalizedRef := normalizeFileRef(¶meter.Ref, basePath) + normalizedBasePath := normalizedRef.RemoteURI() + + if resolver.isCircular(normalizedRef, basePath, parentRefs...) { + return nil } - ref = &refable.Ref - sch = refable.Schema - case *Response: - if refable == nil { - return nil, nil, nil + + if err := resolver.Resolve(¶meter.Ref, parameter, basePath); shouldStopOnError(err, resolver.options) { + return err + } + + if parameter.Ref.String() != "" && parameter.Ref.String() != curRef && basePath != normalizedBasePath { + parentRefs = append(parentRefs, normalizedRef.String()) + return derefParameter(parameter, parentRefs, resolver, normalizedBasePath) } - ref = &refable.Ref - sch = refable.Schema - default: - return nil, nil, fmt.Errorf("expand: unsupported type %T. Input should be of type *Parameter or *Response", input) } - return ref, sch, nil + + return nil } -func expandParameterOrResponse(input interface{}, resolver *schemaLoader, basePath string) error { - ref, _, err := getRefAndSchema(input) - if err != nil { - return err - } - if ref == nil { +func expandParameter(parameter *Parameter, resolver *schemaLoader, basePath string) error { + if parameter == nil { return nil } + parentRefs := []string{} - if err := resolver.deref(input, parentRefs, basePath); resolver.shouldStopOnError(err) { + if err := derefParameter(parameter, parentRefs, resolver, basePath); shouldStopOnError(err, resolver.options) { return err } - ref, sch, _ := getRefAndSchema(input) - if ref.String() != "" { - transitiveResolver, err := resolver.transitiveResolver(basePath, *ref) - if transitiveResolver.shouldStopOnError(err) { + if parameter.Ref.String() != "" { + transitiveResolver, err := transitiveResolver(basePath, parameter.Ref, resolver) + if shouldStopOnError(err, transitiveResolver.options) { return err } - basePath = resolver.updateBasePath(transitiveResolver, basePath) + basePath = updateBasePath(transitiveResolver, resolver, basePath) resolver = transitiveResolver } - if sch != nil && sch.Ref.String() != "" { + if parameter.Schema != nil && parameter.Schema.Ref.String() != "" { // schema expanded to a $ref in another root var ern error - sch.Ref, ern = NewRef(normalizePaths(sch.Ref.String(), ref.RemoteURI())) + parameter.Schema.Ref, ern = NewRef(normalizePaths(parameter.Schema.Ref.String(), parameter.Ref.RemoteURI())) if ern != nil { return ern } } - if ref != nil { - *ref = Ref{} - } + parameter.Ref = Ref{} - if !resolver.options.SkipSchemas && sch != nil { - s, err := expandSchema(*sch, parentRefs, resolver, basePath) - if resolver.shouldStopOnError(err) { + parentRefs = parentRefs[0:] + if !resolver.options.SkipSchemas && parameter.Schema != nil { + s, err := expandSchema(*parameter.Schema, parentRefs, resolver, basePath) + if shouldStopOnError(err, resolver.options) { return err } - *sch = *s + *parameter.Schema = *s } return nil } diff --git a/vendor/github.com/go-openapi/spec/go.mod b/vendor/github.com/go-openapi/spec/go.mod index 42073be007..5af64c10b5 100644 --- a/vendor/github.com/go-openapi/spec/go.mod +++ b/vendor/github.com/go-openapi/spec/go.mod @@ -1,14 +1,16 @@ module github.com/go-openapi/spec require ( - github.com/go-openapi/jsonpointer v0.19.2 - github.com/go-openapi/jsonreference v0.19.2 - github.com/go-openapi/swag v0.19.2 - github.com/kr/pty v1.1.5 // indirect - github.com/stretchr/objx v0.2.0 // indirect - github.com/stretchr/testify v1.3.0 - golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 // indirect - golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f // indirect - golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59 // indirect - gopkg.in/yaml.v2 v2.2.2 + github.com/PuerkitoBio/purell v1.1.0 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/go-openapi/jsonpointer v0.17.0 + github.com/go-openapi/jsonreference v0.17.0 + github.com/go-openapi/swag v0.17.0 + github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/testify v1.2.2 + golang.org/x/net v0.0.0-20181005035420-146acd28ed58 // indirect + golang.org/x/text v0.3.0 // indirect + gopkg.in/yaml.v2 v2.2.1 ) diff --git a/vendor/github.com/go-openapi/spec/go.sum b/vendor/github.com/go-openapi/spec/go.sum index 73e97a2d73..ab6bfb6086 100644 --- a/vendor/github.com/go-openapi/spec/go.sum +++ b/vendor/github.com/go-openapi/spec/go.sum @@ -1,66 +1,22 @@ github.com/PuerkitoBio/purell v1.1.0 h1:rmGxhojJlM0tuKtfdvliR84CFHljx9ag64t2xmVkjK4= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-openapi/jsonpointer v0.17.0 h1:nH6xp8XdXHx8dqveo0ZuJBluCO2qGrPbDNZ0dwoRHP0= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.0 h1:FTUMcX77w5rQkClIzDtTxvn6Bsa894CcrzNj2MMfeg8= -github.com/go-openapi/jsonpointer v0.19.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2 h1:A9+F4Dc/MCNB5jibxf6rRvOvR/iFgQdyNx9eIhnGqq0= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonreference v0.19.0 h1:BqWKpV1dFd+AuiKlgtddwVIFQsuMpxfBDBHGfM2yNpk= -github.com/go-openapi/jsonreference v0.19.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2 h1:o20suLFB4Ri0tuzpWtyHlh7E7HnkqTNLq6aR6WVNS1w= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/swag v0.17.0 h1:iqrgMg7Q7SvtbWLlltPrkMs0UBJI6oTSs79JFRUi880= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2 h1:jvO6bCMBEilGwMfHhrd61zIID4oIFdwb76V17SM88dE= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/go-openapi/jsonpointer v0.17.0 h1:Bpl2DtZ6k7wKqfFs7e+4P08+M9I3FQgn09a1UsRUQbk= +github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +github.com/go-openapi/jsonreference v0.17.0 h1:d/o7/fsLWWQZACbihvZxcyLQ59jfUVs7WOJv/ak7T7A= +github.com/go-openapi/jsonreference v0.17.0/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +github.com/go-openapi/swag v0.17.0 h1:7wu+dZ5k83kvUWeAb+WUkFiUhDzwGqzTR/NhWzeo1JU= +github.com/go-openapi/swag v0.17.0/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/net v0.0.0-20181005035420-146acd28ed58 h1:otZG8yDCO4LVps5+9bxOeNiCvgmOyt96J3roHTYs7oE= golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 h1:dfGZHvZk057jK2MCeWus/TowKpJ8y4AmooUzdBSR9GU= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/spec/header.go b/vendor/github.com/go-openapi/spec/header.go index 39efe452bb..82f77f7709 100644 --- a/vendor/github.com/go-openapi/spec/header.go +++ b/vendor/github.com/go-openapi/spec/header.go @@ -22,10 +22,6 @@ import ( "github.com/go-openapi/swag" ) -const ( - jsonArray = "array" -) - // HeaderProps describes a response header type HeaderProps struct { Description string `json:"description,omitempty"` @@ -61,7 +57,7 @@ func (h *Header) Typed(tpe, format string) *Header { // CollectionOf a fluent builder method for an array item func (h *Header) CollectionOf(items *Items, format string) *Header { - h.Type = jsonArray + h.Type = "array" h.Items = items h.CollectionFormat = format return h diff --git a/vendor/github.com/go-openapi/spec/info.go b/vendor/github.com/go-openapi/spec/info.go index c458b49b21..cfb37ec12a 100644 --- a/vendor/github.com/go-openapi/spec/info.go +++ b/vendor/github.com/go-openapi/spec/info.go @@ -161,5 +161,8 @@ func (i *Info) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, &i.InfoProps); err != nil { return err } - return json.Unmarshal(data, &i.VendorExtensible) + if err := json.Unmarshal(data, &i.VendorExtensible); err != nil { + return err + } + return nil } diff --git a/vendor/github.com/go-openapi/spec/items.go b/vendor/github.com/go-openapi/spec/items.go index 365d163158..cf42989716 100644 --- a/vendor/github.com/go-openapi/spec/items.go +++ b/vendor/github.com/go-openapi/spec/items.go @@ -22,14 +22,9 @@ import ( "github.com/go-openapi/swag" ) -const ( - jsonRef = "$ref" -) - // SimpleSchema describe swagger simple schemas for parameters and headers type SimpleSchema struct { Type string `json:"type,omitempty"` - Nullable bool `json:"nullable,omitempty"` Format string `json:"format,omitempty"` Items *Items `json:"items,omitempty"` CollectionFormat string `json:"collectionFormat,omitempty"` @@ -92,15 +87,9 @@ func (i *Items) Typed(tpe, format string) *Items { return i } -// AsNullable flags this schema as nullable. -func (i *Items) AsNullable() *Items { - i.Nullable = true - return i -} - // CollectionOf a fluent builder method for an array item func (i *Items) CollectionOf(items *Items, format string) *Items { - i.Type = jsonArray + i.Type = "array" i.Items = items i.CollectionFormat = format return i @@ -228,7 +217,7 @@ func (i Items) MarshalJSON() ([]byte, error) { // JSONLookup look up a value by the json property name func (i Items) JSONLookup(token string) (interface{}, error) { - if token == jsonRef { + if token == "$ref" { return &i.Ref, nil } diff --git a/vendor/github.com/go-openapi/spec/normalizer.go b/vendor/github.com/go-openapi/spec/normalizer.go deleted file mode 100644 index b8957e7c0c..0000000000 --- a/vendor/github.com/go-openapi/spec/normalizer.go +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// 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 spec - -import ( - "fmt" - "net/url" - "os" - "path" - "path/filepath" - "strings" -) - -// normalize absolute path for cache. -// on Windows, drive letters should be converted to lower as scheme in net/url.URL -func normalizeAbsPath(path string) string { - u, err := url.Parse(path) - if err != nil { - debugLog("normalize absolute path failed: %s", err) - return path - } - return u.String() -} - -// base or refPath could be a file path or a URL -// given a base absolute path and a ref path, return the absolute path of refPath -// 1) if refPath is absolute, return it -// 2) if refPath is relative, join it with basePath keeping the scheme, hosts, and ports if exists -// base could be a directory or a full file path -func normalizePaths(refPath, base string) string { - refURL, _ := url.Parse(refPath) - if path.IsAbs(refURL.Path) || filepath.IsAbs(refPath) { - // refPath is actually absolute - if refURL.Host != "" { - return refPath - } - parts := strings.Split(refPath, "#") - result := filepath.FromSlash(parts[0]) - if len(parts) == 2 { - result += "#" + parts[1] - } - return result - } - - // relative refPath - baseURL, _ := url.Parse(base) - if !strings.HasPrefix(refPath, "#") { - // combining paths - if baseURL.Host != "" { - baseURL.Path = path.Join(path.Dir(baseURL.Path), refURL.Path) - } else { // base is a file - newBase := fmt.Sprintf("%s#%s", filepath.Join(filepath.Dir(base), filepath.FromSlash(refURL.Path)), refURL.Fragment) - return newBase - } - - } - // copying fragment from ref to base - baseURL.Fragment = refURL.Fragment - return baseURL.String() -} - -// denormalizePaths returns to simplest notation on file $ref, -// i.e. strips the absolute path and sets a path relative to the base path. -// -// This is currently used when we rewrite ref after a circular ref has been detected -func denormalizeFileRef(ref *Ref, relativeBase, originalRelativeBase string) *Ref { - debugLog("denormalizeFileRef for: %s", ref.String()) - - if ref.String() == "" || ref.IsRoot() || ref.HasFragmentOnly { - return ref - } - // strip relativeBase from URI - relativeBaseURL, _ := url.Parse(relativeBase) - relativeBaseURL.Fragment = "" - - if relativeBaseURL.IsAbs() && strings.HasPrefix(ref.String(), relativeBase) { - // this should work for absolute URI (e.g. http://...): we have an exact match, just trim prefix - r, _ := NewRef(strings.TrimPrefix(ref.String(), relativeBase)) - return &r - } - - if relativeBaseURL.IsAbs() { - // other absolute URL get unchanged (i.e. with a non-empty scheme) - return ref - } - - // for relative file URIs: - originalRelativeBaseURL, _ := url.Parse(originalRelativeBase) - originalRelativeBaseURL.Fragment = "" - if strings.HasPrefix(ref.String(), originalRelativeBaseURL.String()) { - // the resulting ref is in the expanded spec: return a local ref - r, _ := NewRef(strings.TrimPrefix(ref.String(), originalRelativeBaseURL.String())) - return &r - } - - // check if we may set a relative path, considering the original base path for this spec. - // Example: - // spec is located at /mypath/spec.json - // my normalized ref points to: /mypath/item.json#/target - // expected result: item.json#/target - parts := strings.Split(ref.String(), "#") - relativePath, err := filepath.Rel(path.Dir(originalRelativeBaseURL.String()), parts[0]) - if err != nil { - // there is no common ancestor (e.g. different drives on windows) - // leaves the ref unchanged - return ref - } - if len(parts) == 2 { - relativePath += "#" + parts[1] - } - r, _ := NewRef(relativePath) - return &r -} - -// relativeBase could be an ABSOLUTE file path or an ABSOLUTE URL -func normalizeFileRef(ref *Ref, relativeBase string) *Ref { - // This is important for when the reference is pointing to the root schema - if ref.String() == "" { - r, _ := NewRef(relativeBase) - return &r - } - - debugLog("normalizing %s against %s", ref.String(), relativeBase) - - s := normalizePaths(ref.String(), relativeBase) - r, _ := NewRef(s) - return &r -} - -// absPath returns the absolute path of a file -func absPath(fname string) (string, error) { - if strings.HasPrefix(fname, "http") { - return fname, nil - } - if filepath.IsAbs(fname) { - return fname, nil - } - wd, err := os.Getwd() - return filepath.Join(wd, fname), err -} diff --git a/vendor/github.com/go-openapi/spec/operation.go b/vendor/github.com/go-openapi/spec/operation.go index b1ebd59945..32f7d8fe72 100644 --- a/vendor/github.com/go-openapi/spec/operation.go +++ b/vendor/github.com/go-openapi/spec/operation.go @@ -15,37 +15,24 @@ package spec import ( - "bytes" - "encoding/gob" "encoding/json" - "sort" "github.com/go-openapi/jsonpointer" "github.com/go-openapi/swag" ) -func init() { - //gob.Register(map[string][]interface{}{}) - gob.Register(map[string]interface{}{}) - gob.Register([]interface{}{}) -} - // OperationProps describes an operation -// -// NOTES: -// - schemes, when present must be from [http, https, ws, wss]: see validate -// - Security is handled as a special case: see MarshalJSON function type OperationProps struct { Description string `json:"description,omitempty"` Consumes []string `json:"consumes,omitempty"` Produces []string `json:"produces,omitempty"` - Schemes []string `json:"schemes,omitempty"` + Schemes []string `json:"schemes,omitempty"` // the scheme, when present must be from [http, https, ws, wss] Tags []string `json:"tags,omitempty"` Summary string `json:"summary,omitempty"` ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"` ID string `json:"operationId,omitempty"` Deprecated bool `json:"deprecated,omitempty"` - Security []map[string][]string `json:"security,omitempty"` + Security []map[string][]string `json:"security,omitempty"` //Special case, see MarshalJSON function Parameters []Parameter `json:"parameters,omitempty"` Responses *Responses `json:"responses,omitempty"` } @@ -89,17 +76,11 @@ func (o *Operation) SuccessResponse() (*Response, int, bool) { return nil, 0, false } - responseCodes := make([]int, 0, len(o.Responses.StatusCodeResponses)) - for k := range o.Responses.StatusCodeResponses { - if k >= 200 && k < 300 { - responseCodes = append(responseCodes, k) + for k, v := range o.Responses.StatusCodeResponses { + if k/100 == 2 { + return &v, k, true } } - if len(responseCodes) > 0 { - sort.Ints(responseCodes) - v := o.Responses.StatusCodeResponses[responseCodes[0]] - return &v, responseCodes[0], true - } return o.Responses.Default, 0, false } @@ -118,7 +99,10 @@ func (o *Operation) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, &o.OperationProps); err != nil { return err } - return json.Unmarshal(data, &o.VendorExtensible) + if err := json.Unmarshal(data, &o.VendorExtensible); err != nil { + return err + } + return nil } // MarshalJSON converts this items object to JSON @@ -232,7 +216,7 @@ func (o *Operation) AddParam(param *Parameter) *Operation { // RemoveParam removes a parameter from the operation func (o *Operation) RemoveParam(name, in string) *Operation { for i, p := range o.Parameters { - if p.Name == name && p.In == in { + if p.Name == name && p.In == name { o.Parameters = append(o.Parameters[:i], o.Parameters[i+1:]...) return o } @@ -273,126 +257,3 @@ func (o *Operation) RespondsWith(code int, response *Response) *Operation { o.Responses.StatusCodeResponses[code] = *response return o } - -type opsAlias OperationProps - -type gobAlias struct { - Security []map[string]struct { - List []string - Pad bool - } - Alias *opsAlias - SecurityIsEmpty bool -} - -// GobEncode provides a safe gob encoder for Operation, including empty security requirements -func (o Operation) GobEncode() ([]byte, error) { - raw := struct { - Ext VendorExtensible - Props OperationProps - }{ - Ext: o.VendorExtensible, - Props: o.OperationProps, - } - var b bytes.Buffer - err := gob.NewEncoder(&b).Encode(raw) - return b.Bytes(), err -} - -// GobDecode provides a safe gob decoder for Operation, including empty security requirements -func (o *Operation) GobDecode(b []byte) error { - var raw struct { - Ext VendorExtensible - Props OperationProps - } - - buf := bytes.NewBuffer(b) - err := gob.NewDecoder(buf).Decode(&raw) - if err != nil { - return err - } - o.VendorExtensible = raw.Ext - o.OperationProps = raw.Props - return nil -} - -// GobEncode provides a safe gob encoder for Operation, including empty security requirements -func (op OperationProps) GobEncode() ([]byte, error) { - raw := gobAlias{ - Alias: (*opsAlias)(&op), - } - - var b bytes.Buffer - if op.Security == nil { - // nil security requirement - err := gob.NewEncoder(&b).Encode(raw) - return b.Bytes(), err - } - - if len(op.Security) == 0 { - // empty, but non-nil security requirement - raw.SecurityIsEmpty = true - raw.Alias.Security = nil - err := gob.NewEncoder(&b).Encode(raw) - return b.Bytes(), err - } - - raw.Security = make([]map[string]struct { - List []string - Pad bool - }, 0, len(op.Security)) - for _, req := range op.Security { - v := make(map[string]struct { - List []string - Pad bool - }, len(req)) - for k, val := range req { - v[k] = struct { - List []string - Pad bool - }{ - List: val, - } - } - raw.Security = append(raw.Security, v) - } - - err := gob.NewEncoder(&b).Encode(raw) - return b.Bytes(), err -} - -// GobDecode provides a safe gob decoder for Operation, including empty security requirements -func (op *OperationProps) GobDecode(b []byte) error { - var raw gobAlias - - buf := bytes.NewBuffer(b) - err := gob.NewDecoder(buf).Decode(&raw) - if err != nil { - return err - } - if raw.Alias == nil { - return nil - } - - switch { - case raw.SecurityIsEmpty: - // empty, but non-nil security requirement - raw.Alias.Security = []map[string][]string{} - case len(raw.Alias.Security) == 0: - // nil security requirement - raw.Alias.Security = nil - default: - raw.Alias.Security = make([]map[string][]string, 0, len(raw.Security)) - for _, req := range raw.Security { - v := make(map[string][]string, len(req)) - for k, val := range req { - v[k] = make([]string, 0, len(val.List)) - v[k] = append(v[k], val.List...) - } - raw.Alias.Security = append(raw.Alias.Security, v) - } - } - - *op = *(*OperationProps)(raw.Alias) - return nil -} diff --git a/vendor/github.com/go-openapi/spec/parameter.go b/vendor/github.com/go-openapi/spec/parameter.go index cecdff5456..cb1a88d252 100644 --- a/vendor/github.com/go-openapi/spec/parameter.go +++ b/vendor/github.com/go-openapi/spec/parameter.go @@ -39,8 +39,7 @@ func PathParam(name string) *Parameter { // BodyParam creates a body parameter func BodyParam(name string, schema *Schema) *Parameter { - return &Parameter{ParamProps: ParamProps{Name: name, In: "body", Schema: schema}, - SimpleSchema: SimpleSchema{Type: "object"}} + return &Parameter{ParamProps: ParamProps{Name: name, In: "body", Schema: schema}, SimpleSchema: SimpleSchema{Type: "object"}} } // FormDataParam creates a body parameter @@ -50,15 +49,12 @@ func FormDataParam(name string) *Parameter { // FileParam creates a body parameter func FileParam(name string) *Parameter { - return &Parameter{ParamProps: ParamProps{Name: name, In: "formData"}, - SimpleSchema: SimpleSchema{Type: "file"}} + return &Parameter{ParamProps: ParamProps{Name: name, In: "formData"}, SimpleSchema: SimpleSchema{Type: "file"}} } // SimpleArrayParam creates a param for a simple array (string, int, date etc) func SimpleArrayParam(name, tpe, fmt string) *Parameter { - return &Parameter{ParamProps: ParamProps{Name: name}, - SimpleSchema: SimpleSchema{Type: jsonArray, CollectionFormat: "csv", - Items: &Items{SimpleSchema: SimpleSchema{Type: "string", Format: fmt}}}} + return &Parameter{ParamProps: ParamProps{Name: name}, SimpleSchema: SimpleSchema{Type: "array", CollectionFormat: "csv", Items: &Items{SimpleSchema: SimpleSchema{Type: "string", Format: fmt}}}} } // ParamRef creates a parameter that's a json reference @@ -69,43 +65,25 @@ func ParamRef(uri string) *Parameter { } // ParamProps describes the specific attributes of an operation parameter -// -// NOTE: -// - Schema is defined when "in" == "body": see validate -// - AllowEmptyValue is allowed where "in" == "query" || "formData" type ParamProps struct { Description string `json:"description,omitempty"` Name string `json:"name,omitempty"` In string `json:"in,omitempty"` Required bool `json:"required,omitempty"` - Schema *Schema `json:"schema,omitempty"` - AllowEmptyValue bool `json:"allowEmptyValue,omitempty"` + Schema *Schema `json:"schema,omitempty"` // when in == "body" + AllowEmptyValue bool `json:"allowEmptyValue,omitempty"` // when in == "query" || "formData" } // Parameter a unique parameter is defined by a combination of a [name](#parameterName) and [location](#parameterIn). // // There are five possible parameter types. -// * Path - Used together with [Path Templating](#pathTemplating), where the parameter value is actually part -// of the operation's URL. This does not include the host or base path of the API. For example, in `/items/{itemId}`, -// the path parameter is `itemId`. +// * Path - Used together with [Path Templating](#pathTemplating), where the parameter value is actually part of the operation's URL. This does not include the host or base path of the API. For example, in `/items/{itemId}`, the path parameter is `itemId`. // * Query - Parameters that are appended to the URL. For example, in `/items?id=###`, the query parameter is `id`. // * Header - Custom headers that are expected as part of the request. -// * Body - The payload that's appended to the HTTP request. Since there can only be one payload, there can only be -// _one_ body parameter. The name of the body parameter has no effect on the parameter itself and is used for -// documentation purposes only. Since Form parameters are also in the payload, body and form parameters cannot exist -// together for the same operation. -// * Form - Used to describe the payload of an HTTP request when either `application/x-www-form-urlencoded` or -// `multipart/form-data` are used as the content type of the request (in Swagger's definition, -// the [`consumes`](#operationConsumes) property of an operation). This is the only parameter type that can be used -// to send files, thus supporting the `file` type. Since form parameters are sent in the payload, they cannot be -// declared together with a body parameter for the same operation. Form parameters have a different format based on -// the content-type used (for further details, consult http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4). -// * `application/x-www-form-urlencoded` - Similar to the format of Query parameters but as a payload. -// For example, `foo=1&bar=swagger` - both `foo` and `bar` are form parameters. This is normally used for simple -// parameters that are being transferred. -// * `multipart/form-data` - each parameter takes a section in the payload with an internal header. -// For example, for the header `Content-Disposition: form-data; name="submit-name"` the name of the parameter is -// `submit-name`. This type of form parameters is more commonly used for file transfers. +// * Body - The payload that's appended to the HTTP request. Since there can only be one payload, there can only be *one* body parameter. The name of the body parameter has no effect on the parameter itself and is used for documentation purposes only. Since Form parameters are also in the payload, body and form parameters cannot exist together for the same operation. +// * Form - Used to describe the payload of an HTTP request when either `application/x-www-form-urlencoded` or `multipart/form-data` are used as the content type of the request (in Swagger's definition, the [`consumes`](#operationConsumes) property of an operation). This is the only parameter type that can be used to send files, thus supporting the `file` type. Since form parameters are sent in the payload, they cannot be declared together with a body parameter for the same operation. Form parameters have a different format based on the content-type used (for further details, consult http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4): +// * `application/x-www-form-urlencoded` - Similar to the format of Query parameters but as a payload. For example, `foo=1&bar=swagger` - both `foo` and `bar` are form parameters. This is normally used for simple parameters that are being transferred. +// * `multipart/form-data` - each parameter takes a section in the payload with an internal header. For example, for the header `Content-Disposition: form-data; name="submit-name"` the name of the parameter is `submit-name`. This type of form parameters is more commonly used for file transfers. // // For more information: http://goo.gl/8us55a#parameterObject type Parameter struct { @@ -121,7 +99,7 @@ func (p Parameter) JSONLookup(token string) (interface{}, error) { if ex, ok := p.Extensions[token]; ok { return &ex, nil } - if token == jsonRef { + if token == "$ref" { return &p.Ref, nil } @@ -170,7 +148,7 @@ func (p *Parameter) Typed(tpe, format string) *Parameter { // CollectionOf a fluent builder method for an array parameter func (p *Parameter) CollectionOf(items *Items, format string) *Parameter { - p.Type = jsonArray + p.Type = "array" p.Items = items p.CollectionFormat = format return p @@ -292,7 +270,10 @@ func (p *Parameter) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, &p.VendorExtensible); err != nil { return err } - return json.Unmarshal(data, &p.ParamProps) + if err := json.Unmarshal(data, &p.ParamProps); err != nil { + return err + } + return nil } // MarshalJSON converts this items object to JSON diff --git a/vendor/github.com/go-openapi/spec/path_item.go b/vendor/github.com/go-openapi/spec/path_item.go index 68fc8e9014..a8ae63ece5 100644 --- a/vendor/github.com/go-openapi/spec/path_item.go +++ b/vendor/github.com/go-openapi/spec/path_item.go @@ -50,7 +50,7 @@ func (p PathItem) JSONLookup(token string) (interface{}, error) { if ex, ok := p.Extensions[token]; ok { return &ex, nil } - if token == jsonRef { + if token == "$ref" { return &p.Ref, nil } r, _, err := jsonpointer.GetForToken(p.PathItemProps, token) @@ -65,7 +65,10 @@ func (p *PathItem) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, &p.VendorExtensible); err != nil { return err } - return json.Unmarshal(data, &p.PathItemProps) + if err := json.Unmarshal(data, &p.PathItemProps); err != nil { + return err + } + return nil } // MarshalJSON converts this items object to JSON diff --git a/vendor/github.com/go-openapi/spec/ref.go b/vendor/github.com/go-openapi/spec/ref.go index 08ff869b2f..1405bfd8ee 100644 --- a/vendor/github.com/go-openapi/spec/ref.go +++ b/vendor/github.com/go-openapi/spec/ref.go @@ -15,8 +15,6 @@ package spec import ( - "bytes" - "encoding/gob" "encoding/json" "net/http" "os" @@ -150,28 +148,6 @@ func (r *Ref) UnmarshalJSON(d []byte) error { return r.fromMap(v) } -// GobEncode provides a safe gob encoder for Ref -func (r Ref) GobEncode() ([]byte, error) { - var b bytes.Buffer - raw, err := r.MarshalJSON() - if err != nil { - return nil, err - } - err = gob.NewEncoder(&b).Encode(raw) - return b.Bytes(), err -} - -// GobDecode provides a safe gob decoder for Ref -func (r *Ref) GobDecode(b []byte) error { - var raw []byte - buf := bytes.NewBuffer(b) - err := gob.NewDecoder(buf).Decode(&raw) - if err != nil { - return err - } - return json.Unmarshal(raw, r) -} - func (r *Ref) fromMap(v map[string]interface{}) error { if v == nil { return nil diff --git a/vendor/github.com/go-openapi/spec/response.go b/vendor/github.com/go-openapi/spec/response.go index 27729c1d93..586db0d780 100644 --- a/vendor/github.com/go-openapi/spec/response.go +++ b/vendor/github.com/go-openapi/spec/response.go @@ -58,7 +58,10 @@ func (r *Response) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, &r.Refable); err != nil { return err } - return json.Unmarshal(data, &r.VendorExtensible) + if err := json.Unmarshal(data, &r.VendorExtensible); err != nil { + return err + } + return nil } // MarshalJSON converts this items object to JSON diff --git a/vendor/github.com/go-openapi/spec/schema.go b/vendor/github.com/go-openapi/spec/schema.go index 37858ece90..b9481e29bc 100644 --- a/vendor/github.com/go-openapi/spec/schema.go +++ b/vendor/github.com/go-openapi/spec/schema.go @@ -89,8 +89,7 @@ func DateTimeProperty() *Schema { // MapProperty creates a map property func MapProperty(property *Schema) *Schema { - return &Schema{SchemaProps: SchemaProps{Type: []string{"object"}, - AdditionalProperties: &SchemaOrBool{Allows: true, Schema: property}}} + return &Schema{SchemaProps: SchemaProps{Type: []string{"object"}, AdditionalProperties: &SchemaOrBool{Allows: true, Schema: property}}} } // RefProperty creates a ref property @@ -156,6 +155,54 @@ func (r *SchemaURL) fromMap(v map[string]interface{}) error { return nil } +// type ExtraSchemaProps map[string]interface{} + +// // JSONSchema represents a structure that is a json schema draft 04 +// type JSONSchema struct { +// SchemaProps +// ExtraSchemaProps +// } + +// // MarshalJSON marshal this to JSON +// func (s JSONSchema) MarshalJSON() ([]byte, error) { +// b1, err := json.Marshal(s.SchemaProps) +// if err != nil { +// return nil, err +// } +// b2, err := s.Ref.MarshalJSON() +// if err != nil { +// return nil, err +// } +// b3, err := s.Schema.MarshalJSON() +// if err != nil { +// return nil, err +// } +// b4, err := json.Marshal(s.ExtraSchemaProps) +// if err != nil { +// return nil, err +// } +// return swag.ConcatJSON(b1, b2, b3, b4), nil +// } + +// // UnmarshalJSON marshal this from JSON +// func (s *JSONSchema) UnmarshalJSON(data []byte) error { +// var sch JSONSchema +// if err := json.Unmarshal(data, &sch.SchemaProps); err != nil { +// return err +// } +// if err := json.Unmarshal(data, &sch.Ref); err != nil { +// return err +// } +// if err := json.Unmarshal(data, &sch.Schema); err != nil { +// return err +// } +// if err := json.Unmarshal(data, &sch.ExtraSchemaProps); err != nil { +// return err +// } +// *s = sch +// return nil +// } + // SchemaProps describes a JSON schema (draft 4) type SchemaProps struct { ID string `json:"id,omitempty"` @@ -163,7 +210,6 @@ type SchemaProps struct { Schema SchemaURL `json:"-"` Description string `json:"description,omitempty"` Type StringOrArray `json:"type,omitempty"` - Nullable bool `json:"nullable,omitempty"` Format string `json:"format,omitempty"` Title string `json:"title,omitempty"` Default interface{} `json:"default,omitempty"` @@ -303,15 +349,9 @@ func (s *Schema) AddType(tpe, format string) *Schema { return s } -// AsNullable flags this schema as nullable. -func (s *Schema) AsNullable() *Schema { - s.Nullable = true - return s -} - // CollectionOf a fluent builder method for an array parameter func (s *Schema) CollectionOf(items Schema) *Schema { - s.Type = []string{jsonArray} + s.Type = []string{"array"} s.Items = &SchemaOrArray{Schema: &items} return s } diff --git a/vendor/github.com/go-openapi/spec/schema_loader.go b/vendor/github.com/go-openapi/spec/schema_loader.go deleted file mode 100644 index c34a96fa04..0000000000 --- a/vendor/github.com/go-openapi/spec/schema_loader.go +++ /dev/null @@ -1,275 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// 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 spec - -import ( - "encoding/json" - "fmt" - "log" - "net/url" - "reflect" - "strings" - - "github.com/go-openapi/swag" -) - -// PathLoader function to use when loading remote refs -var PathLoader func(string) (json.RawMessage, error) - -func init() { - PathLoader = func(path string) (json.RawMessage, error) { - data, err := swag.LoadFromFileOrHTTP(path) - if err != nil { - return nil, err - } - return json.RawMessage(data), nil - } -} - -// resolverContext allows to share a context during spec processing. -// At the moment, it just holds the index of circular references found. -type resolverContext struct { - // circulars holds all visited circular references, which allows shortcuts. - // NOTE: this is not just a performance improvement: it is required to figure out - // circular references which participate several cycles. - // This structure is privately instantiated and needs not be locked against - // concurrent access, unless we chose to implement a parallel spec walking. - circulars map[string]bool - basePath string -} - -func newResolverContext(originalBasePath string) *resolverContext { - return &resolverContext{ - circulars: make(map[string]bool), - basePath: originalBasePath, // keep the root base path in context - } -} - -type schemaLoader struct { - root interface{} - options *ExpandOptions - cache ResolutionCache - context *resolverContext - loadDoc func(string) (json.RawMessage, error) -} - -func (r *schemaLoader) transitiveResolver(basePath string, ref Ref) (*schemaLoader, error) { - if ref.IsRoot() || ref.HasFragmentOnly { - return r, nil - } - - baseRef, _ := NewRef(basePath) - currentRef := normalizeFileRef(&ref, basePath) - if strings.HasPrefix(currentRef.String(), baseRef.String()) { - return r, nil - } - - // Set a new root to resolve against - rootURL := currentRef.GetURL() - rootURL.Fragment = "" - root, _ := r.cache.Get(rootURL.String()) - - // shallow copy of resolver options to set a new RelativeBase when - // traversing multiple documents - newOptions := r.options - newOptions.RelativeBase = rootURL.String() - debugLog("setting new root: %s", newOptions.RelativeBase) - resolver, err := defaultSchemaLoader(root, newOptions, r.cache, r.context) - if err != nil { - return nil, err - } - - return resolver, nil -} - -func (r *schemaLoader) updateBasePath(transitive *schemaLoader, basePath string) string { - if transitive != r { - debugLog("got a new resolver") - if transitive.options != nil && transitive.options.RelativeBase != "" { - basePath, _ = absPath(transitive.options.RelativeBase) - debugLog("new basePath = %s", basePath) - } - } - return basePath -} - -func (r *schemaLoader) resolveRef(ref *Ref, target interface{}, basePath string) error { - tgt := reflect.ValueOf(target) - if tgt.Kind() != reflect.Ptr { - return fmt.Errorf("resolve ref: target needs to be a pointer") - } - - refURL := ref.GetURL() - if refURL == nil { - return nil - } - - var res interface{} - var data interface{} - var err error - // Resolve against the root if it isn't nil, and if ref is pointing at the root, or has a fragment only which means - // it is pointing somewhere in the root. - root := r.root - if (ref.IsRoot() || ref.HasFragmentOnly) && root == nil && basePath != "" { - if baseRef, erb := NewRef(basePath); erb == nil { - root, _, _, _ = r.load(baseRef.GetURL()) - } - } - if (ref.IsRoot() || ref.HasFragmentOnly) && root != nil { - data = root - } else { - baseRef := normalizeFileRef(ref, basePath) - debugLog("current ref is: %s", ref.String()) - debugLog("current ref normalized file: %s", baseRef.String()) - data, _, _, err = r.load(baseRef.GetURL()) - if err != nil { - return err - } - } - - res = data - if ref.String() != "" { - res, _, err = ref.GetPointer().Get(data) - if err != nil { - return err - } - } - return swag.DynamicJSONToStruct(res, target) -} - -func (r *schemaLoader) load(refURL *url.URL) (interface{}, url.URL, bool, error) { - debugLog("loading schema from url: %s", refURL) - toFetch := *refURL - toFetch.Fragment = "" - - normalized := normalizeAbsPath(toFetch.String()) - - data, fromCache := r.cache.Get(normalized) - if !fromCache { - b, err := r.loadDoc(normalized) - if err != nil { - return nil, url.URL{}, false, err - } - - if err := json.Unmarshal(b, &data); err != nil { - return nil, url.URL{}, false, err - } - r.cache.Set(normalized, data) - } - - return data, toFetch, fromCache, nil -} - -// isCircular detects cycles in sequences of $ref. -// It relies on a private context (which needs not be locked). -func (r *schemaLoader) isCircular(ref *Ref, basePath string, parentRefs ...string) (foundCycle bool) { - normalizedRef := normalizePaths(ref.String(), basePath) - if _, ok := r.context.circulars[normalizedRef]; ok { - // circular $ref has been already detected in another explored cycle - foundCycle = true - return - } - foundCycle = swag.ContainsStringsCI(parentRefs, normalizedRef) - if foundCycle { - r.context.circulars[normalizedRef] = true - } - return -} - -// Resolve resolves a reference against basePath and stores the result in target -// Resolve is not in charge of following references, it only resolves ref by following its URL -// if the schema that ref is referring to has more refs in it. Resolve doesn't resolve them -// if basePath is an empty string, ref is resolved against the root schema stored in the schemaLoader struct -func (r *schemaLoader) Resolve(ref *Ref, target interface{}, basePath string) error { - return r.resolveRef(ref, target, basePath) -} - -func (r *schemaLoader) deref(input interface{}, parentRefs []string, basePath string) error { - var ref *Ref - switch refable := input.(type) { - case *Schema: - ref = &refable.Ref - case *Parameter: - ref = &refable.Ref - case *Response: - ref = &refable.Ref - case *PathItem: - ref = &refable.Ref - default: - return fmt.Errorf("deref: unsupported type %T", input) - } - - curRef := ref.String() - if curRef != "" { - normalizedRef := normalizeFileRef(ref, basePath) - normalizedBasePath := normalizedRef.RemoteURI() - - if r.isCircular(normalizedRef, basePath, parentRefs...) { - return nil - } - - if err := r.resolveRef(ref, input, basePath); r.shouldStopOnError(err) { - return err - } - - // NOTE(fredbi): removed basePath check => needs more testing - if ref.String() != "" && ref.String() != curRef { - parentRefs = append(parentRefs, normalizedRef.String()) - return r.deref(input, parentRefs, normalizedBasePath) - } - } - - return nil -} - -func (r *schemaLoader) shouldStopOnError(err error) bool { - if err != nil && !r.options.ContinueOnError { - return true - } - - if err != nil { - log.Println(err) - } - - return false -} - -func defaultSchemaLoader( - root interface{}, - expandOptions *ExpandOptions, - cache ResolutionCache, - context *resolverContext) (*schemaLoader, error) { - - if cache == nil { - cache = resCache - } - if expandOptions == nil { - expandOptions = &ExpandOptions{} - } - absBase, _ := absPath(expandOptions.RelativeBase) - if context == nil { - context = newResolverContext(absBase) - } - return &schemaLoader{ - root: root, - options: expandOptions, - cache: cache, - context: context, - loadDoc: func(path string) (json.RawMessage, error) { - debugLog("fetching document at %q", path) - return PathLoader(path) - }, - }, nil -} diff --git a/vendor/github.com/go-openapi/spec/security_scheme.go b/vendor/github.com/go-openapi/spec/security_scheme.go index fe353842a6..9f1b454eac 100644 --- a/vendor/github.com/go-openapi/spec/security_scheme.go +++ b/vendor/github.com/go-openapi/spec/security_scheme.go @@ -136,5 +136,8 @@ func (s *SecurityScheme) UnmarshalJSON(data []byte) error { if err := json.Unmarshal(data, &s.SecuritySchemeProps); err != nil { return err } - return json.Unmarshal(data, &s.VendorExtensible) + if err := json.Unmarshal(data, &s.VendorExtensible); err != nil { + return err + } + return nil } diff --git a/vendor/github.com/go-openapi/spec/swagger.go b/vendor/github.com/go-openapi/spec/swagger.go index 44722ffd5a..4586a21c86 100644 --- a/vendor/github.com/go-openapi/spec/swagger.go +++ b/vendor/github.com/go-openapi/spec/swagger.go @@ -15,8 +15,6 @@ package spec import ( - "bytes" - "encoding/gob" "encoding/json" "fmt" "strconv" @@ -26,8 +24,7 @@ import ( ) // Swagger this is the root document object for the API specification. -// It combines what previously was the Resource Listing and API Declaration (version 1.2 and earlier) -// together into one document. +// It combines what previously was the Resource Listing and API Declaration (version 1.2 and earlier) together into one document. // // For more information: http://goo.gl/8us55a#swagger-object- type Swagger struct { @@ -70,52 +67,17 @@ func (s *Swagger) UnmarshalJSON(data []byte) error { return nil } -// GobEncode provides a safe gob encoder for Swagger, including extensions -func (s Swagger) GobEncode() ([]byte, error) { - var b bytes.Buffer - raw := struct { - Props SwaggerProps - Ext VendorExtensible - }{ - Props: s.SwaggerProps, - Ext: s.VendorExtensible, - } - err := gob.NewEncoder(&b).Encode(raw) - return b.Bytes(), err -} - -// GobDecode provides a safe gob decoder for Swagger, including extensions -func (s *Swagger) GobDecode(b []byte) error { - var raw struct { - Props SwaggerProps - Ext VendorExtensible - } - buf := bytes.NewBuffer(b) - err := gob.NewDecoder(buf).Decode(&raw) - if err != nil { - return err - } - s.SwaggerProps = raw.Props - s.VendorExtensible = raw.Ext - return nil -} - // SwaggerProps captures the top-level properties of an Api specification -// -// NOTE: validation rules -// - the scheme, when present must be from [http, https, ws, wss] -// - BasePath must start with a leading "/" -// - Paths is required type SwaggerProps struct { ID string `json:"id,omitempty"` Consumes []string `json:"consumes,omitempty"` Produces []string `json:"produces,omitempty"` - Schemes []string `json:"schemes,omitempty"` + Schemes []string `json:"schemes,omitempty"` // the scheme, when present must be from [http, https, ws, wss] Swagger string `json:"swagger,omitempty"` Info *Info `json:"info,omitempty"` Host string `json:"host,omitempty"` - BasePath string `json:"basePath,omitempty"` - Paths *Paths `json:"paths"` + BasePath string `json:"basePath,omitempty"` // must start with a leading "/" + Paths *Paths `json:"paths"` // required Definitions Definitions `json:"definitions,omitempty"` Parameters map[string]Parameter `json:"parameters,omitempty"` Responses map[string]Response `json:"responses,omitempty"` @@ -125,98 +87,6 @@ type SwaggerProps struct { ExternalDocs *ExternalDocumentation `json:"externalDocs,omitempty"` } -type swaggerPropsAlias SwaggerProps - -type gobSwaggerPropsAlias struct { - Security []map[string]struct { - List []string - Pad bool - } - Alias *swaggerPropsAlias - SecurityIsEmpty bool -} - -// GobEncode provides a safe gob encoder for SwaggerProps, including empty security requirements -func (o SwaggerProps) GobEncode() ([]byte, error) { - raw := gobSwaggerPropsAlias{ - Alias: (*swaggerPropsAlias)(&o), - } - - var b bytes.Buffer - if o.Security == nil { - // nil security requirement - err := gob.NewEncoder(&b).Encode(raw) - return b.Bytes(), err - } - - if len(o.Security) == 0 { - // empty, but non-nil security requirement - raw.SecurityIsEmpty = true - raw.Alias.Security = nil - err := gob.NewEncoder(&b).Encode(raw) - return b.Bytes(), err - } - - raw.Security = make([]map[string]struct { - List []string - Pad bool - }, 0, len(o.Security)) - for _, req := range o.Security { - v := make(map[string]struct { - List []string - Pad bool - }, len(req)) - for k, val := range req { - v[k] = struct { - List []string - Pad bool - }{ - List: val, - } - } - raw.Security = append(raw.Security, v) - } - - err := gob.NewEncoder(&b).Encode(raw) - return b.Bytes(), err -} - -// GobDecode provides a safe gob decoder for SwaggerProps, including empty security requirements -func (o *SwaggerProps) GobDecode(b []byte) error { - var raw gobSwaggerPropsAlias - - buf := bytes.NewBuffer(b) - err := gob.NewDecoder(buf).Decode(&raw) - if err != nil { - return err - } - if raw.Alias == nil { - return nil - } - - switch { - case raw.SecurityIsEmpty: - // empty, but non-nil security requirement - raw.Alias.Security = []map[string][]string{} - case len(raw.Alias.Security) == 0: - // nil security requirement - raw.Alias.Security = nil - default: - raw.Alias.Security = make([]map[string][]string, 0, len(raw.Security)) - for _, req := range raw.Security { - v := make(map[string][]string, len(req)) - for k, val := range req { - v[k] = make([]string, 0, len(val.List)) - v[k] = append(v[k], val.List...) - } - raw.Alias.Security = append(raw.Alias.Security, v) - } - } - - *o = *(*SwaggerProps)(raw.Alias) - return nil -} - // Dependencies represent a dependencies property type Dependencies map[string]SchemaOrStringArray @@ -374,9 +244,9 @@ func (s *StringOrArray) UnmarshalJSON(data []byte) error { if single == nil { return nil } - switch v := single.(type) { + switch single.(type) { case string: - *s = StringOrArray([]string{v}) + *s = StringOrArray([]string{single.(string)}) return nil default: return fmt.Errorf("only string or array is allowed, not %T", single) diff --git a/vendor/github.com/go-openapi/spec/tag.go b/vendor/github.com/go-openapi/spec/tag.go index faa3d3de1e..25256c4bec 100644 --- a/vendor/github.com/go-openapi/spec/tag.go +++ b/vendor/github.com/go-openapi/spec/tag.go @@ -30,11 +30,10 @@ type TagProps struct { // NewTag creates a new tag func NewTag(name, description string, externalDocs *ExternalDocumentation) Tag { - return Tag{TagProps: TagProps{Description: description, Name: name, ExternalDocs: externalDocs}} + return Tag{TagProps: TagProps{description, name, externalDocs}} } -// Tag allows adding meta data to a single tag that is used by the -// [Operation Object](http://goo.gl/8us55a#operationObject). +// Tag allows adding meta data to a single tag that is used by the [Operation Object](http://goo.gl/8us55a#operationObject). // It is not mandatory to have a Tag Object per tag used there. // // For more information: http://goo.gl/8us55a#tagObject diff --git a/vendor/github.com/go-openapi/spec/unused.go b/vendor/github.com/go-openapi/spec/unused.go deleted file mode 100644 index aa12b56f6e..0000000000 --- a/vendor/github.com/go-openapi/spec/unused.go +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// 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 spec - -/* - -import ( - "net/url" - "os" - "path" - "path/filepath" - - "github.com/go-openapi/jsonpointer" -) - - // Some currently unused functions and definitions that - // used to be part of the expander. - - // Moved here for the record and possible future reuse - -var ( - idPtr, _ = jsonpointer.New("/id") - refPtr, _ = jsonpointer.New("/$ref") -) - -func idFromNode(node interface{}) (*Ref, error) { - if idValue, _, err := idPtr.Get(node); err == nil { - if refStr, ok := idValue.(string); ok && refStr != "" { - idRef, err := NewRef(refStr) - if err != nil { - return nil, err - } - return &idRef, nil - } - } - return nil, nil -} - -func nextRef(startingNode interface{}, startingRef *Ref, ptr *jsonpointer.Pointer) *Ref { - if startingRef == nil { - return nil - } - - if ptr == nil { - return startingRef - } - - ret := startingRef - var idRef *Ref - node := startingNode - - for _, tok := range ptr.DecodedTokens() { - node, _, _ = jsonpointer.GetForToken(node, tok) - if node == nil { - break - } - - idRef, _ = idFromNode(node) - if idRef != nil { - nw, err := ret.Inherits(*idRef) - if err != nil { - break - } - ret = nw - } - - refRef, _, _ := refPtr.Get(node) - if refRef != nil { - var rf Ref - switch value := refRef.(type) { - case string: - rf, _ = NewRef(value) - } - nw, err := ret.Inherits(rf) - if err != nil { - break - } - nwURL := nw.GetURL() - if nwURL.Scheme == "file" || (nwURL.Scheme == "" && nwURL.Host == "") { - nwpt := filepath.ToSlash(nwURL.Path) - if filepath.IsAbs(nwpt) { - _, err := os.Stat(nwpt) - if err != nil { - nwURL.Path = filepath.Join(".", nwpt) - } - } - } - - ret = nw - } - - } - - return ret -} - -// basePathFromSchemaID returns a new basePath based on an existing basePath and a schema ID -func basePathFromSchemaID(oldBasePath, id string) string { - u, err := url.Parse(oldBasePath) - if err != nil { - panic(err) - } - uid, err := url.Parse(id) - if err != nil { - panic(err) - } - - if path.IsAbs(uid.Path) { - return id - } - u.Path = path.Join(path.Dir(u.Path), uid.Path) - return u.String() -} -*/ - -// type ExtraSchemaProps map[string]interface{} - -// // JSONSchema represents a structure that is a json schema draft 04 -// type JSONSchema struct { -// SchemaProps -// ExtraSchemaProps -// } - -// // MarshalJSON marshal this to JSON -// func (s JSONSchema) MarshalJSON() ([]byte, error) { -// b1, err := json.Marshal(s.SchemaProps) -// if err != nil { -// return nil, err -// } -// b2, err := s.Ref.MarshalJSON() -// if err != nil { -// return nil, err -// } -// b3, err := s.Schema.MarshalJSON() -// if err != nil { -// return nil, err -// } -// b4, err := json.Marshal(s.ExtraSchemaProps) -// if err != nil { -// return nil, err -// } -// return swag.ConcatJSON(b1, b2, b3, b4), nil -// } - -// // UnmarshalJSON marshal this from JSON -// func (s *JSONSchema) UnmarshalJSON(data []byte) error { -// var sch JSONSchema -// if err := json.Unmarshal(data, &sch.SchemaProps); err != nil { -// return err -// } -// if err := json.Unmarshal(data, &sch.Ref); err != nil { -// return err -// } -// if err := json.Unmarshal(data, &sch.Schema); err != nil { -// return err -// } -// if err := json.Unmarshal(data, &sch.ExtraSchemaProps); err != nil { -// return err -// } -// *s = sch -// return nil -// } diff --git a/vendor/github.com/go-openapi/swag/.travis.yml b/vendor/github.com/go-openapi/swag/.travis.yml index aa26d8763a..bd3a2e527d 100644 --- a/vendor/github.com/go-openapi/swag/.travis.yml +++ b/vendor/github.com/go-openapi/swag/.travis.yml @@ -1,15 +1,16 @@ after_success: - bash <(curl -s https://codecov.io/bash) go: +- '1.9' +- 1.10.x - 1.11.x -- 1.12.x install: -- GO111MODULE=off go get -u gotest.tools/gotestsum -env: -- GO111MODULE=on +- go get -u github.com/stretchr/testify +- go get -u github.com/mailru/easyjson +- go get -u gopkg.in/yaml.v2 language: go notifications: slack: secure: QUWvCkBBK09GF7YtEvHHVt70JOkdlNBG0nIKu/5qc4/nW5HP8I2w0SEf/XR2je0eED1Qe3L/AfMCWwrEj+IUZc3l4v+ju8X8R3Lomhme0Eb0jd1MTMCuPcBT47YCj0M7RON7vXtbFfm1hFJ/jLe5+9FXz0hpXsR24PJc5ZIi/ogNwkaPqG4BmndzecpSh0vc2FJPZUD9LT0I09REY/vXR0oQAalLkW0asGD5taHZTUZq/kBpsNxaAFrLM23i4mUcf33M5fjLpvx5LRICrX/57XpBrDh2TooBU6Qj3CgoY0uPRYUmSNxbVx1czNzl2JtEpb5yjoxfVPQeg0BvQM00G8LJINISR+ohrjhkZmAqchDupAX+yFrxTtORa78CtnIL6z/aTNlgwwVD8kvL/1pFA/JWYmKDmz93mV/+6wubGzNSQCstzjkFA4/iZEKewKUoRIAi/fxyscP6L/rCpmY/4llZZvrnyTqVbt6URWpopUpH4rwYqreXAtJxJsfBJIeSmUIiDIOMGkCTvyTEW3fWGmGoqWtSHLoaWDyAIGb7azb+KvfpWtEcoPFWfSWU+LGee0A/YsUhBl7ADB9A0CJEuR8q4BPpKpfLwPKSiKSAXL7zDkyjExyhtgqbSl2jS+rKIHOZNL8JkCcTP2MKMVd563C5rC5FMKqu3S9m2b6380E= script: -- gotestsum -f short-verbose -- -race -coverprofile=coverage.txt -covermode=atomic ./... +- go test -v -race -cover -coverprofile=coverage.txt -covermode=atomic ./... diff --git a/vendor/github.com/go-openapi/swag/README.md b/vendor/github.com/go-openapi/swag/README.md index eb60ae80ab..459a3e18d7 100644 --- a/vendor/github.com/go-openapi/swag/README.md +++ b/vendor/github.com/go-openapi/swag/README.md @@ -19,4 +19,5 @@ You may also use it standalone for your projects. This repo has only few dependencies outside of the standard library: +* JSON utilities depend on github.com/mailru/easyjson * YAML utilities depend on gopkg.in/yaml.v2 diff --git a/vendor/github.com/go-openapi/swag/doc.go b/vendor/github.com/go-openapi/swag/doc.go index 8d2c8c5014..e01e1a0234 100644 --- a/vendor/github.com/go-openapi/swag/doc.go +++ b/vendor/github.com/go-openapi/swag/doc.go @@ -27,6 +27,7 @@ You may also use it standalone for your projects. This repo has only few dependencies outside of the standard library: + * JSON utilities depend on github.com/mailru/easyjson * YAML utilities depend on gopkg.in/yaml.v2 */ package swag diff --git a/vendor/github.com/go-openapi/swag/go.mod b/vendor/github.com/go-openapi/swag/go.mod index 15bbb08222..9eb936a19b 100644 --- a/vendor/github.com/go-openapi/swag/go.mod +++ b/vendor/github.com/go-openapi/swag/go.mod @@ -2,13 +2,8 @@ module github.com/go-openapi/swag require ( github.com/davecgh/go-spew v1.1.1 // indirect - github.com/kr/pretty v0.1.0 // indirect - github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 - github.com/stretchr/testify v1.3.0 - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect - gopkg.in/yaml.v2 v2.2.2 + github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/stretchr/testify v1.2.2 + gopkg.in/yaml.v2 v2.2.1 ) - -replace github.com/golang/lint => golang.org/x/lint v0.0.0-20190409202823-959b441ac422 - -replace sourcegraph.com/sourcegraph/go-diff => github.com/sourcegraph/go-diff v0.5.1 diff --git a/vendor/github.com/go-openapi/swag/go.sum b/vendor/github.com/go-openapi/swag/go.sum index 33469f54ac..d6e717bd4e 100644 --- a/vendor/github.com/go-openapi/swag/go.sum +++ b/vendor/github.com/go-openapi/swag/go.sum @@ -1,20 +1,9 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 h1:nTT4s92Dgz2HlrB2NaMgvlfqHH39OgMhA7z3PK7PGD4= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= +github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/go-openapi/swag/name_lexem.go b/vendor/github.com/go-openapi/swag/name_lexem.go deleted file mode 100644 index aa7f6a9bb8..0000000000 --- a/vendor/github.com/go-openapi/swag/name_lexem.go +++ /dev/null @@ -1,87 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// 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 swag - -import "unicode" - -type ( - nameLexem interface { - GetUnsafeGoName() string - GetOriginal() string - IsInitialism() bool - } - - initialismNameLexem struct { - original string - matchedInitialism string - } - - casualNameLexem struct { - original string - } -) - -func newInitialismNameLexem(original, matchedInitialism string) *initialismNameLexem { - return &initialismNameLexem{ - original: original, - matchedInitialism: matchedInitialism, - } -} - -func newCasualNameLexem(original string) *casualNameLexem { - return &casualNameLexem{ - original: original, - } -} - -func (l *initialismNameLexem) GetUnsafeGoName() string { - return l.matchedInitialism -} - -func (l *casualNameLexem) GetUnsafeGoName() string { - var first rune - var rest string - for i, orig := range l.original { - if i == 0 { - first = orig - continue - } - if i > 0 { - rest = l.original[i:] - break - } - } - if len(l.original) > 1 { - return string(unicode.ToUpper(first)) + lower(rest) - } - - return l.original -} - -func (l *initialismNameLexem) GetOriginal() string { - return l.original -} - -func (l *casualNameLexem) GetOriginal() string { - return l.original -} - -func (l *initialismNameLexem) IsInitialism() bool { - return true -} - -func (l *casualNameLexem) IsInitialism() bool { - return false -} diff --git a/vendor/github.com/go-openapi/swag/split.go b/vendor/github.com/go-openapi/swag/split.go deleted file mode 100644 index a1825fb7dc..0000000000 --- a/vendor/github.com/go-openapi/swag/split.go +++ /dev/null @@ -1,262 +0,0 @@ -// Copyright 2015 go-swagger maintainers -// -// 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 swag - -import ( - "unicode" -) - -var nameReplaceTable = map[rune]string{ - '@': "At ", - '&': "And ", - '|': "Pipe ", - '$': "Dollar ", - '!': "Bang ", - '-': "", - '_': "", -} - -type ( - splitter struct { - postSplitInitialismCheck bool - initialisms []string - } - - splitterOption func(*splitter) *splitter -) - -// split calls the splitter; splitter provides more control and post options -func split(str string) []string { - lexems := newSplitter().split(str) - result := make([]string, 0, len(lexems)) - - for _, lexem := range lexems { - result = append(result, lexem.GetOriginal()) - } - - return result - -} - -func (s *splitter) split(str string) []nameLexem { - return s.toNameLexems(str) -} - -func newSplitter(options ...splitterOption) *splitter { - splitter := &splitter{ - postSplitInitialismCheck: false, - initialisms: initialisms, - } - - for _, option := range options { - splitter = option(splitter) - } - - return splitter -} - -// withPostSplitInitialismCheck allows to catch initialisms after main split process -func withPostSplitInitialismCheck(s *splitter) *splitter { - s.postSplitInitialismCheck = true - return s -} - -type ( - initialismMatch struct { - start, end int - body []rune - complete bool - } - initialismMatches []*initialismMatch -) - -func (s *splitter) toNameLexems(name string) []nameLexem { - nameRunes := []rune(name) - matches := s.gatherInitialismMatches(nameRunes) - return s.mapMatchesToNameLexems(nameRunes, matches) -} - -func (s *splitter) gatherInitialismMatches(nameRunes []rune) initialismMatches { - matches := make(initialismMatches, 0) - - for currentRunePosition, currentRune := range nameRunes { - newMatches := make(initialismMatches, 0, len(matches)) - - // check current initialism matches - for _, match := range matches { - if keepCompleteMatch := match.complete; keepCompleteMatch { - newMatches = append(newMatches, match) - continue - } - - // drop failed match - currentMatchRune := match.body[currentRunePosition-match.start] - if !s.initialismRuneEqual(currentMatchRune, currentRune) { - continue - } - - // try to complete ongoing match - if currentRunePosition-match.start == len(match.body)-1 { - // we are close; the next step is to check the symbol ahead - // if it is a small letter, then it is not the end of match - // but beginning of the next word - - if currentRunePosition < len(nameRunes)-1 { - nextRune := nameRunes[currentRunePosition+1] - if newWord := unicode.IsLower(nextRune); newWord { - // oh ok, it was the start of a new word - continue - } - } - - match.complete = true - match.end = currentRunePosition - } - - newMatches = append(newMatches, match) - } - - // check for new initialism matches - for _, initialism := range s.initialisms { - initialismRunes := []rune(initialism) - if s.initialismRuneEqual(initialismRunes[0], currentRune) { - newMatches = append(newMatches, &initialismMatch{ - start: currentRunePosition, - body: initialismRunes, - complete: false, - }) - } - } - - matches = newMatches - } - - return matches -} - -func (s *splitter) mapMatchesToNameLexems(nameRunes []rune, matches initialismMatches) []nameLexem { - nameLexems := make([]nameLexem, 0) - - var lastAcceptedMatch *initialismMatch - for _, match := range matches { - if !match.complete { - continue - } - - if firstMatch := lastAcceptedMatch == nil; firstMatch { - nameLexems = append(nameLexems, s.breakCasualString(nameRunes[:match.start])...) - nameLexems = append(nameLexems, s.breakInitialism(string(match.body))) - - lastAcceptedMatch = match - - continue - } - - if overlappedMatch := match.start <= lastAcceptedMatch.end; overlappedMatch { - continue - } - - middle := nameRunes[lastAcceptedMatch.end+1 : match.start] - nameLexems = append(nameLexems, s.breakCasualString(middle)...) - nameLexems = append(nameLexems, s.breakInitialism(string(match.body))) - - lastAcceptedMatch = match - } - - // we have not found any accepted matches - if lastAcceptedMatch == nil { - return s.breakCasualString(nameRunes) - } - - if lastAcceptedMatch.end+1 != len(nameRunes) { - rest := nameRunes[lastAcceptedMatch.end+1:] - nameLexems = append(nameLexems, s.breakCasualString(rest)...) - } - - return nameLexems -} - -func (s *splitter) initialismRuneEqual(a, b rune) bool { - return a == b -} - -func (s *splitter) breakInitialism(original string) nameLexem { - return newInitialismNameLexem(original, original) -} - -func (s *splitter) breakCasualString(str []rune) []nameLexem { - segments := make([]nameLexem, 0) - currentSegment := "" - - addCasualNameLexem := func(original string) { - segments = append(segments, newCasualNameLexem(original)) - } - - addInitialismNameLexem := func(original, match string) { - segments = append(segments, newInitialismNameLexem(original, match)) - } - - addNameLexem := func(original string) { - if s.postSplitInitialismCheck { - for _, initialism := range s.initialisms { - if upper(initialism) == upper(original) { - addInitialismNameLexem(original, initialism) - return - } - } - } - - addCasualNameLexem(original) - } - - for _, rn := range string(str) { - if replace, found := nameReplaceTable[rn]; found { - if currentSegment != "" { - addNameLexem(currentSegment) - currentSegment = "" - } - - if replace != "" { - addNameLexem(replace) - } - - continue - } - - if !unicode.In(rn, unicode.L, unicode.M, unicode.N, unicode.Pc) { - if currentSegment != "" { - addNameLexem(currentSegment) - currentSegment = "" - } - - continue - } - - if unicode.IsUpper(rn) { - if currentSegment != "" { - addNameLexem(currentSegment) - } - currentSegment = "" - } - - currentSegment += string(rn) - } - - if currentSegment != "" { - addNameLexem(currentSegment) - } - - return segments -} diff --git a/vendor/github.com/go-openapi/swag/util.go b/vendor/github.com/go-openapi/swag/util.go index 87488273dd..87c54df80d 100644 --- a/vendor/github.com/go-openapi/swag/util.go +++ b/vendor/github.com/go-openapi/swag/util.go @@ -15,8 +15,11 @@ package swag import ( + "math" "reflect" + "regexp" "strings" + "sync" "unicode" ) @@ -26,8 +29,16 @@ var commonInitialisms *indexOfInitialisms // initialisms is a slice of sorted initialisms var initialisms []string +var once sync.Once + var isInitialism func(string) bool +var ( + splitRex1 *regexp.Regexp + splitRex2 *regexp.Regexp + splitReplacer *strings.Replacer +) + func init() { // Taken from https://github.com/golang/lint/blob/3390df4df2787994aea98de825b964ac7944b817/lint.go#L732-L769 var configuredInitialisms = map[string]bool{ @@ -44,8 +55,6 @@ func init() { "HTTP": true, "ID": true, "IP": true, - "IPv4": true, - "IPv6": true, "JSON": true, "LHS": true, "OAI": true, @@ -76,12 +85,15 @@ func init() { // a thread-safe index of initialisms commonInitialisms = newIndexOfInitialisms().load(configuredInitialisms) - initialisms = commonInitialisms.sorted() // a test function isInitialism = commonInitialisms.isInitialism } +func ensureSorted() { + initialisms = commonInitialisms.sorted() +} + const ( //collectionFormatComma = "csv" collectionFormatSpace = "ssv" @@ -163,6 +175,40 @@ func (s byInitialism) Less(i, j int) bool { return strings.Compare(s[i], s[j]) > 0 } +// Prepares strings by splitting by caps, spaces, dashes, and underscore +func split(str string) []string { + // check if consecutive single char things make up an initialism + once.Do(func() { + splitRex1 = regexp.MustCompile(`(\p{Lu})`) + splitRex2 = regexp.MustCompile(`(\pL|\pM|\pN|\p{Pc})+`) + splitReplacer = strings.NewReplacer( + "@", "At ", + "&", "And ", + "|", "Pipe ", + "$", "Dollar ", + "!", "Bang ", + "-", " ", + "_", " ", + ) + ensureSorted() + }) + + str = trim(str) + + // Convert dash and underscore to spaces + str = splitReplacer.Replace(str) + + // Split when uppercase is found (needed for Snake) + str = splitRex1.ReplaceAllString(str, " $1") + + for _, k := range initialisms { + str = strings.Replace(str, splitRex1.ReplaceAllString(k, " $1"), " "+k, -1) + } + // Get the final list of words + //words = rex2.FindAllString(str, -1) + return splitRex2.FindAllString(str, -1) +} + // Removes leading whitespaces func trim(str string) string { return strings.Trim(str, " ") @@ -215,31 +261,30 @@ func ToCommandName(name string) string { // ToHumanNameLower represents a code name as a human series of words func ToHumanNameLower(name string) string { - in := newSplitter(withPostSplitInitialismCheck).split(name) + in := split(name) out := make([]string, 0, len(in)) for _, w := range in { - if !w.IsInitialism() { - out = append(out, lower(w.GetOriginal())) + if !isInitialism(upper(w)) { + out = append(out, lower(w)) } else { - out = append(out, w.GetOriginal()) + out = append(out, w) } } - return strings.Join(out, " ") } // ToHumanNameTitle represents a code name as a human series of words with the first letters titleized func ToHumanNameTitle(name string) string { - in := newSplitter(withPostSplitInitialismCheck).split(name) - + in := split(name) out := make([]string, 0, len(in)) + for _, w := range in { - original := w.GetOriginal() - if !w.IsInitialism() { - out = append(out, Camelize(original)) + uw := upper(w) + if !isInitialism(uw) { + out = append(out, Camelize(w)) } else { - out = append(out, original) + out = append(out, w) } } return strings.Join(out, " ") @@ -274,25 +319,24 @@ func ToVarName(name string) string { // ToGoName translates a swagger name which can be underscored or camel cased to a name that golint likes func ToGoName(name string) string { - lexems := newSplitter(withPostSplitInitialismCheck).split(name) - - result := "" - for _, lexem := range lexems { - goName := lexem.GetUnsafeGoName() + in := split(name) + out := make([]string, 0, len(in)) - // to support old behavior - if lexem.IsInitialism() { - goName = upper(goName) + for _, w := range in { + uw := upper(w) + mod := int(math.Min(float64(len(uw)), 2)) + if !isInitialism(uw) && !isInitialism(uw[:len(uw)-mod]) { + uw = Camelize(w) } - result += goName + out = append(out, uw) } + result := strings.Join(out, "") if len(result) > 0 { if !unicode.IsUpper([]rune(result)[0]) { result = "X" + result } } - return result } diff --git a/vendor/github.com/google/btree/btree.go b/vendor/github.com/google/btree/btree.go index fc5aaaa13a..6ff062f9bb 100644 --- a/vendor/github.com/google/btree/btree.go +++ b/vendor/github.com/google/btree/btree.go @@ -22,7 +22,7 @@ // See some discussion on the matter here: // http://google-opensource.blogspot.com/2013/01/c-containers-that-save-memory-and-time.html // Note, though, that this project is in no way related to the C++ B-Tree -// implmentation written about there. +// implementation written about there. // // Within this tree, each node contains a slice of items and a (possibly nil) // slice of children. For basic numeric values or raw structs, this can cause @@ -44,7 +44,7 @@ // widely used ordered tree implementation in the Go ecosystem currently. // Its functions, therefore, exactly mirror those of // llrb.LLRB where possible. Unlike gollrb, though, we currently don't -// support storing multiple equivalent values or backwards iteration. +// support storing multiple equivalent values. package btree import ( @@ -52,6 +52,7 @@ import ( "io" "sort" "strings" + "sync" ) // Item represents a single object in the tree. @@ -68,11 +69,17 @@ const ( DefaultFreeListSize = 32 ) +var ( + nilItems = make(items, 16) + nilChildren = make(children, 16) +) + // FreeList represents a free list of btree nodes. By default each // BTree has its own FreeList, but multiple BTrees can share the same // FreeList. -// Two Btrees using the same freelist are not safe for concurrent write access. +// Two Btrees using the same freelist are safe for concurrent write access. type FreeList struct { + mu sync.Mutex freelist []*node } @@ -83,18 +90,29 @@ func NewFreeList(size int) *FreeList { } func (f *FreeList) newNode() (n *node) { + f.mu.Lock() index := len(f.freelist) - 1 if index < 0 { + f.mu.Unlock() return new(node) } - f.freelist, n = f.freelist[:index], f.freelist[index] + n = f.freelist[index] + f.freelist[index] = nil + f.freelist = f.freelist[:index] + f.mu.Unlock() return } -func (f *FreeList) freeNode(n *node) { +// freeNode adds the given node to the list, returning true if it was added +// and false if it was discarded. +func (f *FreeList) freeNode(n *node) (out bool) { + f.mu.Lock() if len(f.freelist) < cap(f.freelist) { f.freelist = append(f.freelist, n) + out = true } + f.mu.Unlock() + return } // ItemIterator allows callers of Ascend* to iterate in-order over portions of @@ -116,8 +134,8 @@ func NewWithFreeList(degree int, f *FreeList) *BTree { panic("bad degree") } return &BTree{ - degree: degree, - freelist: f, + degree: degree, + cow: ©OnWriteContext{freelist: f}, } } @@ -138,8 +156,8 @@ func (s *items) insertAt(index int, item Item) { // back. func (s *items) removeAt(index int) Item { item := (*s)[index] - (*s)[index] = nil copy((*s)[index:], (*s)[index+1:]) + (*s)[len(*s)-1] = nil *s = (*s)[:len(*s)-1] return item } @@ -153,6 +171,16 @@ func (s *items) pop() (out Item) { return } +// truncate truncates this instance at index so that it contains only the +// first index items. index must be less than or equal to length. +func (s *items) truncate(index int) { + var toClear items + *s, toClear = (*s)[:index], (*s)[index:] + for len(toClear) > 0 { + toClear = toClear[copy(toClear, nilItems):] + } +} + // find returns the index where the given item should be inserted into this // list. 'found' is true if the item already exists in the list at the given // index. @@ -183,8 +211,8 @@ func (s *children) insertAt(index int, n *node) { // back. func (s *children) removeAt(index int) *node { n := (*s)[index] - (*s)[index] = nil copy((*s)[index:], (*s)[index+1:]) + (*s)[len(*s)-1] = nil *s = (*s)[:len(*s)-1] return n } @@ -198,6 +226,16 @@ func (s *children) pop() (out *node) { return } +// truncate truncates this instance at index so that it contains only the +// first index children. index must be less than or equal to length. +func (s *children) truncate(index int) { + var toClear children + *s, toClear = (*s)[:index], (*s)[index:] + for len(toClear) > 0 { + toClear = toClear[copy(toClear, nilChildren):] + } +} + // node is an internal node in a tree. // // It must at all times maintain the invariant that either @@ -206,7 +244,34 @@ func (s *children) pop() (out *node) { type node struct { items items children children - t *BTree + cow *copyOnWriteContext +} + +func (n *node) mutableFor(cow *copyOnWriteContext) *node { + if n.cow == cow { + return n + } + out := cow.newNode() + if cap(out.items) >= len(n.items) { + out.items = out.items[:len(n.items)] + } else { + out.items = make(items, len(n.items), cap(n.items)) + } + copy(out.items, n.items) + // Copy children + if cap(out.children) >= len(n.children) { + out.children = out.children[:len(n.children)] + } else { + out.children = make(children, len(n.children), cap(n.children)) + } + copy(out.children, n.children) + return out +} + +func (n *node) mutableChild(i int) *node { + c := n.children[i].mutableFor(n.cow) + n.children[i] = c + return c } // split splits the given node at the given index. The current node shrinks, @@ -214,12 +279,12 @@ type node struct { // containing all items/children after it. func (n *node) split(i int) (Item, *node) { item := n.items[i] - next := n.t.newNode() + next := n.cow.newNode() next.items = append(next.items, n.items[i+1:]...) - n.items = n.items[:i] + n.items.truncate(i) if len(n.children) > 0 { next.children = append(next.children, n.children[i+1:]...) - n.children = n.children[:i+1] + n.children.truncate(i + 1) } return item, next } @@ -230,7 +295,7 @@ func (n *node) maybeSplitChild(i, maxItems int) bool { if len(n.children[i].items) < maxItems { return false } - first := n.children[i] + first := n.mutableChild(i) item, second := first.split(maxItems / 2) n.items.insertAt(i, item) n.children.insertAt(i+1, second) @@ -264,7 +329,7 @@ func (n *node) insert(item Item, maxItems int) Item { return out } } - return n.children[i].insert(item, maxItems) + return n.mutableChild(i).insert(item, maxItems) } // get finds the given key in the subtree and returns it. @@ -342,10 +407,10 @@ func (n *node) remove(item Item, minItems int, typ toRemove) Item { panic("invalid type") } // If we get to here, we have children. - child := n.children[i] - if len(child.items) <= minItems { + if len(n.children[i].items) <= minItems { return n.growChildAndRemove(i, item, minItems, typ) } + child := n.mutableChild(i) // Either we had enough items to begin with, or we've done some // merging/stealing, because we've got enough now and we're ready to return // stuff. @@ -384,10 +449,10 @@ func (n *node) remove(item Item, minItems int, typ toRemove) Item { // whether we're in case 1 or 2), we'll have enough items and can guarantee // that we hit case A. func (n *node) growChildAndRemove(i int, item Item, minItems int, typ toRemove) Item { - child := n.children[i] if i > 0 && len(n.children[i-1].items) > minItems { // Steal from left child - stealFrom := n.children[i-1] + child := n.mutableChild(i) + stealFrom := n.mutableChild(i - 1) stolenItem := stealFrom.items.pop() child.items.insertAt(0, n.items[i-1]) n.items[i-1] = stolenItem @@ -396,7 +461,8 @@ func (n *node) growChildAndRemove(i int, item Item, minItems int, typ toRemove) } } else if i < len(n.items) && len(n.children[i+1].items) > minItems { // steal from right child - stealFrom := n.children[i+1] + child := n.mutableChild(i) + stealFrom := n.mutableChild(i + 1) stolenItem := stealFrom.items.removeAt(0) child.items = append(child.items, n.items[i]) n.items[i] = stolenItem @@ -406,47 +472,99 @@ func (n *node) growChildAndRemove(i int, item Item, minItems int, typ toRemove) } else { if i >= len(n.items) { i-- - child = n.children[i] } + child := n.mutableChild(i) // merge with right child mergeItem := n.items.removeAt(i) mergeChild := n.children.removeAt(i + 1) child.items = append(child.items, mergeItem) child.items = append(child.items, mergeChild.items...) child.children = append(child.children, mergeChild.children...) - n.t.freeNode(mergeChild) + n.cow.freeNode(mergeChild) } return n.remove(item, minItems, typ) } +type direction int + +const ( + descend = direction(-1) + ascend = direction(+1) +) + // iterate provides a simple method for iterating over elements in the tree. -// It could probably use some work to be extra-efficient (it calls from() a -// little more than it should), but it works pretty well for now. // -// It requires that 'from' and 'to' both return true for values we should hit -// with the iterator. It should also be the case that 'from' returns true for -// values less than or equal to values 'to' returns true for, and 'to' -// returns true for values greater than or equal to those that 'from' -// does. -func (n *node) iterate(from, to func(Item) bool, iter ItemIterator) bool { - for i, item := range n.items { - if !from(item) { - continue +// When ascending, the 'start' should be less than 'stop' and when descending, +// the 'start' should be greater than 'stop'. Setting 'includeStart' to true +// will force the iterator to include the first item when it equals 'start', +// thus creating a "greaterOrEqual" or "lessThanEqual" rather than just a +// "greaterThan" or "lessThan" queries. +func (n *node) iterate(dir direction, start, stop Item, includeStart bool, hit bool, iter ItemIterator) (bool, bool) { + var ok, found bool + var index int + switch dir { + case ascend: + if start != nil { + index, _ = n.items.find(start) } - if len(n.children) > 0 && !n.children[i].iterate(from, to, iter) { - return false + for i := index; i < len(n.items); i++ { + if len(n.children) > 0 { + if hit, ok = n.children[i].iterate(dir, start, stop, includeStart, hit, iter); !ok { + return hit, false + } + } + if !includeStart && !hit && start != nil && !start.Less(n.items[i]) { + hit = true + continue + } + hit = true + if stop != nil && !n.items[i].Less(stop) { + return hit, false + } + if !iter(n.items[i]) { + return hit, false + } } - if !to(item) { - return false + if len(n.children) > 0 { + if hit, ok = n.children[len(n.children)-1].iterate(dir, start, stop, includeStart, hit, iter); !ok { + return hit, false + } } - if !iter(item) { - return false + case descend: + if start != nil { + index, found = n.items.find(start) + if !found { + index = index - 1 + } + } else { + index = len(n.items) - 1 + } + for i := index; i >= 0; i-- { + if start != nil && !n.items[i].Less(start) { + if !includeStart || hit || start.Less(n.items[i]) { + continue + } + } + if len(n.children) > 0 { + if hit, ok = n.children[i+1].iterate(dir, start, stop, includeStart, hit, iter); !ok { + return hit, false + } + } + if stop != nil && !stop.Less(n.items[i]) { + return hit, false // continue + } + hit = true + if !iter(n.items[i]) { + return hit, false + } + } + if len(n.children) > 0 { + if hit, ok = n.children[0].iterate(dir, start, stop, includeStart, hit, iter); !ok { + return hit, false + } } } - if len(n.children) > 0 { - return n.children[len(n.children)-1].iterate(from, to, iter) - } - return true + return hit, true } // Used for testing/debugging purposes. @@ -465,12 +583,54 @@ func (n *node) print(w io.Writer, level int) { // Write operations are not safe for concurrent mutation by multiple // goroutines, but Read operations are. type BTree struct { - degree int - length int - root *node + degree int + length int + root *node + cow *copyOnWriteContext +} + +// copyOnWriteContext pointers determine node ownership... a tree with a write +// context equivalent to a node's write context is allowed to modify that node. +// A tree whose write context does not match a node's is not allowed to modify +// it, and must create a new, writable copy (IE: it's a Clone). +// +// When doing any write operation, we maintain the invariant that the current +// node's context is equal to the context of the tree that requested the write. +// We do this by, before we descend into any node, creating a copy with the +// correct context if the contexts don't match. +// +// Since the node we're currently visiting on any write has the requesting +// tree's context, that node is modifiable in place. Children of that node may +// not share context, but before we descend into them, we'll make a mutable +// copy. +type copyOnWriteContext struct { freelist *FreeList } +// Clone clones the btree, lazily. Clone should not be called concurrently, +// but the original tree (t) and the new tree (t2) can be used concurrently +// once the Clone call completes. +// +// The internal tree structure of b is marked read-only and shared between t and +// t2. Writes to both t and t2 use copy-on-write logic, creating new nodes +// whenever one of b's original nodes would have been modified. Read operations +// should have no performance degredation. Write operations for both t and t2 +// will initially experience minor slow-downs caused by additional allocs and +// copies due to the aforementioned copy-on-write logic, but should converge to +// the original performance characteristics of the original tree. +func (t *BTree) Clone() (t2 *BTree) { + // Create two entirely new copy-on-write contexts. + // This operation effectively creates three trees: + // the original, shared nodes (old b.cow) + // the new b.cow nodes + // the new out.cow nodes + cow1, cow2 := *t.cow, *t.cow + out := *t + t.cow = &cow1 + out.cow = &cow2 + return &out +} + // maxItems returns the max number of items to allow per node. func (t *BTree) maxItems() int { return t.degree*2 - 1 @@ -482,23 +642,37 @@ func (t *BTree) minItems() int { return t.degree - 1 } -func (t *BTree) newNode() (n *node) { - n = t.freelist.newNode() - n.t = t +func (c *copyOnWriteContext) newNode() (n *node) { + n = c.freelist.newNode() + n.cow = c return } -func (t *BTree) freeNode(n *node) { - for i := range n.items { - n.items[i] = nil // clear to allow GC - } - n.items = n.items[:0] - for i := range n.children { - n.children[i] = nil // clear to allow GC +type freeType int + +const ( + ftFreelistFull freeType = iota // node was freed (available for GC, not stored in freelist) + ftStored // node was stored in the freelist for later use + ftNotOwned // node was ignored by COW, since it's owned by another one +) + +// freeNode frees a node within a given COW context, if it's owned by that +// context. It returns what happened to the node (see freeType const +// documentation). +func (c *copyOnWriteContext) freeNode(n *node) freeType { + if n.cow == c { + // clear to allow GC + n.items.truncate(0) + n.children.truncate(0) + n.cow = nil + if c.freelist.freeNode(n) { + return ftStored + } else { + return ftFreelistFull + } + } else { + return ftNotOwned } - n.children = n.children[:0] - n.t = nil // clear to allow GC - t.freelist.freeNode(n) } // ReplaceOrInsert adds the given item to the tree. If an item in the tree @@ -511,16 +685,19 @@ func (t *BTree) ReplaceOrInsert(item Item) Item { panic("nil item being added to BTree") } if t.root == nil { - t.root = t.newNode() + t.root = t.cow.newNode() t.root.items = append(t.root.items, item) t.length++ return nil - } else if len(t.root.items) >= t.maxItems() { - item2, second := t.root.split(t.maxItems() / 2) - oldroot := t.root - t.root = t.newNode() - t.root.items = append(t.root.items, item2) - t.root.children = append(t.root.children, oldroot, second) + } else { + t.root = t.root.mutableFor(t.cow) + if len(t.root.items) >= t.maxItems() { + item2, second := t.root.split(t.maxItems() / 2) + oldroot := t.root + t.root = t.cow.newNode() + t.root.items = append(t.root.items, item2) + t.root.children = append(t.root.children, oldroot, second) + } } out := t.root.insert(item, t.maxItems()) if out == nil { @@ -551,11 +728,12 @@ func (t *BTree) deleteItem(item Item, typ toRemove) Item { if t.root == nil || len(t.root.items) == 0 { return nil } + t.root = t.root.mutableFor(t.cow) out := t.root.remove(item, t.minItems(), typ) if len(t.root.items) == 0 && len(t.root.children) > 0 { oldroot := t.root t.root = t.root.children[0] - t.freeNode(oldroot) + t.cow.freeNode(oldroot) } if out != nil { t.length-- @@ -569,10 +747,7 @@ func (t *BTree) AscendRange(greaterOrEqual, lessThan Item, iterator ItemIterator if t.root == nil { return } - t.root.iterate( - func(a Item) bool { return !a.Less(greaterOrEqual) }, - func(a Item) bool { return a.Less(lessThan) }, - iterator) + t.root.iterate(ascend, greaterOrEqual, lessThan, true, false, iterator) } // AscendLessThan calls the iterator for every value in the tree within the range @@ -581,10 +756,7 @@ func (t *BTree) AscendLessThan(pivot Item, iterator ItemIterator) { if t.root == nil { return } - t.root.iterate( - func(a Item) bool { return true }, - func(a Item) bool { return a.Less(pivot) }, - iterator) + t.root.iterate(ascend, nil, pivot, false, false, iterator) } // AscendGreaterOrEqual calls the iterator for every value in the tree within @@ -593,10 +765,7 @@ func (t *BTree) AscendGreaterOrEqual(pivot Item, iterator ItemIterator) { if t.root == nil { return } - t.root.iterate( - func(a Item) bool { return !a.Less(pivot) }, - func(a Item) bool { return true }, - iterator) + t.root.iterate(ascend, pivot, nil, true, false, iterator) } // Ascend calls the iterator for every value in the tree within the range @@ -605,10 +774,43 @@ func (t *BTree) Ascend(iterator ItemIterator) { if t.root == nil { return } - t.root.iterate( - func(a Item) bool { return true }, - func(a Item) bool { return true }, - iterator) + t.root.iterate(ascend, nil, nil, false, false, iterator) +} + +// DescendRange calls the iterator for every value in the tree within the range +// [lessOrEqual, greaterThan), until iterator returns false. +func (t *BTree) DescendRange(lessOrEqual, greaterThan Item, iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(descend, lessOrEqual, greaterThan, true, false, iterator) +} + +// DescendLessOrEqual calls the iterator for every value in the tree within the range +// [pivot, first], until iterator returns false. +func (t *BTree) DescendLessOrEqual(pivot Item, iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(descend, pivot, nil, true, false, iterator) +} + +// DescendGreaterThan calls the iterator for every value in the tree within +// the range (pivot, last], until iterator returns false. +func (t *BTree) DescendGreaterThan(pivot Item, iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(descend, nil, pivot, false, false, iterator) +} + +// Descend calls the iterator for every value in the tree within the range +// [last, first], until iterator returns false. +func (t *BTree) Descend(iterator ItemIterator) { + if t.root == nil { + return + } + t.root.iterate(descend, nil, nil, false, false, iterator) } // Get looks for the key item in the tree, returning it. It returns nil if @@ -640,6 +842,45 @@ func (t *BTree) Len() int { return t.length } +// Clear removes all items from the btree. If addNodesToFreelist is true, +// t's nodes are added to its freelist as part of this call, until the freelist +// is full. Otherwise, the root node is simply dereferenced and the subtree +// left to Go's normal GC processes. +// +// This can be much faster +// than calling Delete on all elements, because that requires finding/removing +// each element in the tree and updating the tree accordingly. It also is +// somewhat faster than creating a new tree to replace the old one, because +// nodes from the old tree are reclaimed into the freelist for use by the new +// one, instead of being lost to the garbage collector. +// +// This call takes: +// O(1): when addNodesToFreelist is false, this is a single operation. +// O(1): when the freelist is already full, it breaks out immediately +// O(freelist size): when the freelist is empty and the nodes are all owned +// by this tree, nodes are added to the freelist until full. +// O(tree size): when all nodes are owned by another tree, all nodes are +// iterated over looking for nodes to add to the freelist, and due to +// ownership, none are. +func (t *BTree) Clear(addNodesToFreelist bool) { + if t.root != nil && addNodesToFreelist { + t.root.reset(t.cow) + } + t.root, t.length = nil, 0 +} + +// reset returns a subtree to the freelist. It breaks out immediately if the +// freelist is full, since the only benefit of iterating is to fill that +// freelist up. Returns true if parent reset call should continue. +func (n *node) reset(c *copyOnWriteContext) bool { + for _, child := range n.children { + if !child.reset(c) { + return false + } + } + return c.freeNode(n) != ftFreelistFull +} + // Int implements the Item interface for integers. type Int int diff --git a/vendor/github.com/gophercloud/gophercloud/.travis.yml b/vendor/github.com/gophercloud/gophercloud/.travis.yml index 9153a00fc5..02728f4968 100644 --- a/vendor/github.com/gophercloud/gophercloud/.travis.yml +++ b/vendor/github.com/gophercloud/gophercloud/.travis.yml @@ -1,25 +1,21 @@ language: go sudo: false install: -- GO111MODULE=off go get golang.org/x/crypto/ssh -- GO111MODULE=off go get -v -tags 'fixtures acceptance' ./... -- GO111MODULE=off go get github.com/wadey/gocovmerge -- GO111MODULE=off go get github.com/mattn/goveralls -- GO111MODULE=off go get golang.org/x/tools/cmd/goimports +- go get golang.org/x/crypto/ssh +- go get -v -tags 'fixtures acceptance' ./... +- go get github.com/wadey/gocovmerge +- go get github.com/mattn/goveralls +- go get golang.org/x/tools/cmd/goimports go: - "1.10" -- "1.11" -- "1.12" - "tip" env: global: - secure: "xSQsAG5wlL9emjbCdxzz/hYQsSpJ/bABO1kkbwMSISVcJ3Nk0u4ywF+LS4bgeOnwPfmFvNTOqVDu3RwEvMeWXSI76t1piCPcObutb2faKLVD/hLoAS76gYX+Z8yGWGHrSB7Do5vTPj1ERe2UljdrnsSeOXzoDwFxYRaZLX4bBOB4AyoGvRniil5QXPATiA1tsWX1VMicj8a4F8X+xeESzjt1Q5Iy31e7vkptu71bhvXCaoo5QhYwT+pLR9dN0S1b7Ro0KVvkRefmr1lUOSYd2e74h6Lc34tC1h3uYZCS4h47t7v5cOXvMNxinEj2C51RvbjvZI1RLVdkuAEJD1Iz4+Ote46nXbZ//6XRZMZz/YxQ13l7ux1PFjgEB6HAapmF5Xd8PRsgeTU9LRJxpiTJ3P5QJ3leS1va8qnziM5kYipj/Rn+V8g2ad/rgkRox9LSiR9VYZD2Pe45YCb1mTKSl2aIJnV7nkOqsShY5LNB4JZSg7xIffA+9YVDktw8dJlATjZqt7WvJJ49g6A61mIUV4C15q2JPGKTkZzDiG81NtmS7hFa7k0yaE2ELgYocbcuyUcAahhxntYTC0i23nJmEHVNiZmBO3u7EgpWe4KGVfumU+lt12tIn5b3dZRBBUk3QakKKozSK1QPHGpk/AZGrhu7H6l8to6IICKWtDcyMPQ=" - - GO111MODULE=on before_script: - go vet ./... script: - ./script/coverage -- ./script/unittest - ./script/format after_success: - $HOME/gopath/bin/goveralls -service=travis-ci -coverprofile=cover.out diff --git a/vendor/github.com/gophercloud/gophercloud/.zuul.yaml b/vendor/github.com/gophercloud/gophercloud/.zuul.yaml index 135e3b203a..8c31ea160e 100644 --- a/vendor/github.com/gophercloud/gophercloud/.zuul.yaml +++ b/vendor/github.com/gophercloud/gophercloud/.zuul.yaml @@ -14,20 +14,13 @@ run: .zuul/playbooks/gophercloud-acceptance-test/run.yaml - job: - name: gophercloud-acceptance-test-ironic - parent: golang-test - description: | - Run gophercloud ironic acceptance test on master branch - run: .zuul/playbooks/gophercloud-acceptance-test-ironic/run.yaml - -- job: - name: gophercloud-acceptance-test-stein + name: gophercloud-acceptance-test-queens parent: gophercloud-acceptance-test description: | - Run gophercloud acceptance test on stein branch + Run gophercloud acceptance test on queens branch vars: global_env: - OS_BRANCH: stable/stein + OS_BRANCH: stable/queens - job: name: gophercloud-acceptance-test-rocky @@ -38,15 +31,6 @@ global_env: OS_BRANCH: stable/rocky -- job: - name: gophercloud-acceptance-test-queens - parent: gophercloud-acceptance-test - description: | - Run gophercloud acceptance test on queens branch - vars: - global_env: - OS_BRANCH: stable/queens - - job: name: gophercloud-acceptance-test-pike parent: gophercloud-acceptance-test @@ -90,7 +74,6 @@ jobs: - gophercloud-unittest - gophercloud-acceptance-test - - gophercloud-acceptance-test-ironic recheck-mitaka: jobs: - gophercloud-acceptance-test-mitaka @@ -109,6 +92,7 @@ recheck-rocky: jobs: - gophercloud-acceptance-test-rocky - recheck-stein: + periodic: jobs: - - gophercloud-acceptance-test-stein + - gophercloud-unittest + - gophercloud-acceptance-test diff --git a/vendor/github.com/gophercloud/gophercloud/auth_result.go b/vendor/github.com/gophercloud/gophercloud/auth_result.go deleted file mode 100644 index 2e4699b978..0000000000 --- a/vendor/github.com/gophercloud/gophercloud/auth_result.go +++ /dev/null @@ -1,52 +0,0 @@ -package gophercloud - -/* -AuthResult is the result from the request that was used to obtain a provider -client's Keystone token. It is returned from ProviderClient.GetAuthResult(). - -The following types satisfy this interface: - - github.com/gophercloud/gophercloud/openstack/identity/v2/tokens.CreateResult - github.com/gophercloud/gophercloud/openstack/identity/v3/tokens.CreateResult - -Usage example: - - import ( - "github.com/gophercloud/gophercloud" - tokens2 "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens" - tokens3 "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens" - ) - - func GetAuthenticatedUserID(providerClient *gophercloud.ProviderClient) (string, error) { - r := providerClient.GetAuthResult() - if r == nil { - //ProviderClient did not use openstack.Authenticate(), e.g. because token - //was set manually with ProviderClient.SetToken() - return "", errors.New("no AuthResult available") - } - switch r := r.(type) { - case tokens2.CreateResult: - u, err := r.ExtractUser() - if err != nil { - return "", err - } - return u.ID, nil - case tokens3.CreateResult: - u, err := r.ExtractUser() - if err != nil { - return "", err - } - return u.ID, nil - default: - panic(fmt.Sprintf("got unexpected AuthResult type %t", r)) - } - } - -Both implementing types share a lot of methods by name, like ExtractUser() in -this example. But those methods cannot be part of the AuthResult interface -because the return types are different (in this case, type tokens2.User vs. -type tokens3.User). -*/ -type AuthResult interface { - ExtractTokenID() (string, error) -} diff --git a/vendor/github.com/gophercloud/gophercloud/doc.go b/vendor/github.com/gophercloud/gophercloud/doc.go index 953ca822a9..131cc8e303 100644 --- a/vendor/github.com/gophercloud/gophercloud/doc.go +++ b/vendor/github.com/gophercloud/gophercloud/doc.go @@ -9,37 +9,20 @@ Provider structs represent the cloud providers that offer and manage a collection of services. You will generally want to create one Provider client per OpenStack cloud. - It is now recommended to use the `clientconfig` package found at - https://github.com/gophercloud/utils/tree/master/openstack/clientconfig - for all authentication purposes. - - The below documentation is still relevant. clientconfig simply implements - the below and presents it in an easier and more flexible way. - Use your OpenStack credentials to create a Provider client. The IdentityEndpoint is typically refered to as "auth_url" or "OS_AUTH_URL" in information provided by the cloud operator. Additionally, the cloud may refer to TenantID or TenantName as project_id and project_name. Credentials are specified like so: - opts := gophercloud.AuthOptions{ - IdentityEndpoint: "https://openstack.example.com:5000/v2.0", - Username: "{username}", - Password: "{password}", - TenantID: "{tenant_id}", - } - - provider, err := openstack.AuthenticatedClient(opts) + opts := gophercloud.AuthOptions{ + IdentityEndpoint: "https://openstack.example.com:5000/v2.0", + Username: "{username}", + Password: "{password}", + TenantID: "{tenant_id}", + } -You can authenticate with a token by doing: - - opts := gophercloud.AuthOptions{ - IdentityEndpoint: "https://openstack.example.com:5000/v2.0", - TokenID: "{token_id}", - TenantID: "{tenant_id}", - } - - provider, err := openstack.AuthenticatedClient(opts) + provider, err := openstack.AuthenticatedClient(opts) You may also use the openstack.AuthOptionsFromEnv() helper function. This function reads in standard environment variables frequently found in an @@ -56,16 +39,16 @@ operations for a particular OpenStack service. Examples of services include: Compute, Object Storage, Block Storage. In order to define one, you need to pass in the parent provider, like so: - opts := gophercloud.EndpointOpts{Region: "RegionOne"} + opts := gophercloud.EndpointOpts{Region: "RegionOne"} - client, err := openstack.NewComputeV2(provider, opts) + client, err := openstack.NewComputeV2(provider, opts) Resources Resource structs are the domain models that services make use of in order to work with and represent the state of API resources: - server, err := servers.Get(client, "{serverId}").Extract() + server, err := servers.Get(client, "{serverId}").Extract() Intermediate Result structs are returned for API operations, which allow generic access to the HTTP headers, response body, and any errors associated @@ -73,11 +56,11 @@ with the network transaction. To turn a result into a usable resource struct, you must call the Extract method which is chained to the response, or an Extract function from an applicable extension: - result := servers.Get(client, "{serverId}") + result := servers.Get(client, "{serverId}") - // Attempt to extract the disk configuration from the OS-DCF disk config - // extension: - config, err := diskconfig.ExtractGet(result) + // Attempt to extract the disk configuration from the OS-DCF disk config + // extension: + config, err := diskconfig.ExtractGet(result) All requests that enumerate a collection return a Pager struct that is used to iterate through the results one page at a time. Use the EachPage method on that @@ -85,17 +68,17 @@ Pager to handle each successive Page in a closure, then use the appropriate extraction method from that request's package to interpret that Page as a slice of results: - err := servers.List(client, nil).EachPage(func (page pagination.Page) (bool, error) { - s, err := servers.ExtractServers(page) - if err != nil { - return false, err - } + err := servers.List(client, nil).EachPage(func (page pagination.Page) (bool, error) { + s, err := servers.ExtractServers(page) + if err != nil { + return false, err + } - // Handle the []servers.Server slice. + // Handle the []servers.Server slice. - // Return "false" or an error to prematurely stop fetching new pages. - return true, nil - }) + // Return "false" or an error to prematurely stop fetching new pages. + return true, nil + }) If you want to obtain the entire collection of pages without doing any intermediary processing on each page, you can use the AllPages method: diff --git a/vendor/github.com/gophercloud/gophercloud/errors.go b/vendor/github.com/gophercloud/gophercloud/errors.go index 0bcb3af7f0..4bf1024684 100644 --- a/vendor/github.com/gophercloud/gophercloud/errors.go +++ b/vendor/github.com/gophercloud/gophercloud/errors.go @@ -122,11 +122,6 @@ type ErrDefault408 struct { ErrUnexpectedResponseCode } -// ErrDefault409 is the default error type returned on a 409 HTTP response code. -type ErrDefault409 struct { - ErrUnexpectedResponseCode -} - // ErrDefault429 is the default error type returned on a 429 HTTP response code. type ErrDefault429 struct { ErrUnexpectedResponseCode @@ -216,12 +211,6 @@ type Err408er interface { Error408(ErrUnexpectedResponseCode) error } -// Err409er is the interface resource error types implement to override the error message -// from a 409 error. -type Err409er interface { - Error409(ErrUnexpectedResponseCode) error -} - // Err429er is the interface resource error types implement to override the error message // from a 429 error. type Err429er interface { diff --git a/vendor/github.com/gophercloud/gophercloud/go.mod b/vendor/github.com/gophercloud/gophercloud/go.mod deleted file mode 100644 index d1ee3b472e..0000000000 --- a/vendor/github.com/gophercloud/gophercloud/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module github.com/gophercloud/gophercloud - -require ( - golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67 - golang.org/x/sys v0.0.0-20190209173611-3b5209105503 // indirect - gopkg.in/yaml.v2 v2.2.2 -) diff --git a/vendor/github.com/gophercloud/gophercloud/go.sum b/vendor/github.com/gophercloud/gophercloud/go.sum deleted file mode 100644 index 33cb0be8aa..0000000000 --- a/vendor/github.com/gophercloud/gophercloud/go.sum +++ /dev/null @@ -1,8 +0,0 @@ -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67 h1:ng3VDlRp5/DHpSWl02R4rM9I+8M2rhmsuLwAMmkLQWE= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503 h1:5SvYFrOM3W8Mexn9/oA44Ji7vhXAZQ9hiP+1Q/DMrWg= -golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/auth_env.go b/vendor/github.com/gophercloud/gophercloud/openstack/auth_env.go index 0e8d90ff82..0bb1f48375 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/auth_env.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/auth_env.go @@ -13,19 +13,15 @@ AuthOptionsFromEnv fills out an identity.AuthOptions structure with the settings found on the various OpenStack OS_* environment variables. The following variables provide sources of truth: OS_AUTH_URL, OS_USERNAME, -OS_PASSWORD and OS_PROJECT_ID. +OS_PASSWORD, OS_TENANT_ID, and OS_TENANT_NAME. Of these, OS_USERNAME, OS_PASSWORD, and OS_AUTH_URL must have settings, -or an error will result. OS_PROJECT_ID, is optional. +or an error will result. OS_TENANT_ID, OS_TENANT_NAME, OS_PROJECT_ID, and +OS_PROJECT_NAME are optional. -OS_TENANT_ID and OS_TENANT_NAME are deprecated forms of OS_PROJECT_ID and -OS_PROJECT_NAME and the latter are expected against a v3 auth api. - -If OS_PROJECT_ID and OS_PROJECT_NAME are set, they will still be referred -as "tenant" in Gophercloud. - -If OS_PROJECT_NAME is set, it requires OS_PROJECT_ID to be set as well to -handle projects not on the default domain. +OS_TENANT_ID and OS_TENANT_NAME are mutually exclusive to OS_PROJECT_ID and +OS_PROJECT_NAME. If OS_PROJECT_ID and OS_PROJECT_NAME are set, they will +still be referred as "tenant" in Gophercloud. To use this function, first set the OS_* environment variables (for example, by sourcing an `openrc` file), then: @@ -87,13 +83,6 @@ func AuthOptionsFromEnv() (gophercloud.AuthOptions, error) { return nilOptions, err } - if domainID == "" && domainName == "" && tenantID == "" && tenantName != "" { - err := gophercloud.ErrMissingEnvironmentVariable{ - EnvironmentVariable: "OS_PROJECT_ID", - } - return nilOptions, err - } - if applicationCredentialID == "" && applicationCredentialName != "" && applicationCredentialSecret != "" { if userID == "" && username == "" { return nilOptions, gophercloud.ErrMissingAnyoneOfEnvironmentVariables{ diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/client.go b/vendor/github.com/gophercloud/gophercloud/openstack/client.go index 50f239711e..7a7a1803f1 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/client.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/client.go @@ -135,7 +135,7 @@ func v2auth(client *gophercloud.ProviderClient, endpoint string, options gopherc result := tokens2.Create(v2Client, v2Opts) - err = client.SetTokenAndAuthResult(result) + token, err := result.ExtractToken() if err != nil { return err } @@ -150,9 +150,9 @@ func v2auth(client *gophercloud.ProviderClient, endpoint string, options gopherc // with the token and reauth func zeroed out. combined with setting `AllowReauth` to `false`, // this should retry authentication only once tac := *client - tac.SetThrowaway(true) + tac.IsThrowaway = true tac.ReauthFunc = nil - tac.SetTokenAndAuthResult(nil) + tac.TokenID = "" tao := options tao.AllowReauth = false client.ReauthFunc = func() error { @@ -160,10 +160,11 @@ func v2auth(client *gophercloud.ProviderClient, endpoint string, options gopherc if err != nil { return err } - client.CopyTokenFrom(&tac) + client.TokenID = tac.TokenID return nil } } + client.TokenID = token.ID client.EndpointLocator = func(opts gophercloud.EndpointOpts) (string, error) { return V2EndpointURL(catalog, opts) } @@ -189,7 +190,7 @@ func v3auth(client *gophercloud.ProviderClient, endpoint string, opts tokens3.Au result := tokens3.Create(v3Client, opts) - err = client.SetTokenAndAuthResult(result) + token, err := result.ExtractToken() if err != nil { return err } @@ -199,14 +200,16 @@ func v3auth(client *gophercloud.ProviderClient, endpoint string, opts tokens3.Au return err } + client.TokenID = token.ID + if opts.CanReauth() { // here we're creating a throw-away client (tac). it's a copy of the user's provider client, but // with the token and reauth func zeroed out. combined with setting `AllowReauth` to `false`, // this should retry authentication only once tac := *client - tac.SetThrowaway(true) + tac.IsThrowaway = true tac.ReauthFunc = nil - tac.SetTokenAndAuthResult(nil) + tac.TokenID = "" var tao tokens3.AuthOptionsBuilder switch ot := opts.(type) { case *gophercloud.AuthOptions: @@ -225,7 +228,7 @@ func v3auth(client *gophercloud.ProviderClient, endpoint string, opts tokens3.Au if err != nil { return err } - client.CopyTokenFrom(&tac) + client.TokenID = tac.TokenID return nil } } @@ -304,18 +307,6 @@ func initClientOpts(client *gophercloud.ProviderClient, eo gophercloud.EndpointO return sc, nil } -// NewBareMetalV1 creates a ServiceClient that may be used with the v1 -// bare metal package. -func NewBareMetalV1(client *gophercloud.ProviderClient, eo gophercloud.EndpointOpts) (*gophercloud.ServiceClient, error) { - return initClientOpts(client, eo, "baremetal") -} - -// NewBareMetalIntrospectionV1 creates a ServiceClient that may be used with the v1 -// bare metal introspection package. -func NewBareMetalIntrospectionV1(client *gophercloud.ProviderClient, eo gophercloud.EndpointOpts) (*gophercloud.ServiceClient, error) { - return initClientOpts(client, eo, "baremetal-inspector") -} - // NewObjectStorageV1 creates a ServiceClient that may be used with the v1 // object storage package. func NewObjectStorageV1(client *gophercloud.ProviderClient, eo gophercloud.EndpointOpts) (*gophercloud.ServiceClient, error) { diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens/results.go b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens/results.go index ee5da37f46..b11326772b 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens/results.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v2/tokens/results.go @@ -135,21 +135,6 @@ func (r CreateResult) ExtractToken() (*Token, error) { }, nil } -// ExtractTokenID implements the gophercloud.AuthResult interface. The returned -// string is the same as the ID field of the Token struct returned from -// ExtractToken(). -func (r CreateResult) ExtractTokenID() (string, error) { - var s struct { - Access struct { - Token struct { - ID string `json:"id"` - } `json:"token"` - } `json:"access"` - } - err := r.ExtractInto(&s) - return s.Access.Token.ID, err -} - // ExtractServiceCatalog returns the ServiceCatalog that was generated along // with the user's Token. func (r CreateResult) ExtractServiceCatalog() (*ServiceCatalog, error) { diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/requests.go b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/requests.go index e4d766b232..2d20fa6f4b 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/requests.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/requests.go @@ -134,9 +134,9 @@ func Get(c *gophercloud.ServiceClient, token string) (r GetResult) { OkCodes: []int{200, 203}, }) if resp != nil { + r.Err = err r.Header = resp.Header } - r.Err = err return } diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/results.go b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/results.go index 6f26c96bcd..ebdca58f65 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/results.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/identity/v3/tokens/results.go @@ -102,13 +102,6 @@ func (r commonResult) ExtractToken() (*Token, error) { return &s, err } -// ExtractTokenID implements the gophercloud.AuthResult interface. The returned -// string is the same as the ID field of the Token struct returned from -// ExtractToken(). -func (r CreateResult) ExtractTokenID() (string, error) { - return r.Header.Get("X-Subject-Token"), r.Err -} - // ExtractServiceCatalog returns the ServiceCatalog that was generated along // with the user's Token. func (r commonResult) ExtractServiceCatalog() (*ServiceCatalog, error) { diff --git a/vendor/github.com/gophercloud/gophercloud/provider_client.go b/vendor/github.com/gophercloud/gophercloud/provider_client.go index fce00462fd..f2aae976cf 100644 --- a/vendor/github.com/gophercloud/gophercloud/provider_client.go +++ b/vendor/github.com/gophercloud/gophercloud/provider_client.go @@ -2,7 +2,6 @@ package gophercloud import ( "bytes" - "context" "encoding/json" "errors" "io" @@ -73,25 +72,15 @@ type ProviderClient struct { // authentication functions for different Identity service versions. ReauthFunc func() error - // Throwaway determines whether if this client is a throw-away client. It's a copy of user's provider client + // IsThrowaway determines whether if this client is a throw-away client. It's a copy of user's provider client // with the token and reauth func zeroed. Such client can be used to perform reauthorization. - Throwaway bool + IsThrowaway bool - // Context is the context passed to the HTTP request. - Context context.Context - - // mut is a mutex for the client. It protects read and write access to client attributes such as getting - // and setting the TokenID. mut *sync.RWMutex - // reauthmut is a mutex for reauthentication it attempts to ensure that only one reauthentication - // attempt happens at one time. reauthmut *reauthlock - - authResult AuthResult } -// reauthlock represents a set of attributes used to help in the reauthentication process. type reauthlock struct { sync.RWMutex reauthing bool @@ -102,7 +91,7 @@ type reauthlock struct { // AuthenticatedHeaders returns a map of HTTP headers that are common for all // authenticated service requests. Blocks if Reauthenticate is in progress. func (client *ProviderClient) AuthenticatedHeaders() (m map[string]string) { - if client.IsThrowaway() { + if client.IsThrowaway { return } if client.reauthmut != nil { @@ -126,20 +115,6 @@ func (client *ProviderClient) UseTokenLock() { client.reauthmut = new(reauthlock) } -// GetAuthResult returns the result from the request that was used to obtain a -// provider client's Keystone token. -// -// The result is nil when authentication has not yet taken place, when the token -// was set manually with SetToken(), or when a ReauthFunc was used that does not -// record the AuthResult. -func (client *ProviderClient) GetAuthResult() AuthResult { - if client.mut != nil { - client.mut.RLock() - defer client.mut.RUnlock() - } - return client.authResult -} - // Token safely reads the value of the auth token from the ProviderClient. Applications should // call this method to access the token instead of the TokenID field func (client *ProviderClient) Token() string { @@ -151,71 +126,13 @@ func (client *ProviderClient) Token() string { } // SetToken safely sets the value of the auth token in the ProviderClient. Applications may -// use this method in a custom ReauthFunc. -// -// WARNING: This function is deprecated. Use SetTokenAndAuthResult() instead. +// use this method in a custom ReauthFunc func (client *ProviderClient) SetToken(t string) { if client.mut != nil { client.mut.Lock() defer client.mut.Unlock() } client.TokenID = t - client.authResult = nil -} - -// SetTokenAndAuthResult safely sets the value of the auth token in the -// ProviderClient and also records the AuthResult that was returned from the -// token creation request. Applications may call this in a custom ReauthFunc. -func (client *ProviderClient) SetTokenAndAuthResult(r AuthResult) error { - tokenID := "" - var err error - if r != nil { - tokenID, err = r.ExtractTokenID() - if err != nil { - return err - } - } - - if client.mut != nil { - client.mut.Lock() - defer client.mut.Unlock() - } - client.TokenID = tokenID - client.authResult = r - return nil -} - -// CopyTokenFrom safely copies the token from another ProviderClient into the -// this one. -func (client *ProviderClient) CopyTokenFrom(other *ProviderClient) { - if client.mut != nil { - client.mut.Lock() - defer client.mut.Unlock() - } - if other.mut != nil && other.mut != client.mut { - other.mut.RLock() - defer other.mut.RUnlock() - } - client.TokenID = other.TokenID - client.authResult = other.authResult -} - -// IsThrowaway safely reads the value of the client Throwaway field. -func (client *ProviderClient) IsThrowaway() bool { - if client.reauthmut != nil { - client.reauthmut.RLock() - defer client.reauthmut.RUnlock() - } - return client.Throwaway -} - -// SetThrowaway safely sets the value of the client Throwaway field. -func (client *ProviderClient) SetThrowaway(v bool) { - if client.reauthmut != nil { - client.reauthmut.Lock() - defer client.reauthmut.Unlock() - } - client.Throwaway = v } // Reauthenticate calls client.ReauthFunc in a thread-safe way. If this is @@ -228,7 +145,7 @@ func (client *ProviderClient) Reauthenticate(previousToken string) (err error) { return nil } - if client.reauthmut == nil { + if client.mut == nil { return client.ReauthFunc() } @@ -243,6 +160,9 @@ func (client *ProviderClient) Reauthenticate(previousToken string) (err error) { } client.reauthmut.Unlock() + client.mut.Lock() + defer client.mut.Unlock() + client.reauthmut.Lock() client.reauthmut.reauthing = true client.reauthmut.done = sync.NewCond(client.reauthmut) @@ -318,9 +238,6 @@ func (client *ProviderClient) Request(method, url string, options *RequestOpts) if err != nil { return nil, err } - if client.Context != nil { - req = req.WithContext(client.Context) - } // Populate the request headers. Apply options.MoreHeaders last, to give the caller the chance to // modify or omit any header. @@ -359,14 +276,13 @@ func (client *ProviderClient) Request(method, url string, options *RequestOpts) } // Allow default OkCodes if none explicitly set - okc := options.OkCodes - if okc == nil { - okc = defaultOkCodes(method) + if options.OkCodes == nil { + options.OkCodes = defaultOkCodes(method) } // Validate the HTTP response status. var ok bool - for _, code := range okc { + for _, code := range options.OkCodes { if resp.StatusCode == code { ok = true break @@ -443,11 +359,6 @@ func (client *ProviderClient) Request(method, url string, options *RequestOpts) if error408er, ok := errType.(Err408er); ok { err = error408er.Error408(respErr) } - case http.StatusConflict: - err = ErrDefault409{respErr} - if error409er, ok := errType.(Err409er); ok { - err = error409er.Error409(respErr) - } case 429: err = ErrDefault429{respErr} if error429er, ok := errType.(Err429er); ok { diff --git a/vendor/github.com/gophercloud/gophercloud/service_client.go b/vendor/github.com/gophercloud/gophercloud/service_client.go index f222f05a66..2734510e1b 100644 --- a/vendor/github.com/gophercloud/gophercloud/service_client.go +++ b/vendor/github.com/gophercloud/gophercloud/service_client.go @@ -129,10 +129,6 @@ func (client *ServiceClient) setMicroversionHeader(opts *RequestOpts) { opts.MoreHeaders["X-OpenStack-Manila-API-Version"] = client.Microversion case "volume": opts.MoreHeaders["X-OpenStack-Volume-API-Version"] = client.Microversion - case "baremetal": - opts.MoreHeaders["X-OpenStack-Ironic-API-Version"] = client.Microversion - case "baremetal-introspection": - opts.MoreHeaders["X-OpenStack-Ironic-Inspector-API-Version"] = client.Microversion } if client.Type != "" { diff --git a/vendor/github.com/mailru/easyjson/jlexer/lexer.go b/vendor/github.com/mailru/easyjson/jlexer/lexer.go index ddd376b844..51f056615c 100644 --- a/vendor/github.com/mailru/easyjson/jlexer/lexer.go +++ b/vendor/github.com/mailru/easyjson/jlexer/lexer.go @@ -521,12 +521,11 @@ func (r *Lexer) SkipRecursive() { r.scanToken() var start, end byte - switch r.token.delimValue { - case '{': + if r.token.delimValue == '{' { start, end = '{', '}' - case '[': + } else if r.token.delimValue == '[' { start, end = '[', ']' - default: + } else { r.consume() return } @@ -1152,7 +1151,7 @@ func (r *Lexer) Interface() interface{} { } else if r.token.delimValue == '[' { r.consume() - ret := []interface{}{} + var ret []interface{} for !r.IsDelim(']') { ret = append(ret, r.Interface()) r.WantComma() diff --git a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go index 2f04ee5b5c..9d666ffcf0 100644 --- a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go +++ b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go @@ -7,7 +7,6 @@ package terminal import ( "bytes" "io" - "strconv" "sync" "unicode/utf8" ) @@ -272,44 +271,34 @@ func (t *Terminal) moveCursorToPos(pos int) { } func (t *Terminal) move(up, down, left, right int) { - m := []rune{} - - // 1 unit up can be expressed as ^[[A or ^[A - // 5 units up can be expressed as ^[[5A - - if up == 1 { - m = append(m, keyEscape, '[', 'A') - } else if up > 1 { - m = append(m, keyEscape, '[') - m = append(m, []rune(strconv.Itoa(up))...) - m = append(m, 'A') - } - - if down == 1 { - m = append(m, keyEscape, '[', 'B') - } else if down > 1 { - m = append(m, keyEscape, '[') - m = append(m, []rune(strconv.Itoa(down))...) - m = append(m, 'B') - } - - if right == 1 { - m = append(m, keyEscape, '[', 'C') - } else if right > 1 { - m = append(m, keyEscape, '[') - m = append(m, []rune(strconv.Itoa(right))...) - m = append(m, 'C') - } - - if left == 1 { - m = append(m, keyEscape, '[', 'D') - } else if left > 1 { - m = append(m, keyEscape, '[') - m = append(m, []rune(strconv.Itoa(left))...) - m = append(m, 'D') - } - - t.queue(m) + movement := make([]rune, 3*(up+down+left+right)) + m := movement + for i := 0; i < up; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'A' + m = m[3:] + } + for i := 0; i < down; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'B' + m = m[3:] + } + for i := 0; i < left; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'D' + m = m[3:] + } + for i := 0; i < right; i++ { + m[0] = keyEscape + m[1] = '[' + m[2] = 'C' + m = m[3:] + } + + t.queue(movement) } func (t *Terminal) clearLineToRight() { diff --git a/vendor/golang.org/x/time/rate/rate.go b/vendor/golang.org/x/time/rate/rate.go index 938feaffe9..ae93e24719 100644 --- a/vendor/golang.org/x/time/rate/rate.go +++ b/vendor/golang.org/x/time/rate/rate.go @@ -6,12 +6,11 @@ package rate import ( + "context" "fmt" "math" "sync" "time" - - "golang.org/x/net/context" ) // Limit defines the maximum frequency of some events. @@ -244,8 +243,12 @@ func (lim *Limiter) WaitN(ctx context.Context, n int) (err error) { if !r.ok { return fmt.Errorf("rate: Wait(n=%d) would exceed context deadline", n) } - // Wait - t := time.NewTimer(r.DelayFrom(now)) + // Wait if necessary + delay := r.DelayFrom(now) + if delay == 0 { + return nil + } + t := time.NewTimer(delay) defer t.Stop() select { case <-t.C: diff --git a/vendor/golang.org/x/tools/go/packages/external.go b/vendor/golang.org/x/tools/go/packages/external.go index 22ff769ef2..860c3ec156 100644 --- a/vendor/golang.org/x/tools/go/packages/external.go +++ b/vendor/golang.org/x/tools/go/packages/external.go @@ -18,7 +18,7 @@ import ( // Driver type driverRequest struct { - Command string `json:"command"` + Command string `json "command"` Mode LoadMode `json:"mode"` Env []string `json:"env"` BuildFlags []string `json:"build_flags"` diff --git a/vendor/golang.org/x/tools/go/packages/golist.go b/vendor/golang.org/x/tools/go/packages/golist.go index 72c0c5d632..71157599f6 100644 --- a/vendor/golang.org/x/tools/go/packages/golist.go +++ b/vendor/golang.org/x/tools/go/packages/golist.go @@ -78,7 +78,7 @@ func goListDriver(cfg *Config, patterns ...string) (*driverResponse, error) { var sizes types.Sizes var sizeserr error var sizeswg sync.WaitGroup - if cfg.Mode&NeedTypesSizes != 0 || cfg.Mode&NeedTypes != 0 { + if cfg.Mode&NeedTypesSizes != 0 { sizeswg.Add(1) go func() { sizes, sizeserr = getSizes(cfg) @@ -128,7 +128,7 @@ extractQueries: // patterns also requires a go list call, since it's the equivalent of // ".". if len(restPatterns) > 0 || len(patterns) == 0 { - dr, err := golistDriver(cfg, restPatterns...) + dr, err := golistDriverCurrent(cfg, restPatterns...) if err != nil { return nil, err } @@ -147,13 +147,13 @@ extractQueries: var containsCandidates []string if len(containFiles) != 0 { - if err := runContainsQueries(cfg, golistDriver, response, containFiles); err != nil { + if err := runContainsQueries(cfg, golistDriverCurrent, response, containFiles); err != nil { return nil, err } } if len(packagesNamed) != 0 { - if err := runNamedQueries(cfg, golistDriver, response, packagesNamed); err != nil { + if err := runNamedQueries(cfg, golistDriverCurrent, response, packagesNamed); err != nil { return nil, err } } @@ -166,25 +166,17 @@ extractQueries: containsCandidates = append(containsCandidates, modifiedPkgs...) containsCandidates = append(containsCandidates, needPkgs...) } - if err := addNeededOverlayPackages(cfg, golistDriver, response, needPkgs); err != nil { - return nil, err + + if len(needPkgs) > 0 { + addNeededOverlayPackages(cfg, golistDriverCurrent, response, needPkgs) + if err != nil { + return nil, err + } } // Check candidate packages for containFiles. if len(containFiles) > 0 { for _, id := range containsCandidates { - pkg, ok := response.seenPackages[id] - if !ok { - response.addPackage(&Package{ - ID: id, - Errors: []Error{ - { - Kind: ListError, - Msg: fmt.Sprintf("package %s expected but not seen", id), - }, - }, - }) - continue - } + pkg := response.seenPackages[id] for _, f := range containFiles { for _, g := range pkg.GoFiles { if sameFile(f, g) { @@ -199,9 +191,6 @@ extractQueries: } func addNeededOverlayPackages(cfg *Config, driver driver, response *responseDeduper, pkgs []string) error { - if len(pkgs) == 0 { - return nil - } dr, err := driver(cfg, pkgs...) if err != nil { return err @@ -209,11 +198,6 @@ func addNeededOverlayPackages(cfg *Config, driver driver, response *responseDedu for _, pkg := range dr.Packages { response.addPackage(pkg) } - _, needPkgs, err := processGolistOverlay(cfg, response.dr) - if err != nil { - return err - } - addNeededOverlayPackages(cfg, driver, response, needPkgs) return nil } @@ -556,10 +540,10 @@ func otherFiles(p *jsonPackage) [][]string { return [][]string{p.CFiles, p.CXXFiles, p.MFiles, p.HFiles, p.FFiles, p.SFiles, p.SwigFiles, p.SwigCXXFiles, p.SysoFiles} } -// golistDriver uses the "go list" command to expand the pattern -// words and return metadata for the specified packages. dir may be -// "" and env may be nil, as per os/exec.Command. -func golistDriver(cfg *Config, words ...string) (*driverResponse, error) { +// golistDriverCurrent uses the "go list" command to expand the +// pattern words and return metadata for the specified packages. +// dir may be "" and env may be nil, as per os/exec.Command. +func golistDriverCurrent(cfg *Config, words ...string) (*driverResponse, error) { // go list uses the following identifiers in ImportPath and Imports: // // "p" -- importable package or main (command) @@ -777,31 +761,8 @@ func invokeGo(cfg *Config, args ...string) (*bytes.Buffer, error) { // the error in the Err section of stdout in case -e option is provided. // This fix is provided for backwards compatibility. if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "named files must be .go files") { - output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Workaround for #29280: go list -e has incorrect behavior when an ad-hoc package doesn't exist. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no such file or directory") { - output := fmt.Sprintf(`{"ImportPath": "command-line-arguments","Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - strings.Trim(stderr.String(), "\n")) - return bytes.NewBufferString(output), nil - } - - // Workaround for an instance of golang.org/issue/26755: go list -e will return a non-zero exit - // status if there's a dependency on a package that doesn't exist. But it should return - // a zero exit status and set an error on that package. - if len(stderr.String()) > 0 && strings.Contains(stderr.String(), "no Go files in") { - // try to extract package name from string - stderrStr := stderr.String() - var importPath string - colon := strings.Index(stderrStr, ":") - if colon > 0 && strings.HasPrefix(stderrStr, "go build ") { - importPath = stderrStr[len("go build "):colon] - } - output := fmt.Sprintf(`{"ImportPath": %q,"Incomplete": true,"Error": {"Pos": "","Err": %q}}`, - importPath, strings.Trim(stderrStr, "\n")) + output := fmt.Sprintf(`{"ImportPath": "","Incomplete": true,"Error": {"Pos": "","Err": %s}}`, + strconv.Quote(strings.Trim(stderr.String(), "\n"))) return bytes.NewBufferString(output), nil } diff --git a/vendor/golang.org/x/tools/go/packages/golist_overlay.go b/vendor/golang.org/x/tools/go/packages/golist_overlay.go index ce322ce5ed..71ffcd9d55 100644 --- a/vendor/golang.org/x/tools/go/packages/golist_overlay.go +++ b/vendor/golang.org/x/tools/go/packages/golist_overlay.go @@ -1,15 +1,11 @@ package packages import ( - "bytes" - "encoding/json" "go/parser" "go/token" - "path" "path/filepath" "strconv" "strings" - "sync" ) // processGolistOverlay provides rudimentary support for adding @@ -31,123 +27,50 @@ func processGolistOverlay(cfg *Config, response *driverResponse) (modifiedPkgs, havePkgs[pkg.PkgPath] = pkg.ID } - var rootDirs map[string]string - var onceGetRootDirs sync.Once - - for opath, contents := range cfg.Overlay { - base := filepath.Base(opath) - if strings.HasSuffix(opath, "_test.go") { +outer: + for path, contents := range cfg.Overlay { + base := filepath.Base(path) + if strings.HasSuffix(path, "_test.go") { // Overlays don't support adding new test files yet. // TODO(matloob): support adding new test files. continue } - dir := filepath.Dir(opath) - var pkg *Package - var fileExists bool - for _, p := range response.Packages { - for _, f := range p.GoFiles { - if !sameFile(filepath.Dir(f), dir) { - continue + dir := filepath.Dir(path) + for _, pkg := range response.Packages { + var dirContains, fileExists bool + for _, f := range pkg.GoFiles { + if sameFile(filepath.Dir(f), dir) { + dirContains = true } - pkg = p if filepath.Base(f) == base { fileExists = true } } - } - // The overlay could have included an entirely new package. - if pkg == nil { - onceGetRootDirs.Do(func() { - rootDirs = determineRootDirs(cfg) - }) - // Try to find the module or gopath dir the file is contained in. - // Then for modules, add the module opath to the beginning. - var pkgPath string - for rdir, rpath := range rootDirs { - // TODO(matloob): This doesn't properly handle symlinks. - r, err := filepath.Rel(rdir, dir) - if err != nil { - continue + if dirContains { + if !fileExists { + pkg.GoFiles = append(pkg.GoFiles, path) // TODO(matloob): should the file just be added to GoFiles? + pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, path) + modifiedPkgsSet[pkg.ID] = true } - pkgPath = filepath.ToSlash(r) - if rpath != "" { - pkgPath = path.Join(rpath, pkgPath) - } - // We only create one new package even it can belong in multiple modules or GOPATH entries. - // This is okay because tools (such as the LSP) that use overlays will recompute the overlay - // once the file is saved, and golist will do the right thing. - // TODO(matloob): Implement module tiebreaking? - break - } - if pkgPath == "" { - continue - } - pkgName, ok := extractPackageName(opath, contents) - if !ok { - continue - } - id := pkgPath - // Try to reclaim a package with the same id if it exists in the response. - for _, p := range response.Packages { - if reclaimPackage(p, id, opath, contents) { - pkg = p - break + imports, err := extractImports(path, contents) + if err != nil { + // Let the parser or type checker report errors later. + continue outer } - } - // Otherwise, create a new package - if pkg == nil { - pkg = &Package{PkgPath: pkgPath, ID: id, Name: pkgName, Imports: make(map[string]*Package)} - // TODO(matloob): Is it okay to amend response.Packages this way? - response.Packages = append(response.Packages, pkg) - havePkgs[pkg.PkgPath] = id - } - } - if !fileExists { - pkg.GoFiles = append(pkg.GoFiles, opath) - // TODO(matloob): Adding the file to CompiledGoFiles can exhibit the wrong behavior - // if the file will be ignored due to its build tags. - pkg.CompiledGoFiles = append(pkg.CompiledGoFiles, opath) - modifiedPkgsSet[pkg.ID] = true - } - imports, err := extractImports(opath, contents) - if err != nil { - // Let the parser or type checker report errors later. - continue - } - for _, imp := range imports { - _, found := pkg.Imports[imp] - if !found { - // TODO(matloob): Handle cases when the following block isn't correct. - // These include imports of test variants, imports of vendored packages, etc. - id, ok := havePkgs[imp] - if !ok { - id = imp + for _, imp := range imports { + _, found := pkg.Imports[imp] + if !found { + needPkgsSet[imp] = true + // TODO(matloob): Handle cases when the following block isn't correct. + // These include imports of test variants, imports of vendored packages, etc. + id, ok := havePkgs[imp] + if !ok { + id = imp + } + pkg.Imports[imp] = &Package{ID: id} + } } - pkg.Imports[imp] = &Package{ID: id} - } - } - continue - } - - // toPkgPath tries to guess the package path given the id. - // This isn't always correct -- it's certainly wrong for - // vendored packages' paths. - toPkgPath := func(id string) string { - // TODO(matloob): Handle vendor paths. - i := strings.IndexByte(id, ' ') - if i >= 0 { - return id[:i] - } - return id - } - - // Do another pass now that new packages have been created to determine the - // set of missing packages. - for _, pkg := range response.Packages { - for _, imp := range pkg.Imports { - pkgPath := toPkgPath(imp.ID) - if _, ok := havePkgs[pkgPath]; !ok { - needPkgsSet[pkgPath] = true + continue outer } } } @@ -163,46 +86,6 @@ func processGolistOverlay(cfg *Config, response *driverResponse) (modifiedPkgs, return modifiedPkgs, needPkgs, err } -// determineRootDirs returns a mapping from directories code can be contained in to the -// corresponding import path prefixes of those directories. -// Its result is used to try to determine the import path for a package containing -// an overlay file. -func determineRootDirs(cfg *Config) map[string]string { - // Assume modules first: - out, err := invokeGo(cfg, "list", "-m", "-json", "all") - if err != nil { - return determineRootDirsGOPATH(cfg) - } - m := map[string]string{} - type jsonMod struct{ Path, Dir string } - for dec := json.NewDecoder(out); dec.More(); { - mod := new(jsonMod) - if err := dec.Decode(mod); err != nil { - return m // Give up and return an empty map. Package won't be found for overlay. - } - if mod.Dir != "" && mod.Path != "" { - // This is a valid module; add it to the map. - m[mod.Dir] = mod.Path - } - } - return m -} - -func determineRootDirsGOPATH(cfg *Config) map[string]string { - m := map[string]string{} - out, err := invokeGo(cfg, "env", "GOPATH") - if err != nil { - // Could not determine root dir mapping. Everything is best-effort, so just return an empty map. - // When we try to find the import path for a directory, there will be no root-dir match and - // we'll give up. - return m - } - for _, p := range filepath.SplitList(string(bytes.TrimSpace(out.Bytes()))) { - m[filepath.Join(p, "src")] = "" - } - return m -} - func extractImports(filename string, contents []byte) ([]string, error) { f, err := parser.ParseFile(token.NewFileSet(), filename, contents, parser.ImportsOnly) // TODO(matloob): reuse fileset? if err != nil { @@ -219,44 +102,3 @@ func extractImports(filename string, contents []byte) ([]string, error) { } return res, nil } - -// reclaimPackage attempts to reuse a package that failed to load in an overlay. -// -// If the package has errors and has no Name, GoFiles, or Imports, -// then it's possible that it doesn't yet exist on disk. -func reclaimPackage(pkg *Package, id string, filename string, contents []byte) bool { - // TODO(rstambler): Check the message of the actual error? - // It differs between $GOPATH and module mode. - if pkg.ID != id { - return false - } - if len(pkg.Errors) != 1 { - return false - } - if pkg.Name != "" || pkg.ExportFile != "" { - return false - } - if len(pkg.GoFiles) > 0 || len(pkg.CompiledGoFiles) > 0 || len(pkg.OtherFiles) > 0 { - return false - } - if len(pkg.Imports) > 0 { - return false - } - pkgName, ok := extractPackageName(filename, contents) - if !ok { - return false - } - pkg.Name = pkgName - pkg.Errors = nil - return true -} - -func extractPackageName(filename string, contents []byte) (string, bool) { - // TODO(rstambler): Check the message of the actual error? - // It differs between $GOPATH and module mode. - f, err := parser.ParseFile(token.NewFileSet(), filename, contents, parser.PackageClauseOnly) // TODO(matloob): reuse fileset? - if err != nil { - return "", false - } - return f.Name.Name, true -} diff --git a/vendor/golang.org/x/tools/go/packages/packages.go b/vendor/golang.org/x/tools/go/packages/packages.go index cd151469a2..775dd940ca 100644 --- a/vendor/golang.org/x/tools/go/packages/packages.go +++ b/vendor/golang.org/x/tools/go/packages/packages.go @@ -25,16 +25,24 @@ import ( "golang.org/x/tools/go/gcexportdata" ) -// A LoadMode controls the amount of detail to return when loading. -// The bits below can be combined to specify which fields should be -// filled in the result packages. -// The zero value is a special case, equivalent to combining -// the NeedName, NeedFiles, and NeedCompiledGoFiles bits. -// ID and Errors (if present) will always be filled. -// Load may return more information than requested. +// A LoadMode specifies the amount of detail to return when loading. +// Higher-numbered modes cause Load to return more information, +// but may be slower. Load may return more information than requested. type LoadMode int const ( + // The following constants are used to specify which fields of the Package + // should be filled when loading is done. As a special case to provide + // backwards compatibility, a LoadMode of 0 is equivalent to LoadFiles. + // For all other LoadModes, the bits below specify which fields will be filled + // in the result packages. + // WARNING: This part of the go/packages API is EXPERIMENTAL. It might + // be changed or removed up until April 15 2019. After that date it will + // be frozen. + // TODO(matloob): Remove this comment on April 15. + + // ID and Errors (if present) will always be filled. + // NeedName adds Name and PkgPath. NeedName LoadMode = 1 << iota @@ -69,24 +77,30 @@ const ( ) const ( - // Deprecated: LoadFiles exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. + // LoadFiles finds the packages and computes their source file lists. + // Package fields: ID, Name, Errors, GoFiles, CompiledGoFiles, and OtherFiles. LoadFiles = NeedName | NeedFiles | NeedCompiledGoFiles - // Deprecated: LoadImports exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. + // LoadImports adds import information for each package + // and its dependencies. + // Package fields added: Imports. LoadImports = LoadFiles | NeedImports | NeedDeps - // Deprecated: LoadTypes exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadTypes = LoadImports | NeedTypes | NeedTypesSizes - - // Deprecated: LoadSyntax exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. - LoadSyntax = LoadTypes | NeedSyntax | NeedTypesInfo - - // Deprecated: LoadAllSyntax exists for historical compatibility - // and should not be used. Please directly specify the needed fields using the Need values. + // LoadTypes adds type information for package-level + // declarations in the packages matching the patterns. + // Package fields added: Types, Fset, and IllTyped. + // This mode uses type information provided by the build system when + // possible, and may fill in the ExportFile field. + LoadTypes = LoadImports | NeedTypes + + // LoadSyntax adds typed syntax trees for the packages matching the patterns. + // Package fields added: Syntax, and TypesInfo, for direct pattern matches only. + LoadSyntax = LoadTypes | NeedSyntax | NeedTypesInfo | NeedTypesSizes + + // LoadAllSyntax adds typed syntax trees for the packages matching the patterns + // and all dependencies. + // Package fields added: Types, Fset, IllTyped, Syntax, and TypesInfo, + // for all packages in the import graph. LoadAllSyntax = LoadSyntax ) @@ -123,7 +137,7 @@ type Config struct { BuildFlags []string // Fset provides source position information for syntax trees and types. - // If Fset is nil, Load will use a new fileset, but preserve Fset's value. + // If Fset is nil, the loader will create a new FileSet. Fset *token.FileSet // ParseFile is called to read and parse each file @@ -261,9 +275,9 @@ type Package struct { Imports map[string]*Package // Types provides type information for the package. - // The NeedTypes LoadMode bit sets this field for packages matching the - // patterns; type information for dependencies may be missing or incomplete, - // unless NeedDeps and NeedImports are also set. + // Modes LoadTypes and above set this field for packages matching the + // patterns; type information for dependencies may be missing or incomplete. + // Mode LoadAllSyntax sets this field for all packages, including dependencies. Types *types.Package // Fset provides position information for Types, TypesInfo, and Syntax. @@ -276,9 +290,8 @@ type Package struct { // Syntax is the package's syntax trees, for the files listed in CompiledGoFiles. // - // The NeedSyntax LoadMode bit populates this field for packages matching the patterns. - // If NeedDeps and NeedImports are also set, this field will also be populated - // for dependencies. + // Mode LoadSyntax sets this field for packages matching the patterns. + // Mode LoadAllSyntax sets this field for all packages, including dependencies. Syntax []*ast.File // TypesInfo provides type information about the package's syntax trees. @@ -405,33 +418,17 @@ type loaderPackage struct { type loader struct { pkgs map[string]*loaderPackage Config - sizes types.Sizes - parseCache map[string]*parseValue - parseCacheMu sync.Mutex - exportMu sync.Mutex // enforces mutual exclusion of exportdata operations - - // TODO(matloob): Add an implied mode here and use that instead of mode. - // Implied mode would contain all the fields we need the data for so we can - // get the actually requested fields. We'll zero them out before returning - // packages to the user. This will make it easier for us to get the conditions - // where we need certain modes right. -} - -type parseValue struct { - f *ast.File - err error - ready chan struct{} + sizes types.Sizes + exportMu sync.Mutex // enforces mutual exclusion of exportdata operations } func newLoader(cfg *Config) *loader { - ld := &loader{ - parseCache: map[string]*parseValue{}, - } + ld := &loader{} if cfg != nil { ld.Config = *cfg } if ld.Config.Mode == 0 { - ld.Config.Mode = NeedName | NeedFiles | NeedCompiledGoFiles // Preserve zero behavior of Mode for backwards compatibility. + ld.Config.Mode = LoadFiles // Preserve zero behavior of Mode for backwards compatibility. } if ld.Config.Env == nil { ld.Config.Env = os.Environ() @@ -454,8 +451,12 @@ func newLoader(cfg *Config) *loader { // because we load source if export data is missing. if ld.ParseFile == nil { ld.ParseFile = func(fset *token.FileSet, filename string, src []byte) (*ast.File, error) { + var isrc interface{} + if src != nil { + isrc = src + } const mode = parser.AllErrors | parser.ParseComments - return parser.ParseFile(fset, filename, src, mode) + return parser.ParseFile(fset, filename, isrc, mode) } } } @@ -553,16 +554,13 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) { if lpkg.needsrc { srcPkgs = append(srcPkgs, lpkg) } - if ld.Mode&NeedTypesSizes != 0 { - lpkg.TypesSizes = ld.sizes - } stack = stack[:len(stack)-1] // pop lpkg.color = black return lpkg.needsrc } - if ld.Mode&(NeedImports|NeedDeps) == 0 { + if ld.Mode&NeedImports == 0 { // We do this to drop the stub import packages that we are not even going to try to resolve. for _, lpkg := range initial { lpkg.Imports = nil @@ -573,7 +571,7 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) { visit(lpkg) } } - if ld.Mode&NeedDeps != 0 { // TODO(matloob): This is only the case if NeedTypes is also set, right? + if ld.Mode&NeedDeps != 0 { for _, lpkg := range srcPkgs { // Complete type information is required for the // immediate dependencies of each source package. @@ -601,48 +599,46 @@ func (ld *loader) refine(roots []string, list ...*Package) ([]*Package, error) { importPlaceholders := make(map[string]*Package) for i, lpkg := range initial { result[i] = lpkg.Package - } - for i := range ld.pkgs { // Clear all unrequested fields, for extra de-Hyrum-ization. if ld.Mode&NeedName == 0 { - ld.pkgs[i].Name = "" - ld.pkgs[i].PkgPath = "" + result[i].Name = "" + result[i].PkgPath = "" } if ld.Mode&NeedFiles == 0 { - ld.pkgs[i].GoFiles = nil - ld.pkgs[i].OtherFiles = nil + result[i].GoFiles = nil + result[i].OtherFiles = nil } if ld.Mode&NeedCompiledGoFiles == 0 { - ld.pkgs[i].CompiledGoFiles = nil + result[i].CompiledGoFiles = nil } if ld.Mode&NeedImports == 0 { - ld.pkgs[i].Imports = nil + result[i].Imports = nil } if ld.Mode&NeedExportsFile == 0 { - ld.pkgs[i].ExportFile = "" + result[i].ExportFile = "" } if ld.Mode&NeedTypes == 0 { - ld.pkgs[i].Types = nil - ld.pkgs[i].Fset = nil - ld.pkgs[i].IllTyped = false + result[i].Types = nil + result[i].Fset = nil + result[i].IllTyped = false } if ld.Mode&NeedSyntax == 0 { - ld.pkgs[i].Syntax = nil + result[i].Syntax = nil } if ld.Mode&NeedTypesInfo == 0 { - ld.pkgs[i].TypesInfo = nil + result[i].TypesInfo = nil } if ld.Mode&NeedTypesSizes == 0 { - ld.pkgs[i].TypesSizes = nil + result[i].TypesSizes = nil } if ld.Mode&NeedDeps == 0 { - for j, pkg := range ld.pkgs[i].Imports { + for j, pkg := range result[i].Imports { ph, ok := importPlaceholders[pkg.ID] if !ok { ph = &Package{ID: pkg.ID} importPlaceholders[pkg.ID] = ph } - ld.pkgs[i].Imports[j] = ph + result[i].Imports[j] = ph } } } @@ -674,7 +670,7 @@ func (ld *loader) loadRecursive(lpkg *loaderPackage) { // loadPackage loads the specified package. // It must be called only once per Package, // after immediate dependencies are loaded. -// Precondition: ld.Mode & NeedTypes. +// Precondition: ld.Mode >= LoadTypes. func (ld *loader) loadPackage(lpkg *loaderPackage) { if lpkg.PkgPath == "unsafe" { // Fill in the blanks to avoid surprises. @@ -857,42 +853,6 @@ func (f importerFunc) Import(path string) (*types.Package, error) { return f(pat // the number of parallel I/O calls per process. var ioLimit = make(chan bool, 20) -func (ld *loader) parseFile(filename string) (*ast.File, error) { - ld.parseCacheMu.Lock() - v, ok := ld.parseCache[filename] - if ok { - // cache hit - ld.parseCacheMu.Unlock() - <-v.ready - } else { - // cache miss - v = &parseValue{ready: make(chan struct{})} - ld.parseCache[filename] = v - ld.parseCacheMu.Unlock() - - var src []byte - for f, contents := range ld.Config.Overlay { - if sameFile(f, filename) { - src = contents - } - } - var err error - if src == nil { - ioLimit <- true // wait - src, err = ioutil.ReadFile(filename) - <-ioLimit // signal - } - if err != nil { - v.err = err - } else { - v.f, v.err = ld.ParseFile(ld.Fset, filename, src) - } - - close(v.ready) - } - return v.f, v.err -} - // parseFiles reads and parses the Go source files and returns the ASTs // of the ones that could be at least partially parsed, along with a // list of I/O and parse errors encountered. @@ -913,7 +873,24 @@ func (ld *loader) parseFiles(filenames []string) ([]*ast.File, []error) { } wg.Add(1) go func(i int, filename string) { - parsed[i], errors[i] = ld.parseFile(filename) + ioLimit <- true // wait + // ParseFile may return both an AST and an error. + var src []byte + for f, contents := range ld.Config.Overlay { + if sameFile(f, filename) { + src = contents + } + } + var err error + if src == nil { + src, err = ioutil.ReadFile(filename) + } + if err != nil { + parsed[i], errors[i] = nil, err + } else { + parsed[i], errors[i] = ld.ParseFile(ld.Fset, filename, src) + } + <-ioLimit // signal wg.Done() }(i, file) } diff --git a/vendor/golang.org/x/tools/internal/imports/fix.go b/vendor/golang.org/x/tools/imports/fix.go similarity index 93% rename from vendor/golang.org/x/tools/internal/imports/fix.go rename to vendor/golang.org/x/tools/imports/fix.go index d9ba3b786d..4c0339305d 100644 --- a/vendor/golang.org/x/tools/internal/imports/fix.go +++ b/vendor/golang.org/x/tools/imports/fix.go @@ -31,27 +31,39 @@ import ( "golang.org/x/tools/internal/gopathwalk" ) +// Debug controls verbose logging. +var Debug = false + +// LocalPrefix is a comma-separated string of import path prefixes, which, if +// set, instructs Process to sort the import paths with the given prefixes +// into another group after 3rd-party packages. +var LocalPrefix string + +func localPrefixes() []string { + if LocalPrefix != "" { + return strings.Split(LocalPrefix, ",") + } + return nil +} + // importToGroup is a list of functions which map from an import path to // a group number. -var importToGroup = []func(env *ProcessEnv, importPath string) (num int, ok bool){ - func(env *ProcessEnv, importPath string) (num int, ok bool) { - if env.LocalPrefix == "" { - return - } - for _, p := range strings.Split(env.LocalPrefix, ",") { +var importToGroup = []func(importPath string) (num int, ok bool){ + func(importPath string) (num int, ok bool) { + for _, p := range localPrefixes() { if strings.HasPrefix(importPath, p) || strings.TrimSuffix(p, "/") == importPath { return 3, true } } return }, - func(_ *ProcessEnv, importPath string) (num int, ok bool) { + func(importPath string) (num int, ok bool) { if strings.HasPrefix(importPath, "appengine") { return 2, true } return }, - func(_ *ProcessEnv, importPath string) (num int, ok bool) { + func(importPath string) (num int, ok bool) { if strings.Contains(importPath, ".") { return 1, true } @@ -59,9 +71,9 @@ var importToGroup = []func(env *ProcessEnv, importPath string) (num int, ok bool }, } -func importGroup(env *ProcessEnv, importPath string) int { +func importGroup(importPath string) int { for _, fn := range importToGroup { - if n, ok := fn(env, importPath); ok { + if n, ok := fn(importPath); ok { return n } } @@ -229,7 +241,7 @@ type pass struct { fset *token.FileSet // fset used to parse f and its siblings. f *ast.File // the file being fixed. srcDir string // the directory containing f. - env *ProcessEnv // the environment to use for go commands, etc. + fixEnv *fixEnv // the environment to use for go commands, etc. loadRealPackageNames bool // if true, load package names from disk rather than guessing them. otherFiles []*ast.File // sibling files. @@ -254,7 +266,7 @@ func (p *pass) loadPackageNames(imports []*importInfo) error { unknown = append(unknown, imp.importPath) } - names, err := p.env.getResolver().loadPackageNames(unknown, p.srcDir) + names, err := p.fixEnv.getResolver().loadPackageNames(unknown, p.srcDir) if err != nil { return err } @@ -312,7 +324,7 @@ func (p *pass) load() bool { if p.loadRealPackageNames { err := p.loadPackageNames(append(imports, p.candidates...)) if err != nil { - if p.env.Debug { + if Debug { log.Printf("loading package names: %v", err) } return false @@ -436,13 +448,13 @@ func (p *pass) addCandidate(imp *importInfo, pkg *packageInfo) { // easily be extended by adding a file with an init function. var fixImports = fixImportsDefault -func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *ProcessEnv) error { +func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *fixEnv) error { abs, err := filepath.Abs(filename) if err != nil { return err } srcDir := filepath.Dir(abs) - if env.Debug { + if Debug { log.Printf("fixImports(filename=%q), abs=%q, srcDir=%q ...", filename, abs, srcDir) } @@ -474,7 +486,7 @@ func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *P // Third pass: get real package names where we had previously used // the naive algorithm. This is the first step that will use the // environment, so we provide it here for the first time. - p = &pass{fset: fset, f: f, srcDir: srcDir, env: env} + p = &pass{fset: fset, f: f, srcDir: srcDir, fixEnv: env} p.loadRealPackageNames = true p.otherFiles = otherFiles if p.load() { @@ -498,16 +510,13 @@ func fixImportsDefault(fset *token.FileSet, f *ast.File, filename string, env *P return nil } -// ProcessEnv contains environment variables and settings that affect the use of +// fixEnv contains environment variables and settings that affect the use of // the go command, the go/build package, etc. -type ProcessEnv struct { - LocalPrefix string - Debug bool - +type fixEnv struct { // If non-empty, these will be used instead of the // process-wide values. - GOPATH, GOROOT, GO111MODULE, GOPROXY, GOFLAGS, GOSUMDB string - WorkingDir string + GOPATH, GOROOT, GO111MODULE, GOPROXY, GOFLAGS string + WorkingDir string // If true, use go/packages regardless of the environment. ForceGoPackages bool @@ -515,7 +524,7 @@ type ProcessEnv struct { resolver resolver } -func (e *ProcessEnv) env() []string { +func (e *fixEnv) env() []string { env := os.Environ() add := func(k, v string) { if v != "" { @@ -527,32 +536,28 @@ func (e *ProcessEnv) env() []string { add("GO111MODULE", e.GO111MODULE) add("GOPROXY", e.GOPROXY) add("GOFLAGS", e.GOFLAGS) - add("GOSUMDB", e.GOSUMDB) if e.WorkingDir != "" { add("PWD", e.WorkingDir) } return env } -func (e *ProcessEnv) getResolver() resolver { +func (e *fixEnv) getResolver() resolver { if e.resolver != nil { return e.resolver } if e.ForceGoPackages { - e.resolver = &goPackagesResolver{env: e} - return e.resolver + return &goPackagesResolver{env: e} } out, err := e.invokeGo("env", "GOMOD") if err != nil || len(bytes.TrimSpace(out.Bytes())) == 0 { - e.resolver = &gopathResolver{env: e} - return e.resolver + return &gopathResolver{env: e} } - e.resolver = &moduleResolver{env: e} - return e.resolver + return &moduleResolver{env: e} } -func (e *ProcessEnv) newPackagesConfig(mode packages.LoadMode) *packages.Config { +func (e *fixEnv) newPackagesConfig(mode packages.LoadMode) *packages.Config { return &packages.Config{ Mode: mode, Dir: e.WorkingDir, @@ -560,14 +565,14 @@ func (e *ProcessEnv) newPackagesConfig(mode packages.LoadMode) *packages.Config } } -func (e *ProcessEnv) buildContext() *build.Context { +func (e *fixEnv) buildContext() *build.Context { ctx := build.Default ctx.GOROOT = e.GOROOT ctx.GOPATH = e.GOPATH return &ctx } -func (e *ProcessEnv) invokeGo(args ...string) (*bytes.Buffer, error) { +func (e *fixEnv) invokeGo(args ...string) (*bytes.Buffer, error) { cmd := exec.Command("go", args...) stdout := &bytes.Buffer{} stderr := &bytes.Buffer{} @@ -576,7 +581,7 @@ func (e *ProcessEnv) invokeGo(args ...string) (*bytes.Buffer, error) { cmd.Env = e.env() cmd.Dir = e.WorkingDir - if e.Debug { + if Debug { defer func(start time.Time) { log.Printf("%s for %v", time.Since(start), cmdDebugStr(cmd)) }(time.Now()) } if err := cmd.Run(); err != nil { @@ -627,7 +632,7 @@ type resolver interface { // gopathResolver implements resolver for GOPATH and module workspaces using go/packages. type goPackagesResolver struct { - env *ProcessEnv + env *fixEnv } func (r *goPackagesResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { @@ -675,7 +680,7 @@ func (r *goPackagesResolver) scan(refs references) ([]*pkg, error) { } func addExternalCandidates(pass *pass, refs references, filename string) error { - dirScan, err := pass.env.getResolver().scan(refs) + dirScan, err := pass.fixEnv.getResolver().scan(refs) if err != nil { return err } @@ -702,7 +707,7 @@ func addExternalCandidates(pass *pass, refs references, filename string) error { go func(pkgName string, symbols map[string]bool) { defer wg.Done() - found, err := findImport(ctx, pass, dirScan, pkgName, symbols, filename) + found, err := findImport(ctx, pass.fixEnv, dirScan, pkgName, symbols, filename) if err != nil { firstErrOnce.Do(func() { @@ -773,7 +778,7 @@ func importPathToAssumedName(importPath string) string { // gopathResolver implements resolver for GOPATH workspaces. type gopathResolver struct { - env *ProcessEnv + env *fixEnv } func (r *gopathResolver) loadPackageNames(importPaths []string, srcDir string) (map[string]string, error) { @@ -786,7 +791,7 @@ func (r *gopathResolver) loadPackageNames(importPaths []string, srcDir string) ( // importPathToNameGoPath finds out the actual package name, as declared in its .go files. // If there's a problem, it returns "". -func importPathToName(env *ProcessEnv, importPath, srcDir string) (packageName string) { +func importPathToName(env *fixEnv, importPath, srcDir string) (packageName string) { // Fast path for standard library without going to disk. if _, ok := stdlib[importPath]; ok { return path.Base(importPath) // stdlib packages always match their paths. @@ -922,7 +927,7 @@ func (r *gopathResolver) scan(_ references) ([]*pkg, error) { dir: dir, }) } - gopathwalk.Walk(gopathwalk.SrcDirsRoots(r.env.buildContext()), add, gopathwalk.Options{Debug: r.env.Debug, ModulesEnabled: false}) + gopathwalk.Walk(gopathwalk.SrcDirsRoots(r.env.buildContext()), add, gopathwalk.Options{Debug: Debug, ModulesEnabled: false}) return result, nil } @@ -941,8 +946,8 @@ func VendorlessPath(ipath string) string { // loadExports returns the set of exported symbols in the package at dir. // It returns nil on error or if the package name in dir does not match expectPackage. -func loadExports(ctx context.Context, env *ProcessEnv, expectPackage string, pkg *pkg) (map[string]bool, error) { - if env.Debug { +func loadExports(ctx context.Context, env *fixEnv, expectPackage string, pkg *pkg) (map[string]bool, error) { + if Debug { log.Printf("loading exports in dir %s (seeking package %s)", pkg.dir, expectPackage) } if pkg.goPackage != nil { @@ -1015,7 +1020,7 @@ func loadExports(ctx context.Context, env *ProcessEnv, expectPackage string, pkg } } - if env.Debug { + if Debug { exportList := make([]string, 0, len(exports)) for k := range exports { exportList = append(exportList, k) @@ -1028,7 +1033,7 @@ func loadExports(ctx context.Context, env *ProcessEnv, expectPackage string, pkg // findImport searches for a package with the given symbols. // If no package is found, findImport returns ("", false, nil) -func findImport(ctx context.Context, pass *pass, dirScan []*pkg, pkgName string, symbols map[string]bool, filename string) (*pkg, error) { +func findImport(ctx context.Context, env *fixEnv, dirScan []*pkg, pkgName string, symbols map[string]bool, filename string) (*pkg, error) { pkgDir, err := filepath.Abs(filename) if err != nil { return nil, err @@ -1038,11 +1043,6 @@ func findImport(ctx context.Context, pass *pass, dirScan []*pkg, pkgName string, // Find candidate packages, looking only at their directory names first. var candidates []pkgDistance for _, pkg := range dirScan { - if pkg.dir == pkgDir && pass.f.Name.Name == pkgName { - // The candidate is in the same directory and has the - // same package name. Don't try to import ourselves. - continue - } if pkgIsCandidate(filename, pkgName, pkg) { candidates = append(candidates, pkgDistance{ pkg: pkg, @@ -1056,7 +1056,7 @@ func findImport(ctx context.Context, pass *pass, dirScan []*pkg, pkgName string, // ones. Note that this sorts by the de-vendored name, so // there's no "penalty" for vendoring. sort.Sort(byDistanceOrImportPathShortLength(candidates)) - if pass.env.Debug { + if Debug { for i, c := range candidates { log.Printf("%s candidate %d/%d: %v in %v", pkgName, i+1, len(candidates), c.pkg.importPathShort, c.pkg.dir) } @@ -1095,9 +1095,9 @@ func findImport(ctx context.Context, pass *pass, dirScan []*pkg, pkgName string, wg.Done() }() - exports, err := loadExports(ctx, pass.env, pkgName, c.pkg) + exports, err := loadExports(ctx, env, pkgName, c.pkg) if err != nil { - if pass.env.Debug { + if Debug { log.Printf("loading exports in dir %s (seeking package %s): %v", c.pkg.dir, pkgName, err) } resc <- nil diff --git a/vendor/golang.org/x/tools/imports/forward.go b/vendor/golang.org/x/tools/imports/forward.go deleted file mode 100644 index eef25969de..0000000000 --- a/vendor/golang.org/x/tools/imports/forward.go +++ /dev/null @@ -1,62 +0,0 @@ -// Package imports implements a Go pretty-printer (like package "go/format") -// that also adds or removes import statements as necessary. -package imports // import "golang.org/x/tools/imports" - -import ( - "go/build" - - intimp "golang.org/x/tools/internal/imports" -) - -// Options specifies options for processing files. -type Options struct { - Fragment bool // Accept fragment of a source file (no package statement) - AllErrors bool // Report all errors (not just the first 10 on different lines) - - Comments bool // Print comments (true if nil *Options provided) - TabIndent bool // Use tabs for indent (true if nil *Options provided) - TabWidth int // Tab width (8 if nil *Options provided) - - FormatOnly bool // Disable the insertion and deletion of imports -} - -// Debug controls verbose logging. -var Debug = false - -// LocalPrefix is a comma-separated string of import path prefixes, which, if -// set, instructs Process to sort the import paths with the given prefixes -// into another group after 3rd-party packages. -var LocalPrefix string - -// Process formats and adjusts imports for the provided file. -// If opt is nil the defaults are used. -// -// Note that filename's directory influences which imports can be chosen, -// so it is important that filename be accurate. -// To process data ``as if'' it were in filename, pass the data as a non-nil src. -func Process(filename string, src []byte, opt *Options) ([]byte, error) { - if opt == nil { - opt = &Options{Comments: true, TabIndent: true, TabWidth: 8} - } - intopt := &intimp.Options{ - Env: &intimp.ProcessEnv{ - GOPATH: build.Default.GOPATH, - GOROOT: build.Default.GOROOT, - Debug: Debug, - LocalPrefix: LocalPrefix, - }, - AllErrors: opt.AllErrors, - Comments: opt.Comments, - FormatOnly: opt.FormatOnly, - Fragment: opt.Fragment, - TabIndent: opt.TabIndent, - TabWidth: opt.TabWidth, - } - return intimp.Process(filename, src, intopt) -} - -// VendorlessPath returns the devendorized version of the import path ipath. -// For example, VendorlessPath("foo/bar/vendor/a/b") returns "a/b". -func VendorlessPath(ipath string) string { - return intimp.VendorlessPath(ipath) -} diff --git a/vendor/golang.org/x/tools/internal/imports/imports.go b/vendor/golang.org/x/tools/imports/imports.go similarity index 90% rename from vendor/golang.org/x/tools/internal/imports/imports.go rename to vendor/golang.org/x/tools/imports/imports.go index 6253337604..07101cb804 100644 --- a/vendor/golang.org/x/tools/internal/imports/imports.go +++ b/vendor/golang.org/x/tools/imports/imports.go @@ -6,13 +6,14 @@ // Package imports implements a Go pretty-printer (like package "go/format") // that also adds or removes import statements as necessary. -package imports +package imports // import "golang.org/x/tools/imports" import ( "bufio" "bytes" "fmt" "go/ast" + "go/build" "go/format" "go/parser" "go/printer" @@ -26,10 +27,8 @@ import ( "golang.org/x/tools/go/ast/astutil" ) -// Options is golang.org/x/tools/imports.Options with extra internal-only options. +// Options specifies options for processing files. type Options struct { - Env *ProcessEnv // The environment to use. Note: this contains the cached module and filesystem state. - Fragment bool // Accept fragment of a source file (no package statement) AllErrors bool // Report all errors (not just the first 10 on different lines) @@ -40,8 +39,21 @@ type Options struct { FormatOnly bool // Disable the insertion and deletion of imports } -// Process implements golang.org/x/tools/imports.Process with explicit context in env. +// Process formats and adjusts imports for the provided file. +// If opt is nil the defaults are used. +// +// Note that filename's directory influences which imports can be chosen, +// so it is important that filename be accurate. +// To process data ``as if'' it were in filename, pass the data as a non-nil src. func Process(filename string, src []byte, opt *Options) ([]byte, error) { + env := &fixEnv{GOPATH: build.Default.GOPATH, GOROOT: build.Default.GOROOT} + return process(filename, src, opt, env) +} + +func process(filename string, src []byte, opt *Options, env *fixEnv) ([]byte, error) { + if opt == nil { + opt = &Options{Comments: true, TabIndent: true, TabWidth: 8} + } if src == nil { b, err := ioutil.ReadFile(filename) if err != nil { @@ -57,12 +69,12 @@ func Process(filename string, src []byte, opt *Options) ([]byte, error) { } if !opt.FormatOnly { - if err := fixImports(fileSet, file, filename, opt.Env); err != nil { + if err := fixImports(fileSet, file, filename, env); err != nil { return nil, err } } - sortImports(opt.Env, fileSet, file) + sortImports(fileSet, file) imps := astutil.Imports(fileSet, file) var spacesBefore []string // import paths we need spaces before for _, impSection := range imps { @@ -73,7 +85,7 @@ func Process(filename string, src []byte, opt *Options) ([]byte, error) { lastGroup := -1 for _, importSpec := range impSection { importPath, _ := strconv.Unquote(importSpec.Path.Value) - groupNum := importGroup(opt.Env, importPath) + groupNum := importGroup(importPath) if groupNum != lastGroup && lastGroup != -1 { spacesBefore = append(spacesBefore, importPath) } diff --git a/vendor/golang.org/x/tools/internal/imports/mkindex.go b/vendor/golang.org/x/tools/imports/mkindex.go similarity index 99% rename from vendor/golang.org/x/tools/internal/imports/mkindex.go rename to vendor/golang.org/x/tools/imports/mkindex.go index ef8c0d2871..755e2394f2 100644 --- a/vendor/golang.org/x/tools/internal/imports/mkindex.go +++ b/vendor/golang.org/x/tools/imports/mkindex.go @@ -8,7 +8,7 @@ // standard library. The file is intended to be built as part of the imports // package, so that the package may be used in environments where a GOROOT is // not available (such as App Engine). -package imports +package main import ( "bytes" diff --git a/vendor/golang.org/x/tools/internal/imports/mkstdlib.go b/vendor/golang.org/x/tools/imports/mkstdlib.go similarity index 79% rename from vendor/golang.org/x/tools/internal/imports/mkstdlib.go rename to vendor/golang.org/x/tools/imports/mkstdlib.go index f67b5c1edb..5059ad4d7d 100644 --- a/vendor/golang.org/x/tools/internal/imports/mkstdlib.go +++ b/vendor/golang.org/x/tools/imports/mkstdlib.go @@ -3,7 +3,7 @@ // mkstdlib generates the zstdlib.go file, containing the Go standard // library API symbols. It's baked into the binary to avoid scanning // GOPATH in the common case. -package imports +package main import ( "bufio" @@ -14,7 +14,6 @@ import ( "io/ioutil" "log" "os" - "os/exec" "path/filepath" "regexp" "runtime" @@ -60,10 +59,6 @@ func main() { mustOpen(api("go1.10.txt")), mustOpen(api("go1.11.txt")), mustOpen(api("go1.12.txt")), - - // The API of the syscall/js package needs to be computed explicitly, - // because it's not included in the GOROOT/api/go1.*.txt files at this time. - syscallJSAPI(), ) sc := bufio.NewScanner(f) @@ -115,18 +110,3 @@ func main() { log.Fatal(err) } } - -// syscallJSAPI returns the API of the syscall/js package. -// It's computed from the contents of $(go env GOROOT)/src/syscall/js. -func syscallJSAPI() io.Reader { - var exeSuffix string - if runtime.GOOS == "windows" { - exeSuffix = ".exe" - } - cmd := exec.Command("go"+exeSuffix, "run", "cmd/api", "-contexts", "js-wasm", "syscall/js") - out, err := cmd.Output() - if err != nil { - log.Fatalln(err) - } - return bytes.NewReader(out) -} diff --git a/vendor/golang.org/x/tools/internal/imports/mod.go b/vendor/golang.org/x/tools/imports/mod.go similarity index 98% rename from vendor/golang.org/x/tools/internal/imports/mod.go rename to vendor/golang.org/x/tools/imports/mod.go index a072214eee..018c43ce84 100644 --- a/vendor/golang.org/x/tools/internal/imports/mod.go +++ b/vendor/golang.org/x/tools/imports/mod.go @@ -22,7 +22,7 @@ import ( // moduleResolver implements resolver for modules using the go command as little // as feasible. type moduleResolver struct { - env *ProcessEnv + env *fixEnv initialized bool main *moduleJSON @@ -62,7 +62,7 @@ func (r *moduleResolver) init() error { return err } if mod.Dir == "" { - if r.env.Debug { + if Debug { log.Printf("module %v has not been downloaded and will be ignored", mod.Path) } // Can't do anything with a module that's not downloaded. @@ -253,7 +253,7 @@ func (r *moduleResolver) scan(_ references) ([]*pkg, error) { matches := modCacheRegexp.FindStringSubmatch(subdir) modPath, err := module.DecodePath(filepath.ToSlash(matches[1])) if err != nil { - if r.env.Debug { + if Debug { log.Printf("decoding module cache path %q: %v", subdir, err) } return @@ -303,7 +303,7 @@ func (r *moduleResolver) scan(_ references) ([]*pkg, error) { importPathShort: VendorlessPath(importPath), dir: dir, }) - }, gopathwalk.Options{Debug: r.env.Debug, ModulesEnabled: true}) + }, gopathwalk.Options{Debug: Debug, ModulesEnabled: true}) return result, nil } diff --git a/vendor/golang.org/x/tools/internal/imports/sortimports.go b/vendor/golang.org/x/tools/imports/sortimports.go similarity index 85% rename from vendor/golang.org/x/tools/internal/imports/sortimports.go rename to vendor/golang.org/x/tools/imports/sortimports.go index 0a156fe2ef..f3dd56c7a6 100644 --- a/vendor/golang.org/x/tools/internal/imports/sortimports.go +++ b/vendor/golang.org/x/tools/imports/sortimports.go @@ -15,7 +15,7 @@ import ( // sortImports sorts runs of consecutive import lines in import blocks in f. // It also removes duplicate imports when it is possible to do so without data loss. -func sortImports(env *ProcessEnv, fset *token.FileSet, f *ast.File) { +func sortImports(fset *token.FileSet, f *ast.File) { for i, d := range f.Decls { d, ok := d.(*ast.GenDecl) if !ok || d.Tok != token.IMPORT { @@ -40,11 +40,11 @@ func sortImports(env *ProcessEnv, fset *token.FileSet, f *ast.File) { for j, s := range d.Specs { if j > i && fset.Position(s.Pos()).Line > 1+fset.Position(d.Specs[j-1].End()).Line { // j begins a new run. End this one. - specs = append(specs, sortSpecs(env, fset, f, d.Specs[i:j])...) + specs = append(specs, sortSpecs(fset, f, d.Specs[i:j])...) i = j } } - specs = append(specs, sortSpecs(env, fset, f, d.Specs[i:])...) + specs = append(specs, sortSpecs(fset, f, d.Specs[i:])...) d.Specs = specs // Deduping can leave a blank line before the rparen; clean that up. @@ -95,7 +95,7 @@ type posSpan struct { End token.Pos } -func sortSpecs(env *ProcessEnv, fset *token.FileSet, f *ast.File, specs []ast.Spec) []ast.Spec { +func sortSpecs(fset *token.FileSet, f *ast.File, specs []ast.Spec) []ast.Spec { // Can't short-circuit here even if specs are already sorted, // since they might yet need deduplication. // A lone import, however, may be safely ignored. @@ -144,7 +144,7 @@ func sortSpecs(env *ProcessEnv, fset *token.FileSet, f *ast.File, specs []ast.Sp // Reassign the import paths to have the same position sequence. // Reassign each comment to abut the end of its spec. // Sort the comments by new position. - sort.Sort(byImportSpec{env, specs}) + sort.Sort(byImportSpec(specs)) // Dedup. Thanks to our sorting, we can just consider // adjacent pairs of imports. @@ -197,19 +197,16 @@ func sortSpecs(env *ProcessEnv, fset *token.FileSet, f *ast.File, specs []ast.Sp return specs } -type byImportSpec struct { - env *ProcessEnv - specs []ast.Spec // slice of *ast.ImportSpec -} +type byImportSpec []ast.Spec // slice of *ast.ImportSpec -func (x byImportSpec) Len() int { return len(x.specs) } -func (x byImportSpec) Swap(i, j int) { x.specs[i], x.specs[j] = x.specs[j], x.specs[i] } +func (x byImportSpec) Len() int { return len(x) } +func (x byImportSpec) Swap(i, j int) { x[i], x[j] = x[j], x[i] } func (x byImportSpec) Less(i, j int) bool { - ipath := importPath(x.specs[i]) - jpath := importPath(x.specs[j]) + ipath := importPath(x[i]) + jpath := importPath(x[j]) - igroup := importGroup(x.env, ipath) - jgroup := importGroup(x.env, jpath) + igroup := importGroup(ipath) + jgroup := importGroup(jpath) if igroup != jgroup { return igroup < jgroup } @@ -217,13 +214,13 @@ func (x byImportSpec) Less(i, j int) bool { if ipath != jpath { return ipath < jpath } - iname := importName(x.specs[i]) - jname := importName(x.specs[j]) + iname := importName(x[i]) + jname := importName(x[j]) if iname != jname { return iname < jname } - return importComment(x.specs[i]) < importComment(x.specs[j]) + return importComment(x[i]) < importComment(x[j]) } type byCommentPos []*ast.CommentGroup diff --git a/vendor/golang.org/x/tools/internal/imports/zstdlib.go b/vendor/golang.org/x/tools/imports/zstdlib.go similarity index 99% rename from vendor/golang.org/x/tools/internal/imports/zstdlib.go rename to vendor/golang.org/x/tools/imports/zstdlib.go index d81b8c5307..c18a0095b2 100644 --- a/vendor/golang.org/x/tools/internal/imports/zstdlib.go +++ b/vendor/golang.org/x/tools/imports/zstdlib.go @@ -9783,29 +9783,6 @@ var stdlib = map[string]map[string]bool{ "XP1_UNI_RECV": true, "XP1_UNI_SEND": true, }, - "syscall/js": map[string]bool{ - "Error": true, - "Func": true, - "FuncOf": true, - "Global": true, - "Null": true, - "Type": true, - "TypeBoolean": true, - "TypeFunction": true, - "TypeNull": true, - "TypeNumber": true, - "TypeObject": true, - "TypeString": true, - "TypeSymbol": true, - "TypeUndefined": true, - "TypedArray": true, - "TypedArrayOf": true, - "Undefined": true, - "Value": true, - "ValueError": true, - "ValueOf": true, - "Wrapper": true, - }, "testing": map[string]bool{ "AllocsPerRun": true, "B": true, diff --git a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go index 7bfe37a3db..57ae35f6b5 100644 --- a/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go +++ b/vendor/google.golang.org/genproto/googleapis/rpc/status/status.pb.go @@ -19,24 +19,25 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package -// The `Status` type defines a logical error model that is suitable for different -// programming environments, including REST APIs and RPC APIs. It is used by -// [gRPC](https://github.com/grpc). The error model is designed to be: +// The `Status` type defines a logical error model that is suitable for +// different programming environments, including REST APIs and RPC APIs. It is +// used by [gRPC](https://github.com/grpc). The error model is designed to be: // // - Simple to use and understand for most users // - Flexible enough to meet unexpected needs // // # Overview // -// The `Status` message contains three pieces of data: error code, error message, -// and error details. The error code should be an enum value of -// [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed. The -// error message should be a developer-facing English message that helps -// developers *understand* and *resolve* the error. If a localized user-facing -// error message is needed, put the localized message in the error details or -// localize it in the client. The optional error details may contain arbitrary -// information about the error. There is a predefined set of error detail types -// in the package `google.rpc` that can be used for common error conditions. +// The `Status` message contains three pieces of data: error code, error +// message, and error details. The error code should be an enum value of +// [google.rpc.Code][google.rpc.Code], but it may accept additional error codes +// if needed. The error message should be a developer-facing English message +// that helps developers *understand* and *resolve* the error. If a localized +// user-facing error message is needed, put the localized message in the error +// details or localize it in the client. The optional error details may contain +// arbitrary information about the error. There is a predefined set of error +// detail types in the package `google.rpc` that can be used for common error +// conditions. // // # Language mapping // @@ -72,11 +73,13 @@ const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package // - Logging. If some API errors are stored in logs, the message `Status` could // be used directly after any stripping needed for security/privacy reasons. type Status struct { - // The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code]. + // The status code, which should be an enum value of + // [google.rpc.Code][google.rpc.Code]. Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` // A developer-facing error message, which should be in English. Any // user-facing error message should be localized and sent in the - // [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client. + // [google.rpc.Status.details][google.rpc.Status.details] field, or localized + // by the client. Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` // A list of messages that carry the error details. There is a common set of // message types for APIs to use. @@ -90,7 +93,7 @@ func (m *Status) Reset() { *m = Status{} } func (m *Status) String() string { return proto.CompactTextString(m) } func (*Status) ProtoMessage() {} func (*Status) Descriptor() ([]byte, []int) { - return fileDescriptor_status_c6e4de62dcdf2edf, []int{0} + return fileDescriptor_status_ced6ddf76350620b, []int{0} } func (m *Status) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Status.Unmarshal(m, b) @@ -135,9 +138,9 @@ func init() { proto.RegisterType((*Status)(nil), "google.rpc.Status") } -func init() { proto.RegisterFile("google/rpc/status.proto", fileDescriptor_status_c6e4de62dcdf2edf) } +func init() { proto.RegisterFile("google/rpc/status.proto", fileDescriptor_status_ced6ddf76350620b) } -var fileDescriptor_status_c6e4de62dcdf2edf = []byte{ +var fileDescriptor_status_ced6ddf76350620b = []byte{ // 209 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x12, 0x4f, 0xcf, 0xcf, 0x4f, 0xcf, 0x49, 0xd5, 0x2f, 0x2a, 0x48, 0xd6, 0x2f, 0x2e, 0x49, 0x2c, 0x29, 0x2d, 0xd6, 0x2b, 0x28, diff --git a/vendor/k8s.io/api/admission/v1beta1/generated.pb.go b/vendor/k8s.io/api/admission/v1beta1/generated.pb.go index 2e4c7c7d73..a0124f6119 100644 --- a/vendor/k8s.io/api/admission/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/admission/v1beta1/generated.pb.go @@ -38,7 +38,7 @@ import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v import k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -247,7 +247,7 @@ func (m *AdmissionResponse) MarshalTo(dAtA []byte) (int, error) { for k := range m.AuditAnnotations { keysForAuditAnnotations = append(keysForAuditAnnotations, string(k)) } - sortkeys.Strings(keysForAuditAnnotations) + github_com_gogo_protobuf_sortkeys.Strings(keysForAuditAnnotations) for _, k := range keysForAuditAnnotations { dAtA[i] = 0x32 i++ @@ -443,7 +443,7 @@ func (this *AdmissionResponse) String() string { for k := range this.AuditAnnotations { keysForAuditAnnotations = append(keysForAuditAnnotations, k) } - sortkeys.Strings(keysForAuditAnnotations) + github_com_gogo_protobuf_sortkeys.Strings(keysForAuditAnnotations) mapStringForAuditAnnotations := "map[string]string{" for _, k := range keysForAuditAnnotations { mapStringForAuditAnnotations += fmt.Sprintf("%v: %v,", k, this.AuditAnnotations[k]) diff --git a/vendor/k8s.io/api/apps/v1beta1/generated.pb.go b/vendor/k8s.io/api/apps/v1beta1/generated.pb.go index a2a52a78ec..9353047554 100644 --- a/vendor/k8s.io/api/apps/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/apps/v1beta1/generated.pb.go @@ -57,7 +57,7 @@ import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -417,7 +417,7 @@ func (m *DeploymentRollback) MarshalTo(dAtA []byte) (int, error) { for k := range m.UpdatedAnnotations { keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, string(k)) } - sortkeys.Strings(keysForUpdatedAnnotations) + github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) for _, k := range keysForUpdatedAnnotations { dAtA[i] = 0x12 i++ @@ -778,7 +778,7 @@ func (m *ScaleStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.Selector { keysForSelector = append(keysForSelector, string(k)) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) for _, k := range keysForSelector { dAtA[i] = 0x12 i++ @@ -1506,7 +1506,7 @@ func (this *DeploymentRollback) String() string { for k := range this.UpdatedAnnotations { keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, k) } - sortkeys.Strings(keysForUpdatedAnnotations) + github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) mapStringForUpdatedAnnotations := "map[string]string{" for _, k := range keysForUpdatedAnnotations { mapStringForUpdatedAnnotations += fmt.Sprintf("%v: %v,", k, this.UpdatedAnnotations[k]) @@ -1627,7 +1627,7 @@ func (this *ScaleStatus) String() string { for k := range this.Selector { keysForSelector = append(keysForSelector, k) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) mapStringForSelector := "map[string]string{" for _, k := range keysForSelector { mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) diff --git a/vendor/k8s.io/api/apps/v1beta2/generated.pb.go b/vendor/k8s.io/api/apps/v1beta2/generated.pb.go index 003fcdbba1..fc1efbc90b 100644 --- a/vendor/k8s.io/api/apps/v1beta2/generated.pb.go +++ b/vendor/k8s.io/api/apps/v1beta2/generated.pb.go @@ -67,7 +67,7 @@ import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -1259,7 +1259,7 @@ func (m *ScaleStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.Selector { keysForSelector = append(keysForSelector, string(k)) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) for _, k := range keysForSelector { dAtA[i] = 0x12 i++ @@ -2378,7 +2378,7 @@ func (this *ScaleStatus) String() string { for k := range this.Selector { keysForSelector = append(keysForSelector, k) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) mapStringForSelector := "map[string]string{" for _, k := range keysForSelector { mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) diff --git a/vendor/k8s.io/api/authentication/v1/generated.pb.go b/vendor/k8s.io/api/authentication/v1/generated.pb.go index 8471b8d6d4..4e7f28d8c9 100644 --- a/vendor/k8s.io/api/authentication/v1/generated.pb.go +++ b/vendor/k8s.io/api/authentication/v1/generated.pb.go @@ -42,7 +42,7 @@ import math "math" import k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -469,7 +469,7 @@ func (m *UserInfo) MarshalTo(dAtA []byte) (int, error) { for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) for _, k := range keysForExtra { dAtA[i] = 0x22 i++ @@ -747,7 +747,7 @@ func (this *UserInfo) String() string { for k := range this.Extra { keysForExtra = append(keysForExtra, k) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) mapStringForExtra := "map[string]ExtraValue{" for _, k := range keysForExtra { mapStringForExtra += fmt.Sprintf("%v: %v,", k, this.Extra[k]) diff --git a/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go b/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go index e4238f20f6..5f34e76a9c 100644 --- a/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/authentication/v1beta1/generated.pb.go @@ -36,7 +36,7 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -289,7 +289,7 @@ func (m *UserInfo) MarshalTo(dAtA []byte) (int, error) { for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) for _, k := range keysForExtra { dAtA[i] = 0x22 i++ @@ -464,7 +464,7 @@ func (this *UserInfo) String() string { for k := range this.Extra { keysForExtra = append(keysForExtra, k) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) mapStringForExtra := "map[string]ExtraValue{" for _, k := range keysForExtra { mapStringForExtra += fmt.Sprintf("%v: %v,", k, this.Extra[k]) diff --git a/vendor/k8s.io/api/authorization/v1/generated.pb.go b/vendor/k8s.io/api/authorization/v1/generated.pb.go index 43392e6670..fc6a25f629 100644 --- a/vendor/k8s.io/api/authorization/v1/generated.pb.go +++ b/vendor/k8s.io/api/authorization/v1/generated.pb.go @@ -45,7 +45,7 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -665,7 +665,7 @@ func (m *SubjectAccessReviewSpec) MarshalTo(dAtA []byte) (int, error) { for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) for _, k := range keysForExtra { dAtA[i] = 0x2a i++ @@ -1170,7 +1170,7 @@ func (this *SubjectAccessReviewSpec) String() string { for k := range this.Extra { keysForExtra = append(keysForExtra, k) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) mapStringForExtra := "map[string]ExtraValue{" for _, k := range keysForExtra { mapStringForExtra += fmt.Sprintf("%v: %v,", k, this.Extra[k]) diff --git a/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go b/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go index 8e887e0b3b..7cce98eb19 100644 --- a/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/authorization/v1beta1/generated.pb.go @@ -45,7 +45,7 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -665,7 +665,7 @@ func (m *SubjectAccessReviewSpec) MarshalTo(dAtA []byte) (int, error) { for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) for _, k := range keysForExtra { dAtA[i] = 0x2a i++ @@ -1170,7 +1170,7 @@ func (this *SubjectAccessReviewSpec) String() string { for k := range this.Extra { keysForExtra = append(keysForExtra, k) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) mapStringForExtra := "map[string]ExtraValue{" for _, k := range keysForExtra { mapStringForExtra += fmt.Sprintf("%v: %v,", k, this.Extra[k]) diff --git a/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go b/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go index 891a83e00d..19bf225fa3 100644 --- a/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/certificates/v1beta1/generated.pb.go @@ -37,7 +37,7 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -279,7 +279,7 @@ func (m *CertificateSigningRequestSpec) MarshalTo(dAtA []byte) (int, error) { for k := range m.Extra { keysForExtra = append(keysForExtra, string(k)) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) for _, k := range keysForExtra { dAtA[i] = 0x32 i++ @@ -546,7 +546,7 @@ func (this *CertificateSigningRequestSpec) String() string { for k := range this.Extra { keysForExtra = append(keysForExtra, k) } - sortkeys.Strings(keysForExtra) + github_com_gogo_protobuf_sortkeys.Strings(keysForExtra) mapStringForExtra := "map[string]ExtraValue{" for _, k := range keysForExtra { mapStringForExtra += fmt.Sprintf("%v: %v,", k, this.Extra[k]) diff --git a/vendor/k8s.io/api/core/v1/generated.pb.go b/vendor/k8s.io/api/core/v1/generated.pb.go index ce616f16c2..79ecb2610c 100644 --- a/vendor/k8s.io/api/core/v1/generated.pb.go +++ b/vendor/k8s.io/api/core/v1/generated.pb.go @@ -146,7 +146,6 @@ limitations under the License. PodDNSConfig PodDNSConfigOption PodExecOptions - PodIP PodList PodLogOptions PodPortForwardOptions @@ -236,7 +235,7 @@ import k8s_io_apimachinery_pkg_runtime "k8s.io/apimachinery/pkg/runtime" import k8s_io_apimachinery_pkg_types "k8s.io/apimachinery/pkg/types" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -784,342 +783,338 @@ func (m *PodExecOptions) Reset() { *m = PodExecOptions{} } func (*PodExecOptions) ProtoMessage() {} func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } -func (m *PodIP) Reset() { *m = PodIP{} } -func (*PodIP) ProtoMessage() {} -func (*PodIP) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } - func (m *PodList) Reset() { *m = PodList{} } func (*PodList) ProtoMessage() {} -func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } +func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } func (*PodLogOptions) ProtoMessage() {} -func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } +func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } func (m *PodPortForwardOptions) Reset() { *m = PodPortForwardOptions{} } func (*PodPortForwardOptions) ProtoMessage() {} -func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } +func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } func (*PodProxyOptions) ProtoMessage() {} -func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } +func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } func (m *PodReadinessGate) Reset() { *m = PodReadinessGate{} } func (*PodReadinessGate) ProtoMessage() {} -func (*PodReadinessGate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } +func (*PodReadinessGate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } func (*PodSecurityContext) ProtoMessage() {} -func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } +func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } func (m *PodSignature) Reset() { *m = PodSignature{} } func (*PodSignature) ProtoMessage() {} -func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } +func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } func (m *PodSpec) Reset() { *m = PodSpec{} } func (*PodSpec) ProtoMessage() {} -func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } +func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } func (m *PodStatus) Reset() { *m = PodStatus{} } func (*PodStatus) ProtoMessage() {} -func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } +func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } func (*PodStatusResult) ProtoMessage() {} -func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } +func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } func (m *PodTemplate) Reset() { *m = PodTemplate{} } func (*PodTemplate) ProtoMessage() {} -func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } +func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } func (*PodTemplateList) ProtoMessage() {} -func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } +func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } func (*PodTemplateSpec) ProtoMessage() {} -func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } +func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } func (m *PortworxVolumeSource) Reset() { *m = PortworxVolumeSource{} } func (*PortworxVolumeSource) ProtoMessage() {} -func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } +func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } func (*PreferAvoidPodsEntry) ProtoMessage() {} -func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } func (*PreferredSchedulingTerm) ProtoMessage() {} func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{139} + return fileDescriptorGenerated, []int{138} } func (m *Probe) Reset() { *m = Probe{} } func (*Probe) ProtoMessage() {} -func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } +func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } func (m *ProjectedVolumeSource) Reset() { *m = ProjectedVolumeSource{} } func (*ProjectedVolumeSource) ProtoMessage() {} -func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } +func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } func (*QuobyteVolumeSource) ProtoMessage() {} -func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } func (m *RBDPersistentVolumeSource) Reset() { *m = RBDPersistentVolumeSource{} } func (*RBDPersistentVolumeSource) ProtoMessage() {} func (*RBDPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{143} + return fileDescriptorGenerated, []int{142} } func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } func (*RBDVolumeSource) ProtoMessage() {} -func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } func (*RangeAllocation) ProtoMessage() {} -func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } func (m *ReplicationController) Reset() { *m = ReplicationController{} } func (*ReplicationController) ProtoMessage() {} -func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } func (*ReplicationControllerCondition) ProtoMessage() {} func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{147} + return fileDescriptorGenerated, []int{146} } func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } func (*ReplicationControllerList) ProtoMessage() {} func (*ReplicationControllerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{148} + return fileDescriptorGenerated, []int{147} } func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } func (*ReplicationControllerSpec) ProtoMessage() {} func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{149} + return fileDescriptorGenerated, []int{148} } func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } func (*ReplicationControllerStatus) ProtoMessage() {} func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{150} + return fileDescriptorGenerated, []int{149} } func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } func (*ResourceFieldSelector) ProtoMessage() {} -func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } func (*ResourceQuota) ProtoMessage() {} -func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } func (*ResourceQuotaList) ProtoMessage() {} -func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } func (*ResourceQuotaSpec) ProtoMessage() {} -func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } func (*ResourceQuotaStatus) ProtoMessage() {} -func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } func (*SELinuxOptions) ProtoMessage() {} -func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } func (m *ScaleIOPersistentVolumeSource) Reset() { *m = ScaleIOPersistentVolumeSource{} } func (*ScaleIOPersistentVolumeSource) ProtoMessage() {} func (*ScaleIOPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{158} + return fileDescriptorGenerated, []int{157} } func (m *ScaleIOVolumeSource) Reset() { *m = ScaleIOVolumeSource{} } func (*ScaleIOVolumeSource) ProtoMessage() {} -func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } +func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } func (m *ScopeSelector) Reset() { *m = ScopeSelector{} } func (*ScopeSelector) ProtoMessage() {} -func (*ScopeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } +func (*ScopeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } func (m *ScopedResourceSelectorRequirement) Reset() { *m = ScopedResourceSelectorRequirement{} } func (*ScopedResourceSelectorRequirement) ProtoMessage() {} func (*ScopedResourceSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{161} + return fileDescriptorGenerated, []int{160} } func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } func (*SecretEnvSource) ProtoMessage() {} -func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } +func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } func (*SecretKeySelector) ProtoMessage() {} -func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } func (m *SecretList) Reset() { *m = SecretList{} } func (*SecretList) ProtoMessage() {} -func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } func (m *SecretProjection) Reset() { *m = SecretProjection{} } func (*SecretProjection) ProtoMessage() {} -func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } +func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } func (m *SecretReference) Reset() { *m = SecretReference{} } func (*SecretReference) ProtoMessage() {} -func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } +func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } func (*SecretVolumeSource) ProtoMessage() {} -func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } func (m *SecurityContext) Reset() { *m = SecurityContext{} } func (*SecurityContext) ProtoMessage() {} -func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } func (m *SerializedReference) Reset() { *m = SerializedReference{} } func (*SerializedReference) ProtoMessage() {} -func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} } +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } func (*ServiceAccount) ProtoMessage() {} -func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} } +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} } func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } func (*ServiceAccountList) ProtoMessage() {} -func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} } +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} } func (m *ServiceAccountTokenProjection) Reset() { *m = ServiceAccountTokenProjection{} } func (*ServiceAccountTokenProjection) ProtoMessage() {} func (*ServiceAccountTokenProjection) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{174} + return fileDescriptorGenerated, []int{173} } func (m *ServiceList) Reset() { *m = ServiceList{} } func (*ServiceList) ProtoMessage() {} -func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } func (m *ServicePort) Reset() { *m = ServicePort{} } func (*ServicePort) ProtoMessage() {} -func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} } +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } func (*ServiceProxyOptions) ProtoMessage() {} -func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} } func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{178} } +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } func (*ServiceStatus) ProtoMessage() {} -func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{179} } +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{178} } func (m *SessionAffinityConfig) Reset() { *m = SessionAffinityConfig{} } func (*SessionAffinityConfig) ProtoMessage() {} -func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{180} } +func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{179} } func (m *StorageOSPersistentVolumeSource) Reset() { *m = StorageOSPersistentVolumeSource{} } func (*StorageOSPersistentVolumeSource) ProtoMessage() {} func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{181} + return fileDescriptorGenerated, []int{180} } func (m *StorageOSVolumeSource) Reset() { *m = StorageOSVolumeSource{} } func (*StorageOSVolumeSource) ProtoMessage() {} -func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} } +func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} } func (m *Sysctl) Reset() { *m = Sysctl{} } func (*Sysctl) ProtoMessage() {} -func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} } +func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} } func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } func (*TCPSocketAction) ProtoMessage() {} -func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{184} } +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} } func (m *Taint) Reset() { *m = Taint{} } func (*Taint) ProtoMessage() {} -func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{185} } +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{184} } func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} -func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{186} } +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{185} } func (m *TopologySelectorLabelRequirement) Reset() { *m = TopologySelectorLabelRequirement{} } func (*TopologySelectorLabelRequirement) ProtoMessage() {} func (*TopologySelectorLabelRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{187} + return fileDescriptorGenerated, []int{186} } func (m *TopologySelectorTerm) Reset() { *m = TopologySelectorTerm{} } func (*TopologySelectorTerm) ProtoMessage() {} -func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{188} } +func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{187} } func (m *TypedLocalObjectReference) Reset() { *m = TypedLocalObjectReference{} } func (*TypedLocalObjectReference) ProtoMessage() {} func (*TypedLocalObjectReference) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{189} + return fileDescriptorGenerated, []int{188} } func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{190} } +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{189} } func (m *VolumeDevice) Reset() { *m = VolumeDevice{} } func (*VolumeDevice) ProtoMessage() {} -func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{191} } +func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{190} } func (m *VolumeMount) Reset() { *m = VolumeMount{} } func (*VolumeMount) ProtoMessage() {} -func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{192} } +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{191} } func (m *VolumeNodeAffinity) Reset() { *m = VolumeNodeAffinity{} } func (*VolumeNodeAffinity) ProtoMessage() {} -func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{193} } +func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{192} } func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } func (*VolumeProjection) ProtoMessage() {} -func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{194} } +func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{193} } func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} -func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{195} } +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{194} } func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{196} + return fileDescriptorGenerated, []int{195} } func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{197} + return fileDescriptorGenerated, []int{196} } func (m *WindowsSecurityContextOptions) Reset() { *m = WindowsSecurityContextOptions{} } func (*WindowsSecurityContextOptions) ProtoMessage() {} func (*WindowsSecurityContextOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{198} + return fileDescriptorGenerated, []int{197} } func init() { @@ -1245,7 +1240,6 @@ func init() { proto.RegisterType((*PodDNSConfig)(nil), "k8s.io.api.core.v1.PodDNSConfig") proto.RegisterType((*PodDNSConfigOption)(nil), "k8s.io.api.core.v1.PodDNSConfigOption") proto.RegisterType((*PodExecOptions)(nil), "k8s.io.api.core.v1.PodExecOptions") - proto.RegisterType((*PodIP)(nil), "k8s.io.api.core.v1.PodIP") proto.RegisterType((*PodList)(nil), "k8s.io.api.core.v1.PodList") proto.RegisterType((*PodLogOptions)(nil), "k8s.io.api.core.v1.PodLogOptions") proto.RegisterType((*PodPortForwardOptions)(nil), "k8s.io.api.core.v1.PodPortForwardOptions") @@ -1666,7 +1660,7 @@ func (m *CSIPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { for k := range m.VolumeAttributes { keysForVolumeAttributes = append(keysForVolumeAttributes, string(k)) } - sortkeys.Strings(keysForVolumeAttributes) + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) for _, k := range keysForVolumeAttributes { dAtA[i] = 0x2a i++ @@ -1766,7 +1760,7 @@ func (m *CSIVolumeSource) MarshalTo(dAtA []byte) (int, error) { for k := range m.VolumeAttributes { keysForVolumeAttributes = append(keysForVolumeAttributes, string(k)) } - sortkeys.Strings(keysForVolumeAttributes) + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) for _, k := range keysForVolumeAttributes { dAtA[i] = 0x22 i++ @@ -2219,7 +2213,7 @@ func (m *ConfigMap) MarshalTo(dAtA []byte) (int, error) { for k := range m.Data { keysForData = append(keysForData, string(k)) } - sortkeys.Strings(keysForData) + github_com_gogo_protobuf_sortkeys.Strings(keysForData) for _, k := range keysForData { dAtA[i] = 0x12 i++ @@ -2241,7 +2235,7 @@ func (m *ConfigMap) MarshalTo(dAtA []byte) (int, error) { for k := range m.BinaryData { keysForBinaryData = append(keysForBinaryData, string(k)) } - sortkeys.Strings(keysForBinaryData) + github_com_gogo_protobuf_sortkeys.Strings(keysForBinaryData) for _, k := range keysForBinaryData { dAtA[i] = 0x1a i++ @@ -3877,7 +3871,7 @@ func (m *FlexPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { for k := range m.Options { keysForOptions = append(keysForOptions, string(k)) } - sortkeys.Strings(keysForOptions) + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) for _, k := range keysForOptions { dAtA[i] = 0x2a i++ @@ -3943,7 +3937,7 @@ func (m *FlexVolumeSource) MarshalTo(dAtA []byte) (int, error) { for k := range m.Options { keysForOptions = append(keysForOptions, string(k)) } - sortkeys.Strings(keysForOptions) + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) for _, k := range keysForOptions { dAtA[i] = 0x2a i++ @@ -4630,7 +4624,7 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { for k := range m.Max { keysForMax = append(keysForMax, string(k)) } - sortkeys.Strings(keysForMax) + github_com_gogo_protobuf_sortkeys.Strings(keysForMax) for _, k := range keysForMax { dAtA[i] = 0x12 i++ @@ -4661,7 +4655,7 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { for k := range m.Min { keysForMin = append(keysForMin, string(k)) } - sortkeys.Strings(keysForMin) + github_com_gogo_protobuf_sortkeys.Strings(keysForMin) for _, k := range keysForMin { dAtA[i] = 0x1a i++ @@ -4692,7 +4686,7 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { for k := range m.Default { keysForDefault = append(keysForDefault, string(k)) } - sortkeys.Strings(keysForDefault) + github_com_gogo_protobuf_sortkeys.Strings(keysForDefault) for _, k := range keysForDefault { dAtA[i] = 0x22 i++ @@ -4723,7 +4717,7 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { for k := range m.DefaultRequest { keysForDefaultRequest = append(keysForDefaultRequest, string(k)) } - sortkeys.Strings(keysForDefaultRequest) + github_com_gogo_protobuf_sortkeys.Strings(keysForDefaultRequest) for _, k := range keysForDefaultRequest { dAtA[i] = 0x2a i++ @@ -4754,7 +4748,7 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { for k := range m.MaxLimitRequestRatio { keysForMaxLimitRequestRatio = append(keysForMaxLimitRequestRatio, string(k)) } - sortkeys.Strings(keysForMaxLimitRequestRatio) + github_com_gogo_protobuf_sortkeys.Strings(keysForMaxLimitRequestRatio) for _, k := range keysForMaxLimitRequestRatio { dAtA[i] = 0x32 i++ @@ -5508,7 +5502,7 @@ func (m *NodeResources) MarshalTo(dAtA []byte) (int, error) { for k := range m.Capacity { keysForCapacity = append(keysForCapacity, string(k)) } - sortkeys.Strings(keysForCapacity) + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) for _, k := range keysForCapacity { dAtA[i] = 0xa i++ @@ -5707,21 +5701,6 @@ func (m *NodeSpec) MarshalTo(dAtA []byte) (int, error) { } i += n95 } - if len(m.PodCIDRs) > 0 { - for _, s := range m.PodCIDRs { - dAtA[i] = 0x3a - i++ - l = len(s) - for l >= 1<<7 { - dAtA[i] = uint8(uint64(l)&0x7f | 0x80) - l >>= 7 - i++ - } - dAtA[i] = uint8(l) - i++ - i += copy(dAtA[i:], s) - } - } return i, nil } @@ -5745,7 +5724,7 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.Capacity { keysForCapacity = append(keysForCapacity, string(k)) } - sortkeys.Strings(keysForCapacity) + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) for _, k := range keysForCapacity { dAtA[i] = 0xa i++ @@ -5776,7 +5755,7 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.Allocatable { keysForAllocatable = append(keysForAllocatable, string(k)) } - sortkeys.Strings(keysForAllocatable) + github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) for _, k := range keysForAllocatable { dAtA[i] = 0x12 i++ @@ -6316,7 +6295,7 @@ func (m *PersistentVolumeClaimStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.Capacity { keysForCapacity = append(keysForCapacity, string(k)) } - sortkeys.Strings(keysForCapacity) + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) for _, k := range keysForCapacity { dAtA[i] = 0x1a i++ @@ -6697,7 +6676,7 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) { for k := range m.Capacity { keysForCapacity = append(keysForCapacity, string(k)) } - sortkeys.Strings(keysForCapacity) + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) for _, k := range keysForCapacity { dAtA[i] = 0xa i++ @@ -7288,28 +7267,6 @@ func (m *PodExecOptions) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func (m *PodIP) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PodIP) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(m.IP))) - i += copy(dAtA[i:], m.IP) - return i, nil -} - func (m *PodList) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7660,7 +7617,7 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { for k := range m.NodeSelector { keysForNodeSelector = append(keysForNodeSelector, string(k)) } - sortkeys.Strings(keysForNodeSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) for _, k := range keysForNodeSelector { dAtA[i] = 0x3a i++ @@ -7898,39 +7855,6 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(len(*m.PreemptionPolicy))) i += copy(dAtA[i:], *m.PreemptionPolicy) } - if len(m.Overhead) > 0 { - keysForOverhead := make([]string, 0, len(m.Overhead)) - for k := range m.Overhead { - keysForOverhead = append(keysForOverhead, string(k)) - } - sortkeys.Strings(keysForOverhead) - for _, k := range keysForOverhead { - dAtA[i] = 0x82 - i++ - dAtA[i] = 0x2 - i++ - v := m.Overhead[ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n155, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n155 - } - } return i, nil } @@ -7985,11 +7909,11 @@ func (m *PodStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StartTime.Size())) - n156, err := m.StartTime.MarshalTo(dAtA[i:]) + n155, err := m.StartTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n156 + i += n155 } if len(m.ContainerStatuses) > 0 { for _, msg := range m.ContainerStatuses { @@ -8023,18 +7947,6 @@ func (m *PodStatus) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.NominatedNodeName))) i += copy(dAtA[i:], m.NominatedNodeName) - if len(m.PodIPs) > 0 { - for _, msg := range m.PodIPs { - dAtA[i] = 0x62 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) - n, err := msg.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n - } - } return i, nil } @@ -8056,19 +7968,19 @@ func (m *PodStatusResult) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n157, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n156, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n157 + i += n156 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n158, err := m.Status.MarshalTo(dAtA[i:]) + n157, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n158 + i += n157 return i, nil } @@ -8090,19 +8002,19 @@ func (m *PodTemplate) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n159, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n158, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n159 + i += n158 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n160, err := m.Template.MarshalTo(dAtA[i:]) + n159, err := m.Template.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n160 + i += n159 return i, nil } @@ -8124,11 +8036,11 @@ func (m *PodTemplateList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n161, err := m.ListMeta.MarshalTo(dAtA[i:]) + n160, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n161 + i += n160 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8162,19 +8074,19 @@ func (m *PodTemplateSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n162, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n161, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n162 + i += n161 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n163, err := m.Spec.MarshalTo(dAtA[i:]) + n162, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n163 + i += n162 return i, nil } @@ -8254,19 +8166,19 @@ func (m *PreferAvoidPodsEntry) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodSignature.Size())) - n164, err := m.PodSignature.MarshalTo(dAtA[i:]) + n163, err := m.PodSignature.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n164 + i += n163 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.EvictionTime.Size())) - n165, err := m.EvictionTime.MarshalTo(dAtA[i:]) + n164, err := m.EvictionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n165 + i += n164 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -8299,11 +8211,11 @@ func (m *PreferredSchedulingTerm) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Preference.Size())) - n166, err := m.Preference.MarshalTo(dAtA[i:]) + n165, err := m.Preference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n166 + i += n165 return i, nil } @@ -8325,11 +8237,11 @@ func (m *Probe) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Handler.Size())) - n167, err := m.Handler.MarshalTo(dAtA[i:]) + n166, err := m.Handler.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n167 + i += n166 dAtA[i] = 0x10 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.InitialDelaySeconds)) @@ -8483,11 +8395,11 @@ func (m *RBDPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n168, err := m.SecretRef.MarshalTo(dAtA[i:]) + n167, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n168 + i += n167 } dAtA[i] = 0x40 i++ @@ -8554,11 +8466,11 @@ func (m *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n169, err := m.SecretRef.MarshalTo(dAtA[i:]) + n168, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n169 + i += n168 } dAtA[i] = 0x40 i++ @@ -8589,11 +8501,11 @@ func (m *RangeAllocation) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n170, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n169, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n170 + i += n169 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Range))) @@ -8625,27 +8537,27 @@ func (m *ReplicationController) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n171, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n170, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n171 + i += n170 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n172, err := m.Spec.MarshalTo(dAtA[i:]) + n171, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n172 + i += n171 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n173, err := m.Status.MarshalTo(dAtA[i:]) + n172, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n173 + i += n172 return i, nil } @@ -8675,11 +8587,11 @@ func (m *ReplicationControllerCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n174, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n173, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n174 + i += n173 dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -8709,11 +8621,11 @@ func (m *ReplicationControllerList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n175, err := m.ListMeta.MarshalTo(dAtA[i:]) + n174, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n175 + i += n174 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8754,7 +8666,7 @@ func (m *ReplicationControllerSpec) MarshalTo(dAtA []byte) (int, error) { for k := range m.Selector { keysForSelector = append(keysForSelector, string(k)) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) for _, k := range keysForSelector { dAtA[i] = 0x12 i++ @@ -8775,11 +8687,11 @@ func (m *ReplicationControllerSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n176, err := m.Template.MarshalTo(dAtA[i:]) + n175, err := m.Template.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n176 + i += n175 } dAtA[i] = 0x20 i++ @@ -8858,11 +8770,11 @@ func (m *ResourceFieldSelector) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Divisor.Size())) - n177, err := m.Divisor.MarshalTo(dAtA[i:]) + n176, err := m.Divisor.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n177 + i += n176 return i, nil } @@ -8884,27 +8796,27 @@ func (m *ResourceQuota) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n178, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n177, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n178 + i += n177 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n179, err := m.Spec.MarshalTo(dAtA[i:]) + n178, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n179 + i += n178 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n180, err := m.Status.MarshalTo(dAtA[i:]) + n179, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n180 + i += n179 return i, nil } @@ -8926,11 +8838,11 @@ func (m *ResourceQuotaList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n181, err := m.ListMeta.MarshalTo(dAtA[i:]) + n180, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n181 + i += n180 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8966,7 +8878,7 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { for k := range m.Hard { keysForHard = append(keysForHard, string(k)) } - sortkeys.Strings(keysForHard) + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) for _, k := range keysForHard { dAtA[i] = 0xa i++ @@ -8985,11 +8897,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n182, err := (&v).MarshalTo(dAtA[i:]) + n181, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n182 + i += n181 } } if len(m.Scopes) > 0 { @@ -9011,11 +8923,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ScopeSelector.Size())) - n183, err := m.ScopeSelector.MarshalTo(dAtA[i:]) + n182, err := m.ScopeSelector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n183 + i += n182 } return i, nil } @@ -9040,7 +8952,7 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.Hard { keysForHard = append(keysForHard, string(k)) } - sortkeys.Strings(keysForHard) + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) for _, k := range keysForHard { dAtA[i] = 0xa i++ @@ -9059,11 +8971,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n184, err := (&v).MarshalTo(dAtA[i:]) + n183, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n184 + i += n183 } } if len(m.Used) > 0 { @@ -9071,7 +8983,7 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.Used { keysForUsed = append(keysForUsed, string(k)) } - sortkeys.Strings(keysForUsed) + github_com_gogo_protobuf_sortkeys.Strings(keysForUsed) for _, k := range keysForUsed { dAtA[i] = 0x12 i++ @@ -9090,11 +9002,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n185, err := (&v).MarshalTo(dAtA[i:]) + n184, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n185 + i += n184 } } return i, nil @@ -9120,7 +9032,7 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { for k := range m.Limits { keysForLimits = append(keysForLimits, string(k)) } - sortkeys.Strings(keysForLimits) + github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) for _, k := range keysForLimits { dAtA[i] = 0xa i++ @@ -9139,11 +9051,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n186, err := (&v).MarshalTo(dAtA[i:]) + n185, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n186 + i += n185 } } if len(m.Requests) > 0 { @@ -9151,7 +9063,7 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { for k := range m.Requests { keysForRequests = append(keysForRequests, string(k)) } - sortkeys.Strings(keysForRequests) + github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) for _, k := range keysForRequests { dAtA[i] = 0x12 i++ @@ -9170,11 +9082,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n187, err := (&v).MarshalTo(dAtA[i:]) + n186, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n187 + i += n186 } } return i, nil @@ -9241,11 +9153,11 @@ func (m *ScaleIOPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n188, err := m.SecretRef.MarshalTo(dAtA[i:]) + n187, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n188 + i += n187 } dAtA[i] = 0x20 i++ @@ -9313,11 +9225,11 @@ func (m *ScaleIOVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n189, err := m.SecretRef.MarshalTo(dAtA[i:]) + n188, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n189 + i += n188 } dAtA[i] = 0x20 i++ @@ -9447,17 +9359,17 @@ func (m *Secret) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n190, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n189, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n190 + i += n189 if len(m.Data) > 0 { keysForData := make([]string, 0, len(m.Data)) for k := range m.Data { keysForData = append(keysForData, string(k)) } - sortkeys.Strings(keysForData) + github_com_gogo_protobuf_sortkeys.Strings(keysForData) for _, k := range keysForData { dAtA[i] = 0x12 i++ @@ -9489,7 +9401,7 @@ func (m *Secret) MarshalTo(dAtA []byte) (int, error) { for k := range m.StringData { keysForStringData = append(keysForStringData, string(k)) } - sortkeys.Strings(keysForStringData) + github_com_gogo_protobuf_sortkeys.Strings(keysForStringData) for _, k := range keysForStringData { dAtA[i] = 0x22 i++ @@ -9527,11 +9439,11 @@ func (m *SecretEnvSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n191, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n190, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n191 + i += n190 if m.Optional != nil { dAtA[i] = 0x10 i++ @@ -9563,11 +9475,11 @@ func (m *SecretKeySelector) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n192, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n191, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n192 + i += n191 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) @@ -9603,11 +9515,11 @@ func (m *SecretList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n193, err := m.ListMeta.MarshalTo(dAtA[i:]) + n192, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n193 + i += n192 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -9641,11 +9553,11 @@ func (m *SecretProjection) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n194, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n193, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n194 + i += n193 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -9765,11 +9677,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Capabilities.Size())) - n195, err := m.Capabilities.MarshalTo(dAtA[i:]) + n194, err := m.Capabilities.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n195 + i += n194 } if m.Privileged != nil { dAtA[i] = 0x10 @@ -9785,11 +9697,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n196, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) + n195, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n196 + i += n195 } if m.RunAsUser != nil { dAtA[i] = 0x20 @@ -9841,11 +9753,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.WindowsOptions.Size())) - n197, err := m.WindowsOptions.MarshalTo(dAtA[i:]) + n196, err := m.WindowsOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n197 + i += n196 } return i, nil } @@ -9868,11 +9780,11 @@ func (m *SerializedReference) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Reference.Size())) - n198, err := m.Reference.MarshalTo(dAtA[i:]) + n197, err := m.Reference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n198 + i += n197 return i, nil } @@ -9894,27 +9806,27 @@ func (m *Service) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n199, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n198, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n199 + i += n198 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n200, err := m.Spec.MarshalTo(dAtA[i:]) + n199, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n200 + i += n199 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n201, err := m.Status.MarshalTo(dAtA[i:]) + n200, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n201 + i += n200 return i, nil } @@ -9936,11 +9848,11 @@ func (m *ServiceAccount) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n202, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n201, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n202 + i += n201 if len(m.Secrets) > 0 { for _, msg := range m.Secrets { dAtA[i] = 0x12 @@ -9996,11 +9908,11 @@ func (m *ServiceAccountList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n203, err := m.ListMeta.MarshalTo(dAtA[i:]) + n202, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n203 + i += n202 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -10065,11 +9977,11 @@ func (m *ServiceList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n204, err := m.ListMeta.MarshalTo(dAtA[i:]) + n203, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n204 + i += n203 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -10114,11 +10026,11 @@ func (m *ServicePort) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TargetPort.Size())) - n205, err := m.TargetPort.MarshalTo(dAtA[i:]) + n204, err := m.TargetPort.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n205 + i += n204 dAtA[i] = 0x28 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NodePort)) @@ -10179,7 +10091,7 @@ func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) { for k := range m.Selector { keysForSelector = append(keysForSelector, string(k)) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) for _, k := range keysForSelector { dAtA[i] = 0x12 i++ @@ -10265,11 +10177,11 @@ func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x72 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SessionAffinityConfig.Size())) - n206, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:]) + n205, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n206 + i += n205 } return i, nil } @@ -10292,11 +10204,11 @@ func (m *ServiceStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LoadBalancer.Size())) - n207, err := m.LoadBalancer.MarshalTo(dAtA[i:]) + n206, err := m.LoadBalancer.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n207 + i += n206 return i, nil } @@ -10319,11 +10231,11 @@ func (m *SessionAffinityConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ClientIP.Size())) - n208, err := m.ClientIP.MarshalTo(dAtA[i:]) + n207, err := m.ClientIP.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n208 + i += n207 } return i, nil } @@ -10367,11 +10279,11 @@ func (m *StorageOSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n209, err := m.SecretRef.MarshalTo(dAtA[i:]) + n208, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n209 + i += n208 } return i, nil } @@ -10415,11 +10327,11 @@ func (m *StorageOSVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n210, err := m.SecretRef.MarshalTo(dAtA[i:]) + n209, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n210 + i += n209 } return i, nil } @@ -10468,11 +10380,11 @@ func (m *TCPSocketAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n211, err := m.Port.MarshalTo(dAtA[i:]) + n210, err := m.Port.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n211 + i += n210 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) @@ -10511,11 +10423,11 @@ func (m *Taint) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TimeAdded.Size())) - n212, err := m.TimeAdded.MarshalTo(dAtA[i:]) + n211, err := m.TimeAdded.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n212 + i += n211 } return i, nil } @@ -10680,11 +10592,11 @@ func (m *Volume) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VolumeSource.Size())) - n213, err := m.VolumeSource.MarshalTo(dAtA[i:]) + n212, err := m.VolumeSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n213 + i += n212 return i, nil } @@ -10781,11 +10693,11 @@ func (m *VolumeNodeAffinity) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Required.Size())) - n214, err := m.Required.MarshalTo(dAtA[i:]) + n213, err := m.Required.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n214 + i += n213 } return i, nil } @@ -10809,41 +10721,41 @@ func (m *VolumeProjection) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n215, err := m.Secret.MarshalTo(dAtA[i:]) + n214, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n215 + i += n214 } if m.DownwardAPI != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n216, err := m.DownwardAPI.MarshalTo(dAtA[i:]) + n215, err := m.DownwardAPI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n216 + i += n215 } if m.ConfigMap != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n217, err := m.ConfigMap.MarshalTo(dAtA[i:]) + n216, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n217 + i += n216 } if m.ServiceAccountToken != nil { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ServiceAccountToken.Size())) - n218, err := m.ServiceAccountToken.MarshalTo(dAtA[i:]) + n217, err := m.ServiceAccountToken.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n218 + i += n217 } return i, nil } @@ -10867,151 +10779,151 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size())) - n219, err := m.HostPath.MarshalTo(dAtA[i:]) + n218, err := m.HostPath.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n219 + i += n218 } if m.EmptyDir != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size())) - n220, err := m.EmptyDir.MarshalTo(dAtA[i:]) + n219, err := m.EmptyDir.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n220 + i += n219 } if m.GCEPersistentDisk != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) - n221, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) + n220, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n221 + i += n220 } if m.AWSElasticBlockStore != nil { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) - n222, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) + n221, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n222 + i += n221 } if m.GitRepo != nil { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size())) - n223, err := m.GitRepo.MarshalTo(dAtA[i:]) + n222, err := m.GitRepo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n223 + i += n222 } if m.Secret != nil { dAtA[i] = 0x32 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n224, err := m.Secret.MarshalTo(dAtA[i:]) + n223, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n224 + i += n223 } if m.NFS != nil { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) - n225, err := m.NFS.MarshalTo(dAtA[i:]) + n224, err := m.NFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n225 + i += n224 } if m.ISCSI != nil { dAtA[i] = 0x42 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) - n226, err := m.ISCSI.MarshalTo(dAtA[i:]) + n225, err := m.ISCSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n226 + i += n225 } if m.Glusterfs != nil { dAtA[i] = 0x4a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) - n227, err := m.Glusterfs.MarshalTo(dAtA[i:]) + n226, err := m.Glusterfs.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n227 + i += n226 } if m.PersistentVolumeClaim != nil { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size())) - n228, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:]) + n227, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n228 + i += n227 } if m.RBD != nil { dAtA[i] = 0x5a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) - n229, err := m.RBD.MarshalTo(dAtA[i:]) + n228, err := m.RBD.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n229 + i += n228 } if m.FlexVolume != nil { dAtA[i] = 0x62 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) - n230, err := m.FlexVolume.MarshalTo(dAtA[i:]) + n229, err := m.FlexVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n230 + i += n229 } if m.Cinder != nil { dAtA[i] = 0x6a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) - n231, err := m.Cinder.MarshalTo(dAtA[i:]) + n230, err := m.Cinder.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n231 + i += n230 } if m.CephFS != nil { dAtA[i] = 0x72 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) - n232, err := m.CephFS.MarshalTo(dAtA[i:]) + n231, err := m.CephFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n232 + i += n231 } if m.Flocker != nil { dAtA[i] = 0x7a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) - n233, err := m.Flocker.MarshalTo(dAtA[i:]) + n232, err := m.Flocker.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n233 + i += n232 } if m.DownwardAPI != nil { dAtA[i] = 0x82 @@ -11019,11 +10931,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n234, err := m.DownwardAPI.MarshalTo(dAtA[i:]) + n233, err := m.DownwardAPI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n234 + i += n233 } if m.FC != nil { dAtA[i] = 0x8a @@ -11031,11 +10943,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size())) - n235, err := m.FC.MarshalTo(dAtA[i:]) + n234, err := m.FC.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n235 + i += n234 } if m.AzureFile != nil { dAtA[i] = 0x92 @@ -11043,11 +10955,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size())) - n236, err := m.AzureFile.MarshalTo(dAtA[i:]) + n235, err := m.AzureFile.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n236 + i += n235 } if m.ConfigMap != nil { dAtA[i] = 0x9a @@ -11055,11 +10967,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n237, err := m.ConfigMap.MarshalTo(dAtA[i:]) + n236, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n237 + i += n236 } if m.VsphereVolume != nil { dAtA[i] = 0xa2 @@ -11067,11 +10979,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size())) - n238, err := m.VsphereVolume.MarshalTo(dAtA[i:]) + n237, err := m.VsphereVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n238 + i += n237 } if m.Quobyte != nil { dAtA[i] = 0xaa @@ -11079,11 +10991,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size())) - n239, err := m.Quobyte.MarshalTo(dAtA[i:]) + n238, err := m.Quobyte.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n239 + i += n238 } if m.AzureDisk != nil { dAtA[i] = 0xb2 @@ -11091,11 +11003,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size())) - n240, err := m.AzureDisk.MarshalTo(dAtA[i:]) + n239, err := m.AzureDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n240 + i += n239 } if m.PhotonPersistentDisk != nil { dAtA[i] = 0xba @@ -11103,11 +11015,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size())) - n241, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) + n240, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n241 + i += n240 } if m.PortworxVolume != nil { dAtA[i] = 0xc2 @@ -11115,11 +11027,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size())) - n242, err := m.PortworxVolume.MarshalTo(dAtA[i:]) + n241, err := m.PortworxVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n242 + i += n241 } if m.ScaleIO != nil { dAtA[i] = 0xca @@ -11127,11 +11039,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size())) - n243, err := m.ScaleIO.MarshalTo(dAtA[i:]) + n242, err := m.ScaleIO.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n243 + i += n242 } if m.Projected != nil { dAtA[i] = 0xd2 @@ -11139,11 +11051,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Projected.Size())) - n244, err := m.Projected.MarshalTo(dAtA[i:]) + n243, err := m.Projected.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n244 + i += n243 } if m.StorageOS != nil { dAtA[i] = 0xda @@ -11151,11 +11063,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size())) - n245, err := m.StorageOS.MarshalTo(dAtA[i:]) + n244, err := m.StorageOS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n245 + i += n244 } if m.CSI != nil { dAtA[i] = 0xe2 @@ -11163,11 +11075,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.CSI.Size())) - n246, err := m.CSI.MarshalTo(dAtA[i:]) + n245, err := m.CSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n246 + i += n245 } return i, nil } @@ -11227,11 +11139,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodAffinityTerm.Size())) - n247, err := m.PodAffinityTerm.MarshalTo(dAtA[i:]) + n246, err := m.PodAffinityTerm.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n247 + i += n246 return i, nil } @@ -12875,12 +12787,6 @@ func (m *NodeSpec) Size() (n int) { l = m.ConfigSource.Size() n += 1 + l + sovGenerated(uint64(l)) } - if len(m.PodCIDRs) > 0 { - for _, s := range m.PodCIDRs { - l = len(s) - n += 1 + l + sovGenerated(uint64(l)) - } - } return n } @@ -13455,14 +13361,6 @@ func (m *PodExecOptions) Size() (n int) { return n } -func (m *PodIP) Size() (n int) { - var l int - _ = l - l = len(m.IP) - n += 1 + l + sovGenerated(uint64(l)) - return n -} - func (m *PodList) Size() (n int) { var l int _ = l @@ -13687,15 +13585,6 @@ func (m *PodSpec) Size() (n int) { l = len(*m.PreemptionPolicy) n += 2 + l + sovGenerated(uint64(l)) } - if len(m.Overhead) > 0 { - for k, v := range m.Overhead { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 2 + sovGenerated(uint64(mapEntrySize)) - } - } return n } @@ -13738,12 +13627,6 @@ func (m *PodStatus) Size() (n int) { } l = len(m.NominatedNodeName) n += 1 + l + sovGenerated(uint64(l)) - if len(m.PodIPs) > 0 { - for _, e := range m.PodIPs { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } return n } @@ -15034,7 +14917,7 @@ func (this *CSIPersistentVolumeSource) String() string { for k := range this.VolumeAttributes { keysForVolumeAttributes = append(keysForVolumeAttributes, k) } - sortkeys.Strings(keysForVolumeAttributes) + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) mapStringForVolumeAttributes := "map[string]string{" for _, k := range keysForVolumeAttributes { mapStringForVolumeAttributes += fmt.Sprintf("%v: %v,", k, this.VolumeAttributes[k]) @@ -15062,7 +14945,7 @@ func (this *CSIVolumeSource) String() string { for k := range this.VolumeAttributes { keysForVolumeAttributes = append(keysForVolumeAttributes, k) } - sortkeys.Strings(keysForVolumeAttributes) + github_com_gogo_protobuf_sortkeys.Strings(keysForVolumeAttributes) mapStringForVolumeAttributes := "map[string]string{" for _, k := range keysForVolumeAttributes { mapStringForVolumeAttributes += fmt.Sprintf("%v: %v,", k, this.VolumeAttributes[k]) @@ -15198,7 +15081,7 @@ func (this *ConfigMap) String() string { for k := range this.Data { keysForData = append(keysForData, k) } - sortkeys.Strings(keysForData) + github_com_gogo_protobuf_sortkeys.Strings(keysForData) mapStringForData := "map[string]string{" for _, k := range keysForData { mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) @@ -15208,7 +15091,7 @@ func (this *ConfigMap) String() string { for k := range this.BinaryData { keysForBinaryData = append(keysForBinaryData, k) } - sortkeys.Strings(keysForBinaryData) + github_com_gogo_protobuf_sortkeys.Strings(keysForBinaryData) mapStringForBinaryData := "map[string][]byte{" for _, k := range keysForBinaryData { mapStringForBinaryData += fmt.Sprintf("%v: %v,", k, this.BinaryData[k]) @@ -15657,7 +15540,7 @@ func (this *FlexPersistentVolumeSource) String() string { for k := range this.Options { keysForOptions = append(keysForOptions, k) } - sortkeys.Strings(keysForOptions) + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) mapStringForOptions := "map[string]string{" for _, k := range keysForOptions { mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) @@ -15681,7 +15564,7 @@ func (this *FlexVolumeSource) String() string { for k := range this.Options { keysForOptions = append(keysForOptions, k) } - sortkeys.Strings(keysForOptions) + github_com_gogo_protobuf_sortkeys.Strings(keysForOptions) mapStringForOptions := "map[string]string{" for _, k := range keysForOptions { mapStringForOptions += fmt.Sprintf("%v: %v,", k, this.Options[k]) @@ -15899,7 +15782,7 @@ func (this *LimitRangeItem) String() string { for k := range this.Max { keysForMax = append(keysForMax, string(k)) } - sortkeys.Strings(keysForMax) + github_com_gogo_protobuf_sortkeys.Strings(keysForMax) mapStringForMax := "ResourceList{" for _, k := range keysForMax { mapStringForMax += fmt.Sprintf("%v: %v,", k, this.Max[ResourceName(k)]) @@ -15909,7 +15792,7 @@ func (this *LimitRangeItem) String() string { for k := range this.Min { keysForMin = append(keysForMin, string(k)) } - sortkeys.Strings(keysForMin) + github_com_gogo_protobuf_sortkeys.Strings(keysForMin) mapStringForMin := "ResourceList{" for _, k := range keysForMin { mapStringForMin += fmt.Sprintf("%v: %v,", k, this.Min[ResourceName(k)]) @@ -15919,7 +15802,7 @@ func (this *LimitRangeItem) String() string { for k := range this.Default { keysForDefault = append(keysForDefault, string(k)) } - sortkeys.Strings(keysForDefault) + github_com_gogo_protobuf_sortkeys.Strings(keysForDefault) mapStringForDefault := "ResourceList{" for _, k := range keysForDefault { mapStringForDefault += fmt.Sprintf("%v: %v,", k, this.Default[ResourceName(k)]) @@ -15929,7 +15812,7 @@ func (this *LimitRangeItem) String() string { for k := range this.DefaultRequest { keysForDefaultRequest = append(keysForDefaultRequest, string(k)) } - sortkeys.Strings(keysForDefaultRequest) + github_com_gogo_protobuf_sortkeys.Strings(keysForDefaultRequest) mapStringForDefaultRequest := "ResourceList{" for _, k := range keysForDefaultRequest { mapStringForDefaultRequest += fmt.Sprintf("%v: %v,", k, this.DefaultRequest[ResourceName(k)]) @@ -15939,7 +15822,7 @@ func (this *LimitRangeItem) String() string { for k := range this.MaxLimitRequestRatio { keysForMaxLimitRequestRatio = append(keysForMaxLimitRequestRatio, string(k)) } - sortkeys.Strings(keysForMaxLimitRequestRatio) + github_com_gogo_protobuf_sortkeys.Strings(keysForMaxLimitRequestRatio) mapStringForMaxLimitRequestRatio := "ResourceList{" for _, k := range keysForMaxLimitRequestRatio { mapStringForMaxLimitRequestRatio += fmt.Sprintf("%v: %v,", k, this.MaxLimitRequestRatio[ResourceName(k)]) @@ -16196,7 +16079,7 @@ func (this *NodeResources) String() string { for k := range this.Capacity { keysForCapacity = append(keysForCapacity, string(k)) } - sortkeys.Strings(keysForCapacity) + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) mapStringForCapacity := "ResourceList{" for _, k := range keysForCapacity { mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) @@ -16252,7 +16135,6 @@ func (this *NodeSpec) String() string { `Unschedulable:` + fmt.Sprintf("%v", this.Unschedulable) + `,`, `Taints:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Taints), "Taint", "Taint", 1), `&`, ``, 1) + `,`, `ConfigSource:` + strings.Replace(fmt.Sprintf("%v", this.ConfigSource), "NodeConfigSource", "NodeConfigSource", 1) + `,`, - `PodCIDRs:` + fmt.Sprintf("%v", this.PodCIDRs) + `,`, `}`, }, "") return s @@ -16265,7 +16147,7 @@ func (this *NodeStatus) String() string { for k := range this.Capacity { keysForCapacity = append(keysForCapacity, string(k)) } - sortkeys.Strings(keysForCapacity) + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) mapStringForCapacity := "ResourceList{" for _, k := range keysForCapacity { mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) @@ -16275,7 +16157,7 @@ func (this *NodeStatus) String() string { for k := range this.Allocatable { keysForAllocatable = append(keysForAllocatable, string(k)) } - sortkeys.Strings(keysForAllocatable) + github_com_gogo_protobuf_sortkeys.Strings(keysForAllocatable) mapStringForAllocatable := "ResourceList{" for _, k := range keysForAllocatable { mapStringForAllocatable += fmt.Sprintf("%v: %v,", k, this.Allocatable[ResourceName(k)]) @@ -16417,7 +16299,7 @@ func (this *PersistentVolumeClaimStatus) String() string { for k := range this.Capacity { keysForCapacity = append(keysForCapacity, string(k)) } - sortkeys.Strings(keysForCapacity) + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) mapStringForCapacity := "ResourceList{" for _, k := range keysForCapacity { mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) @@ -16493,7 +16375,7 @@ func (this *PersistentVolumeSpec) String() string { for k := range this.Capacity { keysForCapacity = append(keysForCapacity, string(k)) } - sortkeys.Strings(keysForCapacity) + github_com_gogo_protobuf_sortkeys.Strings(keysForCapacity) mapStringForCapacity := "ResourceList{" for _, k := range keysForCapacity { mapStringForCapacity += fmt.Sprintf("%v: %v,", k, this.Capacity[ResourceName(k)]) @@ -16649,16 +16531,6 @@ func (this *PodExecOptions) String() string { }, "") return s } -func (this *PodIP) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&PodIP{`, - `IP:` + fmt.Sprintf("%v", this.IP) + `,`, - `}`, - }, "") - return s -} func (this *PodList) String() string { if this == nil { return "nil" @@ -16752,22 +16624,12 @@ func (this *PodSpec) String() string { for k := range this.NodeSelector { keysForNodeSelector = append(keysForNodeSelector, k) } - sortkeys.Strings(keysForNodeSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForNodeSelector) mapStringForNodeSelector := "map[string]string{" for _, k := range keysForNodeSelector { mapStringForNodeSelector += fmt.Sprintf("%v: %v,", k, this.NodeSelector[k]) } mapStringForNodeSelector += "}" - keysForOverhead := make([]string, 0, len(this.Overhead)) - for k := range this.Overhead { - keysForOverhead = append(keysForOverhead, string(k)) - } - sortkeys.Strings(keysForOverhead) - mapStringForOverhead := "ResourceList{" - for _, k := range keysForOverhead { - mapStringForOverhead += fmt.Sprintf("%v: %v,", k, this.Overhead[ResourceName(k)]) - } - mapStringForOverhead += "}" s := strings.Join([]string{`&PodSpec{`, `Volumes:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Volumes), "Volume", "Volume", 1), `&`, ``, 1) + `,`, `Containers:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Containers), "Container", "Container", 1), `&`, ``, 1) + `,`, @@ -16800,7 +16662,6 @@ func (this *PodSpec) String() string { `RuntimeClassName:` + valueToStringGenerated(this.RuntimeClassName) + `,`, `EnableServiceLinks:` + valueToStringGenerated(this.EnableServiceLinks) + `,`, `PreemptionPolicy:` + valueToStringGenerated(this.PreemptionPolicy) + `,`, - `Overhead:` + mapStringForOverhead + `,`, `}`, }, "") return s @@ -16821,7 +16682,6 @@ func (this *PodStatus) String() string { `QOSClass:` + fmt.Sprintf("%v", this.QOSClass) + `,`, `InitContainerStatuses:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.InitContainerStatuses), "ContainerStatus", "ContainerStatus", 1), `&`, ``, 1) + `,`, `NominatedNodeName:` + fmt.Sprintf("%v", this.NominatedNodeName) + `,`, - `PodIPs:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.PodIPs), "PodIP", "PodIP", 1), `&`, ``, 1) + `,`, `}`, }, "") return s @@ -17048,7 +16908,7 @@ func (this *ReplicationControllerSpec) String() string { for k := range this.Selector { keysForSelector = append(keysForSelector, k) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) mapStringForSelector := "map[string]string{" for _, k := range keysForSelector { mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) @@ -17121,7 +16981,7 @@ func (this *ResourceQuotaSpec) String() string { for k := range this.Hard { keysForHard = append(keysForHard, string(k)) } - sortkeys.Strings(keysForHard) + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) mapStringForHard := "ResourceList{" for _, k := range keysForHard { mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) @@ -17143,7 +17003,7 @@ func (this *ResourceQuotaStatus) String() string { for k := range this.Hard { keysForHard = append(keysForHard, string(k)) } - sortkeys.Strings(keysForHard) + github_com_gogo_protobuf_sortkeys.Strings(keysForHard) mapStringForHard := "ResourceList{" for _, k := range keysForHard { mapStringForHard += fmt.Sprintf("%v: %v,", k, this.Hard[ResourceName(k)]) @@ -17153,7 +17013,7 @@ func (this *ResourceQuotaStatus) String() string { for k := range this.Used { keysForUsed = append(keysForUsed, string(k)) } - sortkeys.Strings(keysForUsed) + github_com_gogo_protobuf_sortkeys.Strings(keysForUsed) mapStringForUsed := "ResourceList{" for _, k := range keysForUsed { mapStringForUsed += fmt.Sprintf("%v: %v,", k, this.Used[ResourceName(k)]) @@ -17174,7 +17034,7 @@ func (this *ResourceRequirements) String() string { for k := range this.Limits { keysForLimits = append(keysForLimits, string(k)) } - sortkeys.Strings(keysForLimits) + github_com_gogo_protobuf_sortkeys.Strings(keysForLimits) mapStringForLimits := "ResourceList{" for _, k := range keysForLimits { mapStringForLimits += fmt.Sprintf("%v: %v,", k, this.Limits[ResourceName(k)]) @@ -17184,7 +17044,7 @@ func (this *ResourceRequirements) String() string { for k := range this.Requests { keysForRequests = append(keysForRequests, string(k)) } - sortkeys.Strings(keysForRequests) + github_com_gogo_protobuf_sortkeys.Strings(keysForRequests) mapStringForRequests := "ResourceList{" for _, k := range keysForRequests { mapStringForRequests += fmt.Sprintf("%v: %v,", k, this.Requests[ResourceName(k)]) @@ -17278,7 +17138,7 @@ func (this *Secret) String() string { for k := range this.Data { keysForData = append(keysForData, k) } - sortkeys.Strings(keysForData) + github_com_gogo_protobuf_sortkeys.Strings(keysForData) mapStringForData := "map[string][]byte{" for _, k := range keysForData { mapStringForData += fmt.Sprintf("%v: %v,", k, this.Data[k]) @@ -17288,7 +17148,7 @@ func (this *Secret) String() string { for k := range this.StringData { keysForStringData = append(keysForStringData, k) } - sortkeys.Strings(keysForStringData) + github_com_gogo_protobuf_sortkeys.Strings(keysForStringData) mapStringForStringData := "map[string]string{" for _, k := range keysForStringData { mapStringForStringData += fmt.Sprintf("%v: %v,", k, this.StringData[k]) @@ -17493,7 +17353,7 @@ func (this *ServiceSpec) String() string { for k := range this.Selector { keysForSelector = append(keysForSelector, k) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) mapStringForSelector := "map[string]string{" for _, k := range keysForSelector { mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) @@ -33228,35 +33088,6 @@ func (m *NodeSpec) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PodCIDRs", 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 > l { - return io.ErrUnexpectedEOF - } - m.PodCIDRs = append(m.PodCIDRs, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -38665,85 +38496,6 @@ func (m *PodExecOptions) Unmarshal(dAtA []byte) error { } return nil } -func (m *PodIP) 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: PodIP: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PodIP: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IP", 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 > l { - return io.ErrUnexpectedEOF - } - m.IP = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *PodList) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -40697,129 +40449,6 @@ func (m *PodSpec) Unmarshal(dAtA []byte) error { s := PreemptionPolicy(dAtA[iNdEx:postIndex]) m.PreemptionPolicy = &s iNdEx = postIndex - case 32: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Overhead", 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 > l { - return io.ErrUnexpectedEOF - } - if m.Overhead == nil { - m.Overhead = make(ResourceList) - } - var mapkey ResourceName - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - 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 > l { - return io.ErrUnexpectedEOF - } - mapkey = ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.Overhead[ResourceName(mapkey)] = *mapvalue - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -41199,37 +40828,6 @@ func (m *PodStatus) Unmarshal(dAtA []byte) error { } m.NominatedNodeName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PodIPs", 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 > l { - return io.ErrUnexpectedEOF - } - m.PodIPs = append(m.PodIPs, PodIP{}) - if err := m.PodIPs[len(m.PodIPs)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -52940,829 +52538,823 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 13179 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x90, 0x24, 0x47, - 0x56, 0x18, 0x7e, 0xd5, 0x3d, 0x1f, 0xdd, 0x6f, 0xbe, 0x73, 0x77, 0xa5, 0xd9, 0x91, 0x76, 0x7b, - 0x55, 0x7b, 0xb7, 0x5a, 0x9d, 0xa4, 0xd9, 0xd3, 0x4a, 0x3a, 0x89, 0x93, 0x4e, 0x30, 0x33, 0x3d, - 0xb3, 0xdb, 0xda, 0x9d, 0xd9, 0x56, 0xf6, 0xec, 0xee, 0x9d, 0xd0, 0x1d, 0x57, 0xd3, 0x95, 0x33, - 0x53, 0x9a, 0x9e, 0xaa, 0x56, 0x55, 0xf5, 0xec, 0x8e, 0x7e, 0x10, 0x3f, 0x7c, 0x18, 0xcc, 0x05, - 0xd8, 0x71, 0x61, 0x13, 0xfe, 0x00, 0x02, 0x47, 0x60, 0x1c, 0x80, 0xc1, 0x0e, 0x63, 0x30, 0x60, - 0x0e, 0xdb, 0x18, 0xec, 0x08, 0xec, 0x3f, 0xce, 0xd8, 0x11, 0x8e, 0x23, 0x82, 0xf0, 0x18, 0x16, - 0x87, 0x09, 0xfe, 0x30, 0x38, 0x8c, 0xff, 0xf1, 0x98, 0x30, 0x8e, 0xfc, 0xac, 0xcc, 0xea, 0xaa, - 0xee, 0x9e, 0xd5, 0xec, 0x48, 0x10, 0xf7, 0x5f, 0x77, 0xbe, 0x97, 0x2f, 0xb3, 0x32, 0x5f, 0x66, - 0xbe, 0x7c, 0xf9, 0x3e, 0xe0, 0xb5, 0x9d, 0x57, 0xa3, 0x79, 0x2f, 0xb8, 0xb2, 0xd3, 0xd9, 0x20, - 0xa1, 0x4f, 0x62, 0x12, 0x5d, 0xd9, 0x23, 0xbe, 0x1b, 0x84, 0x57, 0x04, 0xc0, 0x69, 0x7b, 0x57, - 0x9a, 0x41, 0x48, 0xae, 0xec, 0xbd, 0x70, 0x65, 0x8b, 0xf8, 0x24, 0x74, 0x62, 0xe2, 0xce, 0xb7, - 0xc3, 0x20, 0x0e, 0x10, 0xe2, 0x38, 0xf3, 0x4e, 0xdb, 0x9b, 0xa7, 0x38, 0xf3, 0x7b, 0x2f, 0xcc, - 0x3d, 0xbf, 0xe5, 0xc5, 0xdb, 0x9d, 0x8d, 0xf9, 0x66, 0xb0, 0x7b, 0x65, 0x2b, 0xd8, 0x0a, 0xae, - 0x30, 0xd4, 0x8d, 0xce, 0x26, 0xfb, 0xc7, 0xfe, 0xb0, 0x5f, 0x9c, 0xc4, 0xdc, 0x4b, 0x49, 0x33, - 0xbb, 0x4e, 0x73, 0xdb, 0xf3, 0x49, 0xb8, 0x7f, 0xa5, 0xbd, 0xb3, 0xc5, 0xda, 0x0d, 0x49, 0x14, - 0x74, 0xc2, 0x26, 0x49, 0x37, 0xdc, 0xb3, 0x56, 0x74, 0x65, 0x97, 0xc4, 0x4e, 0x46, 0x77, 0xe7, - 0xae, 0xe4, 0xd5, 0x0a, 0x3b, 0x7e, 0xec, 0xed, 0x76, 0x37, 0xf3, 0xe9, 0x7e, 0x15, 0xa2, 0xe6, - 0x36, 0xd9, 0x75, 0xba, 0xea, 0xbd, 0x98, 0x57, 0xaf, 0x13, 0x7b, 0xad, 0x2b, 0x9e, 0x1f, 0x47, - 0x71, 0x98, 0xae, 0x64, 0x7f, 0xc3, 0x82, 0x0b, 0x0b, 0x77, 0x1b, 0xcb, 0x2d, 0x27, 0x8a, 0xbd, - 0xe6, 0x62, 0x2b, 0x68, 0xee, 0x34, 0xe2, 0x20, 0x24, 0x77, 0x82, 0x56, 0x67, 0x97, 0x34, 0xd8, - 0x40, 0xa0, 0xe7, 0xa0, 0xb4, 0xc7, 0xfe, 0xd7, 0xaa, 0xb3, 0xd6, 0x05, 0xeb, 0x72, 0x79, 0x71, - 0xfa, 0x37, 0x0f, 0x2a, 0x1f, 0x7b, 0x70, 0x50, 0x29, 0xdd, 0x11, 0xe5, 0x58, 0x61, 0xa0, 0x4b, - 0x30, 0xb2, 0x19, 0xad, 0xef, 0xb7, 0xc9, 0x6c, 0x81, 0xe1, 0x4e, 0x0a, 0xdc, 0x91, 0x95, 0x06, - 0x2d, 0xc5, 0x02, 0x8a, 0xae, 0x40, 0xb9, 0xed, 0x84, 0xb1, 0x17, 0x7b, 0x81, 0x3f, 0x5b, 0xbc, - 0x60, 0x5d, 0x1e, 0x5e, 0x9c, 0x11, 0xa8, 0xe5, 0xba, 0x04, 0xe0, 0x04, 0x87, 0x76, 0x23, 0x24, - 0x8e, 0x7b, 0xcb, 0x6f, 0xed, 0xcf, 0x0e, 0x5d, 0xb0, 0x2e, 0x97, 0x92, 0x6e, 0x60, 0x51, 0x8e, - 0x15, 0x86, 0xfd, 0xc3, 0x05, 0x28, 0x2d, 0x6c, 0x6e, 0x7a, 0xbe, 0x17, 0xef, 0xa3, 0x3b, 0x30, - 0xee, 0x07, 0x2e, 0x91, 0xff, 0xd9, 0x57, 0x8c, 0x5d, 0xbd, 0x30, 0xdf, 0xcd, 0x4a, 0xf3, 0x6b, - 0x1a, 0xde, 0xe2, 0xf4, 0x83, 0x83, 0xca, 0xb8, 0x5e, 0x82, 0x0d, 0x3a, 0x08, 0xc3, 0x58, 0x3b, - 0x70, 0x15, 0xd9, 0x02, 0x23, 0x5b, 0xc9, 0x22, 0x5b, 0x4f, 0xd0, 0x16, 0xa7, 0x1e, 0x1c, 0x54, - 0xc6, 0xb4, 0x02, 0xac, 0x13, 0x41, 0x1b, 0x30, 0x45, 0xff, 0xfa, 0xb1, 0xa7, 0xe8, 0x16, 0x19, - 0xdd, 0x8b, 0x79, 0x74, 0x35, 0xd4, 0xc5, 0x53, 0x0f, 0x0e, 0x2a, 0x53, 0xa9, 0x42, 0x9c, 0x26, - 0x68, 0xbf, 0x0f, 0x93, 0x0b, 0x71, 0xec, 0x34, 0xb7, 0x89, 0xcb, 0x67, 0x10, 0xbd, 0x04, 0x43, - 0xbe, 0xb3, 0x4b, 0xc4, 0xfc, 0x5e, 0x10, 0x03, 0x3b, 0xb4, 0xe6, 0xec, 0x92, 0xc3, 0x83, 0xca, - 0xf4, 0x6d, 0xdf, 0x7b, 0xaf, 0x23, 0xb8, 0x82, 0x96, 0x61, 0x86, 0x8d, 0xae, 0x02, 0xb8, 0x64, - 0xcf, 0x6b, 0x92, 0xba, 0x13, 0x6f, 0x8b, 0xf9, 0x46, 0xa2, 0x2e, 0x54, 0x15, 0x04, 0x6b, 0x58, - 0xf6, 0x7d, 0x28, 0x2f, 0xec, 0x05, 0x9e, 0x5b, 0x0f, 0xdc, 0x08, 0xed, 0xc0, 0x54, 0x3b, 0x24, - 0x9b, 0x24, 0x54, 0x45, 0xb3, 0xd6, 0x85, 0xe2, 0xe5, 0xb1, 0xab, 0x97, 0x33, 0x3f, 0xd6, 0x44, - 0x5d, 0xf6, 0xe3, 0x70, 0x7f, 0xf1, 0x71, 0xd1, 0xde, 0x54, 0x0a, 0x8a, 0xd3, 0x94, 0xed, 0x7f, - 0x5d, 0x80, 0x33, 0x0b, 0xef, 0x77, 0x42, 0x52, 0xf5, 0xa2, 0x9d, 0x34, 0x87, 0xbb, 0x5e, 0xb4, - 0xb3, 0x96, 0x8c, 0x80, 0x62, 0xad, 0xaa, 0x28, 0xc7, 0x0a, 0x03, 0x3d, 0x0f, 0xa3, 0xf4, 0xf7, - 0x6d, 0x5c, 0x13, 0x9f, 0x7c, 0x4a, 0x20, 0x8f, 0x55, 0x9d, 0xd8, 0xa9, 0x72, 0x10, 0x96, 0x38, - 0x68, 0x15, 0xc6, 0x9a, 0x6c, 0x41, 0x6e, 0xad, 0x06, 0x2e, 0x61, 0x93, 0x59, 0x5e, 0x7c, 0x96, - 0xa2, 0x2f, 0x25, 0xc5, 0x87, 0x07, 0x95, 0x59, 0xde, 0x37, 0x41, 0x42, 0x83, 0x61, 0xbd, 0x3e, - 0xb2, 0xd5, 0xfa, 0x1a, 0x62, 0x94, 0x20, 0x63, 0x6d, 0x5d, 0xd6, 0x96, 0xca, 0x30, 0x5b, 0x2a, - 0xe3, 0xd9, 0xcb, 0x04, 0xbd, 0x00, 0x43, 0x3b, 0x9e, 0xef, 0xce, 0x8e, 0x30, 0x5a, 0xe7, 0xe8, - 0x9c, 0xdf, 0xf0, 0x7c, 0xf7, 0xf0, 0xa0, 0x32, 0x63, 0x74, 0x87, 0x16, 0x62, 0x86, 0x6a, 0xff, - 0x89, 0x05, 0x15, 0x06, 0x5b, 0xf1, 0x5a, 0xa4, 0x4e, 0xc2, 0xc8, 0x8b, 0x62, 0xe2, 0xc7, 0xc6, - 0x80, 0x5e, 0x05, 0x88, 0x48, 0x33, 0x24, 0xb1, 0x36, 0xa4, 0x8a, 0x31, 0x1a, 0x0a, 0x82, 0x35, - 0x2c, 0xba, 0x21, 0x44, 0xdb, 0x4e, 0xc8, 0xf8, 0x4b, 0x0c, 0xac, 0xda, 0x10, 0x1a, 0x12, 0x80, - 0x13, 0x1c, 0x63, 0x43, 0x28, 0xf6, 0xdb, 0x10, 0xd0, 0x67, 0x61, 0x2a, 0x69, 0x2c, 0x6a, 0x3b, - 0x4d, 0x39, 0x80, 0x6c, 0xc9, 0x34, 0x4c, 0x10, 0x4e, 0xe3, 0xda, 0xff, 0xc0, 0x12, 0xcc, 0x43, - 0xbf, 0xfa, 0x23, 0xfe, 0xad, 0xf6, 0x2f, 0x5b, 0x30, 0xba, 0xe8, 0xf9, 0xae, 0xe7, 0x6f, 0xa1, - 0x2f, 0x41, 0x89, 0x9e, 0x4d, 0xae, 0x13, 0x3b, 0x62, 0xdf, 0xfb, 0x94, 0xb6, 0xb6, 0xd4, 0x51, - 0x31, 0xdf, 0xde, 0xd9, 0xa2, 0x05, 0xd1, 0x3c, 0xc5, 0xa6, 0xab, 0xed, 0xd6, 0xc6, 0xbb, 0xa4, - 0x19, 0xaf, 0x92, 0xd8, 0x49, 0x3e, 0x27, 0x29, 0xc3, 0x8a, 0x2a, 0xba, 0x01, 0x23, 0xb1, 0x13, - 0x6e, 0x91, 0x58, 0x6c, 0x80, 0x99, 0x1b, 0x15, 0xaf, 0x89, 0xe9, 0x8a, 0x24, 0x7e, 0x93, 0x24, - 0xc7, 0xc2, 0x3a, 0xab, 0x8a, 0x05, 0x09, 0xfb, 0xaf, 0x8e, 0xc2, 0xd9, 0xa5, 0x46, 0x2d, 0x87, - 0xaf, 0x2e, 0xc1, 0x88, 0x1b, 0x7a, 0x7b, 0x24, 0x14, 0xe3, 0xac, 0xa8, 0x54, 0x59, 0x29, 0x16, - 0x50, 0xf4, 0x2a, 0x8c, 0xf3, 0x03, 0xe9, 0xba, 0xe3, 0xbb, 0x2d, 0x39, 0xc4, 0xa7, 0x05, 0xf6, - 0xf8, 0x1d, 0x0d, 0x86, 0x0d, 0xcc, 0x23, 0x32, 0xd5, 0xa5, 0xd4, 0x62, 0xcc, 0x3b, 0xec, 0xbe, - 0x62, 0xc1, 0x34, 0x6f, 0x66, 0x21, 0x8e, 0x43, 0x6f, 0xa3, 0x13, 0x93, 0x68, 0x76, 0x98, 0xed, - 0x74, 0x4b, 0x59, 0xa3, 0x95, 0x3b, 0x02, 0xf3, 0x77, 0x52, 0x54, 0xf8, 0x26, 0x38, 0x2b, 0xda, - 0x9d, 0x4e, 0x83, 0x71, 0x57, 0xb3, 0xe8, 0x7b, 0x2c, 0x98, 0x6b, 0x06, 0x7e, 0x1c, 0x06, 0xad, - 0x16, 0x09, 0xeb, 0x9d, 0x8d, 0x96, 0x17, 0x6d, 0x73, 0x3e, 0xc5, 0x64, 0x93, 0xed, 0x04, 0x39, - 0x73, 0xa8, 0x90, 0xc4, 0x1c, 0x9e, 0x7f, 0x70, 0x50, 0x99, 0x5b, 0xca, 0x25, 0x85, 0x7b, 0x34, - 0x83, 0x76, 0x00, 0xd1, 0xa3, 0xb4, 0x11, 0x3b, 0x5b, 0x24, 0x69, 0x7c, 0x74, 0xf0, 0xc6, 0x1f, - 0x7b, 0x70, 0x50, 0x41, 0x6b, 0x5d, 0x24, 0x70, 0x06, 0x59, 0xf4, 0x1e, 0x9c, 0xa6, 0xa5, 0x5d, - 0xdf, 0x5a, 0x1a, 0xbc, 0xb9, 0xd9, 0x07, 0x07, 0x95, 0xd3, 0x6b, 0x19, 0x44, 0x70, 0x26, 0x69, - 0xf4, 0xdd, 0x16, 0x9c, 0x4d, 0x3e, 0x7f, 0xf9, 0x7e, 0xdb, 0xf1, 0xdd, 0xa4, 0xe1, 0xf2, 0xe0, - 0x0d, 0xd3, 0x3d, 0xf9, 0xec, 0x52, 0x1e, 0x25, 0x9c, 0xdf, 0xc8, 0xdc, 0x12, 0x9c, 0xc9, 0xe4, - 0x16, 0x34, 0x0d, 0xc5, 0x1d, 0xc2, 0xa5, 0xa0, 0x32, 0xa6, 0x3f, 0xd1, 0x69, 0x18, 0xde, 0x73, - 0x5a, 0x1d, 0xb1, 0x50, 0x30, 0xff, 0xf3, 0x99, 0xc2, 0xab, 0x96, 0xfd, 0x6f, 0x8a, 0x30, 0xb5, - 0xd4, 0xa8, 0x3d, 0xd4, 0x2a, 0xd4, 0x8f, 0xa1, 0x42, 0xcf, 0x63, 0x28, 0x39, 0xd4, 0x8a, 0xb9, - 0x87, 0xda, 0xff, 0x9f, 0xb1, 0x84, 0x86, 0xd8, 0x12, 0xfa, 0x96, 0x9c, 0x25, 0x74, 0xcc, 0x0b, - 0x67, 0x2f, 0x87, 0x8b, 0x86, 0xd9, 0x64, 0x66, 0x4a, 0x2c, 0x37, 0x83, 0xa6, 0xd3, 0x4a, 0x6f, - 0x7d, 0x47, 0x64, 0xa5, 0xe3, 0x99, 0xc7, 0x26, 0x8c, 0x2f, 0x39, 0x6d, 0x67, 0xc3, 0x6b, 0x79, - 0xb1, 0x47, 0x22, 0xf4, 0x34, 0x14, 0x1d, 0xd7, 0x65, 0xd2, 0x56, 0x79, 0xf1, 0xcc, 0x83, 0x83, - 0x4a, 0x71, 0xc1, 0xa5, 0xc7, 0x3e, 0x28, 0xac, 0x7d, 0x4c, 0x31, 0xd0, 0x27, 0x61, 0xc8, 0x0d, - 0x83, 0xf6, 0x6c, 0x81, 0x61, 0xd2, 0x55, 0x37, 0x54, 0x0d, 0x83, 0x76, 0x0a, 0x95, 0xe1, 0xd8, - 0xbf, 0x56, 0x80, 0x27, 0x97, 0x48, 0x7b, 0x7b, 0xa5, 0x91, 0xb3, 0x7f, 0x5f, 0x86, 0xd2, 0x6e, - 0xe0, 0x7b, 0x71, 0x10, 0x46, 0xa2, 0x69, 0xc6, 0x11, 0xab, 0xa2, 0x0c, 0x2b, 0x28, 0xba, 0x00, - 0x43, 0xed, 0x44, 0xa8, 0x1c, 0x97, 0x02, 0x29, 0x13, 0x27, 0x19, 0x84, 0x62, 0x74, 0x22, 0x12, - 0x0a, 0x8e, 0x51, 0x18, 0xb7, 0x23, 0x12, 0x62, 0x06, 0x49, 0x4e, 0x66, 0x7a, 0x66, 0x8b, 0x1d, - 0x3a, 0x75, 0x32, 0x53, 0x08, 0xd6, 0xb0, 0x50, 0x1d, 0xca, 0x51, 0x6a, 0x66, 0x07, 0x5a, 0xa6, - 0x13, 0xec, 0xe8, 0x56, 0x33, 0x99, 0x10, 0x31, 0x4e, 0x94, 0x91, 0xbe, 0x47, 0xf7, 0xd7, 0x0a, - 0x80, 0xf8, 0x10, 0xfe, 0x39, 0x1b, 0xb8, 0xdb, 0xdd, 0x03, 0x37, 0xf8, 0x92, 0x38, 0xae, 0xd1, - 0xfb, 0x5f, 0x16, 0x3c, 0xb9, 0xe4, 0xf9, 0x2e, 0x09, 0x73, 0x18, 0xf0, 0xd1, 0xdc, 0x65, 0x8f, - 0x26, 0x34, 0x18, 0x2c, 0x36, 0x74, 0x0c, 0x2c, 0x66, 0xff, 0xb1, 0x05, 0x88, 0x7f, 0xf6, 0x47, - 0xee, 0x63, 0x6f, 0x77, 0x7f, 0xec, 0x31, 0xb0, 0x85, 0x7d, 0x13, 0x26, 0x97, 0x5a, 0x1e, 0xf1, - 0xe3, 0x5a, 0x7d, 0x29, 0xf0, 0x37, 0xbd, 0x2d, 0xf4, 0x19, 0x98, 0x8c, 0xbd, 0x5d, 0x12, 0x74, - 0xe2, 0x06, 0x69, 0x06, 0x3e, 0xbb, 0x49, 0x5a, 0x97, 0x87, 0x17, 0xd1, 0x83, 0x83, 0xca, 0xe4, - 0xba, 0x01, 0xc1, 0x29, 0x4c, 0xfb, 0x77, 0xe8, 0xf8, 0x05, 0xbb, 0xed, 0xc0, 0x27, 0x7e, 0xbc, - 0x14, 0xf8, 0x2e, 0xd7, 0x38, 0x7c, 0x06, 0x86, 0x62, 0x3a, 0x1e, 0x7c, 0xec, 0x2e, 0xc9, 0x85, - 0x42, 0x47, 0xe1, 0xf0, 0xa0, 0xf2, 0x58, 0x77, 0x0d, 0x36, 0x4e, 0xac, 0x0e, 0xfa, 0x16, 0x18, - 0x89, 0x62, 0x27, 0xee, 0x44, 0x62, 0x34, 0x9f, 0x92, 0xa3, 0xd9, 0x60, 0xa5, 0x87, 0x07, 0x95, - 0x29, 0x55, 0x8d, 0x17, 0x61, 0x51, 0x01, 0x3d, 0x03, 0xa3, 0xbb, 0x24, 0x8a, 0x9c, 0x2d, 0x79, - 0x1a, 0x4e, 0x89, 0xba, 0xa3, 0xab, 0xbc, 0x18, 0x4b, 0x38, 0xba, 0x08, 0xc3, 0x24, 0x0c, 0x83, - 0x50, 0xac, 0xd1, 0x09, 0x81, 0x38, 0xbc, 0x4c, 0x0b, 0x31, 0x87, 0xd9, 0xff, 0xde, 0x82, 0x29, - 0xd5, 0x57, 0xde, 0xd6, 0x09, 0xdc, 0x0a, 0xde, 0x06, 0x68, 0xca, 0x0f, 0x8c, 0xd8, 0xe9, 0x31, - 0x76, 0xf5, 0x52, 0xe6, 0x41, 0xdd, 0x35, 0x8c, 0x09, 0x65, 0x55, 0x14, 0x61, 0x8d, 0x9a, 0xfd, - 0xcf, 0x2d, 0x38, 0x95, 0xfa, 0xa2, 0x9b, 0x5e, 0x14, 0xa3, 0x77, 0xba, 0xbe, 0x6a, 0x7e, 0xb0, - 0xaf, 0xa2, 0xb5, 0xd9, 0x37, 0x29, 0x56, 0x96, 0x25, 0xda, 0x17, 0x5d, 0x87, 0x61, 0x2f, 0x26, - 0xbb, 0xf2, 0x63, 0x2e, 0xf6, 0xfc, 0x18, 0xde, 0xab, 0x64, 0x46, 0x6a, 0xb4, 0x26, 0xe6, 0x04, - 0xec, 0xbf, 0x51, 0x84, 0x32, 0x67, 0xdb, 0x55, 0xa7, 0x7d, 0x02, 0x73, 0x51, 0x83, 0x21, 0x46, - 0x9d, 0x77, 0xfc, 0xe9, 0xec, 0x8e, 0x8b, 0xee, 0xcc, 0xd3, 0x2b, 0x3f, 0x17, 0x8e, 0xd4, 0xd1, - 0x40, 0x8b, 0x30, 0x23, 0x81, 0x1c, 0x80, 0x0d, 0xcf, 0x77, 0xc2, 0x7d, 0x5a, 0x36, 0x5b, 0x64, - 0x04, 0x9f, 0xef, 0x4d, 0x70, 0x51, 0xe1, 0x73, 0xb2, 0xaa, 0xaf, 0x09, 0x00, 0x6b, 0x44, 0xe7, - 0x5e, 0x81, 0xb2, 0x42, 0x3e, 0x8a, 0x8c, 0x33, 0xf7, 0x59, 0x98, 0x4a, 0xb5, 0xd5, 0xaf, 0xfa, - 0xb8, 0x2e, 0x22, 0xfd, 0x0a, 0xdb, 0x05, 0x44, 0xaf, 0x97, 0xfd, 0x3d, 0xb1, 0x8b, 0xbe, 0x0f, - 0xa7, 0x5b, 0x19, 0x9b, 0x93, 0x98, 0xaa, 0xc1, 0x37, 0xb3, 0x27, 0xc5, 0x67, 0x9f, 0xce, 0x82, - 0xe2, 0xcc, 0x36, 0xe8, 0xb1, 0x1f, 0xb4, 0x29, 0xcf, 0x3b, 0x2d, 0x5d, 0x82, 0xbe, 0x25, 0xca, - 0xb0, 0x82, 0xd2, 0x2d, 0xec, 0xb4, 0xea, 0xfc, 0x0d, 0xb2, 0xdf, 0x20, 0x2d, 0xd2, 0x8c, 0x83, - 0xf0, 0x43, 0xed, 0xfe, 0x39, 0x3e, 0xfa, 0x7c, 0x07, 0x1c, 0x13, 0x04, 0x8a, 0x37, 0xc8, 0x3e, - 0x9f, 0x0a, 0xfd, 0xeb, 0x8a, 0x3d, 0xbf, 0xee, 0xe7, 0x2c, 0x98, 0x50, 0x5f, 0x77, 0x02, 0x4b, - 0x7d, 0xd1, 0x5c, 0xea, 0xe7, 0x7a, 0x32, 0x78, 0xce, 0x22, 0xff, 0x5a, 0x01, 0xce, 0x2a, 0x1c, - 0x2a, 0xee, 0xf3, 0x3f, 0x82, 0xab, 0xae, 0x40, 0xd9, 0x57, 0x8a, 0x28, 0xcb, 0xd4, 0x00, 0x25, - 0x6a, 0xa8, 0x04, 0x87, 0x4a, 0x6d, 0x7e, 0xa2, 0x2d, 0x1a, 0xd7, 0x35, 0xb4, 0x42, 0x1b, 0xbb, - 0x08, 0xc5, 0x8e, 0xe7, 0x8a, 0x33, 0xe3, 0x53, 0x72, 0xb4, 0x6f, 0xd7, 0xaa, 0x87, 0x07, 0x95, - 0xa7, 0xf2, 0x5e, 0x07, 0xe8, 0x61, 0x15, 0xcd, 0xdf, 0xae, 0x55, 0x31, 0xad, 0x8c, 0x16, 0x60, - 0x4a, 0x3e, 0x80, 0xdc, 0xa1, 0x12, 0x54, 0xe0, 0x8b, 0xa3, 0x45, 0xa9, 0x59, 0xb1, 0x09, 0xc6, - 0x69, 0x7c, 0x54, 0x85, 0xe9, 0x9d, 0xce, 0x06, 0x69, 0x91, 0x98, 0x7f, 0xf0, 0x0d, 0xc2, 0x95, - 0x90, 0xe5, 0xe4, 0xb2, 0x75, 0x23, 0x05, 0xc7, 0x5d, 0x35, 0xec, 0x3f, 0x63, 0x5b, 0xbc, 0x18, - 0xbd, 0x7a, 0x18, 0x50, 0xc6, 0xa2, 0xd4, 0x3f, 0x4c, 0x76, 0x1e, 0x84, 0x2b, 0x6e, 0x90, 0xfd, - 0xf5, 0x80, 0x0a, 0xdb, 0xd9, 0x5c, 0x61, 0xf0, 0xfc, 0x50, 0x4f, 0x9e, 0xff, 0x85, 0x02, 0x9c, - 0x51, 0x23, 0x60, 0xc8, 0x75, 0x7f, 0xde, 0xc7, 0xe0, 0x05, 0x18, 0x73, 0xc9, 0xa6, 0xd3, 0x69, - 0xc5, 0x4a, 0x23, 0x3e, 0xcc, 0x5f, 0x45, 0xaa, 0x49, 0x31, 0xd6, 0x71, 0x8e, 0x30, 0x6c, 0x3f, - 0x31, 0xc6, 0xce, 0xd6, 0xd8, 0xa1, 0x3c, 0xae, 0x56, 0x8d, 0x95, 0xbb, 0x6a, 0x2e, 0xc2, 0xb0, - 0xb7, 0x4b, 0x65, 0xad, 0x82, 0x29, 0x42, 0xd5, 0x68, 0x21, 0xe6, 0x30, 0xf4, 0x09, 0x18, 0x6d, - 0x06, 0xbb, 0xbb, 0x8e, 0xef, 0xb2, 0x23, 0xaf, 0xbc, 0x38, 0x46, 0xc5, 0xb1, 0x25, 0x5e, 0x84, - 0x25, 0x0c, 0x3d, 0x09, 0x43, 0x4e, 0xb8, 0xc5, 0xd5, 0x12, 0xe5, 0xc5, 0x12, 0x6d, 0x69, 0x21, - 0xdc, 0x8a, 0x30, 0x2b, 0xa5, 0xb7, 0xaa, 0x7b, 0x41, 0xb8, 0xe3, 0xf9, 0x5b, 0x55, 0x2f, 0x14, - 0x4b, 0x42, 0x9d, 0x85, 0x77, 0x15, 0x04, 0x6b, 0x58, 0x68, 0x05, 0x86, 0xdb, 0x41, 0x18, 0x47, - 0xb3, 0x23, 0x6c, 0xb8, 0x9f, 0xca, 0xd9, 0x88, 0xf8, 0xd7, 0xd6, 0x83, 0x30, 0x4e, 0x3e, 0x80, - 0xfe, 0x8b, 0x30, 0xaf, 0x8e, 0xbe, 0x05, 0x8a, 0xc4, 0xdf, 0x9b, 0x1d, 0x65, 0x54, 0xe6, 0xb2, - 0xa8, 0x2c, 0xfb, 0x7b, 0x77, 0x9c, 0x30, 0xd9, 0xa5, 0x97, 0xfd, 0x3d, 0x4c, 0xeb, 0xa0, 0xcf, - 0x43, 0x59, 0x2e, 0xf1, 0x48, 0x68, 0xcc, 0x32, 0x59, 0x4c, 0x6e, 0x0c, 0x98, 0xbc, 0xd7, 0xf1, - 0x42, 0xb2, 0x4b, 0xfc, 0x38, 0x4a, 0xf6, 0x34, 0x09, 0x8d, 0x70, 0x42, 0x0d, 0x7d, 0x5e, 0xaa, - 0x69, 0x57, 0x83, 0x8e, 0x1f, 0x47, 0xb3, 0x65, 0xd6, 0xbd, 0xcc, 0x07, 0xb4, 0x3b, 0x09, 0x5e, - 0x5a, 0x8f, 0xcb, 0x2b, 0x63, 0x83, 0x14, 0xc2, 0x30, 0xd1, 0xf2, 0xf6, 0x88, 0x4f, 0xa2, 0xa8, - 0x1e, 0x06, 0x1b, 0x64, 0x16, 0x58, 0xcf, 0xcf, 0x66, 0xbf, 0x2b, 0x05, 0x1b, 0x64, 0x71, 0xe6, - 0xc1, 0x41, 0x65, 0xe2, 0xa6, 0x5e, 0x07, 0x9b, 0x24, 0xd0, 0x6d, 0x98, 0xa4, 0xf7, 0x1a, 0x2f, - 0x21, 0x3a, 0xd6, 0x8f, 0x28, 0xbb, 0x7d, 0x60, 0xa3, 0x12, 0x4e, 0x11, 0x41, 0x6f, 0x42, 0xb9, - 0xe5, 0x6d, 0x92, 0xe6, 0x7e, 0xb3, 0x45, 0x66, 0xc7, 0x19, 0xc5, 0xcc, 0x65, 0x75, 0x53, 0x22, - 0xf1, 0x7b, 0x91, 0xfa, 0x8b, 0x93, 0xea, 0xe8, 0x0e, 0x3c, 0x16, 0x93, 0x70, 0xd7, 0xf3, 0x1d, - 0xba, 0x1c, 0xc4, 0x7d, 0x81, 0xbd, 0xce, 0x4d, 0x30, 0x7e, 0x3b, 0x2f, 0x86, 0xee, 0xb1, 0xf5, - 0x4c, 0x2c, 0x9c, 0x53, 0x1b, 0xdd, 0x82, 0x29, 0xb6, 0x12, 0xea, 0x9d, 0x56, 0xab, 0x1e, 0xb4, - 0xbc, 0xe6, 0xfe, 0xec, 0x24, 0x23, 0xf8, 0x09, 0x79, 0x2e, 0xd4, 0x4c, 0xf0, 0xe1, 0x41, 0x05, - 0x92, 0x7f, 0x38, 0x5d, 0x1b, 0x6d, 0xb0, 0xe7, 0x98, 0x4e, 0xe8, 0xc5, 0xfb, 0x94, 0x7f, 0xc9, - 0xfd, 0x78, 0x76, 0xaa, 0xe7, 0x55, 0x58, 0x47, 0x55, 0x6f, 0x36, 0x7a, 0x21, 0x4e, 0x13, 0xa4, - 0x4b, 0x3b, 0x8a, 0x5d, 0xcf, 0x9f, 0x9d, 0x66, 0x3b, 0x86, 0x5a, 0x19, 0x0d, 0x5a, 0x88, 0x39, - 0x8c, 0x3d, 0xc5, 0xd0, 0x1f, 0xb7, 0xe8, 0x0e, 0x3a, 0xc3, 0x10, 0x93, 0xa7, 0x18, 0x09, 0xc0, - 0x09, 0x0e, 0x15, 0x6a, 0xe2, 0x78, 0x7f, 0x16, 0x31, 0x54, 0xb5, 0x5c, 0xd6, 0xd7, 0x3f, 0x8f, - 0x69, 0x39, 0xba, 0x09, 0xa3, 0xc4, 0xdf, 0x5b, 0x09, 0x83, 0xdd, 0xd9, 0x53, 0xf9, 0x6b, 0x76, - 0x99, 0xa3, 0xf0, 0x0d, 0x3d, 0xb9, 0xe0, 0x89, 0x62, 0x2c, 0x49, 0xa0, 0xfb, 0x30, 0x9b, 0x31, - 0x23, 0x7c, 0x02, 0x4e, 0xb3, 0x09, 0x78, 0x5d, 0xd4, 0x9d, 0x5d, 0xcf, 0xc1, 0x3b, 0xec, 0x01, - 0xc3, 0xb9, 0xd4, 0xd1, 0x17, 0x60, 0x82, 0x2f, 0x28, 0xfe, 0x8e, 0x1b, 0xcd, 0x9e, 0x61, 0x5f, - 0x73, 0x21, 0x7f, 0x71, 0x72, 0xc4, 0xc5, 0x33, 0xa2, 0x43, 0x13, 0x7a, 0x69, 0x84, 0x4d, 0x6a, - 0xf6, 0x06, 0x4c, 0xaa, 0x7d, 0x8b, 0xb1, 0x0e, 0xaa, 0xc0, 0x30, 0x93, 0x76, 0x84, 0x7e, 0xab, - 0x4c, 0x67, 0x8a, 0x49, 0x42, 0x98, 0x97, 0xb3, 0x99, 0xf2, 0xde, 0x27, 0x8b, 0xfb, 0x31, 0xe1, - 0xb7, 0xea, 0xa2, 0x36, 0x53, 0x12, 0x80, 0x13, 0x1c, 0xfb, 0xff, 0x72, 0xa9, 0x31, 0xd9, 0x1c, - 0x07, 0x38, 0x0e, 0x9e, 0x83, 0xd2, 0x76, 0x10, 0xc5, 0x14, 0x9b, 0xb5, 0x31, 0x9c, 0xc8, 0x89, - 0xd7, 0x45, 0x39, 0x56, 0x18, 0xe8, 0x35, 0x98, 0x68, 0xea, 0x0d, 0x88, 0xb3, 0x4c, 0x0d, 0x81, - 0xd1, 0x3a, 0x36, 0x71, 0xd1, 0xab, 0x50, 0x62, 0x56, 0x18, 0xcd, 0xa0, 0x25, 0x84, 0x2c, 0x79, - 0x20, 0x97, 0xea, 0xa2, 0xfc, 0x50, 0xfb, 0x8d, 0x15, 0x36, 0xba, 0x04, 0x23, 0xb4, 0x0b, 0xb5, - 0xba, 0x38, 0x45, 0x94, 0xaa, 0xe6, 0x3a, 0x2b, 0xc5, 0x02, 0x6a, 0xff, 0xf5, 0x82, 0x36, 0xca, - 0xf4, 0x46, 0x4a, 0x50, 0x1d, 0x46, 0xef, 0x39, 0x5e, 0xec, 0xf9, 0x5b, 0x42, 0x5c, 0x78, 0xa6, - 0xe7, 0x91, 0xc2, 0x2a, 0xdd, 0xe5, 0x15, 0xf8, 0xa1, 0x27, 0xfe, 0x60, 0x49, 0x86, 0x52, 0x0c, - 0x3b, 0xbe, 0x4f, 0x29, 0x16, 0x06, 0xa5, 0x88, 0x79, 0x05, 0x4e, 0x51, 0xfc, 0xc1, 0x92, 0x0c, - 0x7a, 0x07, 0x40, 0xb2, 0x25, 0x71, 0x85, 0xf5, 0xc3, 0x73, 0xfd, 0x89, 0xae, 0xab, 0x3a, 0x8b, - 0x93, 0xf4, 0x48, 0x4d, 0xfe, 0x63, 0x8d, 0x9e, 0x1d, 0x33, 0xb1, 0xaa, 0xbb, 0x33, 0xe8, 0xdb, - 0xe9, 0x4e, 0xe0, 0x84, 0x31, 0x71, 0x17, 0x62, 0x31, 0x38, 0x9f, 0x1c, 0xec, 0x4e, 0xb1, 0xee, - 0xed, 0x12, 0x7d, 0xd7, 0x10, 0x44, 0x70, 0x42, 0xcf, 0xfe, 0xa5, 0x22, 0xcc, 0xe6, 0x75, 0x97, - 0x32, 0x1d, 0xb9, 0xef, 0xc5, 0x4b, 0x54, 0x1a, 0xb2, 0x4c, 0xa6, 0x5b, 0x16, 0xe5, 0x58, 0x61, - 0xd0, 0xd9, 0x8f, 0xbc, 0x2d, 0x79, 0x25, 0x1c, 0x4e, 0x66, 0xbf, 0xc1, 0x4a, 0xb1, 0x80, 0x52, - 0xbc, 0x90, 0x38, 0x91, 0x30, 0xaf, 0xd1, 0xb8, 0x04, 0xb3, 0x52, 0x2c, 0xa0, 0xba, 0xbe, 0x69, - 0xa8, 0x8f, 0xbe, 0xc9, 0x18, 0xa2, 0xe1, 0xe3, 0x1d, 0x22, 0xf4, 0x45, 0x80, 0x4d, 0xcf, 0xf7, - 0xa2, 0x6d, 0x46, 0x7d, 0xe4, 0xc8, 0xd4, 0x95, 0x2c, 0xb5, 0xa2, 0xa8, 0x60, 0x8d, 0x22, 0x7a, - 0x19, 0xc6, 0xd4, 0x02, 0xac, 0x55, 0xd9, 0x5b, 0xa3, 0x66, 0xbb, 0x91, 0xec, 0x46, 0x55, 0xac, - 0xe3, 0xd9, 0xef, 0xa6, 0xf9, 0x45, 0xac, 0x00, 0x6d, 0x7c, 0xad, 0x41, 0xc7, 0xb7, 0xd0, 0x7b, - 0x7c, 0xed, 0x5f, 0x2f, 0xc2, 0x94, 0xd1, 0x58, 0x27, 0x1a, 0x60, 0xcf, 0xba, 0x46, 0xcf, 0x39, - 0x27, 0x26, 0x62, 0xfd, 0xd9, 0xfd, 0x97, 0x8a, 0x7e, 0x16, 0xd2, 0x15, 0xc0, 0xeb, 0xa3, 0x2f, - 0x42, 0xb9, 0xe5, 0x44, 0x4c, 0x77, 0x45, 0xc4, 0xba, 0x1b, 0x84, 0x58, 0x72, 0x8f, 0x70, 0xa2, - 0x58, 0x3b, 0x6a, 0x38, 0xed, 0x84, 0x24, 0x3d, 0x90, 0xa9, 0xec, 0x23, 0xed, 0xb7, 0x54, 0x27, - 0xa8, 0x80, 0xb4, 0x8f, 0x39, 0x0c, 0xbd, 0x0a, 0xe3, 0x21, 0x61, 0x5c, 0xb1, 0x44, 0x45, 0x39, - 0xc6, 0x66, 0xc3, 0x89, 0xcc, 0x87, 0x35, 0x18, 0x36, 0x30, 0x13, 0x51, 0x7e, 0xa4, 0x87, 0x28, - 0xff, 0x0c, 0x8c, 0xb2, 0x1f, 0x8a, 0x03, 0xd4, 0x6c, 0xd4, 0x78, 0x31, 0x96, 0xf0, 0x34, 0xc3, - 0x94, 0x06, 0x64, 0x98, 0x4f, 0xc2, 0x64, 0xd5, 0x21, 0xbb, 0x81, 0xbf, 0xec, 0xbb, 0xed, 0xc0, - 0xf3, 0x63, 0x34, 0x0b, 0x43, 0xec, 0x74, 0xe0, 0x6b, 0x7b, 0x88, 0x52, 0xc0, 0x43, 0x54, 0x30, - 0xb7, 0xb7, 0xe0, 0x4c, 0x35, 0xb8, 0xe7, 0xdf, 0x73, 0x42, 0x77, 0xa1, 0x5e, 0xd3, 0xee, 0xb9, - 0x6b, 0xf2, 0x9e, 0xc5, 0xed, 0xa1, 0x32, 0xf7, 0x54, 0xad, 0x26, 0x3f, 0x6b, 0x57, 0xbc, 0x16, - 0xc9, 0xd1, 0x46, 0xfc, 0xad, 0x82, 0xd1, 0x52, 0x82, 0xaf, 0x1e, 0x8c, 0xac, 0xdc, 0x07, 0xa3, - 0xb7, 0xa0, 0xb4, 0xe9, 0x91, 0x96, 0x8b, 0xc9, 0xa6, 0x60, 0xb1, 0xa7, 0xf3, 0x4d, 0x3c, 0x56, - 0x28, 0xa6, 0xd4, 0x3e, 0xf1, 0x5b, 0xda, 0x8a, 0xa8, 0x8c, 0x15, 0x19, 0xb4, 0x03, 0xd3, 0xf2, - 0x1a, 0x20, 0xa1, 0x82, 0xe1, 0x9e, 0xe9, 0x75, 0xb7, 0x30, 0x89, 0x9f, 0x7e, 0x70, 0x50, 0x99, - 0xc6, 0x29, 0x32, 0xb8, 0x8b, 0x30, 0xbd, 0x96, 0xed, 0xd2, 0xad, 0x75, 0x88, 0x0d, 0x3f, 0xbb, - 0x96, 0xb1, 0x1b, 0x26, 0x2b, 0xb5, 0x7f, 0xd4, 0x82, 0xc7, 0xbb, 0x46, 0x46, 0xdc, 0xb4, 0x8f, - 0x79, 0x16, 0xd2, 0x37, 0xdf, 0x42, 0xff, 0x9b, 0xaf, 0xfd, 0xb3, 0x16, 0x9c, 0x5e, 0xde, 0x6d, - 0xc7, 0xfb, 0x55, 0xcf, 0x7c, 0xdd, 0x79, 0x05, 0x46, 0x76, 0x89, 0xeb, 0x75, 0x76, 0xc5, 0xcc, - 0x55, 0xe4, 0xf6, 0xb3, 0xca, 0x4a, 0x0f, 0x0f, 0x2a, 0x13, 0x8d, 0x38, 0x08, 0x9d, 0x2d, 0xc2, - 0x0b, 0xb0, 0x40, 0x67, 0x9b, 0xb8, 0xf7, 0x3e, 0xb9, 0xe9, 0xed, 0x7a, 0xd2, 0x64, 0xa7, 0xa7, - 0xee, 0x6c, 0x5e, 0x0e, 0xe8, 0xfc, 0x5b, 0x1d, 0xc7, 0x8f, 0xbd, 0x78, 0x5f, 0x3c, 0xcc, 0x48, - 0x22, 0x38, 0xa1, 0x67, 0x7f, 0xc3, 0x82, 0x29, 0xc9, 0xf7, 0x0b, 0xae, 0x1b, 0x92, 0x28, 0x42, - 0x73, 0x50, 0xf0, 0xda, 0xa2, 0x97, 0x20, 0x7a, 0x59, 0xa8, 0xd5, 0x71, 0xc1, 0x6b, 0xa3, 0x3a, - 0x94, 0xb9, 0xe5, 0x4f, 0xc2, 0x5c, 0x03, 0xd9, 0x0f, 0xb1, 0x1e, 0xac, 0xcb, 0x9a, 0x38, 0x21, - 0x22, 0x25, 0x38, 0xb6, 0x67, 0x16, 0xcd, 0x57, 0xaf, 0xeb, 0xa2, 0x1c, 0x2b, 0x0c, 0x74, 0x19, - 0x4a, 0x7e, 0xe0, 0x72, 0x43, 0x2c, 0x7e, 0xfa, 0x31, 0x96, 0x5d, 0x13, 0x65, 0x58, 0x41, 0xed, - 0x1f, 0xb4, 0x60, 0x5c, 0x7e, 0xd9, 0x80, 0xc2, 0x24, 0x5d, 0x5a, 0x89, 0x20, 0x99, 0x2c, 0x2d, - 0x2a, 0x0c, 0x32, 0x88, 0x21, 0x03, 0x16, 0x8f, 0x22, 0x03, 0xda, 0x3f, 0x52, 0x80, 0x49, 0xd9, - 0x9d, 0x46, 0x67, 0x23, 0x22, 0x31, 0x5a, 0x87, 0xb2, 0xc3, 0x87, 0x9c, 0x48, 0x8e, 0xbd, 0x98, - 0x7d, 0xf9, 0x30, 0xe6, 0x27, 0x39, 0x96, 0x17, 0x64, 0x6d, 0x9c, 0x10, 0x42, 0x2d, 0x98, 0xf1, - 0x83, 0x98, 0x6d, 0xd1, 0x0a, 0xde, 0xeb, 0x09, 0x24, 0x4d, 0xfd, 0xac, 0xa0, 0x3e, 0xb3, 0x96, - 0xa6, 0x82, 0xbb, 0x09, 0xa3, 0x65, 0xa9, 0xf0, 0x28, 0xe6, 0x5f, 0x37, 0xf4, 0x59, 0xc8, 0xd6, - 0x77, 0xd8, 0xbf, 0x6a, 0x41, 0x59, 0xa2, 0x9d, 0xc4, 0x6b, 0xd7, 0x2a, 0x8c, 0x46, 0x6c, 0x12, - 0xe4, 0xd0, 0xd8, 0xbd, 0x3a, 0xce, 0xe7, 0x2b, 0x39, 0x79, 0xf8, 0xff, 0x08, 0x4b, 0x1a, 0x4c, - 0xdf, 0xad, 0xba, 0xff, 0x11, 0xd1, 0x77, 0xab, 0xfe, 0xe4, 0x9c, 0x30, 0x7f, 0xc0, 0xfa, 0xac, - 0x5d, 0x6b, 0xa9, 0x80, 0xd4, 0x0e, 0xc9, 0xa6, 0x77, 0x3f, 0x2d, 0x20, 0xd5, 0x59, 0x29, 0x16, - 0x50, 0xf4, 0x0e, 0x8c, 0x37, 0xa5, 0xa2, 0x33, 0xd9, 0x06, 0x2e, 0xf5, 0x54, 0xba, 0xab, 0xf7, - 0x19, 0x6e, 0xa4, 0xbd, 0xa4, 0xd5, 0xc7, 0x06, 0x35, 0xf3, 0xb9, 0xbd, 0xd8, 0xef, 0xb9, 0x3d, - 0xa1, 0x9b, 0xff, 0xf8, 0xfc, 0x63, 0x16, 0x8c, 0x70, 0x75, 0xd9, 0x60, 0xfa, 0x45, 0xed, 0xb9, - 0x2a, 0x19, 0xbb, 0x3b, 0xb4, 0x50, 0x3c, 0x3f, 0xa1, 0x55, 0x28, 0xb3, 0x1f, 0x4c, 0x6d, 0x50, - 0xcc, 0xb7, 0x4e, 0xe7, 0xad, 0xea, 0x1d, 0xbc, 0x23, 0xab, 0xe1, 0x84, 0x82, 0xfd, 0x43, 0x45, - 0xba, 0x55, 0x25, 0xa8, 0xc6, 0x09, 0x6e, 0x3d, 0xba, 0x13, 0xbc, 0xf0, 0xa8, 0x4e, 0xf0, 0x2d, - 0x98, 0x6a, 0x6a, 0x8f, 0x5b, 0xc9, 0x4c, 0x5e, 0xee, 0xc9, 0x24, 0xda, 0x3b, 0x18, 0x57, 0x19, - 0x2d, 0x99, 0x44, 0x70, 0x9a, 0x2a, 0xfa, 0x76, 0x18, 0xe7, 0xf3, 0x2c, 0x5a, 0xe1, 0x16, 0x0b, - 0x9f, 0xc8, 0xe7, 0x17, 0xbd, 0x09, 0xc6, 0x89, 0x0d, 0xad, 0x3a, 0x36, 0x88, 0xd9, 0xbf, 0x54, - 0x82, 0xe1, 0xe5, 0x3d, 0xe2, 0xc7, 0x27, 0xb0, 0x21, 0x35, 0x61, 0xd2, 0xf3, 0xf7, 0x82, 0xd6, - 0x1e, 0x71, 0x39, 0xfc, 0x28, 0x87, 0xeb, 0x63, 0x82, 0xf4, 0x64, 0xcd, 0x20, 0x81, 0x53, 0x24, - 0x1f, 0xc5, 0x0d, 0xf3, 0x1a, 0x8c, 0xf0, 0xb9, 0x17, 0xd7, 0xcb, 0x4c, 0x65, 0x30, 0x1b, 0x44, - 0xb1, 0x0a, 0x92, 0xdb, 0x2f, 0xd7, 0x3e, 0x8b, 0xea, 0xe8, 0x5d, 0x98, 0xdc, 0xf4, 0xc2, 0x28, - 0xa6, 0x57, 0xc3, 0x28, 0x76, 0x76, 0xdb, 0x0f, 0x71, 0xa3, 0x54, 0xe3, 0xb0, 0x62, 0x50, 0xc2, - 0x29, 0xca, 0x68, 0x0b, 0x26, 0xe8, 0x25, 0x27, 0x69, 0x6a, 0xf4, 0xc8, 0x4d, 0x29, 0x95, 0xd1, - 0x4d, 0x9d, 0x10, 0x36, 0xe9, 0xd2, 0xcd, 0xa4, 0xc9, 0x2e, 0x45, 0x25, 0x26, 0x51, 0xa8, 0xcd, - 0x84, 0xdf, 0x86, 0x38, 0x8c, 0xee, 0x49, 0xcc, 0x6c, 0xa5, 0x6c, 0xee, 0x49, 0x9a, 0x71, 0xca, - 0x97, 0xa0, 0x4c, 0xe8, 0x10, 0x52, 0xc2, 0x42, 0x31, 0x7e, 0x65, 0xb0, 0xbe, 0xae, 0x7a, 0xcd, - 0x30, 0x30, 0xef, 0xf2, 0xcb, 0x92, 0x12, 0x4e, 0x88, 0xa2, 0x25, 0x18, 0x89, 0x48, 0xe8, 0x91, - 0x48, 0xa8, 0xc8, 0x7b, 0x4c, 0x23, 0x43, 0xe3, 0x16, 0x9f, 0xfc, 0x37, 0x16, 0x55, 0x29, 0x7b, - 0x39, 0xec, 0x36, 0xc4, 0xb4, 0xe2, 0x1a, 0x7b, 0x2d, 0xb0, 0x52, 0x2c, 0xa0, 0xe8, 0x4d, 0x18, - 0x0d, 0x49, 0x8b, 0x29, 0x8b, 0x26, 0x06, 0x67, 0x72, 0xae, 0x7b, 0xe2, 0xf5, 0xb0, 0x24, 0x80, - 0x6e, 0x00, 0x0a, 0x09, 0x95, 0x21, 0x3c, 0x7f, 0x4b, 0x19, 0x73, 0x08, 0x5d, 0xf7, 0x13, 0xa2, - 0xfd, 0x53, 0x38, 0xc1, 0x90, 0xc6, 0xb7, 0x38, 0xa3, 0x1a, 0xba, 0x06, 0x33, 0xaa, 0xb4, 0xe6, - 0x47, 0xb1, 0xe3, 0x37, 0x09, 0x53, 0x73, 0x97, 0x13, 0xa9, 0x08, 0xa7, 0x11, 0x70, 0x77, 0x1d, - 0xfb, 0xa7, 0xa9, 0x38, 0x43, 0x47, 0xeb, 0x04, 0x64, 0x81, 0x37, 0x4c, 0x59, 0xe0, 0x6c, 0xee, - 0xcc, 0xe5, 0xc8, 0x01, 0x0f, 0x2c, 0x18, 0xd3, 0x66, 0x36, 0xe1, 0x59, 0xab, 0x07, 0xcf, 0x76, - 0x60, 0x9a, 0x72, 0xfa, 0xad, 0x8d, 0x88, 0x84, 0x7b, 0xc4, 0x65, 0x8c, 0x59, 0x78, 0x38, 0xc6, - 0x54, 0xaf, 0xcc, 0x37, 0x53, 0x04, 0x71, 0x57, 0x13, 0xe8, 0x15, 0xa9, 0x39, 0x29, 0x1a, 0x46, - 0x5a, 0x5c, 0x2b, 0x72, 0x78, 0x50, 0x99, 0xd6, 0x3e, 0x44, 0xd7, 0x94, 0xd8, 0x5f, 0x92, 0xdf, - 0xa8, 0x5e, 0xf3, 0x9b, 0x8a, 0x59, 0x52, 0xaf, 0xf9, 0x8a, 0x1d, 0x70, 0x82, 0x43, 0xd7, 0x28, - 0xbd, 0x82, 0xa4, 0x5f, 0xf3, 0xe9, 0x05, 0x05, 0x33, 0x88, 0xfd, 0x22, 0xc0, 0xf2, 0x7d, 0xd2, - 0xe4, 0xac, 0xae, 0x3f, 0x40, 0x5a, 0xf9, 0x0f, 0x90, 0xf6, 0x7f, 0xb4, 0x60, 0x72, 0x65, 0xc9, - 0xb8, 0x26, 0xce, 0x03, 0xf0, 0xbb, 0xd1, 0xdd, 0xbb, 0x6b, 0x52, 0xb7, 0xce, 0xd5, 0xa3, 0xaa, - 0x14, 0x6b, 0x18, 0xe8, 0x2c, 0x14, 0x5b, 0x1d, 0x5f, 0x5c, 0x59, 0x46, 0x1f, 0x1c, 0x54, 0x8a, - 0x37, 0x3b, 0x3e, 0xa6, 0x65, 0x9a, 0x85, 0x60, 0x71, 0x60, 0x0b, 0xc1, 0xbe, 0x9e, 0x7a, 0xa8, - 0x02, 0xc3, 0xf7, 0xee, 0x79, 0x2e, 0xf7, 0x87, 0x10, 0x7a, 0xff, 0xbb, 0x77, 0x6b, 0xd5, 0x08, - 0xf3, 0x72, 0xfb, 0xab, 0x45, 0x98, 0x5b, 0x69, 0x91, 0xfb, 0x1f, 0xd0, 0x27, 0x64, 0x50, 0xfb, - 0xc6, 0xa3, 0xc9, 0x8b, 0x47, 0xb5, 0x61, 0xed, 0x3f, 0x1e, 0x9b, 0x30, 0xca, 0x1f, 0xb3, 0xa5, - 0x87, 0xc8, 0x6b, 0x59, 0xad, 0xe7, 0x0f, 0xc8, 0x3c, 0x7f, 0x14, 0x17, 0x06, 0xee, 0xea, 0xa4, - 0x15, 0xa5, 0x58, 0x12, 0x9f, 0xfb, 0x0c, 0x8c, 0xeb, 0x98, 0x47, 0xb2, 0x26, 0xff, 0x4b, 0x45, - 0x98, 0xa6, 0x3d, 0x78, 0xa4, 0x13, 0x71, 0xbb, 0x7b, 0x22, 0x8e, 0xdb, 0xa2, 0xb8, 0xff, 0x6c, - 0xbc, 0x93, 0x9e, 0x8d, 0x17, 0xf2, 0x66, 0xe3, 0xa4, 0xe7, 0xe0, 0x7b, 0x2c, 0x38, 0xb5, 0xd2, - 0x0a, 0x9a, 0x3b, 0x29, 0xab, 0xdf, 0x97, 0x61, 0x8c, 0xee, 0xe3, 0x91, 0xe1, 0x90, 0x66, 0xb8, - 0x28, 0x0a, 0x10, 0xd6, 0xf1, 0xb4, 0x6a, 0xb7, 0x6f, 0xd7, 0xaa, 0x59, 0x9e, 0x8d, 0x02, 0x84, - 0x75, 0x3c, 0xfb, 0xeb, 0x16, 0x9c, 0xbb, 0xb6, 0xb4, 0x9c, 0xb0, 0x62, 0x97, 0x73, 0x25, 0xbd, - 0x05, 0xba, 0x5a, 0x57, 0x92, 0x5b, 0x60, 0x95, 0xf5, 0x42, 0x40, 0x3f, 0x2a, 0x8e, 0xc3, 0x3f, - 0x65, 0xc1, 0xa9, 0x6b, 0x5e, 0x4c, 0x8f, 0xe5, 0xb4, 0x9b, 0x1f, 0x3d, 0x97, 0x23, 0x2f, 0x0e, - 0xc2, 0xfd, 0xb4, 0x9b, 0x1f, 0x56, 0x10, 0xac, 0x61, 0xf1, 0x96, 0xf7, 0x3c, 0x66, 0x46, 0x55, - 0x30, 0x55, 0x51, 0x58, 0x94, 0x63, 0x85, 0x41, 0x3f, 0xcc, 0xf5, 0x42, 0x76, 0x95, 0xd8, 0x17, - 0x3b, 0xac, 0xfa, 0xb0, 0xaa, 0x04, 0xe0, 0x04, 0xc7, 0xfe, 0x23, 0x0b, 0x2a, 0xd7, 0x5a, 0x9d, - 0x28, 0x26, 0xe1, 0x66, 0x94, 0xb3, 0x3b, 0xbe, 0x08, 0x65, 0x22, 0x2f, 0xee, 0xa2, 0xd7, 0x4a, - 0xd4, 0x54, 0x37, 0x7a, 0xee, 0x6d, 0xa8, 0xf0, 0x06, 0xf0, 0x21, 0x38, 0x9a, 0x11, 0xf8, 0x0a, - 0x20, 0xa2, 0xb7, 0xa5, 0xbb, 0x5f, 0x32, 0x3f, 0xae, 0xe5, 0x2e, 0x28, 0xce, 0xa8, 0x61, 0xff, - 0xa8, 0x05, 0x67, 0xd4, 0x07, 0x7f, 0xe4, 0x3e, 0xd3, 0xfe, 0xf9, 0x02, 0x4c, 0x5c, 0x5f, 0x5f, - 0xaf, 0x5f, 0x23, 0xb1, 0x38, 0xb6, 0xfb, 0xeb, 0xd6, 0xb1, 0xa6, 0x22, 0xec, 0x75, 0x0b, 0xec, - 0xc4, 0x5e, 0x6b, 0x9e, 0x7b, 0xf1, 0xcf, 0xd7, 0xfc, 0xf8, 0x56, 0xd8, 0x88, 0x43, 0xcf, 0xdf, - 0xca, 0x54, 0x2a, 0x4a, 0xe1, 0xa2, 0x98, 0x27, 0x5c, 0xa0, 0x17, 0x61, 0x84, 0x85, 0x11, 0x90, - 0x93, 0xf0, 0x84, 0xba, 0x44, 0xb1, 0xd2, 0xc3, 0x83, 0x4a, 0xf9, 0x36, 0xae, 0xf1, 0x3f, 0x58, - 0xa0, 0xa2, 0xdb, 0x30, 0xb6, 0x1d, 0xc7, 0xed, 0xeb, 0xc4, 0x71, 0x49, 0x28, 0xb7, 0xc3, 0xf3, - 0x59, 0xdb, 0x21, 0x1d, 0x04, 0x8e, 0x96, 0xec, 0x20, 0x49, 0x59, 0x84, 0x75, 0x3a, 0x76, 0x03, - 0x20, 0x81, 0x1d, 0x93, 0x42, 0xc5, 0xfe, 0x7d, 0x0b, 0x46, 0xb9, 0x47, 0x67, 0x88, 0x5e, 0x87, - 0x21, 0x72, 0x9f, 0x34, 0x85, 0xa8, 0x9c, 0xd9, 0xe1, 0x44, 0xd2, 0xe2, 0xcf, 0x03, 0xf4, 0x3f, - 0x66, 0xb5, 0xd0, 0x75, 0x18, 0xa5, 0xbd, 0xbd, 0xa6, 0xdc, 0x5b, 0x9f, 0xca, 0xfb, 0x62, 0x35, - 0xed, 0x5c, 0x38, 0x13, 0x45, 0x58, 0x56, 0x67, 0xaa, 0xee, 0x66, 0xbb, 0x41, 0x77, 0xec, 0xb8, - 0x97, 0x60, 0xb1, 0xbe, 0x54, 0xe7, 0x48, 0x82, 0x1a, 0x57, 0x75, 0xcb, 0x42, 0x9c, 0x10, 0xb1, - 0xd7, 0xa1, 0x4c, 0x27, 0x75, 0xa1, 0xe5, 0x39, 0xbd, 0xb5, 0xec, 0xcf, 0x42, 0x59, 0x6a, 0xbc, - 0x23, 0xe1, 0xc9, 0xc5, 0xa8, 0x4a, 0x85, 0x78, 0x84, 0x13, 0xb8, 0xbd, 0x09, 0xa7, 0x99, 0xa9, - 0x83, 0x13, 0x6f, 0x1b, 0x6b, 0xac, 0x3f, 0x33, 0x3f, 0x27, 0x6e, 0x9e, 0x7c, 0x66, 0x66, 0x35, - 0x67, 0x89, 0x71, 0x49, 0x31, 0xb9, 0x85, 0xda, 0x7f, 0x38, 0x04, 0x4f, 0xd4, 0x1a, 0xf9, 0xce, - 0xbe, 0xaf, 0xc2, 0x38, 0x97, 0x4b, 0x29, 0x6b, 0x3b, 0x2d, 0xd1, 0xae, 0x7a, 0x08, 0x5c, 0xd7, - 0x60, 0xd8, 0xc0, 0x44, 0xe7, 0xa0, 0xe8, 0xbd, 0xe7, 0xa7, 0xed, 0x8e, 0x6b, 0x6f, 0xad, 0x61, - 0x5a, 0x4e, 0xc1, 0x54, 0xc4, 0xe5, 0x67, 0x87, 0x02, 0x2b, 0x31, 0xf7, 0x0d, 0x98, 0xf4, 0xa2, - 0x66, 0xe4, 0xd5, 0x7c, 0xba, 0xcf, 0x68, 0x3b, 0x95, 0xd2, 0x8a, 0xd0, 0x4e, 0x2b, 0x28, 0x4e, - 0x61, 0x6b, 0x07, 0xd9, 0xf0, 0xc0, 0x62, 0x72, 0x5f, 0xd7, 0x26, 0x7a, 0x03, 0x68, 0xb3, 0xaf, - 0x8b, 0x98, 0x15, 0x9f, 0xb8, 0x01, 0xf0, 0x0f, 0x8e, 0xb0, 0x84, 0xd1, 0x2b, 0x67, 0x73, 0xdb, - 0x69, 0x2f, 0x74, 0xe2, 0xed, 0xaa, 0x17, 0x35, 0x83, 0x3d, 0x12, 0xee, 0x33, 0x6d, 0x41, 0x29, - 0xb9, 0x72, 0x2a, 0xc0, 0xd2, 0xf5, 0x85, 0x3a, 0xc5, 0xc4, 0xdd, 0x75, 0x4c, 0x31, 0x18, 0x8e, - 0x43, 0x0c, 0x5e, 0x80, 0x29, 0xd9, 0x4c, 0x83, 0x44, 0xec, 0x50, 0x1c, 0x63, 0x1d, 0x53, 0xb6, - 0xc5, 0xa2, 0x58, 0x75, 0x2b, 0x8d, 0x8f, 0x5e, 0x81, 0x09, 0xcf, 0xf7, 0x62, 0xcf, 0x89, 0x83, - 0x90, 0x89, 0x14, 0x5c, 0x31, 0xc0, 0x4c, 0xf7, 0x6a, 0x3a, 0x00, 0x9b, 0x78, 0xf6, 0x7f, 0x1d, - 0x82, 0x19, 0x36, 0x6d, 0xdf, 0xe4, 0xb0, 0x8f, 0x0c, 0x87, 0xdd, 0xee, 0xe6, 0xb0, 0xe3, 0x90, - 0xef, 0x3f, 0x4c, 0x36, 0x7b, 0x17, 0xca, 0xca, 0xf8, 0x59, 0x7a, 0x3f, 0x58, 0x39, 0xde, 0x0f, - 0xfd, 0xa5, 0x0f, 0xf9, 0x6e, 0x5d, 0xcc, 0x7c, 0xb7, 0xfe, 0x3b, 0x16, 0x24, 0x36, 0xa0, 0xe8, - 0x3a, 0x94, 0xdb, 0x01, 0xb3, 0xb3, 0x08, 0xa5, 0xf1, 0xd2, 0x13, 0x99, 0x07, 0x15, 0x3f, 0x14, - 0xf9, 0xf8, 0xd5, 0x65, 0x0d, 0x9c, 0x54, 0x46, 0x8b, 0x30, 0xda, 0x0e, 0x49, 0x23, 0x66, 0x3e, - 0xbf, 0x7d, 0xe9, 0x70, 0x1e, 0xe1, 0xf8, 0x58, 0x56, 0xb4, 0x7f, 0xc1, 0x02, 0xe0, 0x4f, 0xc3, - 0x8e, 0xbf, 0x45, 0x4e, 0x40, 0xdd, 0x5d, 0x85, 0xa1, 0xa8, 0x4d, 0x9a, 0xbd, 0x2c, 0x60, 0x92, - 0xfe, 0x34, 0xda, 0xa4, 0x99, 0x0c, 0x38, 0xfd, 0x87, 0x59, 0x6d, 0xfb, 0x7b, 0x01, 0x26, 0x13, - 0xb4, 0x5a, 0x4c, 0x76, 0xd1, 0xf3, 0x86, 0x0f, 0xe0, 0xd9, 0x94, 0x0f, 0x60, 0x99, 0x61, 0x6b, - 0x9a, 0xd5, 0x77, 0xa1, 0xb8, 0xeb, 0xdc, 0x17, 0xaa, 0xb3, 0x67, 0x7b, 0x77, 0x83, 0xd2, 0x9f, - 0x5f, 0x75, 0xee, 0xf3, 0x4b, 0xe2, 0xb3, 0x92, 0x41, 0x56, 0x9d, 0xfb, 0x87, 0xdc, 0xce, 0x85, - 0x6d, 0x52, 0x37, 0xbd, 0x28, 0xfe, 0xf2, 0x7f, 0x49, 0xfe, 0x33, 0xb6, 0xa3, 0x8d, 0xb0, 0xb6, - 0x3c, 0x5f, 0x3c, 0x94, 0x0e, 0xd4, 0x96, 0xe7, 0xa7, 0xdb, 0xf2, 0xfc, 0x01, 0xda, 0xf2, 0x7c, - 0xf4, 0x3e, 0x8c, 0x0a, 0xa3, 0x04, 0xe1, 0x73, 0x7f, 0x65, 0x80, 0xf6, 0x84, 0x4d, 0x03, 0x6f, - 0xf3, 0x8a, 0xbc, 0x04, 0x8b, 0xd2, 0xbe, 0xed, 0xca, 0x06, 0xd1, 0xdf, 0xb4, 0x60, 0x52, 0xfc, - 0xc6, 0xe4, 0xbd, 0x0e, 0x89, 0x62, 0x21, 0x7b, 0x7e, 0x7a, 0xf0, 0x3e, 0x88, 0x8a, 0xbc, 0x2b, - 0x9f, 0x96, 0xdb, 0xac, 0x09, 0xec, 0xdb, 0xa3, 0x54, 0x2f, 0xd0, 0x3f, 0xb2, 0xe0, 0xf4, 0xae, - 0x73, 0x9f, 0xb7, 0xc8, 0xcb, 0xb0, 0x13, 0x7b, 0x81, 0x30, 0xd6, 0x7f, 0x7d, 0xb0, 0xe9, 0xef, - 0xaa, 0xce, 0x3b, 0x29, 0xed, 0x7a, 0x4f, 0x67, 0xa1, 0xf4, 0xed, 0x6a, 0x66, 0xbf, 0xe6, 0x36, - 0xa1, 0x24, 0xf9, 0x2d, 0x43, 0xd5, 0x50, 0xd5, 0x05, 0xeb, 0x23, 0xdb, 0x84, 0xe8, 0x8e, 0x78, - 0xb4, 0x1d, 0xc1, 0x6b, 0x8f, 0xb4, 0x9d, 0x77, 0x61, 0x5c, 0xe7, 0xb1, 0x47, 0xda, 0xd6, 0x7b, - 0x70, 0x2a, 0x83, 0x97, 0x1e, 0x69, 0x93, 0xf7, 0xe0, 0x6c, 0x2e, 0x7f, 0x3c, 0xca, 0x86, 0xed, - 0x9f, 0xb7, 0xf4, 0x7d, 0xf0, 0x04, 0xde, 0x1c, 0x96, 0xcc, 0x37, 0x87, 0xf3, 0xbd, 0x57, 0x4e, - 0xce, 0xc3, 0xc3, 0x3b, 0x7a, 0xa7, 0xe9, 0xae, 0x8e, 0xde, 0x84, 0x91, 0x16, 0x2d, 0x91, 0xd6, - 0x30, 0x76, 0xff, 0x15, 0x99, 0xc8, 0x52, 0xac, 0x3c, 0xc2, 0x82, 0x82, 0xfd, 0xcb, 0x16, 0x0c, - 0x9d, 0xc0, 0x48, 0x60, 0x73, 0x24, 0x9e, 0xcf, 0x25, 0x2d, 0xc2, 0x01, 0xce, 0x63, 0xe7, 0xde, - 0xf2, 0xfd, 0x98, 0xf8, 0x11, 0xbb, 0x2a, 0x66, 0x0e, 0xcc, 0x77, 0xc0, 0xa9, 0x9b, 0x81, 0xe3, - 0x2e, 0x3a, 0x2d, 0xc7, 0x6f, 0x92, 0xb0, 0xe6, 0x6f, 0xf5, 0x35, 0xcb, 0xd2, 0x8d, 0xa8, 0x0a, - 0xfd, 0x8c, 0xa8, 0xec, 0x6d, 0x40, 0x7a, 0x03, 0xc2, 0x70, 0x15, 0xc3, 0xa8, 0xc7, 0x9b, 0x12, - 0xc3, 0xff, 0x74, 0xb6, 0x74, 0xd7, 0xd5, 0x33, 0xcd, 0x24, 0x93, 0x17, 0x60, 0x49, 0xc8, 0x7e, - 0x15, 0x32, 0x9d, 0xd5, 0xfa, 0xab, 0x0d, 0xec, 0xcf, 0xc3, 0x0c, 0xab, 0x79, 0xc4, 0x2b, 0xad, - 0x9d, 0xd2, 0x4a, 0x66, 0x44, 0xa6, 0xb1, 0xbf, 0x62, 0xc1, 0xd4, 0x5a, 0x2a, 0x60, 0xc7, 0x25, - 0xf6, 0x00, 0x9a, 0xa1, 0x0c, 0x6f, 0xb0, 0x52, 0x2c, 0xa0, 0xc7, 0xae, 0x83, 0xfa, 0x33, 0x0b, - 0x12, 0xff, 0xd1, 0x13, 0x10, 0xbc, 0x96, 0x0c, 0xc1, 0x2b, 0x53, 0x37, 0xa2, 0xba, 0x93, 0x27, - 0x77, 0xa1, 0x1b, 0x2a, 0x58, 0x42, 0x0f, 0xb5, 0x48, 0x42, 0x86, 0xbb, 0xd6, 0x4f, 0x9a, 0x11, - 0x15, 0x64, 0xf8, 0x04, 0x66, 0x3b, 0xa5, 0x70, 0x3f, 0x22, 0xb6, 0x53, 0xaa, 0x3f, 0x39, 0x2b, - 0xb4, 0xae, 0x75, 0x99, 0xed, 0x5c, 0xdf, 0xca, 0x6c, 0xe1, 0x9d, 0x96, 0xf7, 0x3e, 0x51, 0x11, - 0x5f, 0x2a, 0xc2, 0xb6, 0x5d, 0x94, 0x1e, 0x1e, 0x54, 0x26, 0xd4, 0x3f, 0x1e, 0x61, 0x2e, 0xa9, - 0x62, 0x5f, 0x87, 0xa9, 0xd4, 0x80, 0xa1, 0x97, 0x61, 0xb8, 0xbd, 0xed, 0x44, 0x24, 0x65, 0x2f, - 0x3a, 0x5c, 0xa7, 0x85, 0x87, 0x07, 0x95, 0x49, 0x55, 0x81, 0x95, 0x60, 0x8e, 0x6d, 0xff, 0x0f, - 0x0b, 0x86, 0xd6, 0x02, 0xf7, 0x24, 0x98, 0xe9, 0x0d, 0x83, 0x99, 0x9e, 0xcc, 0x8b, 0xcf, 0x99, - 0xcb, 0x47, 0x2b, 0x29, 0x3e, 0x3a, 0x9f, 0x4b, 0xa1, 0x37, 0x0b, 0xed, 0xc2, 0x18, 0x8b, 0xfa, - 0x29, 0xec, 0x57, 0x5f, 0x34, 0xee, 0x00, 0x95, 0xd4, 0x1d, 0x60, 0x4a, 0x43, 0xd5, 0x6e, 0x02, - 0xcf, 0xc0, 0xa8, 0xb0, 0xa1, 0x4c, 0x5b, 0xfd, 0x0b, 0x5c, 0x2c, 0xe1, 0xf6, 0x8f, 0x15, 0xc1, - 0x88, 0x32, 0x8a, 0x7e, 0xd5, 0x82, 0xf9, 0x90, 0xbb, 0x51, 0xba, 0xd5, 0x4e, 0xe8, 0xf9, 0x5b, - 0x8d, 0xe6, 0x36, 0x71, 0x3b, 0x2d, 0xcf, 0xdf, 0xaa, 0x6d, 0xf9, 0x81, 0x2a, 0x5e, 0xbe, 0x4f, - 0x9a, 0x1d, 0xf6, 0x10, 0xd2, 0x27, 0xa4, 0xa9, 0xb2, 0x51, 0xba, 0xfa, 0xe0, 0xa0, 0x32, 0x8f, - 0x8f, 0x44, 0x1b, 0x1f, 0xb1, 0x2f, 0xe8, 0xeb, 0x16, 0x5c, 0xe1, 0xc1, 0x37, 0x07, 0xef, 0x7f, - 0x8f, 0x1b, 0x53, 0x5d, 0x92, 0x4a, 0x88, 0xac, 0x93, 0x70, 0x77, 0xf1, 0x15, 0x31, 0xa0, 0x57, - 0xea, 0x47, 0x6b, 0x0b, 0x1f, 0xb5, 0x73, 0xf6, 0xbf, 0x2a, 0xc2, 0x84, 0xf0, 0xe0, 0x17, 0xa1, - 0x61, 0x5e, 0x36, 0x58, 0xe2, 0xa9, 0x14, 0x4b, 0xcc, 0x18, 0xc8, 0xc7, 0x13, 0x15, 0x26, 0x82, - 0x99, 0x96, 0x13, 0xc5, 0xd7, 0x89, 0x13, 0xc6, 0x1b, 0xc4, 0xe1, 0xb6, 0x3b, 0xc5, 0x23, 0xdb, - 0x19, 0x29, 0x15, 0xcd, 0xcd, 0x34, 0x31, 0xdc, 0x4d, 0x1f, 0xed, 0x01, 0x62, 0x06, 0x48, 0xa1, - 0xe3, 0x47, 0xfc, 0x5b, 0x3c, 0xf1, 0x66, 0x70, 0xb4, 0x56, 0xe7, 0x44, 0xab, 0xe8, 0x66, 0x17, - 0x35, 0x9c, 0xd1, 0x82, 0x66, 0x58, 0x36, 0x3c, 0xa8, 0x61, 0xd9, 0x48, 0x1f, 0xd7, 0x1a, 0x1f, - 0xa6, 0xbb, 0x82, 0x30, 0xbc, 0x0d, 0x65, 0x65, 0x00, 0x28, 0x36, 0x9d, 0xde, 0xb1, 0x4c, 0xd2, - 0x14, 0xb8, 0x1a, 0x25, 0x31, 0x3e, 0x4d, 0xc8, 0xd9, 0xff, 0xb8, 0x60, 0x34, 0xc8, 0x27, 0x71, - 0x0d, 0x4a, 0x4e, 0x14, 0x79, 0x5b, 0x3e, 0x71, 0xc5, 0x8a, 0xfd, 0x78, 0xde, 0x8a, 0x35, 0x9a, - 0x61, 0x46, 0x98, 0x0b, 0xa2, 0x26, 0x56, 0x34, 0xd0, 0x75, 0x6e, 0x21, 0xb5, 0x27, 0x65, 0xfe, - 0xc1, 0xa8, 0x81, 0xb4, 0xa1, 0xda, 0x23, 0x58, 0xd4, 0x47, 0x5f, 0xe0, 0x26, 0x6c, 0x37, 0xfc, - 0xe0, 0x9e, 0x7f, 0x2d, 0x08, 0xa4, 0xdb, 0xdd, 0x60, 0x04, 0x67, 0xa4, 0xe1, 0x9a, 0xaa, 0x8e, - 0x4d, 0x6a, 0x83, 0x05, 0x2a, 0xfa, 0x4e, 0x38, 0x45, 0x49, 0x9b, 0xce, 0x33, 0x11, 0x22, 0x30, - 0x25, 0xc2, 0x43, 0xc8, 0x32, 0x31, 0x76, 0x99, 0xe2, 0xbc, 0x59, 0x3b, 0x51, 0xfa, 0xdd, 0x30, - 0x49, 0xe0, 0x34, 0x4d, 0xfb, 0x27, 0x2d, 0x60, 0x66, 0xff, 0x27, 0x20, 0x32, 0x7c, 0xd6, 0x14, - 0x19, 0x66, 0xf3, 0x06, 0x39, 0x47, 0x5a, 0x78, 0x89, 0x73, 0x56, 0x3d, 0x0c, 0xee, 0xef, 0x0b, - 0xf3, 0x81, 0xfe, 0x92, 0xac, 0xfd, 0x7f, 0x2c, 0xbe, 0x89, 0x29, 0x4f, 0x7c, 0xf4, 0x5d, 0x50, - 0x6a, 0x3a, 0x6d, 0xa7, 0xc9, 0x43, 0x62, 0xe7, 0x6a, 0x75, 0x8c, 0x4a, 0xf3, 0x4b, 0xa2, 0x06, - 0xd7, 0x52, 0xc8, 0x30, 0x23, 0x25, 0x59, 0xdc, 0x57, 0x33, 0xa1, 0x9a, 0x9c, 0xdb, 0x81, 0x09, - 0x83, 0xd8, 0x23, 0xbd, 0xd2, 0x7e, 0x17, 0x3f, 0x62, 0x55, 0x58, 0x9c, 0x5d, 0x98, 0xf1, 0xb5, - 0xff, 0xf4, 0x40, 0x91, 0xd7, 0x94, 0x8f, 0xf7, 0x3b, 0x44, 0xd9, 0xe9, 0xa3, 0xb9, 0x35, 0xa4, - 0xc8, 0xe0, 0x6e, 0xca, 0xf6, 0x8f, 0x5b, 0xf0, 0xb8, 0x8e, 0xa8, 0x05, 0x49, 0xe8, 0xa7, 0x27, - 0xae, 0x42, 0x29, 0x68, 0x93, 0xd0, 0x89, 0x83, 0x50, 0x9c, 0x1a, 0x97, 0xe5, 0xa0, 0xdf, 0x12, - 0xe5, 0x87, 0x22, 0xa0, 0xa4, 0xa4, 0x2e, 0xcb, 0xb1, 0xaa, 0x49, 0xef, 0x31, 0x6c, 0x30, 0x22, - 0x11, 0xc0, 0x82, 0xed, 0x01, 0xec, 0xc9, 0x34, 0xc2, 0x02, 0x62, 0xff, 0xa1, 0xc5, 0x19, 0x4b, - 0xef, 0x3a, 0x7a, 0x0f, 0xa6, 0x77, 0x9d, 0xb8, 0xb9, 0xbd, 0x7c, 0xbf, 0x1d, 0x72, 0xf5, 0xb8, - 0x1c, 0xa7, 0x67, 0xfb, 0x8d, 0x93, 0xf6, 0x91, 0x89, 0x55, 0xde, 0x6a, 0x8a, 0x18, 0xee, 0x22, - 0x8f, 0x36, 0x60, 0x8c, 0x95, 0x31, 0xf3, 0xef, 0xa8, 0x97, 0x68, 0x90, 0xd7, 0x9a, 0x7a, 0x75, - 0x5e, 0x4d, 0xe8, 0x60, 0x9d, 0xa8, 0xfd, 0xb3, 0x45, 0xbe, 0xda, 0x99, 0xb4, 0xfd, 0x0c, 0x8c, - 0xb6, 0x03, 0x77, 0xa9, 0x56, 0xc5, 0x62, 0x16, 0xd4, 0x31, 0x52, 0xe7, 0xc5, 0x58, 0xc2, 0xd1, - 0x6b, 0x00, 0xe4, 0x7e, 0x4c, 0x42, 0xdf, 0x69, 0x29, 0x2b, 0x19, 0x65, 0x17, 0x5a, 0x0d, 0xd6, - 0x82, 0xf8, 0x76, 0x44, 0xbe, 0x63, 0x59, 0xa1, 0x60, 0x0d, 0x1d, 0x5d, 0x05, 0x68, 0x87, 0xc1, - 0x9e, 0xe7, 0x32, 0x7f, 0xc2, 0xa2, 0x69, 0x43, 0x52, 0x57, 0x10, 0xac, 0x61, 0xa1, 0xd7, 0x60, - 0xa2, 0xe3, 0x47, 0x5c, 0x42, 0x71, 0x36, 0x44, 0x38, 0xc6, 0x52, 0x62, 0xdd, 0x70, 0x5b, 0x07, - 0x62, 0x13, 0x17, 0x2d, 0xc0, 0x48, 0xec, 0x30, 0x9b, 0x88, 0xe1, 0x7c, 0x63, 0xce, 0x75, 0x8a, - 0xa1, 0x07, 0x64, 0xa6, 0x15, 0xb0, 0xa8, 0x88, 0xde, 0x96, 0xce, 0x19, 0x7c, 0xaf, 0x17, 0x56, - 0xd4, 0x83, 0x9d, 0x0b, 0x9a, 0x6b, 0x86, 0xb0, 0xce, 0x36, 0x68, 0xa1, 0xcb, 0x50, 0x12, 0xe3, - 0x2a, 0x9f, 0x9c, 0xd8, 0x41, 0x27, 0x06, 0x3d, 0xc2, 0x0a, 0x6a, 0x7f, 0xbd, 0x0c, 0x90, 0x08, - 0xee, 0xe8, 0xfd, 0xae, 0x9d, 0xeb, 0xb9, 0xde, 0xa2, 0xfe, 0xf1, 0x6d, 0x5b, 0xe8, 0xfb, 0x2c, - 0x18, 0x73, 0x5a, 0xad, 0xa0, 0xe9, 0xc4, 0x6c, 0x3e, 0x0a, 0xbd, 0x77, 0x4e, 0xd1, 0xfe, 0x42, - 0x52, 0x83, 0x77, 0xe1, 0x45, 0xc9, 0xa2, 0x1a, 0xa4, 0x6f, 0x2f, 0xf4, 0x86, 0xd1, 0xa7, 0xe4, - 0x7d, 0x8e, 0x33, 0xd2, 0x5c, 0xfa, 0x3e, 0x57, 0x66, 0x87, 0x84, 0x76, 0x95, 0x43, 0xb7, 0x8d, - 0x98, 0x7c, 0x43, 0xf9, 0xe1, 0x29, 0x0c, 0xf9, 0xb5, 0x5f, 0x38, 0x3e, 0x54, 0xd7, 0xfd, 0xce, - 0x86, 0xf3, 0x63, 0xb8, 0x68, 0x17, 0xa5, 0x3e, 0x3e, 0x67, 0xef, 0xc2, 0x94, 0x6b, 0x4a, 0x01, - 0x82, 0xef, 0x9e, 0xce, 0xa3, 0x9b, 0x12, 0x1a, 0x92, 0x73, 0x3f, 0x05, 0xc0, 0x69, 0xc2, 0xa8, - 0xce, 0x3d, 0x00, 0x6b, 0xfe, 0x66, 0x20, 0xec, 0xf6, 0xed, 0xdc, 0xb9, 0xdc, 0x8f, 0x62, 0xb2, - 0x4b, 0x31, 0x93, 0xe3, 0x7d, 0x4d, 0xd4, 0xc5, 0x8a, 0x0a, 0x7a, 0x13, 0x46, 0x98, 0x0b, 0x71, - 0x34, 0x5b, 0xca, 0x57, 0x3b, 0x9a, 0xd1, 0x2f, 0x92, 0xe5, 0xc7, 0xfe, 0x46, 0x58, 0x50, 0x40, - 0xd7, 0x65, 0x88, 0x9c, 0xa8, 0xe6, 0xdf, 0x8e, 0x08, 0x0b, 0x91, 0x53, 0x5e, 0xfc, 0x78, 0x12, - 0xfd, 0x86, 0x97, 0x67, 0x26, 0x69, 0x30, 0x6a, 0x52, 0x31, 0x4a, 0xfc, 0x97, 0xb9, 0x1f, 0x66, - 0x21, 0xbf, 0x7b, 0x66, 0x7e, 0x88, 0x64, 0x38, 0xef, 0x98, 0x24, 0x70, 0x9a, 0x26, 0x15, 0x49, - 0xf9, 0x1a, 0x17, 0x96, 0xff, 0xfd, 0x76, 0x0a, 0x7e, 0x13, 0x67, 0xc7, 0x11, 0x2f, 0xc1, 0xa2, - 0xfe, 0x89, 0xca, 0x07, 0x73, 0x3e, 0x4c, 0xa7, 0x97, 0xe8, 0x23, 0x95, 0x47, 0x7e, 0x7f, 0x08, - 0x26, 0x4d, 0x96, 0x42, 0x57, 0xa0, 0x2c, 0x88, 0xa8, 0x78, 0xad, 0x6a, 0x95, 0xac, 0x4a, 0x00, - 0x4e, 0x70, 0x58, 0x98, 0x5e, 0x56, 0x5d, 0xb3, 0xd8, 0x4c, 0xc2, 0xf4, 0x2a, 0x08, 0xd6, 0xb0, - 0xe8, 0xcd, 0x6a, 0x23, 0x08, 0x62, 0x75, 0xfc, 0x28, 0xbe, 0x5b, 0x64, 0xa5, 0x58, 0x40, 0xe9, - 0xb1, 0xb3, 0x43, 0x42, 0x9f, 0xb4, 0xcc, 0x30, 0x70, 0xea, 0xd8, 0xb9, 0xa1, 0x03, 0xb1, 0x89, - 0x4b, 0xcf, 0xd3, 0x20, 0x62, 0x8c, 0x2c, 0xee, 0x6f, 0x89, 0x05, 0x6c, 0x83, 0x3b, 0xe3, 0x4b, - 0x38, 0xfa, 0x3c, 0x3c, 0xae, 0x7c, 0xe7, 0x31, 0x57, 0x69, 0xcb, 0x16, 0x47, 0x0c, 0x75, 0xcb, - 0xe3, 0x4b, 0xd9, 0x68, 0x38, 0xaf, 0x3e, 0x7a, 0x03, 0x26, 0x85, 0x8c, 0x2f, 0x29, 0x8e, 0x9a, - 0x56, 0x16, 0x37, 0x0c, 0x28, 0x4e, 0x61, 0xcb, 0x40, 0x76, 0x4c, 0xcc, 0x96, 0x14, 0x4a, 0xdd, - 0x81, 0xec, 0x74, 0x38, 0xee, 0xaa, 0x81, 0x16, 0x60, 0x8a, 0x0b, 0x61, 0x9e, 0xbf, 0xc5, 0xe7, - 0x44, 0x38, 0xe6, 0xa8, 0x25, 0x75, 0xcb, 0x04, 0xe3, 0x34, 0x3e, 0x7a, 0x15, 0xc6, 0x9d, 0xb0, - 0xb9, 0xed, 0xc5, 0xa4, 0x19, 0x77, 0x42, 0xee, 0xb1, 0xa3, 0x99, 0xa9, 0x2c, 0x68, 0x30, 0x6c, - 0x60, 0xda, 0xef, 0xc3, 0xa9, 0x0c, 0x9f, 0x3e, 0xca, 0x38, 0x4e, 0xdb, 0x93, 0xdf, 0x94, 0xb2, - 0x65, 0x5d, 0xa8, 0xd7, 0xe4, 0xd7, 0x68, 0x58, 0x94, 0x3b, 0x99, 0xef, 0x9f, 0x96, 0xea, 0x45, - 0x71, 0xe7, 0x8a, 0x04, 0xe0, 0x04, 0xc7, 0xfe, 0x9f, 0x05, 0x98, 0xca, 0x50, 0xd3, 0xb3, 0x74, - 0x23, 0xa9, 0x5b, 0x4a, 0x92, 0x5d, 0xc4, 0x8c, 0x8b, 0x58, 0x38, 0x42, 0x5c, 0xc4, 0x62, 0xbf, - 0xb8, 0x88, 0x43, 0x1f, 0x24, 0x2e, 0xa2, 0x39, 0x62, 0xc3, 0x03, 0x8d, 0x58, 0x46, 0x2c, 0xc5, - 0x91, 0x23, 0xc6, 0x52, 0x34, 0x06, 0x7d, 0x74, 0x80, 0x41, 0xff, 0xa1, 0x02, 0x4c, 0xa7, 0xcd, - 0xe9, 0x4e, 0x40, 0x71, 0xfb, 0xa6, 0xa1, 0xb8, 0xcd, 0x4e, 0xde, 0x93, 0x36, 0xf2, 0xcb, 0x53, - 0xe2, 0xe2, 0x94, 0x12, 0xf7, 0x93, 0x03, 0x51, 0xeb, 0xad, 0xd0, 0xfd, 0x7b, 0x05, 0x38, 0x93, - 0xae, 0xb2, 0xd4, 0x72, 0xbc, 0xdd, 0x13, 0x18, 0x9b, 0x5b, 0xc6, 0xd8, 0x3c, 0x3f, 0xc8, 0xd7, - 0xb0, 0xae, 0xe5, 0x0e, 0xd0, 0xdd, 0xd4, 0x00, 0x5d, 0x19, 0x9c, 0x64, 0xef, 0x51, 0xfa, 0x46, - 0x11, 0xce, 0x67, 0xd6, 0x4b, 0xf4, 0x9e, 0x2b, 0x86, 0xde, 0xf3, 0x6a, 0x4a, 0xef, 0x69, 0xf7, - 0xae, 0x7d, 0x3c, 0x8a, 0x50, 0xe1, 0x6c, 0xc9, 0x62, 0xe7, 0x3d, 0xa4, 0x12, 0xd4, 0x70, 0xb6, - 0x54, 0x84, 0xb0, 0x49, 0xf7, 0x2f, 0x92, 0xf2, 0xf3, 0xdf, 0x5a, 0x70, 0x36, 0x73, 0x6e, 0x4e, - 0x40, 0xd9, 0xb5, 0x66, 0x2a, 0xbb, 0x9e, 0x19, 0x98, 0x5b, 0x73, 0xb4, 0x5f, 0xbf, 0x31, 0x94, - 0xf3, 0x2d, 0xec, 0x2a, 0x7f, 0x0b, 0xc6, 0x9c, 0x66, 0x93, 0x44, 0xd1, 0x6a, 0xe0, 0xaa, 0x58, - 0x72, 0xcf, 0xb3, 0x7b, 0x56, 0x52, 0x7c, 0x78, 0x50, 0x99, 0x4b, 0x93, 0x48, 0xc0, 0x58, 0xa7, - 0x60, 0x86, 0xbf, 0x2c, 0x1c, 0x6b, 0xf8, 0xcb, 0xab, 0x00, 0x7b, 0x4a, 0x5a, 0x4f, 0xab, 0x03, - 0x34, 0x39, 0x5e, 0xc3, 0x42, 0x5f, 0x80, 0x52, 0x24, 0x8e, 0x71, 0xc1, 0x8a, 0x2f, 0x0e, 0x38, - 0x57, 0xce, 0x06, 0x69, 0x99, 0x5e, 0xfd, 0x4a, 0x73, 0xa2, 0x48, 0xa2, 0x6f, 0x83, 0xe9, 0x88, - 0x07, 0x8d, 0x59, 0x6a, 0x39, 0x11, 0xf3, 0x98, 0x10, 0x5c, 0xc8, 0x5c, 0xf5, 0x1b, 0x29, 0x18, - 0xee, 0xc2, 0x46, 0x2b, 0xf2, 0xa3, 0x58, 0x84, 0x1b, 0xce, 0x98, 0x97, 0x92, 0x0f, 0x12, 0xc9, - 0xce, 0x4e, 0xa7, 0x87, 0x9f, 0x0d, 0xbc, 0x56, 0x13, 0x7d, 0x01, 0x80, 0xb2, 0x8f, 0xd0, 0x3a, - 0x8c, 0xe6, 0x6f, 0x9e, 0x74, 0x57, 0x71, 0x33, 0x6d, 0x44, 0x99, 0x9b, 0x63, 0x55, 0x11, 0xc1, - 0x1a, 0x41, 0xfb, 0x87, 0x86, 0xe0, 0x89, 0x1e, 0x7b, 0x24, 0x5a, 0x30, 0x1f, 0x4b, 0x9f, 0x4d, - 0x5f, 0xae, 0xe7, 0x32, 0x2b, 0x1b, 0xb7, 0xed, 0x14, 0x2b, 0x16, 0x3e, 0x30, 0x2b, 0xfe, 0x80, - 0xa5, 0xa9, 0x3d, 0xb8, 0xd9, 0xdf, 0x67, 0x8f, 0xb8, 0xf7, 0x1f, 0xa3, 0x1e, 0x64, 0x33, 0x43, - 0x99, 0x70, 0x75, 0xe0, 0xee, 0x0c, 0xac, 0x5d, 0x38, 0x59, 0x35, 0xf1, 0x97, 0x2d, 0x78, 0x2a, - 0xb3, 0xbf, 0x86, 0x71, 0xc7, 0x15, 0x28, 0x37, 0x69, 0xa1, 0xe6, 0xd5, 0x96, 0xb8, 0xfb, 0x4a, - 0x00, 0x4e, 0x70, 0x0c, 0x1b, 0x8e, 0x42, 0x5f, 0x1b, 0x8e, 0x7f, 0x69, 0x41, 0xd7, 0xfa, 0x38, - 0x81, 0x8d, 0xba, 0x66, 0x6e, 0xd4, 0x1f, 0x1f, 0x64, 0x2e, 0x73, 0xf6, 0xe8, 0x3f, 0x9e, 0x82, - 0xc7, 0x72, 0xbc, 0x3a, 0xf6, 0x60, 0x66, 0xab, 0x49, 0x4c, 0x7f, 0x41, 0xf1, 0x31, 0x99, 0xae, - 0x95, 0x3d, 0x9d, 0x0b, 0x59, 0xe6, 0xa2, 0x99, 0x2e, 0x14, 0xdc, 0xdd, 0x04, 0xfa, 0xb2, 0x05, - 0xa7, 0x9d, 0x7b, 0x51, 0x57, 0xaa, 0x53, 0xc1, 0x33, 0x2f, 0x65, 0x2a, 0x41, 0xfa, 0xa4, 0x46, - 0xe5, 0xa9, 0x9c, 0xb2, 0xb0, 0x70, 0x66, 0x5b, 0x08, 0x8b, 0xe8, 0xa2, 0x54, 0x9c, 0xef, 0xe1, - 0xd1, 0x9a, 0xe5, 0x7e, 0xc3, 0xb7, 0x6c, 0x09, 0xc1, 0x8a, 0x0e, 0xfa, 0x12, 0x94, 0xb7, 0xa4, - 0x4f, 0x5c, 0xc6, 0x91, 0x90, 0x0c, 0x64, 0x6f, 0x4f, 0x41, 0xfe, 0x94, 0xa9, 0x90, 0x70, 0x42, - 0x14, 0xbd, 0x01, 0x45, 0x7f, 0x33, 0xea, 0x95, 0x0d, 0x29, 0x65, 0xfd, 0xc4, 0xfd, 0xc6, 0xd7, - 0x56, 0x1a, 0x98, 0x56, 0x44, 0xd7, 0xa1, 0x18, 0x6e, 0xb8, 0x42, 0x83, 0x97, 0xb9, 0x87, 0xe3, - 0xc5, 0x6a, 0x4e, 0xaf, 0x18, 0x25, 0xbc, 0x58, 0xc5, 0x94, 0x04, 0xaa, 0xc3, 0x30, 0x73, 0x85, - 0x10, 0xe7, 0x41, 0xa6, 0xe4, 0xdb, 0xc3, 0xa5, 0x88, 0x3b, 0x97, 0x33, 0x04, 0xcc, 0x09, 0xa1, - 0x75, 0x18, 0x69, 0xb2, 0xcc, 0x39, 0x22, 0xb4, 0xf5, 0xa7, 0x32, 0x75, 0x75, 0x3d, 0x52, 0x0a, - 0x09, 0xd5, 0x15, 0xc3, 0xc0, 0x82, 0x16, 0xa3, 0x4a, 0xda, 0xdb, 0x9b, 0x91, 0xc8, 0xf4, 0x96, - 0x4d, 0xb5, 0x47, 0xa6, 0x2c, 0x41, 0x95, 0x61, 0x60, 0x41, 0x0b, 0x7d, 0x06, 0x0a, 0x9b, 0x4d, - 0xe1, 0x29, 0x91, 0xa9, 0xb4, 0x33, 0x5d, 0xff, 0x17, 0x47, 0x1e, 0x1c, 0x54, 0x0a, 0x2b, 0x4b, - 0xb8, 0xb0, 0xd9, 0x44, 0x6b, 0x30, 0xba, 0xc9, 0x9d, 0x85, 0x85, 0x5e, 0xee, 0xe9, 0x6c, 0x3f, - 0xe6, 0x2e, 0x7f, 0x62, 0x6e, 0xe1, 0x2f, 0x00, 0x58, 0x12, 0x61, 0xc1, 0x3a, 0x95, 0xd3, 0xb3, - 0x88, 0x5a, 0x3d, 0x7f, 0x34, 0x47, 0x75, 0x7e, 0x3e, 0x27, 0xae, 0xd3, 0x58, 0xa3, 0x48, 0xb9, - 0xda, 0x91, 0xe9, 0x36, 0x45, 0x54, 0x8f, 0x4c, 0xae, 0xee, 0x93, 0x89, 0x94, 0x73, 0xb5, 0x42, - 0xc2, 0x09, 0x51, 0xb4, 0x03, 0x13, 0x7b, 0x51, 0x7b, 0x9b, 0xc8, 0x25, 0xcd, 0x82, 0x7c, 0xe4, - 0x1c, 0x61, 0x77, 0x04, 0xa2, 0x17, 0xc6, 0x1d, 0xa7, 0xd5, 0xb5, 0x0b, 0xb1, 0xf7, 0xef, 0x3b, - 0x3a, 0x31, 0x6c, 0xd2, 0xa6, 0xc3, 0xff, 0x5e, 0x27, 0xd8, 0xd8, 0x8f, 0x89, 0x08, 0x73, 0x9d, - 0x39, 0xfc, 0x6f, 0x71, 0x94, 0xee, 0xe1, 0x17, 0x00, 0x2c, 0x89, 0xa0, 0x3b, 0x62, 0x78, 0xd8, - 0xee, 0x39, 0x9d, 0x1f, 0x76, 0x29, 0x33, 0xdf, 0xad, 0x36, 0x28, 0x6c, 0xb7, 0x4c, 0x48, 0xb1, - 0x5d, 0xb2, 0xbd, 0x1d, 0xc4, 0x81, 0x9f, 0xda, 0xa1, 0x67, 0xf2, 0x77, 0xc9, 0x7a, 0x06, 0x7e, - 0xf7, 0x2e, 0x99, 0x85, 0x85, 0x33, 0xdb, 0x42, 0x2e, 0x4c, 0xb6, 0x83, 0x30, 0xbe, 0x17, 0x84, - 0x92, 0xbf, 0x50, 0x0f, 0xbd, 0x82, 0x81, 0x29, 0x5a, 0x64, 0x61, 0xd7, 0x4d, 0x08, 0x4e, 0xd1, - 0x44, 0x9f, 0x83, 0xd1, 0xa8, 0xe9, 0xb4, 0x48, 0xed, 0xd6, 0xec, 0xa9, 0xfc, 0xe3, 0xa7, 0xc1, - 0x51, 0x72, 0xb8, 0x8b, 0x4d, 0x8e, 0x40, 0xc1, 0x92, 0x1c, 0x5a, 0x81, 0x61, 0x96, 0x3b, 0x81, - 0x45, 0xe8, 0xce, 0x89, 0x1e, 0xd5, 0x65, 0x8b, 0xca, 0xf7, 0x26, 0x56, 0x8c, 0x79, 0x75, 0xba, - 0x06, 0x84, 0x78, 0x1d, 0x44, 0xb3, 0x67, 0xf2, 0xd7, 0x80, 0x90, 0xca, 0x6f, 0x35, 0x7a, 0xad, - 0x01, 0x85, 0x84, 0x13, 0xa2, 0x74, 0x67, 0xa6, 0xbb, 0xe9, 0x63, 0x3d, 0x4c, 0x5f, 0x72, 0xf7, - 0x52, 0xb6, 0x33, 0xd3, 0x9d, 0x94, 0x92, 0xb0, 0x7f, 0x77, 0xb4, 0x5b, 0x66, 0x61, 0x17, 0xb2, - 0xbf, 0x6c, 0x75, 0xbd, 0xd5, 0x7d, 0x7a, 0x50, 0xfd, 0xd0, 0x31, 0x4a, 0xab, 0x5f, 0xb6, 0xe0, - 0xb1, 0x76, 0xe6, 0x87, 0x08, 0x01, 0x60, 0x30, 0x35, 0x13, 0xff, 0x74, 0x15, 0x45, 0x3f, 0x1b, - 0x8e, 0x73, 0x5a, 0x4a, 0xdf, 0x08, 0x8a, 0x1f, 0xf8, 0x46, 0xb0, 0x0a, 0x25, 0x26, 0x64, 0xf6, - 0xc9, 0x24, 0x97, 0xbe, 0x18, 0x31, 0x51, 0x62, 0x49, 0x54, 0xc4, 0x8a, 0x04, 0xfa, 0x41, 0x0b, - 0xce, 0xa5, 0xbb, 0x8e, 0x09, 0x03, 0x8b, 0x98, 0xf3, 0xfc, 0x2e, 0xb8, 0x22, 0xbe, 0xff, 0x5c, - 0xbd, 0x17, 0xf2, 0x61, 0x3f, 0x04, 0xdc, 0xbb, 0x31, 0x54, 0xcd, 0xb8, 0x8c, 0x8e, 0x98, 0x0a, - 0xf8, 0x01, 0x2e, 0xa4, 0x2f, 0xc1, 0xf8, 0x6e, 0xd0, 0xf1, 0x63, 0x61, 0x29, 0x23, 0x1e, 0x9a, - 0xd9, 0xd3, 0xf4, 0xaa, 0x56, 0x8e, 0x0d, 0xac, 0xd4, 0x35, 0xb6, 0xf4, 0xd0, 0xd7, 0xd8, 0x77, - 0x52, 0xa9, 0xe7, 0xcb, 0xf9, 0xb1, 0x0d, 0xc5, 0x8d, 0xff, 0x08, 0x09, 0xe8, 0x4f, 0xf6, 0x6e, - 0xf4, 0xd3, 0x56, 0x86, 0x50, 0xcf, 0x6f, 0xcb, 0xaf, 0x9b, 0xb7, 0xe5, 0x4b, 0xe9, 0xdb, 0x72, - 0x97, 0xf2, 0xd5, 0xb8, 0x28, 0x0f, 0x1e, 0x20, 0x7b, 0xd0, 0x88, 0x73, 0x76, 0x0b, 0x2e, 0xf4, - 0x3b, 0x96, 0x98, 0xc9, 0x94, 0xab, 0x9e, 0xda, 0x12, 0x93, 0x29, 0xb7, 0x56, 0xc5, 0x0c, 0x32, - 0x68, 0x48, 0x12, 0xfb, 0xbf, 0x5b, 0x50, 0xac, 0x07, 0xee, 0x09, 0x28, 0x93, 0x3f, 0x6b, 0x28, - 0x93, 0x9f, 0xc8, 0x3e, 0x10, 0xdd, 0x5c, 0xd5, 0xf1, 0x72, 0x4a, 0x75, 0x7c, 0x2e, 0x8f, 0x40, - 0x6f, 0x45, 0xf1, 0x4f, 0x14, 0x61, 0xac, 0x1e, 0xb8, 0xca, 0x5e, 0xf9, 0x37, 0x1e, 0xc6, 0x5e, - 0x39, 0x37, 0x80, 0xac, 0x46, 0x99, 0x59, 0x5a, 0x49, 0x77, 0xbd, 0x3f, 0x67, 0x66, 0xcb, 0x77, - 0x89, 0xb7, 0xb5, 0x1d, 0x13, 0x37, 0xfd, 0x39, 0x27, 0x67, 0xb6, 0xfc, 0xdf, 0x2c, 0x98, 0x4a, - 0xb5, 0x8e, 0x5a, 0x30, 0xd1, 0xd2, 0x35, 0x81, 0x82, 0x4f, 0x1f, 0x4a, 0x89, 0x28, 0xcc, 0x3e, - 0xb5, 0x22, 0x6c, 0x12, 0x47, 0xf3, 0x00, 0xea, 0xa5, 0x4e, 0x6a, 0xc0, 0x98, 0xd4, 0xaf, 0x9e, - 0xf2, 0x22, 0xac, 0x61, 0xa0, 0x97, 0x61, 0x2c, 0x0e, 0xda, 0x41, 0x2b, 0xd8, 0xda, 0xbf, 0x41, - 0x64, 0x10, 0x1c, 0x65, 0xcc, 0xb5, 0x9e, 0x80, 0xb0, 0x8e, 0x67, 0xff, 0x54, 0x91, 0x7f, 0xa8, - 0x1f, 0x7b, 0xdf, 0xe4, 0xc9, 0x8f, 0x36, 0x4f, 0x7e, 0xc3, 0x82, 0x69, 0xda, 0x3a, 0x33, 0x17, - 0x91, 0x87, 0xad, 0x4a, 0xd4, 0x63, 0xf5, 0x48, 0xd4, 0x73, 0x89, 0xee, 0x5d, 0x6e, 0xd0, 0x89, - 0x85, 0x06, 0x4d, 0xdb, 0x9c, 0x68, 0x29, 0x16, 0x50, 0x81, 0x47, 0xc2, 0x50, 0x78, 0x4b, 0xe9, - 0x78, 0x24, 0x0c, 0xb1, 0x80, 0xca, 0x3c, 0x3e, 0x43, 0x39, 0x79, 0x7c, 0x58, 0x48, 0x3f, 0x61, - 0x58, 0x20, 0xc4, 0x1e, 0x2d, 0xa4, 0x9f, 0xb4, 0x38, 0x48, 0x70, 0xec, 0x9f, 0x2f, 0xc2, 0x78, - 0x3d, 0x70, 0x93, 0xb7, 0xb2, 0x97, 0x8c, 0xb7, 0xb2, 0x0b, 0xa9, 0xb7, 0xb2, 0x69, 0x1d, 0xf7, - 0x9b, 0x2f, 0x63, 0x1f, 0xd6, 0xcb, 0xd8, 0xbf, 0xb0, 0xd8, 0xac, 0x55, 0xd7, 0x1a, 0x22, 0x8f, - 0xf0, 0x0b, 0x30, 0xc6, 0x36, 0x24, 0xe6, 0x9e, 0x27, 0x1f, 0x90, 0x58, 0x88, 0xfe, 0xb5, 0xa4, - 0x18, 0xeb, 0x38, 0xe8, 0x32, 0x94, 0x22, 0xe2, 0x84, 0xcd, 0x6d, 0xb5, 0xc7, 0x89, 0xe7, 0x15, - 0x5e, 0x86, 0x15, 0x14, 0xbd, 0x95, 0x44, 0x93, 0x2b, 0xe6, 0x67, 0xc4, 0xd5, 0xfb, 0xc3, 0x97, - 0x48, 0x7e, 0x08, 0x39, 0xfb, 0x2e, 0xa0, 0x6e, 0xfc, 0x01, 0xc2, 0x28, 0x55, 0xcc, 0x30, 0x4a, - 0xe5, 0xae, 0x10, 0x4a, 0x7f, 0x6a, 0xc1, 0x64, 0x3d, 0x70, 0xe9, 0xd2, 0xfd, 0x8b, 0xb4, 0x4e, - 0xf5, 0x50, 0x9a, 0x23, 0x3d, 0x42, 0x69, 0x5e, 0x84, 0xe1, 0x7a, 0xe0, 0xd6, 0xea, 0xbd, 0xdc, - 0x64, 0xed, 0xbf, 0x6f, 0xc1, 0x68, 0x3d, 0x70, 0x4f, 0x40, 0x39, 0xff, 0xba, 0xa9, 0x9c, 0x7f, - 0x3c, 0x87, 0x6f, 0x72, 0xf4, 0xf1, 0xbf, 0x58, 0x84, 0x09, 0xda, 0xcf, 0x60, 0x4b, 0x4e, 0xa5, - 0x31, 0x6c, 0xd6, 0x00, 0xc3, 0x46, 0x65, 0xe1, 0xa0, 0xd5, 0x0a, 0xee, 0xa5, 0xa7, 0x75, 0x85, - 0x95, 0x62, 0x01, 0x45, 0xcf, 0x41, 0xa9, 0x1d, 0x92, 0x3d, 0x2f, 0x10, 0x42, 0xa6, 0xf6, 0xd4, - 0x51, 0x17, 0xe5, 0x58, 0x61, 0xd0, 0xcb, 0x59, 0xe4, 0xf9, 0x4d, 0x22, 0x73, 0x76, 0x0f, 0xb1, - 0xb4, 0x5e, 0x3c, 0x90, 0xb6, 0x56, 0x8e, 0x0d, 0x2c, 0x74, 0x17, 0xca, 0xec, 0x3f, 0xdb, 0x76, - 0x8e, 0x9e, 0x86, 0x48, 0x64, 0xaf, 0x10, 0x04, 0x70, 0x42, 0x0b, 0x5d, 0x05, 0x88, 0x65, 0xb0, - 0xe5, 0x48, 0x84, 0xcc, 0x51, 0x02, 0xb9, 0x0a, 0xc3, 0x1c, 0x61, 0x0d, 0x0b, 0x3d, 0x0b, 0xe5, - 0xd8, 0xf1, 0x5a, 0x37, 0x3d, 0x9f, 0x44, 0x4c, 0x2f, 0x5d, 0x94, 0xc9, 0x29, 0x44, 0x21, 0x4e, - 0xe0, 0x54, 0x20, 0x62, 0xfe, 0xe4, 0x3c, 0x89, 0x59, 0x89, 0x61, 0x33, 0x81, 0xe8, 0xa6, 0x2a, - 0xc5, 0x1a, 0x86, 0xfd, 0x2a, 0x9c, 0xa9, 0x07, 0x6e, 0x3d, 0x08, 0xe3, 0x95, 0x20, 0xbc, 0xe7, - 0x84, 0xae, 0x9c, 0xbf, 0x8a, 0xcc, 0x93, 0x40, 0x37, 0xa8, 0x61, 0xbe, 0x7c, 0x8d, 0x0c, 0x08, - 0x2f, 0x32, 0x91, 0xe8, 0x88, 0x3e, 0x22, 0x4d, 0x76, 0x38, 0xab, 0x7c, 0x85, 0xd7, 0x9c, 0x98, - 0xa0, 0x5b, 0x2c, 0xc7, 0x59, 0x72, 0x4e, 0x89, 0xea, 0xcf, 0x68, 0x39, 0xce, 0x12, 0x60, 0xe6, - 0xc1, 0x66, 0xd6, 0xb7, 0x7f, 0x76, 0x88, 0x6d, 0x59, 0xa9, 0xf4, 0x7d, 0xe8, 0x8b, 0x30, 0x19, - 0x91, 0x9b, 0x9e, 0xdf, 0xb9, 0x2f, 0x6f, 0xea, 0x3d, 0xbc, 0x7c, 0x1a, 0xcb, 0x3a, 0x26, 0xd7, - 0xf7, 0x99, 0x65, 0x38, 0x45, 0x8d, 0xce, 0x53, 0xd8, 0xf1, 0x17, 0xa2, 0xdb, 0x11, 0x09, 0x45, - 0xfa, 0x38, 0x36, 0x4f, 0x58, 0x16, 0xe2, 0x04, 0x4e, 0xf9, 0x92, 0xfd, 0x59, 0x0b, 0x7c, 0x1c, - 0x04, 0xb1, 0xe4, 0x64, 0x96, 0x80, 0x48, 0x2b, 0xc7, 0x06, 0x16, 0x5a, 0x01, 0x14, 0x75, 0xda, - 0xed, 0x16, 0x7b, 0xfd, 0x77, 0x5a, 0xd7, 0xc2, 0xa0, 0xd3, 0xe6, 0x4f, 0xa3, 0x45, 0x1e, 0xe7, - 0xb0, 0xd1, 0x05, 0xc5, 0x19, 0x35, 0xe8, 0x16, 0xb5, 0x19, 0xb1, 0xdf, 0x8c, 0xbb, 0x8b, 0x42, - 0x07, 0xdf, 0x60, 0x45, 0x58, 0xc2, 0x28, 0x33, 0xb1, 0xe6, 0x39, 0xe6, 0x48, 0xc2, 0x4c, 0x58, - 0x95, 0x62, 0x0d, 0x03, 0x2d, 0xc3, 0x68, 0xb4, 0x1f, 0x35, 0x63, 0x11, 0xe0, 0x29, 0x27, 0x11, - 0x68, 0x83, 0xa1, 0x68, 0xc9, 0x29, 0x78, 0x15, 0x2c, 0xeb, 0xa2, 0x5d, 0x98, 0xbc, 0xe7, 0xf9, - 0x6e, 0x70, 0x2f, 0x92, 0x13, 0x55, 0xca, 0xd7, 0x9f, 0xde, 0xe5, 0x98, 0xa9, 0xc9, 0x36, 0xe6, - 0xed, 0xae, 0x41, 0x0c, 0xa7, 0x88, 0xdb, 0xdf, 0xc5, 0x0e, 0x68, 0x96, 0xdb, 0x2c, 0xee, 0x84, - 0x04, 0xed, 0xc2, 0x44, 0x9b, 0x71, 0x98, 0x88, 0xbc, 0x2d, 0xd8, 0xe4, 0xa5, 0x01, 0x6f, 0xda, - 0xf7, 0xe8, 0xbe, 0xa6, 0x34, 0x61, 0xec, 0x0a, 0x53, 0xd7, 0xc9, 0x61, 0x93, 0xba, 0xfd, 0x5b, - 0xa7, 0xd9, 0x16, 0xdf, 0xe0, 0xd7, 0xe7, 0x51, 0x61, 0xee, 0x2c, 0xee, 0x0a, 0x73, 0xf9, 0x7a, - 0x9c, 0x64, 0x00, 0x85, 0xc9, 0x34, 0x96, 0x75, 0xd1, 0x5b, 0xec, 0xe5, 0x9c, 0xef, 0xab, 0xfd, - 0x52, 0x4c, 0x73, 0x2c, 0xe3, 0x91, 0x5c, 0x54, 0xc4, 0x1a, 0x11, 0x74, 0x13, 0x26, 0x44, 0x2a, - 0x2c, 0xa1, 0xa8, 0x2b, 0x1a, 0x8a, 0x98, 0x09, 0xac, 0x03, 0x0f, 0xd3, 0x05, 0xd8, 0xac, 0x8c, - 0xb6, 0xe0, 0x9c, 0x96, 0x17, 0xf2, 0x5a, 0xe8, 0xb0, 0xd7, 0x54, 0x8f, 0xad, 0x59, 0x6d, 0x9b, - 0x7e, 0xea, 0xc1, 0x41, 0xe5, 0xdc, 0x7a, 0x2f, 0x44, 0xdc, 0x9b, 0x0e, 0xba, 0x05, 0x67, 0xb8, - 0xff, 0x61, 0x95, 0x38, 0x6e, 0xcb, 0xf3, 0xd5, 0x39, 0xc0, 0xd9, 0xfe, 0xec, 0x83, 0x83, 0xca, - 0x99, 0x85, 0x2c, 0x04, 0x9c, 0x5d, 0x0f, 0xbd, 0x0e, 0x65, 0xd7, 0x8f, 0xc4, 0x18, 0x8c, 0x18, - 0x29, 0x4f, 0xcb, 0xd5, 0xb5, 0x86, 0xfa, 0xfe, 0xe4, 0x0f, 0x4e, 0x2a, 0xa0, 0x2d, 0xae, 0xac, - 0x53, 0x77, 0xe3, 0xd1, 0xfc, 0xf4, 0xf6, 0x82, 0x25, 0x0c, 0x0f, 0x24, 0xae, 0xa5, 0x56, 0x76, - 0xb9, 0x86, 0x73, 0x92, 0x41, 0x18, 0xbd, 0x09, 0x88, 0x0a, 0x8f, 0x5e, 0x93, 0x2c, 0x34, 0x59, - 0x00, 0x74, 0xa6, 0xdb, 0x2c, 0x19, 0x7e, 0x1c, 0xa8, 0xd1, 0x85, 0x81, 0x33, 0x6a, 0xa1, 0xeb, - 0x74, 0xdf, 0xd4, 0x4b, 0x85, 0x7d, 0xb1, 0xbc, 0x70, 0xcc, 0x56, 0x49, 0x3b, 0x24, 0x4d, 0x27, - 0x26, 0xae, 0x49, 0x11, 0xa7, 0xea, 0xd1, 0xa3, 0x5b, 0xe5, 0x42, 0x02, 0x33, 0xe8, 0x47, 0x77, - 0x3e, 0x24, 0x7a, 0x57, 0xdf, 0x0e, 0xa2, 0x78, 0x8d, 0xc4, 0xf7, 0x82, 0x70, 0x47, 0xc4, 0x58, - 0x4b, 0xc2, 0x7d, 0x26, 0x20, 0xac, 0xe3, 0x51, 0xd9, 0x9c, 0x3d, 0x5d, 0xd7, 0xaa, 0xec, 0xd5, - 0xb0, 0x94, 0xac, 0x93, 0xeb, 0xbc, 0x18, 0x4b, 0xb8, 0x44, 0xad, 0xd5, 0x97, 0xd8, 0x0b, 0x60, - 0x0a, 0xb5, 0x56, 0x5f, 0xc2, 0x12, 0x8e, 0x48, 0x77, 0x3a, 0xd9, 0xc9, 0x7c, 0x4d, 0x6b, 0xf7, - 0xe9, 0x33, 0x60, 0x46, 0x59, 0x1f, 0xa6, 0x55, 0x22, 0x5b, 0x1e, 0x7c, 0x2e, 0x9a, 0x9d, 0x62, - 0x4c, 0x32, 0x78, 0xe4, 0x3a, 0xa5, 0xbb, 0xae, 0xa5, 0x28, 0xe1, 0x2e, 0xda, 0x46, 0x18, 0x96, - 0xe9, 0xbe, 0xb9, 0xac, 0xae, 0x40, 0x39, 0xea, 0x6c, 0xb8, 0xc1, 0xae, 0xe3, 0xf9, 0xec, 0xc1, - 0x4e, 0x93, 0xe9, 0x1a, 0x12, 0x80, 0x13, 0x1c, 0xb4, 0x02, 0x25, 0x47, 0x2a, 0xa6, 0x51, 0x7e, - 0xcc, 0x05, 0xa5, 0x8e, 0xe6, 0x6e, 0xc8, 0x52, 0x15, 0xad, 0xea, 0xa2, 0xd7, 0x60, 0x42, 0x78, - 0x9d, 0xf1, 0x48, 0x14, 0xec, 0x41, 0x4d, 0x73, 0x16, 0x68, 0xe8, 0x40, 0x6c, 0xe2, 0xa2, 0x2f, - 0xc0, 0x24, 0xa5, 0x92, 0x6c, 0x6c, 0xb3, 0xa7, 0x07, 0xd9, 0x11, 0xb5, 0x1c, 0x25, 0x7a, 0x65, - 0x9c, 0x22, 0x86, 0x5c, 0x78, 0xd2, 0xe9, 0xc4, 0x01, 0x53, 0xee, 0x9b, 0xfc, 0xbf, 0x1e, 0xec, - 0x10, 0x9f, 0xbd, 0xab, 0x95, 0x16, 0x2f, 0x3c, 0x38, 0xa8, 0x3c, 0xb9, 0xd0, 0x03, 0x0f, 0xf7, - 0xa4, 0x82, 0x6e, 0xc3, 0x58, 0x1c, 0xb4, 0x98, 0xd9, 0x3e, 0x3d, 0x10, 0x1f, 0xcb, 0x0f, 0x63, - 0xb4, 0xae, 0xd0, 0x74, 0xc5, 0x96, 0xaa, 0x8a, 0x75, 0x3a, 0x68, 0x9d, 0xaf, 0x31, 0x16, 0xe0, - 0x95, 0x44, 0xb3, 0x8f, 0xe7, 0x0f, 0x8c, 0x8a, 0x03, 0x6b, 0x2e, 0x41, 0x51, 0x13, 0xeb, 0x64, - 0xd0, 0x35, 0x98, 0x69, 0x87, 0x5e, 0xc0, 0x18, 0x5b, 0x3d, 0xac, 0xcc, 0x9a, 0x69, 0x29, 0xea, - 0x69, 0x04, 0xdc, 0x5d, 0x87, 0xf9, 0xef, 0x89, 0xc2, 0xd9, 0xb3, 0x3c, 0xc7, 0x19, 0x97, 0xf3, - 0x79, 0x19, 0x56, 0x50, 0xb4, 0xca, 0xf6, 0x65, 0x7e, 0x45, 0x9d, 0x9d, 0xcb, 0x8f, 0x55, 0xa1, - 0x5f, 0x65, 0xb9, 0x78, 0xa6, 0xfe, 0xe2, 0x84, 0x02, 0x3d, 0x37, 0xa2, 0x6d, 0x27, 0x24, 0xf5, - 0x30, 0x68, 0x92, 0x48, 0x8b, 0x29, 0xfd, 0x04, 0x8f, 0x43, 0x49, 0xcf, 0x8d, 0x46, 0x16, 0x02, - 0xce, 0xae, 0x87, 0x5c, 0x2d, 0xb5, 0x37, 0x95, 0x7a, 0xa3, 0xd9, 0x27, 0x7b, 0x18, 0x41, 0xa5, - 0x44, 0xe4, 0x84, 0x17, 0x8d, 0xe2, 0x08, 0xa7, 0x68, 0xa2, 0x6f, 0x83, 0x69, 0x11, 0xb6, 0x29, - 0x19, 0xf7, 0x73, 0x89, 0x75, 0x25, 0x4e, 0xc1, 0x70, 0x17, 0x36, 0x8f, 0xa4, 0xed, 0x6c, 0xb4, - 0x88, 0x60, 0xc2, 0x9b, 0x9e, 0xbf, 0x13, 0xcd, 0x9e, 0x67, 0x5f, 0x2d, 0x22, 0x69, 0xa7, 0xa1, - 0x38, 0xa3, 0x06, 0x5a, 0x87, 0xe9, 0x76, 0x48, 0xc8, 0x2e, 0x93, 0xb1, 0xc4, 0x71, 0x59, 0xe1, - 0xce, 0xc5, 0xb4, 0x27, 0xf5, 0x14, 0xec, 0x30, 0xa3, 0x0c, 0x77, 0x51, 0x40, 0xf7, 0xa0, 0x14, - 0xec, 0x91, 0x70, 0x9b, 0x38, 0xee, 0xec, 0x85, 0x1e, 0xd6, 0xbe, 0xe2, 0xec, 0xbc, 0x25, 0x70, - 0x53, 0xaf, 0xbb, 0xb2, 0xb8, 0xff, 0xeb, 0xae, 0x6c, 0x6c, 0xee, 0x5b, 0x61, 0xa6, 0xeb, 0x20, - 0x3e, 0x4a, 0x30, 0xfd, 0xb9, 0x1d, 0x98, 0x30, 0x7a, 0xf3, 0x48, 0x1f, 0xd2, 0x7e, 0x75, 0x04, - 0xca, 0xea, 0x91, 0x05, 0x5d, 0x31, 0xdf, 0xce, 0xce, 0xa6, 0xdf, 0xce, 0x4a, 0xf4, 0x1a, 0xa7, - 0x3f, 0x97, 0xad, 0x1b, 0x86, 0x97, 0x85, 0xfc, 0x3c, 0x79, 0xfa, 0x45, 0xac, 0xaf, 0x13, 0xa7, - 0xa6, 0x33, 0x2b, 0x0e, 0xfc, 0x08, 0x37, 0xd4, 0x53, 0x0d, 0x37, 0x60, 0x9a, 0x6a, 0x74, 0x91, - 0xde, 0x65, 0xdd, 0x5a, 0x3d, 0x9d, 0xb7, 0x95, 0xe9, 0x5f, 0x30, 0x87, 0xb1, 0x3b, 0x3f, 0x15, - 0x51, 0xd9, 0x9d, 0x7f, 0xf4, 0x21, 0xef, 0xfc, 0x92, 0x00, 0x4e, 0x68, 0xa1, 0x16, 0xcc, 0x34, - 0xcd, 0x94, 0xbb, 0xca, 0x71, 0xf3, 0x62, 0xdf, 0xe4, 0xb7, 0x1d, 0x2d, 0xbf, 0xe1, 0x52, 0x9a, - 0x0a, 0xee, 0x26, 0x8c, 0x5e, 0x83, 0xd2, 0x7b, 0x41, 0xc4, 0x16, 0xb4, 0x90, 0xd3, 0xa4, 0x83, - 0x5b, 0xe9, 0xad, 0x5b, 0x0d, 0x56, 0x7e, 0x78, 0x50, 0x19, 0xab, 0x07, 0xae, 0xfc, 0x8b, 0x55, - 0x05, 0x74, 0x1f, 0xce, 0x18, 0xa7, 0x9b, 0xea, 0x2e, 0x0c, 0xde, 0xdd, 0x73, 0xa2, 0xb9, 0x33, - 0xb5, 0x2c, 0x4a, 0x38, 0xbb, 0x01, 0x7a, 0x64, 0xf8, 0x81, 0x48, 0x57, 0x2d, 0x65, 0x41, 0x26, - 0xf2, 0x95, 0xf5, 0x40, 0x08, 0x29, 0x04, 0xdc, 0x5d, 0x07, 0x2d, 0xc0, 0x08, 0x9b, 0xcf, 0x68, - 0x76, 0x3c, 0xdf, 0x23, 0x9d, 0x4d, 0xbc, 0x96, 0x28, 0x82, 0x55, 0xc0, 0xa2, 0xa2, 0xfd, 0x2b, - 0xfc, 0x59, 0x4b, 0x28, 0xbf, 0x49, 0xd4, 0x69, 0x9d, 0x44, 0x42, 0xb5, 0x65, 0x43, 0x2f, 0xff, - 0xd0, 0x4f, 0xa7, 0xbf, 0x6e, 0xb1, 0xa7, 0xd3, 0x75, 0xb2, 0xdb, 0x6e, 0x39, 0xf1, 0x49, 0xf8, - 0x66, 0xbd, 0x05, 0xa5, 0x58, 0xb4, 0xd6, 0x2b, 0x07, 0x9c, 0xd6, 0x29, 0xf6, 0x7c, 0xac, 0x04, - 0x4d, 0x59, 0x8a, 0x15, 0x19, 0xfb, 0x9f, 0xf2, 0x19, 0x90, 0x90, 0x13, 0x50, 0x7f, 0x56, 0x4d, - 0xf5, 0x67, 0xa5, 0xcf, 0x17, 0xe4, 0xa8, 0x41, 0xff, 0x89, 0xd9, 0x6f, 0x76, 0xa7, 0xff, 0xa8, - 0xbf, 0xd9, 0xdb, 0x3f, 0x6c, 0xc1, 0xe9, 0x2c, 0x23, 0x37, 0x7a, 0x39, 0xe0, 0x1a, 0x05, 0x65, - 0xc3, 0xa0, 0x46, 0xf0, 0x8e, 0x28, 0xc7, 0x0a, 0x63, 0xe0, 0xf4, 0x2a, 0x47, 0x0b, 0x37, 0x78, - 0x0b, 0x26, 0xea, 0x21, 0xd1, 0x8e, 0x91, 0x37, 0xb8, 0xb3, 0x25, 0xef, 0xcf, 0x73, 0x47, 0x76, - 0xb4, 0xb4, 0x7f, 0xa6, 0x00, 0xa7, 0xf9, 0x23, 0xe4, 0xc2, 0x5e, 0xe0, 0xb9, 0xf5, 0xc0, 0x15, - 0xa9, 0x71, 0xde, 0x86, 0xf1, 0xb6, 0xa6, 0x06, 0xea, 0x15, 0xf0, 0x4c, 0x57, 0x17, 0x25, 0xd7, - 0x71, 0xbd, 0x14, 0x1b, 0xb4, 0x90, 0x0b, 0xe3, 0x64, 0xcf, 0x6b, 0xaa, 0x97, 0xac, 0xc2, 0x91, - 0x8f, 0x17, 0xd5, 0xca, 0xb2, 0x46, 0x07, 0x1b, 0x54, 0x1f, 0x41, 0xb6, 0x44, 0xfb, 0x47, 0x2c, - 0x78, 0x3c, 0x27, 0x3c, 0x1a, 0x6d, 0xee, 0x1e, 0x7b, 0xee, 0x15, 0x89, 0xd7, 0x54, 0x73, 0xfc, - 0x11, 0x18, 0x0b, 0x28, 0xfa, 0x1c, 0x00, 0x7f, 0xc4, 0xa5, 0xb7, 0xd3, 0x7e, 0x71, 0xa4, 0x8c, - 0x10, 0x38, 0x5a, 0xe8, 0x12, 0x59, 0x1f, 0x6b, 0xb4, 0xec, 0x9f, 0x2c, 0xc2, 0x30, 0x7b, 0x34, - 0x44, 0x2b, 0x30, 0xba, 0xcd, 0x03, 0x86, 0x0f, 0x12, 0x9b, 0x3c, 0xb9, 0xe6, 0xf3, 0x02, 0x2c, - 0x2b, 0xa3, 0x55, 0x38, 0xc5, 0x03, 0xae, 0xb7, 0xaa, 0xa4, 0xe5, 0xec, 0x4b, 0x6d, 0x11, 0x4f, - 0x56, 0xa6, 0xc2, 0xb0, 0xd4, 0xba, 0x51, 0x70, 0x56, 0x3d, 0xf4, 0x06, 0x4c, 0x52, 0xf1, 0x3a, - 0xe8, 0xc4, 0x92, 0x12, 0x0f, 0xb5, 0xae, 0xe4, 0xf9, 0x75, 0x03, 0x8a, 0x53, 0xd8, 0xf4, 0xde, - 0xdb, 0xee, 0xd2, 0x8b, 0x0d, 0x27, 0xf7, 0x5e, 0x53, 0x17, 0x66, 0xe2, 0x32, 0xeb, 0xb6, 0x0e, - 0xb3, 0xe5, 0x5b, 0xdf, 0x0e, 0x49, 0xb4, 0x1d, 0xb4, 0x5c, 0x91, 0xeb, 0x3e, 0xb1, 0x6e, 0x4b, - 0xc1, 0x71, 0x57, 0x0d, 0x4a, 0x65, 0xd3, 0xf1, 0x5a, 0x9d, 0x90, 0x24, 0x54, 0x46, 0x4c, 0x2a, - 0x2b, 0x29, 0x38, 0xee, 0xaa, 0x41, 0xf9, 0xe8, 0x8c, 0x48, 0x3e, 0x2f, 0x43, 0x3e, 0x28, 0x93, - 0xc5, 0x51, 0xe9, 0xfc, 0xd6, 0x23, 0x3a, 0x92, 0x30, 0xea, 0x52, 0xe9, 0xeb, 0x35, 0xed, 0xb1, - 0x70, 0x7b, 0x93, 0x54, 0x1e, 0x26, 0x05, 0xfa, 0xf7, 0x17, 0xe0, 0x54, 0x86, 0x69, 0x34, 0xdf, - 0xaa, 0xb6, 0xbc, 0x28, 0x56, 0x09, 0x99, 0xb4, 0xad, 0x8a, 0x97, 0x63, 0x85, 0x41, 0xd7, 0x03, - 0xdf, 0x0c, 0xd3, 0x1b, 0xa0, 0x30, 0x3d, 0x14, 0xd0, 0x23, 0xa6, 0x36, 0xba, 0x00, 0x43, 0x9d, - 0x88, 0xc8, 0xb8, 0x66, 0x6a, 0xff, 0x66, 0xef, 0x09, 0x0c, 0x42, 0xa5, 0xdb, 0x2d, 0xa5, 0xca, - 0xd7, 0xa4, 0x5b, 0xae, 0x9f, 0xe7, 0x30, 0xda, 0xb9, 0x98, 0xf8, 0x8e, 0x1f, 0x0b, 0x19, 0x38, - 0x89, 0xc6, 0xc3, 0x4a, 0xb1, 0x80, 0xda, 0x5f, 0x2d, 0xc2, 0xd9, 0x5c, 0x67, 0x09, 0xda, 0xf5, - 0xdd, 0xc0, 0xf7, 0xe2, 0x40, 0x3d, 0x5c, 0xf3, 0x08, 0x3c, 0xa4, 0xbd, 0xbd, 0x2a, 0xca, 0xb1, - 0xc2, 0x40, 0x97, 0x60, 0x98, 0x29, 0x9c, 0xba, 0x52, 0x53, 0x2d, 0x56, 0x79, 0x90, 0x06, 0x0e, - 0x1e, 0x38, 0xed, 0xdf, 0x45, 0x18, 0x6a, 0x07, 0x41, 0x2b, 0xbd, 0x69, 0xd1, 0xee, 0x06, 0x41, - 0x0b, 0x33, 0x20, 0xfa, 0x84, 0x18, 0xaf, 0xd4, 0x4b, 0x2d, 0x76, 0xdc, 0x20, 0xd2, 0x06, 0xed, - 0x19, 0x18, 0xdd, 0x21, 0xfb, 0xa1, 0xe7, 0x6f, 0xa5, 0x5f, 0xf0, 0x6f, 0xf0, 0x62, 0x2c, 0xe1, - 0x66, 0xa2, 0x92, 0xd1, 0xe3, 0xce, 0xd7, 0x57, 0xea, 0x7b, 0x04, 0xfe, 0x40, 0x11, 0xa6, 0xf0, - 0x62, 0xf5, 0x9b, 0x13, 0x71, 0xbb, 0x7b, 0x22, 0x8e, 0x3b, 0x5f, 0x5f, 0xff, 0xd9, 0xf8, 0x45, - 0x0b, 0xa6, 0x58, 0x30, 0x6f, 0x11, 0xcd, 0xc5, 0x0b, 0xfc, 0x13, 0x10, 0xf1, 0x2e, 0xc2, 0x70, - 0x48, 0x1b, 0x4d, 0xe7, 0xa4, 0x62, 0x3d, 0xc1, 0x1c, 0x86, 0x9e, 0x84, 0x21, 0xd6, 0x05, 0x3a, - 0x79, 0xe3, 0x3c, 0x9d, 0x47, 0xd5, 0x89, 0x1d, 0xcc, 0x4a, 0x59, 0x88, 0x02, 0x4c, 0xda, 0x2d, - 0x8f, 0x77, 0x3a, 0x79, 0x81, 0xfa, 0x68, 0x84, 0x28, 0xc8, 0xec, 0xda, 0x07, 0x0b, 0x51, 0x90, - 0x4d, 0xb2, 0xf7, 0xf5, 0xe9, 0x8f, 0x0a, 0x70, 0x3e, 0xb3, 0xde, 0xc0, 0x21, 0x0a, 0x7a, 0xd7, - 0x3e, 0x1e, 0x43, 0xac, 0x6c, 0xfb, 0xa8, 0xe2, 0x09, 0xda, 0x47, 0x0d, 0x0d, 0x2a, 0x61, 0x0e, - 0x0f, 0x10, 0x39, 0x20, 0x73, 0xc8, 0x3e, 0x22, 0x91, 0x03, 0x32, 0xfb, 0x96, 0x73, 0xfd, 0xfb, - 0xb3, 0x42, 0xce, 0xb7, 0xb0, 0x8b, 0xe0, 0x65, 0xba, 0xcf, 0x30, 0x60, 0x24, 0x24, 0xe6, 0x71, - 0xbe, 0xc7, 0xf0, 0x32, 0xac, 0xa0, 0xc8, 0xd3, 0x7c, 0xf0, 0x0b, 0xf9, 0x29, 0x5a, 0x73, 0x9b, - 0x9a, 0x37, 0x1f, 0x0c, 0xd5, 0x10, 0x64, 0xf8, 0xe3, 0xaf, 0x6a, 0x97, 0xf7, 0xe2, 0xe0, 0x97, - 0xf7, 0xf1, 0xec, 0x8b, 0x3b, 0x5a, 0x80, 0xa9, 0x5d, 0xcf, 0xa7, 0xdb, 0xe6, 0xbe, 0x29, 0xb2, - 0xaa, 0x90, 0x34, 0xab, 0x26, 0x18, 0xa7, 0xf1, 0xe7, 0x5e, 0x83, 0x89, 0x87, 0x56, 0xb3, 0xda, - 0xdf, 0x28, 0xc2, 0x13, 0x3d, 0x96, 0x3d, 0xdf, 0xeb, 0x8d, 0x39, 0xd0, 0xf6, 0xfa, 0xae, 0x79, - 0xa8, 0xc3, 0xe9, 0xcd, 0x4e, 0xab, 0xb5, 0xcf, 0x4c, 0x90, 0x89, 0x2b, 0x31, 0x84, 0x4c, 0xf9, - 0xa4, 0x4c, 0xa0, 0xb2, 0x92, 0x81, 0x83, 0x33, 0x6b, 0xa2, 0x37, 0x01, 0x05, 0x22, 0x3f, 0xf4, - 0x35, 0xe2, 0x8b, 0x67, 0x18, 0x36, 0xf0, 0xc5, 0x64, 0x31, 0xde, 0xea, 0xc2, 0xc0, 0x19, 0xb5, - 0xe8, 0xe5, 0x80, 0x9e, 0x4a, 0xfb, 0xaa, 0x5b, 0xa9, 0xcb, 0x01, 0xd6, 0x81, 0xd8, 0xc4, 0x45, - 0xd7, 0x60, 0xc6, 0xd9, 0x73, 0x3c, 0x1e, 0xd4, 0x51, 0x12, 0xe0, 0xb7, 0x03, 0xa5, 0x6f, 0x5b, - 0x48, 0x23, 0xe0, 0xee, 0x3a, 0x29, 0x2f, 0xfd, 0x91, 0x7c, 0x2f, 0xfd, 0xde, 0xfb, 0x62, 0x3f, - 0xf5, 0xb1, 0xfd, 0x9f, 0x2d, 0x7a, 0x7c, 0x71, 0x21, 0xdf, 0x0c, 0x36, 0xf5, 0x1a, 0xb3, 0x1f, - 0xe2, 0xfa, 0x44, 0xcd, 0x61, 0xfe, 0x8c, 0x66, 0x3f, 0x94, 0x00, 0xb1, 0x89, 0xcb, 0x19, 0x22, - 0x4a, 0xfc, 0xb4, 0x0c, 0x11, 0x5f, 0x04, 0xdc, 0x50, 0x18, 0xe8, 0xf3, 0x30, 0xea, 0x7a, 0x7b, - 0x5e, 0x14, 0x84, 0x62, 0xb1, 0x1c, 0x51, 0x49, 0x9f, 0xec, 0x83, 0x55, 0x4e, 0x06, 0x4b, 0x7a, - 0xf6, 0x0f, 0x14, 0x60, 0x42, 0xb6, 0xf8, 0x56, 0x27, 0x88, 0x9d, 0x13, 0x38, 0x96, 0xaf, 0x19, - 0xc7, 0xf2, 0x27, 0x7a, 0x45, 0x1d, 0x61, 0x5d, 0xca, 0x3d, 0x8e, 0x6f, 0xa5, 0x8e, 0xe3, 0xa7, - 0xfb, 0x93, 0xea, 0x7d, 0x0c, 0xff, 0x33, 0x0b, 0x66, 0x0c, 0xfc, 0x13, 0x38, 0x0d, 0x56, 0xcc, - 0xd3, 0xe0, 0xa9, 0xbe, 0xdf, 0x90, 0x73, 0x0a, 0x7c, 0x6f, 0x31, 0xd5, 0x77, 0xb6, 0xfb, 0xbf, - 0x07, 0x43, 0xdb, 0x4e, 0xe8, 0xf6, 0x8a, 0x83, 0xdc, 0x55, 0x69, 0xfe, 0xba, 0x13, 0x8a, 0xc7, - 0xab, 0xe7, 0x54, 0x92, 0x55, 0x27, 0xec, 0xff, 0x70, 0xc5, 0x9a, 0x42, 0xaf, 0xc2, 0x48, 0xd4, - 0x0c, 0xda, 0xca, 0x68, 0xf8, 0x02, 0x4f, 0xc0, 0x4a, 0x4b, 0x0e, 0x0f, 0x2a, 0xc8, 0x6c, 0x8e, - 0x16, 0x63, 0x81, 0x8f, 0xde, 0x86, 0x09, 0xf6, 0x4b, 0x19, 0xaa, 0x14, 0xf3, 0xb3, 0x6f, 0x34, - 0x74, 0x44, 0x6e, 0xef, 0x64, 0x14, 0x61, 0x93, 0xd4, 0xdc, 0x16, 0x94, 0xd5, 0x67, 0x3d, 0xd2, - 0x57, 0xb0, 0xff, 0x50, 0x84, 0x53, 0x19, 0x3c, 0x87, 0x22, 0x63, 0x26, 0x5e, 0x18, 0x90, 0x55, - 0x3f, 0xe0, 0x5c, 0x44, 0xec, 0x36, 0xe4, 0x0a, 0xde, 0x1a, 0xb8, 0xd1, 0xdb, 0x11, 0x49, 0x37, - 0x4a, 0x8b, 0xfa, 0x37, 0x4a, 0x1b, 0x3b, 0xb1, 0xa1, 0xa6, 0x0d, 0xa9, 0x9e, 0x3e, 0xd2, 0x39, - 0xfd, 0x93, 0x22, 0x9c, 0xce, 0x0a, 0x84, 0x84, 0xbe, 0x33, 0x95, 0x89, 0xe9, 0xa5, 0x41, 0x43, - 0x28, 0xf1, 0xf4, 0x4c, 0x22, 0x91, 0xfa, 0xbc, 0x99, 0x9b, 0xa9, 0xef, 0x30, 0x8b, 0x36, 0x99, - 0x0f, 0x72, 0xc8, 0x33, 0x68, 0xc9, 0xed, 0xe3, 0xd3, 0x03, 0x77, 0x40, 0xa4, 0xde, 0x8a, 0x52, - 0xaf, 0xd4, 0xb2, 0xb8, 0xff, 0x2b, 0xb5, 0x6c, 0x79, 0xce, 0x83, 0x31, 0xed, 0x6b, 0x1e, 0xe9, - 0x8c, 0xef, 0xd0, 0xd3, 0x4a, 0xeb, 0xf7, 0x23, 0x9d, 0xf5, 0x1f, 0xb1, 0x20, 0x65, 0x7c, 0xab, - 0xd4, 0x62, 0x56, 0xae, 0x5a, 0xec, 0x02, 0x0c, 0x85, 0x41, 0x8b, 0xa4, 0x13, 0x1f, 0xe1, 0xa0, - 0x45, 0x30, 0x83, 0x50, 0x8c, 0x38, 0x51, 0x76, 0x8c, 0xeb, 0x17, 0x39, 0x71, 0x45, 0xbb, 0x08, - 0xc3, 0x2d, 0xb2, 0x47, 0x5a, 0xe9, 0xac, 0x02, 0x37, 0x69, 0x21, 0xe6, 0x30, 0xfb, 0x17, 0x87, - 0xe0, 0x5c, 0x4f, 0x2f, 0x7e, 0x7a, 0x1d, 0xda, 0x72, 0x62, 0x72, 0xcf, 0xd9, 0x4f, 0x87, 0xff, - 0xbe, 0xc6, 0x8b, 0xb1, 0x84, 0x33, 0xa7, 0x05, 0x1e, 0xc4, 0x33, 0xa5, 0x44, 0x14, 0xb1, 0x3b, - 0x05, 0xd4, 0x54, 0x4a, 0x15, 0x8f, 0x43, 0x29, 0x75, 0x15, 0x20, 0x8a, 0x5a, 0xdc, 0xbc, 0xc3, - 0x15, 0xde, 0x10, 0x49, 0xb0, 0xd7, 0xc6, 0x4d, 0x01, 0xc1, 0x1a, 0x16, 0xaa, 0xc2, 0x74, 0x3b, - 0x0c, 0x62, 0xae, 0x93, 0xad, 0x72, 0xbb, 0xb0, 0x61, 0xd3, 0x81, 0xba, 0x9e, 0x82, 0xe3, 0xae, - 0x1a, 0xe8, 0x65, 0x18, 0x13, 0x4e, 0xd5, 0xf5, 0x20, 0x68, 0x09, 0x35, 0x90, 0xb2, 0x32, 0x6a, - 0x24, 0x20, 0xac, 0xe3, 0x69, 0xd5, 0x98, 0xa2, 0x77, 0x34, 0xb3, 0x1a, 0x57, 0xf6, 0x6a, 0x78, - 0xa9, 0xa0, 0x68, 0xa5, 0x81, 0x82, 0xa2, 0x25, 0x8a, 0xb1, 0xf2, 0xc0, 0x6f, 0x5b, 0xd0, 0x57, - 0x95, 0xf4, 0x73, 0x43, 0x70, 0x4a, 0x30, 0xce, 0xa3, 0x66, 0x97, 0xdb, 0xdd, 0xec, 0x72, 0x1c, - 0xaa, 0xb3, 0x6f, 0xf2, 0xcc, 0x49, 0xf3, 0xcc, 0x0f, 0x5a, 0x60, 0x8a, 0x57, 0xe8, 0xff, 0xcb, - 0xcd, 0x9f, 0xf0, 0x72, 0xae, 0xb8, 0xe6, 0xca, 0x03, 0xe4, 0x03, 0x66, 0x52, 0xb0, 0xff, 0x93, - 0x05, 0x4f, 0xf5, 0xa5, 0x88, 0x96, 0xa1, 0xcc, 0x64, 0x40, 0xed, 0x76, 0xf6, 0xb4, 0xb2, 0x1b, - 0x95, 0x80, 0x1c, 0x91, 0x34, 0xa9, 0x89, 0x96, 0xbb, 0x12, 0x55, 0x3c, 0x93, 0x91, 0xa8, 0xe2, - 0x8c, 0x31, 0x3c, 0x0f, 0x99, 0xa9, 0xe2, 0x57, 0x8a, 0x30, 0xc2, 0x39, 0xfe, 0x04, 0xae, 0x61, - 0x2b, 0x42, 0x6f, 0xdb, 0x23, 0x2c, 0x1a, 0xef, 0xcb, 0x7c, 0xd5, 0x89, 0x1d, 0x2e, 0x26, 0xa8, - 0xd3, 0x2a, 0xd1, 0xf0, 0xa2, 0x79, 0xe3, 0x3c, 0x9b, 0x4b, 0x29, 0x26, 0x81, 0xd3, 0xd0, 0x4e, - 0xb7, 0x2f, 0x02, 0x44, 0x71, 0xe8, 0xf9, 0x5b, 0x94, 0x86, 0x08, 0xb0, 0xf7, 0xc9, 0x1e, 0xad, - 0x37, 0x14, 0x32, 0xef, 0x43, 0xb2, 0xd2, 0x15, 0x00, 0x6b, 0x14, 0xe7, 0x5e, 0x81, 0xb2, 0x42, - 0xee, 0xa7, 0xc5, 0x19, 0xd7, 0x85, 0x8b, 0xcf, 0xc2, 0x54, 0xaa, 0xad, 0x23, 0x29, 0x81, 0x7e, - 0xc9, 0x82, 0x29, 0xde, 0xe5, 0x65, 0x7f, 0x4f, 0xec, 0xa9, 0xef, 0xc3, 0xe9, 0x56, 0xc6, 0xde, - 0x26, 0x66, 0x74, 0xf0, 0xbd, 0x50, 0x29, 0x7d, 0xb2, 0xa0, 0x38, 0xb3, 0x0d, 0x74, 0x99, 0xf2, - 0x2d, 0xdd, 0xbb, 0x9c, 0x96, 0xf0, 0x6d, 0x1b, 0xe7, 0x3c, 0xcb, 0xcb, 0xb0, 0x82, 0xda, 0xbf, - 0x6d, 0xc1, 0x0c, 0xef, 0xf9, 0x0d, 0xb2, 0xaf, 0x56, 0xf8, 0x87, 0xd9, 0x77, 0x91, 0x3b, 0xa6, - 0x90, 0x93, 0x3b, 0x46, 0xff, 0xb4, 0x62, 0xcf, 0x4f, 0xfb, 0x19, 0x0b, 0x04, 0x07, 0x9e, 0xc0, - 0x55, 0xfe, 0x5b, 0xcd, 0xab, 0xfc, 0x5c, 0x3e, 0x53, 0xe7, 0xdc, 0xe1, 0xff, 0xd4, 0x82, 0x69, - 0x8e, 0x90, 0xbc, 0x39, 0x7f, 0xa8, 0xf3, 0x30, 0x48, 0x12, 0x48, 0x95, 0x19, 0x3e, 0xfb, 0xa3, - 0x8c, 0xc9, 0x1a, 0xea, 0x39, 0x59, 0xae, 0x5c, 0x40, 0x47, 0x48, 0x80, 0x7a, 0xe4, 0xc8, 0xea, - 0xf6, 0x1f, 0x5a, 0x80, 0x78, 0x33, 0x86, 0xf8, 0x43, 0x85, 0x0a, 0x56, 0xaa, 0x1d, 0x17, 0xc9, - 0x56, 0xa3, 0x20, 0x58, 0xc3, 0x3a, 0x96, 0xe1, 0x49, 0x19, 0x0e, 0x14, 0xfb, 0x1b, 0x0e, 0x1c, - 0x61, 0x44, 0xff, 0x60, 0x18, 0xd2, 0xde, 0x1f, 0xe8, 0x0e, 0x8c, 0x37, 0x9d, 0xb6, 0xb3, 0xe1, - 0xb5, 0xbc, 0xd8, 0x23, 0x51, 0x2f, 0x8b, 0xa3, 0x25, 0x0d, 0x4f, 0x3c, 0xf5, 0x6a, 0x25, 0xd8, - 0xa0, 0x83, 0xe6, 0x01, 0xda, 0xa1, 0xb7, 0xe7, 0xb5, 0xc8, 0x16, 0xd3, 0x38, 0x30, 0x6f, 0x5a, - 0x6e, 0x46, 0x23, 0x4b, 0xb1, 0x86, 0x91, 0xe1, 0x18, 0x59, 0x7c, 0x74, 0x8e, 0x91, 0x43, 0x47, - 0x74, 0x8c, 0x1c, 0x1e, 0xc8, 0x31, 0x12, 0xc3, 0x63, 0x52, 0x44, 0xa2, 0xff, 0x57, 0xbc, 0x16, - 0x11, 0x72, 0x31, 0xf7, 0xb1, 0x9d, 0x7b, 0x70, 0x50, 0x79, 0x0c, 0x67, 0x62, 0xe0, 0x9c, 0x9a, - 0xe8, 0x73, 0x30, 0xeb, 0xb4, 0x5a, 0xc1, 0x3d, 0x35, 0x6a, 0xcb, 0x51, 0xd3, 0x69, 0x71, 0x8d, - 0xfd, 0x28, 0xa3, 0xfa, 0xe4, 0x83, 0x83, 0xca, 0xec, 0x42, 0x0e, 0x0e, 0xce, 0xad, 0x9d, 0xf2, - 0xab, 0x2c, 0xf5, 0xf5, 0xab, 0x7c, 0x1d, 0xca, 0xed, 0x30, 0x68, 0xae, 0x6a, 0xce, 0x57, 0xe7, - 0xe9, 0x00, 0xd6, 0x65, 0xe1, 0xe1, 0x41, 0x65, 0x42, 0xfd, 0x61, 0x27, 0x7c, 0x52, 0x21, 0xc3, - 0x9d, 0x12, 0x1e, 0xa5, 0x3b, 0xe5, 0x0e, 0x9c, 0x6a, 0x90, 0xd0, 0x63, 0x79, 0x62, 0xdd, 0x64, - 0xff, 0x58, 0x87, 0x72, 0x98, 0xda, 0x31, 0x07, 0x0a, 0x25, 0xa6, 0x45, 0xb8, 0x96, 0x3b, 0x64, - 0x42, 0xc8, 0xfe, 0xdf, 0x16, 0x8c, 0x0a, 0xbf, 0x83, 0x13, 0x10, 0xd4, 0x16, 0x0c, 0x7d, 0x79, - 0x25, 0xfb, 0x54, 0x61, 0x9d, 0xc9, 0xd5, 0x94, 0xd7, 0x52, 0x9a, 0xf2, 0xa7, 0x7a, 0x11, 0xe9, - 0xad, 0x23, 0xff, 0xdb, 0x45, 0x98, 0x34, 0x5d, 0x85, 0x4e, 0x60, 0x08, 0xd6, 0x60, 0x34, 0x12, - 0x7e, 0x69, 0x85, 0x7c, 0x9b, 0xf0, 0xf4, 0x24, 0x26, 0xd6, 0x5a, 0xc2, 0x13, 0x4d, 0x12, 0xc9, - 0x74, 0x78, 0x2b, 0x3e, 0x42, 0x87, 0xb7, 0x7e, 0xde, 0x5a, 0x43, 0xc7, 0xe1, 0xad, 0x65, 0x7f, - 0x8d, 0x9d, 0x6c, 0x7a, 0xf9, 0x09, 0x08, 0x3d, 0xd7, 0xcc, 0x33, 0xd0, 0xee, 0xc1, 0x59, 0xa2, - 0x53, 0x39, 0xc2, 0xcf, 0x2f, 0x58, 0x70, 0x2e, 0xe3, 0xab, 0x34, 0x49, 0xe8, 0x39, 0x28, 0x39, - 0x1d, 0xd7, 0x53, 0x6b, 0x59, 0x7b, 0x35, 0x5b, 0x10, 0xe5, 0x58, 0x61, 0xa0, 0x25, 0x98, 0x21, - 0xf7, 0xdb, 0x1e, 0x7f, 0xb6, 0xd4, 0x4d, 0x2a, 0x8b, 0x3c, 0xbc, 0xf2, 0x72, 0x1a, 0x88, 0xbb, - 0xf1, 0x55, 0x6c, 0x81, 0x62, 0x6e, 0x6c, 0x81, 0x7f, 0x68, 0xc1, 0x98, 0xf2, 0x41, 0x7a, 0xe4, - 0xa3, 0xfd, 0x6d, 0xe6, 0x68, 0x3f, 0xd1, 0x63, 0xb4, 0x73, 0x86, 0xf9, 0xef, 0x16, 0x54, 0x7f, - 0xeb, 0x41, 0x18, 0x0f, 0x20, 0x61, 0xbd, 0x0a, 0xa5, 0x76, 0x18, 0xc4, 0x41, 0x33, 0x68, 0x09, - 0x01, 0xeb, 0xc9, 0x24, 0xf4, 0x05, 0x2f, 0x3f, 0xd4, 0x7e, 0x63, 0x85, 0xcd, 0x46, 0x2f, 0x08, - 0x63, 0x21, 0xd4, 0x24, 0xa3, 0x17, 0x84, 0x31, 0x66, 0x10, 0xe4, 0x02, 0xc4, 0x4e, 0xb8, 0x45, - 0x62, 0x5a, 0x26, 0x42, 0xed, 0xe4, 0x6f, 0x1e, 0x9d, 0xd8, 0x6b, 0xcd, 0x7b, 0x7e, 0x1c, 0xc5, - 0xe1, 0x7c, 0xcd, 0x8f, 0x6f, 0x85, 0xfc, 0xbe, 0xa6, 0xc5, 0xb2, 0x50, 0xb4, 0xb0, 0x46, 0x57, - 0x7a, 0x00, 0xb3, 0x36, 0x86, 0xcd, 0xf7, 0xf7, 0x35, 0x51, 0x8e, 0x15, 0x86, 0xfd, 0x0a, 0x3b, - 0x4a, 0xd8, 0x00, 0x1d, 0x2d, 0xcc, 0xc4, 0xd7, 0x4b, 0x6a, 0x68, 0xd9, 0xe3, 0x5b, 0x55, 0x0f, - 0x66, 0xd1, 0x7b, 0xe7, 0xa6, 0x0d, 0xeb, 0x1e, 0x42, 0x49, 0xc4, 0x0b, 0xf4, 0xed, 0x5d, 0x66, - 0x19, 0xcf, 0xf7, 0x39, 0x02, 0x8e, 0x60, 0x88, 0xc1, 0x42, 0xbe, 0xb3, 0x80, 0xd8, 0xb5, 0xba, - 0x60, 0x72, 0x2d, 0xe4, 0xbb, 0x00, 0xe0, 0x04, 0x07, 0x5d, 0x11, 0xb7, 0xfd, 0x21, 0x23, 0x45, - 0xa4, 0xbc, 0xed, 0xcb, 0xcf, 0xd7, 0xae, 0xfb, 0x2f, 0xc0, 0x98, 0x4a, 0x15, 0x59, 0xe7, 0x79, - 0xf4, 0x44, 0xe0, 0xa1, 0xe5, 0xa4, 0x18, 0xeb, 0x38, 0x68, 0x1d, 0xa6, 0x22, 0xae, 0xea, 0x51, - 0xf1, 0x25, 0xb9, 0xca, 0xec, 0x93, 0xd2, 0x9c, 0xa3, 0x61, 0x82, 0x0f, 0x59, 0x11, 0xdf, 0x3a, - 0xa4, 0x1b, 0x6f, 0x9a, 0x04, 0x7a, 0x03, 0x26, 0x5b, 0x81, 0xe3, 0x2e, 0x3a, 0x2d, 0xc7, 0x6f, - 0xb2, 0xef, 0x2d, 0x99, 0x79, 0xb3, 0x6e, 0x1a, 0x50, 0x9c, 0xc2, 0xa6, 0x82, 0x99, 0x5e, 0x22, - 0x62, 0xa2, 0x3a, 0xfe, 0x16, 0x89, 0x44, 0xfa, 0x3a, 0x26, 0x98, 0xdd, 0xcc, 0xc1, 0xc1, 0xb9, - 0xb5, 0xd1, 0xab, 0x30, 0x2e, 0x3f, 0x5f, 0x73, 0x52, 0x4f, 0x6c, 0xef, 0x35, 0x18, 0x36, 0x30, - 0xd1, 0x3d, 0x38, 0x23, 0xff, 0xaf, 0x87, 0xce, 0xe6, 0xa6, 0xd7, 0x14, 0x4e, 0x8f, 0xdc, 0x87, - 0x69, 0x41, 0x3a, 0x45, 0x2d, 0x67, 0x21, 0x1d, 0x1e, 0x54, 0x2e, 0x88, 0x51, 0xcb, 0x84, 0xb3, - 0x49, 0xcc, 0xa6, 0x8f, 0x56, 0xe1, 0xd4, 0x36, 0x71, 0x5a, 0xf1, 0xf6, 0xd2, 0x36, 0x69, 0xee, - 0xc8, 0x45, 0xc4, 0x5c, 0xdf, 0x35, 0x8b, 0xf5, 0xeb, 0xdd, 0x28, 0x38, 0xab, 0x1e, 0x7a, 0x07, - 0x66, 0xdb, 0x9d, 0x8d, 0x96, 0x17, 0x6d, 0xaf, 0x05, 0x31, 0xb3, 0x20, 0x51, 0xf9, 0x13, 0x85, - 0x8f, 0xbc, 0x72, 0xfb, 0xaf, 0xe7, 0xe0, 0xe1, 0x5c, 0x0a, 0xe8, 0x7d, 0x38, 0x93, 0x62, 0x06, - 0xe1, 0xb1, 0x3b, 0x99, 0x1f, 0x61, 0xba, 0x91, 0x55, 0x41, 0x78, 0xe0, 0x66, 0x81, 0x70, 0x76, - 0x13, 0x1f, 0xcc, 0xae, 0xe8, 0x3d, 0x5a, 0x59, 0x13, 0xca, 0xd0, 0x97, 0x60, 0x5c, 0xe7, 0x22, - 0x71, 0xc0, 0x5c, 0xca, 0x96, 0x59, 0x34, 0x6e, 0xe3, 0x22, 0x9d, 0xe2, 0x28, 0x1d, 0x86, 0x0d, - 0x8a, 0x36, 0x81, 0xec, 0xef, 0x43, 0x37, 0xa1, 0xd4, 0x6c, 0x79, 0xc4, 0x8f, 0x6b, 0xf5, 0x5e, - 0x11, 0x6c, 0x96, 0x04, 0x8e, 0x18, 0x30, 0x11, 0x92, 0x97, 0x97, 0x61, 0x45, 0xc1, 0xfe, 0xb5, - 0x02, 0x54, 0xfa, 0xc4, 0x77, 0x4e, 0xa9, 0xbf, 0xad, 0x81, 0xd4, 0xdf, 0x0b, 0x32, 0x1b, 0xe4, - 0x5a, 0x4a, 0x27, 0x90, 0xca, 0xf4, 0x98, 0x68, 0x06, 0xd2, 0xf8, 0x03, 0x9b, 0x23, 0xeb, 0x1a, - 0xf4, 0xa1, 0xbe, 0x06, 0xf5, 0xc6, 0xcb, 0xd9, 0xf0, 0xe0, 0x17, 0x91, 0xdc, 0x57, 0x10, 0xfb, - 0x6b, 0x05, 0x38, 0xa3, 0x86, 0xf0, 0x2f, 0xee, 0xc0, 0xdd, 0xee, 0x1e, 0xb8, 0x63, 0x78, 0x43, - 0xb2, 0x6f, 0xc1, 0x08, 0x8f, 0x00, 0x34, 0x80, 0x00, 0x74, 0xd1, 0x8c, 0x29, 0xa7, 0x8e, 0x69, - 0x23, 0xae, 0xdc, 0x5f, 0xb1, 0x60, 0x6a, 0x7d, 0xa9, 0xde, 0x08, 0x9a, 0x3b, 0x24, 0x5e, 0xe0, - 0x02, 0x2b, 0x16, 0xf2, 0x8f, 0xf5, 0x90, 0x72, 0x4d, 0x96, 0xc4, 0x74, 0x01, 0x86, 0xb6, 0x83, - 0x28, 0x4e, 0x3f, 0x30, 0x5f, 0x0f, 0xa2, 0x18, 0x33, 0x88, 0xfd, 0x3b, 0x16, 0x0c, 0xb3, 0x6c, - 0xc7, 0xfd, 0x52, 0x70, 0x0f, 0xf2, 0x5d, 0xe8, 0x65, 0x18, 0x21, 0x9b, 0x9b, 0xa4, 0x19, 0x8b, - 0x59, 0x95, 0x8e, 0xb6, 0x23, 0xcb, 0xac, 0x94, 0x1e, 0xfa, 0xac, 0x31, 0xfe, 0x17, 0x0b, 0x64, - 0x74, 0x17, 0xca, 0xb1, 0xb7, 0x4b, 0x16, 0x5c, 0x57, 0x3c, 0xd1, 0x3d, 0x84, 0x5f, 0xf3, 0xba, - 0x24, 0x80, 0x13, 0x5a, 0xf6, 0x57, 0x0b, 0x00, 0x49, 0x60, 0x89, 0x7e, 0x9f, 0xb8, 0xd8, 0xf5, - 0x78, 0x73, 0x29, 0xe3, 0xf1, 0x06, 0x25, 0x04, 0x33, 0x5e, 0x6e, 0xd4, 0x30, 0x15, 0x07, 0x1a, - 0xa6, 0xa1, 0xa3, 0x0c, 0xd3, 0x12, 0xcc, 0x24, 0x81, 0x31, 0xcc, 0x28, 0x41, 0xec, 0x92, 0xb2, - 0x9e, 0x06, 0xe2, 0x6e, 0x7c, 0x9b, 0xc0, 0x05, 0x19, 0x43, 0x56, 0x9e, 0x35, 0xcc, 0x02, 0xf4, - 0x08, 0xd9, 0xd8, 0x93, 0xd7, 0xa9, 0x42, 0xee, 0xeb, 0xd4, 0x8f, 0x5b, 0x70, 0x3a, 0xdd, 0x0e, - 0x73, 0xc9, 0xfb, 0x8a, 0x05, 0x67, 0xd8, 0x1b, 0x1d, 0x6b, 0xb5, 0xfb, 0x45, 0xf0, 0xa5, 0xec, - 0x80, 0x21, 0xbd, 0x7b, 0x9c, 0x78, 0x74, 0xaf, 0x66, 0x91, 0xc6, 0xd9, 0x2d, 0xda, 0x5f, 0xb1, - 0xe0, 0x6c, 0x6e, 0xea, 0x2c, 0x74, 0x19, 0x4a, 0x4e, 0xdb, 0xe3, 0x0a, 0x30, 0xb1, 0xde, 0xd9, - 0xed, 0xb1, 0x5e, 0xe3, 0xea, 0x2f, 0x05, 0x55, 0x29, 0x3d, 0x0b, 0xb9, 0x29, 0x3d, 0xfb, 0x66, - 0xe8, 0xb4, 0xbf, 0xcf, 0x02, 0xe1, 0x85, 0x35, 0xc0, 0x26, 0xf3, 0xb6, 0xcc, 0x88, 0x6c, 0x84, - 0xef, 0xbf, 0x90, 0xef, 0x96, 0x26, 0x82, 0xf6, 0xab, 0x43, 0xdd, 0x08, 0xd5, 0x6f, 0xd0, 0xb2, - 0x5d, 0x10, 0xd0, 0x2a, 0x61, 0x3a, 0xab, 0xfe, 0xbd, 0xb9, 0x0a, 0xe0, 0x32, 0x5c, 0x2d, 0x2f, - 0xaa, 0x3a, 0x42, 0xaa, 0x0a, 0x82, 0x35, 0x2c, 0xfb, 0xdf, 0x15, 0x60, 0x4c, 0x86, 0x8b, 0xef, - 0xf8, 0x83, 0xdc, 0x2c, 0x8f, 0x94, 0x3f, 0x8a, 0x25, 0x12, 0xa6, 0x84, 0xeb, 0xc9, 0x85, 0x3c, - 0x49, 0x24, 0x2c, 0x01, 0x38, 0xc1, 0x41, 0xcf, 0xc0, 0x68, 0xd4, 0xd9, 0x60, 0xe8, 0x29, 0x9f, - 0xa1, 0x06, 0x2f, 0xc6, 0x12, 0x8e, 0x3e, 0x07, 0xd3, 0xbc, 0x5e, 0x18, 0xb4, 0x9d, 0x2d, 0xae, - 0x6d, 0x1d, 0x56, 0xce, 0xbe, 0xd3, 0xab, 0x29, 0xd8, 0xe1, 0x41, 0xe5, 0x74, 0xba, 0x8c, 0xe9, - 0xe9, 0xbb, 0xa8, 0xb0, 0xb7, 0x7f, 0xde, 0x08, 0x65, 0xd3, 0x2e, 0x93, 0x81, 0x04, 0x84, 0x75, - 0x3c, 0xfb, 0x4b, 0x80, 0xba, 0x03, 0xe7, 0xa3, 0x37, 0xb9, 0xc1, 0x97, 0x17, 0x12, 0xb7, 0x97, - 0xde, 0x5e, 0x77, 0x69, 0x95, 0xe6, 0xfe, 0xbc, 0x16, 0x56, 0xf5, 0xed, 0xbf, 0x56, 0x84, 0xe9, - 0xb4, 0x83, 0x23, 0xba, 0x0e, 0x23, 0xfc, 0x8c, 0x14, 0xe4, 0x7b, 0x3c, 0x0b, 0x6b, 0x6e, 0x91, - 0x6c, 0xb7, 0x10, 0xc7, 0xac, 0xa8, 0x8f, 0xde, 0x81, 0x31, 0x37, 0xb8, 0xe7, 0xdf, 0x73, 0x42, - 0x77, 0xa1, 0x5e, 0x13, 0xec, 0x9c, 0x29, 0x6a, 0x57, 0x13, 0x34, 0xdd, 0xd5, 0x92, 0x3d, 0x81, - 0x24, 0x20, 0xac, 0x93, 0x43, 0xeb, 0x2c, 0xce, 0xe7, 0xa6, 0xb7, 0xb5, 0xea, 0xb4, 0x7b, 0x59, - 0xff, 0x2e, 0x49, 0x24, 0x8d, 0xf2, 0x84, 0x08, 0x06, 0xca, 0x01, 0x38, 0x21, 0x84, 0xbe, 0x13, - 0x4e, 0x45, 0x39, 0xda, 0xb9, 0xbc, 0x3c, 0x2a, 0xbd, 0x14, 0x56, 0x8b, 0x8f, 0xd3, 0x4b, 0x50, - 0x96, 0x1e, 0x2f, 0xab, 0x19, 0xfb, 0xd7, 0x4f, 0x81, 0xb1, 0x88, 0x8d, 0xb4, 0x5a, 0xd6, 0x31, - 0xa5, 0xd5, 0xc2, 0x50, 0x22, 0xbb, 0xed, 0x78, 0xbf, 0xea, 0x85, 0xbd, 0xd2, 0x3e, 0x2e, 0x0b, - 0x9c, 0x6e, 0x9a, 0x12, 0x82, 0x15, 0x9d, 0xec, 0xdc, 0x67, 0xc5, 0x0f, 0x31, 0xf7, 0xd9, 0xd0, - 0x09, 0xe6, 0x3e, 0x5b, 0x83, 0xd1, 0x2d, 0x2f, 0xc6, 0xa4, 0x1d, 0x08, 0xe9, 0x34, 0x93, 0x0f, - 0xaf, 0x71, 0x94, 0xee, 0x2c, 0x3b, 0x02, 0x80, 0x25, 0x11, 0xf4, 0xa6, 0x5a, 0x81, 0x23, 0xf9, - 0x97, 0xbb, 0xee, 0xf7, 0xcb, 0xcc, 0x35, 0x28, 0x32, 0x9c, 0x8d, 0x3e, 0x6c, 0x86, 0xb3, 0x15, - 0x99, 0x97, 0xac, 0x94, 0x6f, 0xaa, 0xcf, 0xd2, 0x8e, 0xf5, 0xc9, 0x46, 0x76, 0x47, 0xcf, 0xe5, - 0x56, 0xce, 0xdf, 0x09, 0x54, 0x9a, 0xb6, 0x01, 0x33, 0xb8, 0x7d, 0x9f, 0x05, 0x67, 0xda, 0x59, - 0x69, 0x0d, 0xc5, 0x5b, 0xd3, 0xcb, 0x03, 0xe7, 0x6d, 0x34, 0x1a, 0x64, 0xb7, 0xfc, 0x4c, 0x34, - 0x9c, 0xdd, 0x1c, 0x1d, 0xe8, 0x70, 0xc3, 0x15, 0x29, 0xc8, 0x2e, 0xe6, 0xa4, 0x82, 0xeb, 0x91, - 0x00, 0x6e, 0x3d, 0x23, 0xed, 0xd8, 0xc7, 0xf3, 0xd2, 0x8e, 0x0d, 0x9c, 0x6c, 0xec, 0x4d, 0x95, - 0x04, 0x6e, 0x22, 0x9f, 0x95, 0x78, 0x8a, 0xb7, 0xbe, 0xa9, 0xdf, 0xde, 0x54, 0xa9, 0xdf, 0x7a, - 0x04, 0x20, 0xe4, 0x89, 0xdd, 0xfa, 0x26, 0x7c, 0xd3, 0x92, 0xb6, 0x4d, 0x1d, 0x4f, 0xd2, 0x36, - 0xe3, 0xa8, 0xe1, 0x79, 0xc3, 0x9e, 0xed, 0x73, 0xd4, 0x18, 0x74, 0x7b, 0x1f, 0x36, 0x3c, 0x41, - 0xdd, 0xcc, 0x43, 0x25, 0xa8, 0xbb, 0xa3, 0x27, 0x7c, 0x43, 0x7d, 0x32, 0x9a, 0x51, 0xa4, 0x01, - 0xd3, 0xbc, 0xdd, 0xd1, 0x0f, 0xc0, 0x53, 0xf9, 0x74, 0xd5, 0x39, 0xd7, 0x4d, 0x37, 0xf3, 0x08, - 0xec, 0x4a, 0x1f, 0x77, 0xfa, 0x64, 0xd2, 0xc7, 0x9d, 0x39, 0xf6, 0xf4, 0x71, 0x8f, 0x9d, 0x40, - 0xfa, 0xb8, 0xc7, 0x3f, 0xd4, 0xf4, 0x71, 0xb3, 0x8f, 0x20, 0x7d, 0xdc, 0x5a, 0x92, 0x3e, 0xee, - 0x6c, 0xfe, 0x94, 0x64, 0xd8, 0x0f, 0xe7, 0x24, 0x8d, 0xbb, 0xc3, 0x8c, 0x08, 0x78, 0x04, 0x0e, - 0x11, 0x21, 0x31, 0x3b, 0x78, 0x5e, 0x56, 0x98, 0x0e, 0x3e, 0x25, 0x0a, 0x84, 0x13, 0x52, 0x94, - 0x6e, 0x92, 0x44, 0xee, 0x89, 0x1e, 0x7a, 0xdc, 0x2c, 0x0d, 0x59, 0x8f, 0xd4, 0x71, 0x6f, 0xf0, - 0xd4, 0x71, 0x4f, 0xe6, 0xef, 0xe4, 0xe9, 0xe3, 0xce, 0x4c, 0x18, 0xf7, 0xfd, 0x05, 0x38, 0xdf, - 0x7b, 0x5d, 0x24, 0xea, 0xb9, 0x7a, 0xf2, 0x9c, 0x94, 0x52, 0xcf, 0xf1, 0xbb, 0x55, 0x82, 0x35, - 0x70, 0x98, 0xa3, 0x6b, 0x30, 0xa3, 0x0c, 0x8f, 0x5b, 0x5e, 0x73, 0x5f, 0x4b, 0xc1, 0xad, 0x1c, - 0x2c, 0x1b, 0x69, 0x04, 0xdc, 0x5d, 0x07, 0x2d, 0xc0, 0x94, 0x51, 0x58, 0xab, 0x8a, 0x3b, 0x94, - 0xd2, 0x07, 0x36, 0x4c, 0x30, 0x4e, 0xe3, 0xdb, 0x3f, 0x6d, 0xc1, 0xe3, 0x39, 0x99, 0x59, 0x06, - 0x8e, 0xe2, 0xb3, 0x09, 0x53, 0x6d, 0xb3, 0x6a, 0x9f, 0x60, 0x5f, 0x46, 0xfe, 0x17, 0xd5, 0xd7, - 0x14, 0x00, 0xa7, 0x89, 0xda, 0x5f, 0xb3, 0xe0, 0x5c, 0x4f, 0x23, 0x14, 0x84, 0xe1, 0xb1, 0xad, - 0xdd, 0xc8, 0x59, 0x0a, 0x89, 0x4b, 0xfc, 0xd8, 0x73, 0x5a, 0x8d, 0x36, 0x69, 0x6a, 0x0a, 0x56, - 0x66, 0xeb, 0x73, 0x6d, 0xb5, 0xb1, 0xd0, 0x8d, 0x81, 0x73, 0x6a, 0xa2, 0x15, 0x40, 0xdd, 0x10, - 0x31, 0xc3, 0x2c, 0xec, 0x65, 0x37, 0x3d, 0x9c, 0x51, 0x63, 0xf1, 0xf2, 0x6f, 0xfe, 0xde, 0xf9, - 0x8f, 0xfd, 0xd6, 0xef, 0x9d, 0xff, 0xd8, 0x6f, 0xff, 0xde, 0xf9, 0x8f, 0x7d, 0xf7, 0x83, 0xf3, - 0xd6, 0x6f, 0x3e, 0x38, 0x6f, 0xfd, 0xd6, 0x83, 0xf3, 0xd6, 0x6f, 0x3f, 0x38, 0x6f, 0xfd, 0xee, - 0x83, 0xf3, 0xd6, 0x57, 0x7f, 0xff, 0xfc, 0xc7, 0xde, 0x2e, 0xec, 0xbd, 0xf0, 0xff, 0x02, 0x00, - 0x00, 0xff, 0xff, 0x17, 0x77, 0x16, 0x5a, 0xa4, 0xee, 0x00, 0x00, + // 13088 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x64, 0x57, + 0x56, 0x18, 0xbe, 0xaf, 0x5b, 0x1f, 0xdd, 0x47, 0xdf, 0x77, 0x3e, 0xac, 0x91, 0x67, 0xa6, 0xc7, + 0xcf, 0xbb, 0xe3, 0xf1, 0xda, 0xd6, 0xac, 0xc7, 0xf6, 0xda, 0xac, 0xbd, 0x06, 0x49, 0x2d, 0xcd, + 0xc8, 0x33, 0xd2, 0xb4, 0x6f, 0x6b, 0x66, 0x76, 0x8d, 0x77, 0xf1, 0x53, 0xbf, 0x2b, 0xe9, 0x59, + 0xad, 0xf7, 0xda, 0xef, 0xbd, 0xd6, 0x8c, 0xfc, 0x83, 0xfa, 0x91, 0x25, 0x10, 0xb6, 0x20, 0xa9, + 0xad, 0x84, 0xca, 0x07, 0x50, 0xa4, 0x8a, 0x90, 0x02, 0x02, 0x49, 0x85, 0x40, 0x80, 0xb0, 0x24, + 0x21, 0x90, 0x54, 0x91, 0xfc, 0xb1, 0x21, 0xa9, 0x4a, 0x2d, 0x55, 0x54, 0x14, 0x10, 0xa9, 0x50, + 0xa4, 0x2a, 0x90, 0x0a, 0xf9, 0x07, 0x85, 0x0a, 0xa9, 0xfb, 0xf9, 0xee, 0x7d, 0xfd, 0x5e, 0x77, + 0x6b, 0xac, 0x91, 0xcd, 0xd6, 0xfe, 0xd7, 0x7d, 0xcf, 0xb9, 0xe7, 0xde, 0x77, 0x3f, 0xcf, 0x39, + 0xf7, 0x7c, 0xc0, 0xab, 0xdb, 0xaf, 0x44, 0xb3, 0x5e, 0x70, 0x75, 0xbb, 0xbd, 0x4e, 0x42, 0x9f, + 0xc4, 0x24, 0xba, 0xba, 0x4b, 0x7c, 0x37, 0x08, 0xaf, 0x0a, 0x80, 0xd3, 0xf2, 0xae, 0x36, 0x82, + 0x90, 0x5c, 0xdd, 0x7d, 0xfe, 0xea, 0x26, 0xf1, 0x49, 0xe8, 0xc4, 0xc4, 0x9d, 0x6d, 0x85, 0x41, + 0x1c, 0x20, 0xc4, 0x71, 0x66, 0x9d, 0x96, 0x37, 0x4b, 0x71, 0x66, 0x77, 0x9f, 0x9f, 0x79, 0x6e, + 0xd3, 0x8b, 0xb7, 0xda, 0xeb, 0xb3, 0x8d, 0x60, 0xe7, 0xea, 0x66, 0xb0, 0x19, 0x5c, 0x65, 0xa8, + 0xeb, 0xed, 0x0d, 0xf6, 0x8f, 0xfd, 0x61, 0xbf, 0x38, 0x89, 0x99, 0x17, 0x93, 0x66, 0x76, 0x9c, + 0xc6, 0x96, 0xe7, 0x93, 0x70, 0xef, 0x6a, 0x6b, 0x7b, 0x93, 0xb5, 0x1b, 0x92, 0x28, 0x68, 0x87, + 0x0d, 0x92, 0x6e, 0xb8, 0x6b, 0xad, 0xe8, 0xea, 0x0e, 0x89, 0x9d, 0x8c, 0xee, 0xce, 0x5c, 0xcd, + 0xab, 0x15, 0xb6, 0xfd, 0xd8, 0xdb, 0xe9, 0x6c, 0xe6, 0xd3, 0xbd, 0x2a, 0x44, 0x8d, 0x2d, 0xb2, + 0xe3, 0x74, 0xd4, 0x7b, 0x21, 0xaf, 0x5e, 0x3b, 0xf6, 0x9a, 0x57, 0x3d, 0x3f, 0x8e, 0xe2, 0x30, + 0x5d, 0xc9, 0xfe, 0xba, 0x05, 0x97, 0xe6, 0xee, 0xd5, 0x17, 0x9b, 0x4e, 0x14, 0x7b, 0x8d, 0xf9, + 0x66, 0xd0, 0xd8, 0xae, 0xc7, 0x41, 0x48, 0xee, 0x06, 0xcd, 0xf6, 0x0e, 0xa9, 0xb3, 0x81, 0x40, + 0xcf, 0x42, 0x69, 0x97, 0xfd, 0x5f, 0xae, 0x4e, 0x5b, 0x97, 0xac, 0x2b, 0xe5, 0xf9, 0xc9, 0xdf, + 0xdc, 0xaf, 0x7c, 0xec, 0x60, 0xbf, 0x52, 0xba, 0x2b, 0xca, 0xb1, 0xc2, 0x40, 0x97, 0x61, 0x68, + 0x23, 0x5a, 0xdb, 0x6b, 0x91, 0xe9, 0x02, 0xc3, 0x1d, 0x17, 0xb8, 0x43, 0x4b, 0x75, 0x5a, 0x8a, + 0x05, 0x14, 0x5d, 0x85, 0x72, 0xcb, 0x09, 0x63, 0x2f, 0xf6, 0x02, 0x7f, 0xba, 0x78, 0xc9, 0xba, + 0x32, 0x38, 0x3f, 0x25, 0x50, 0xcb, 0x35, 0x09, 0xc0, 0x09, 0x0e, 0xed, 0x46, 0x48, 0x1c, 0xf7, + 0xb6, 0xdf, 0xdc, 0x9b, 0x1e, 0xb8, 0x64, 0x5d, 0x29, 0x25, 0xdd, 0xc0, 0xa2, 0x1c, 0x2b, 0x0c, + 0xfb, 0x87, 0x0b, 0x50, 0x9a, 0xdb, 0xd8, 0xf0, 0x7c, 0x2f, 0xde, 0x43, 0x77, 0x61, 0xd4, 0x0f, + 0x5c, 0x22, 0xff, 0xb3, 0xaf, 0x18, 0xb9, 0x76, 0x69, 0xb6, 0x73, 0x29, 0xcd, 0xae, 0x6a, 0x78, + 0xf3, 0x93, 0x07, 0xfb, 0x95, 0x51, 0xbd, 0x04, 0x1b, 0x74, 0x10, 0x86, 0x91, 0x56, 0xe0, 0x2a, + 0xb2, 0x05, 0x46, 0xb6, 0x92, 0x45, 0xb6, 0x96, 0xa0, 0xcd, 0x4f, 0x1c, 0xec, 0x57, 0x46, 0xb4, + 0x02, 0xac, 0x13, 0x41, 0xeb, 0x30, 0x41, 0xff, 0xfa, 0xb1, 0xa7, 0xe8, 0x16, 0x19, 0xdd, 0x27, + 0xf3, 0xe8, 0x6a, 0xa8, 0xf3, 0xa7, 0x0e, 0xf6, 0x2b, 0x13, 0xa9, 0x42, 0x9c, 0x26, 0x68, 0xbf, + 0x0f, 0xe3, 0x73, 0x71, 0xec, 0x34, 0xb6, 0x88, 0xcb, 0x67, 0x10, 0xbd, 0x08, 0x03, 0xbe, 0xb3, + 0x43, 0xc4, 0xfc, 0x5e, 0x12, 0x03, 0x3b, 0xb0, 0xea, 0xec, 0x90, 0xc3, 0xfd, 0xca, 0xe4, 0x1d, + 0xdf, 0x7b, 0xaf, 0x2d, 0x56, 0x05, 0x2d, 0xc3, 0x0c, 0x1b, 0x5d, 0x03, 0x70, 0xc9, 0xae, 0xd7, + 0x20, 0x35, 0x27, 0xde, 0x12, 0xf3, 0x8d, 0x44, 0x5d, 0xa8, 0x2a, 0x08, 0xd6, 0xb0, 0xec, 0x07, + 0x50, 0x9e, 0xdb, 0x0d, 0x3c, 0xb7, 0x16, 0xb8, 0x11, 0xda, 0x86, 0x89, 0x56, 0x48, 0x36, 0x48, + 0xa8, 0x8a, 0xa6, 0xad, 0x4b, 0xc5, 0x2b, 0x23, 0xd7, 0xae, 0x64, 0x7e, 0xac, 0x89, 0xba, 0xe8, + 0xc7, 0xe1, 0xde, 0xfc, 0x63, 0xa2, 0xbd, 0x89, 0x14, 0x14, 0xa7, 0x29, 0xdb, 0xff, 0xba, 0x00, + 0x67, 0xe6, 0xde, 0x6f, 0x87, 0xa4, 0xea, 0x45, 0xdb, 0xe9, 0x15, 0xee, 0x7a, 0xd1, 0xf6, 0x6a, + 0x32, 0x02, 0x6a, 0x69, 0x55, 0x45, 0x39, 0x56, 0x18, 0xe8, 0x39, 0x18, 0xa6, 0xbf, 0xef, 0xe0, + 0x65, 0xf1, 0xc9, 0xa7, 0x04, 0xf2, 0x48, 0xd5, 0x89, 0x9d, 0x2a, 0x07, 0x61, 0x89, 0x83, 0x56, + 0x60, 0xa4, 0xc1, 0x36, 0xe4, 0xe6, 0x4a, 0xe0, 0x12, 0x36, 0x99, 0xe5, 0xf9, 0x67, 0x28, 0xfa, + 0x42, 0x52, 0x7c, 0xb8, 0x5f, 0x99, 0xe6, 0x7d, 0x13, 0x24, 0x34, 0x18, 0xd6, 0xeb, 0x23, 0x5b, + 0xed, 0xaf, 0x01, 0x46, 0x09, 0x32, 0xf6, 0xd6, 0x15, 0x6d, 0xab, 0x0c, 0xb2, 0xad, 0x32, 0x9a, + 0xbd, 0x4d, 0xd0, 0xf3, 0x30, 0xb0, 0xed, 0xf9, 0xee, 0xf4, 0x10, 0xa3, 0x75, 0x81, 0xce, 0xf9, + 0x4d, 0xcf, 0x77, 0x0f, 0xf7, 0x2b, 0x53, 0x46, 0x77, 0x68, 0x21, 0x66, 0xa8, 0xf6, 0x9f, 0x58, + 0x50, 0x61, 0xb0, 0x25, 0xaf, 0x49, 0x6a, 0x24, 0x8c, 0xbc, 0x28, 0x26, 0x7e, 0x6c, 0x0c, 0xe8, + 0x35, 0x80, 0x88, 0x34, 0x42, 0x12, 0x6b, 0x43, 0xaa, 0x16, 0x46, 0x5d, 0x41, 0xb0, 0x86, 0x45, + 0x0f, 0x84, 0x68, 0xcb, 0x09, 0xd9, 0xfa, 0x12, 0x03, 0xab, 0x0e, 0x84, 0xba, 0x04, 0xe0, 0x04, + 0xc7, 0x38, 0x10, 0x8a, 0xbd, 0x0e, 0x04, 0xf4, 0x59, 0x98, 0x48, 0x1a, 0x8b, 0x5a, 0x4e, 0x43, + 0x0e, 0x20, 0xdb, 0x32, 0x75, 0x13, 0x84, 0xd3, 0xb8, 0xf6, 0x3f, 0xb0, 0xc4, 0xe2, 0xa1, 0x5f, + 0xfd, 0x11, 0xff, 0x56, 0xfb, 0x97, 0x2d, 0x18, 0x9e, 0xf7, 0x7c, 0xd7, 0xf3, 0x37, 0xd1, 0x3b, + 0x50, 0xa2, 0x77, 0x93, 0xeb, 0xc4, 0x8e, 0x38, 0xf7, 0x3e, 0xa5, 0xed, 0x2d, 0x75, 0x55, 0xcc, + 0xb6, 0xb6, 0x37, 0x69, 0x41, 0x34, 0x4b, 0xb1, 0xe9, 0x6e, 0xbb, 0xbd, 0xfe, 0x2e, 0x69, 0xc4, + 0x2b, 0x24, 0x76, 0x92, 0xcf, 0x49, 0xca, 0xb0, 0xa2, 0x8a, 0x6e, 0xc2, 0x50, 0xec, 0x84, 0x9b, + 0x24, 0x16, 0x07, 0x60, 0xe6, 0x41, 0xc5, 0x6b, 0x62, 0xba, 0x23, 0x89, 0xdf, 0x20, 0xc9, 0xb5, + 0xb0, 0xc6, 0xaa, 0x62, 0x41, 0xc2, 0xfe, 0xab, 0xc3, 0x70, 0x6e, 0xa1, 0xbe, 0x9c, 0xb3, 0xae, + 0x2e, 0xc3, 0x90, 0x1b, 0x7a, 0xbb, 0x24, 0x14, 0xe3, 0xac, 0xa8, 0x54, 0x59, 0x29, 0x16, 0x50, + 0xf4, 0x0a, 0x8c, 0xf2, 0x0b, 0xe9, 0x86, 0xe3, 0xbb, 0x4d, 0x39, 0xc4, 0xa7, 0x05, 0xf6, 0xe8, + 0x5d, 0x0d, 0x86, 0x0d, 0xcc, 0x23, 0x2e, 0xaa, 0xcb, 0xa9, 0xcd, 0x98, 0x77, 0xd9, 0x7d, 0xd9, + 0x82, 0x49, 0xde, 0xcc, 0x5c, 0x1c, 0x87, 0xde, 0x7a, 0x3b, 0x26, 0xd1, 0xf4, 0x20, 0x3b, 0xe9, + 0x16, 0xb2, 0x46, 0x2b, 0x77, 0x04, 0x66, 0xef, 0xa6, 0xa8, 0xf0, 0x43, 0x70, 0x5a, 0xb4, 0x3b, + 0x99, 0x06, 0xe3, 0x8e, 0x66, 0xd1, 0xf7, 0x58, 0x30, 0xd3, 0x08, 0xfc, 0x38, 0x0c, 0x9a, 0x4d, + 0x12, 0xd6, 0xda, 0xeb, 0x4d, 0x2f, 0xda, 0xe2, 0xeb, 0x14, 0x93, 0x0d, 0x76, 0x12, 0xe4, 0xcc, + 0xa1, 0x42, 0x12, 0x73, 0x78, 0xf1, 0x60, 0xbf, 0x32, 0xb3, 0x90, 0x4b, 0x0a, 0x77, 0x69, 0x06, + 0x6d, 0x03, 0xa2, 0x57, 0x69, 0x3d, 0x76, 0x36, 0x49, 0xd2, 0xf8, 0x70, 0xff, 0x8d, 0x9f, 0x3d, + 0xd8, 0xaf, 0xa0, 0xd5, 0x0e, 0x12, 0x38, 0x83, 0x2c, 0x7a, 0x0f, 0x4e, 0xd3, 0xd2, 0x8e, 0x6f, + 0x2d, 0xf5, 0xdf, 0xdc, 0xf4, 0xc1, 0x7e, 0xe5, 0xf4, 0x6a, 0x06, 0x11, 0x9c, 0x49, 0x1a, 0x7d, + 0xb7, 0x05, 0xe7, 0x92, 0xcf, 0x5f, 0x7c, 0xd0, 0x72, 0x7c, 0x37, 0x69, 0xb8, 0xdc, 0x7f, 0xc3, + 0xf4, 0x4c, 0x3e, 0xb7, 0x90, 0x47, 0x09, 0xe7, 0x37, 0x32, 0xb3, 0x00, 0x67, 0x32, 0x57, 0x0b, + 0x9a, 0x84, 0xe2, 0x36, 0xe1, 0x5c, 0x50, 0x19, 0xd3, 0x9f, 0xe8, 0x34, 0x0c, 0xee, 0x3a, 0xcd, + 0xb6, 0xd8, 0x28, 0x98, 0xff, 0xf9, 0x4c, 0xe1, 0x15, 0xcb, 0xfe, 0x37, 0x45, 0x98, 0x58, 0xa8, + 0x2f, 0x3f, 0xd4, 0x2e, 0xd4, 0xaf, 0xa1, 0x42, 0xd7, 0x6b, 0x28, 0xb9, 0xd4, 0x8a, 0xb9, 0x97, + 0xda, 0xff, 0x9f, 0xb1, 0x85, 0x06, 0xd8, 0x16, 0xfa, 0x96, 0x9c, 0x2d, 0x74, 0xcc, 0x1b, 0x67, + 0x37, 0x67, 0x15, 0x0d, 0xb2, 0xc9, 0xcc, 0xe4, 0x58, 0x6e, 0x05, 0x0d, 0xa7, 0x99, 0x3e, 0xfa, + 0x8e, 0xb8, 0x94, 0x8e, 0x67, 0x1e, 0x1b, 0x30, 0xba, 0xe0, 0xb4, 0x9c, 0x75, 0xaf, 0xe9, 0xc5, + 0x1e, 0x89, 0xd0, 0x53, 0x50, 0x74, 0x5c, 0x97, 0x71, 0x5b, 0xe5, 0xf9, 0x33, 0x07, 0xfb, 0x95, + 0xe2, 0x9c, 0x4b, 0xaf, 0x7d, 0x50, 0x58, 0x7b, 0x98, 0x62, 0xa0, 0x4f, 0xc2, 0x80, 0x1b, 0x06, + 0xad, 0xe9, 0x02, 0xc3, 0xa4, 0xbb, 0x6e, 0xa0, 0x1a, 0x06, 0xad, 0x14, 0x2a, 0xc3, 0xb1, 0x7f, + 0xad, 0x00, 0xe7, 0x17, 0x48, 0x6b, 0x6b, 0xa9, 0x9e, 0x73, 0x7e, 0x5f, 0x81, 0xd2, 0x4e, 0xe0, + 0x7b, 0x71, 0x10, 0x46, 0xa2, 0x69, 0xb6, 0x22, 0x56, 0x44, 0x19, 0x56, 0x50, 0x74, 0x09, 0x06, + 0x5a, 0x09, 0x53, 0x39, 0x2a, 0x19, 0x52, 0xc6, 0x4e, 0x32, 0x08, 0xc5, 0x68, 0x47, 0x24, 0x14, + 0x2b, 0x46, 0x61, 0xdc, 0x89, 0x48, 0x88, 0x19, 0x24, 0xb9, 0x99, 0xe9, 0x9d, 0x2d, 0x4e, 0xe8, + 0xd4, 0xcd, 0x4c, 0x21, 0x58, 0xc3, 0x42, 0x35, 0x28, 0x47, 0xa9, 0x99, 0xed, 0x6b, 0x9b, 0x8e, + 0xb1, 0xab, 0x5b, 0xcd, 0x64, 0x42, 0xc4, 0xb8, 0x51, 0x86, 0x7a, 0x5e, 0xdd, 0x5f, 0x2d, 0x00, + 0xe2, 0x43, 0xf8, 0x17, 0x6c, 0xe0, 0xee, 0x74, 0x0e, 0x5c, 0xff, 0x5b, 0xe2, 0xb8, 0x46, 0xef, + 0x7f, 0x5b, 0x70, 0x7e, 0xc1, 0xf3, 0x5d, 0x12, 0xe6, 0x2c, 0xc0, 0x47, 0x23, 0xcb, 0x1e, 0x8d, + 0x69, 0x30, 0x96, 0xd8, 0xc0, 0x31, 0x2c, 0x31, 0xfb, 0x8f, 0x2d, 0x40, 0xfc, 0xb3, 0x3f, 0x72, + 0x1f, 0x7b, 0xa7, 0xf3, 0x63, 0x8f, 0x61, 0x59, 0xd8, 0xb7, 0x60, 0x7c, 0xa1, 0xe9, 0x11, 0x3f, + 0x5e, 0xae, 0x2d, 0x04, 0xfe, 0x86, 0xb7, 0x89, 0x3e, 0x03, 0xe3, 0xb1, 0xb7, 0x43, 0x82, 0x76, + 0x5c, 0x27, 0x8d, 0xc0, 0x67, 0x92, 0xa4, 0x75, 0x65, 0x70, 0x1e, 0x1d, 0xec, 0x57, 0xc6, 0xd7, + 0x0c, 0x08, 0x4e, 0x61, 0xda, 0xbf, 0x43, 0xc7, 0x2f, 0xd8, 0x69, 0x05, 0x3e, 0xf1, 0xe3, 0x85, + 0xc0, 0x77, 0xb9, 0xc6, 0xe1, 0x33, 0x30, 0x10, 0xd3, 0xf1, 0xe0, 0x63, 0x77, 0x59, 0x6e, 0x14, + 0x3a, 0x0a, 0x87, 0xfb, 0x95, 0xb3, 0x9d, 0x35, 0xd8, 0x38, 0xb1, 0x3a, 0xe8, 0x5b, 0x60, 0x28, + 0x8a, 0x9d, 0xb8, 0x1d, 0x89, 0xd1, 0x7c, 0x42, 0x8e, 0x66, 0x9d, 0x95, 0x1e, 0xee, 0x57, 0x26, + 0x54, 0x35, 0x5e, 0x84, 0x45, 0x05, 0xf4, 0x34, 0x0c, 0xef, 0x90, 0x28, 0x72, 0x36, 0xe5, 0x6d, + 0x38, 0x21, 0xea, 0x0e, 0xaf, 0xf0, 0x62, 0x2c, 0xe1, 0xe8, 0x49, 0x18, 0x24, 0x61, 0x18, 0x84, + 0x62, 0x8f, 0x8e, 0x09, 0xc4, 0xc1, 0x45, 0x5a, 0x88, 0x39, 0xcc, 0xfe, 0xf7, 0x16, 0x4c, 0xa8, + 0xbe, 0xf2, 0xb6, 0x4e, 0x40, 0x2a, 0x78, 0x0b, 0xa0, 0x21, 0x3f, 0x30, 0x62, 0xb7, 0xc7, 0xc8, + 0xb5, 0xcb, 0x99, 0x17, 0x75, 0xc7, 0x30, 0x26, 0x94, 0x55, 0x51, 0x84, 0x35, 0x6a, 0xf6, 0x3f, + 0xb7, 0xe0, 0x54, 0xea, 0x8b, 0x6e, 0x79, 0x51, 0x8c, 0xde, 0xee, 0xf8, 0xaa, 0xd9, 0xfe, 0xbe, + 0x8a, 0xd6, 0x66, 0xdf, 0xa4, 0x96, 0xb2, 0x2c, 0xd1, 0xbe, 0xe8, 0x06, 0x0c, 0x7a, 0x31, 0xd9, + 0x91, 0x1f, 0xf3, 0x64, 0xd7, 0x8f, 0xe1, 0xbd, 0x4a, 0x66, 0x64, 0x99, 0xd6, 0xc4, 0x9c, 0x80, + 0xfd, 0x37, 0x8a, 0x50, 0xe6, 0xcb, 0x76, 0xc5, 0x69, 0x9d, 0xc0, 0x5c, 0x2c, 0xc3, 0x00, 0xa3, + 0xce, 0x3b, 0xfe, 0x54, 0x76, 0xc7, 0x45, 0x77, 0x66, 0xa9, 0xc8, 0xcf, 0x99, 0x23, 0x75, 0x35, + 0xd0, 0x22, 0xcc, 0x48, 0x20, 0x07, 0x60, 0xdd, 0xf3, 0x9d, 0x70, 0x8f, 0x96, 0x4d, 0x17, 0x19, + 0xc1, 0xe7, 0xba, 0x13, 0x9c, 0x57, 0xf8, 0x9c, 0xac, 0xea, 0x6b, 0x02, 0xc0, 0x1a, 0xd1, 0x99, + 0x97, 0xa1, 0xac, 0x90, 0x8f, 0xc2, 0xe3, 0xcc, 0x7c, 0x16, 0x26, 0x52, 0x6d, 0xf5, 0xaa, 0x3e, + 0xaa, 0xb3, 0x48, 0xbf, 0xc2, 0x4e, 0x01, 0xd1, 0xeb, 0x45, 0x7f, 0x57, 0x9c, 0xa2, 0xef, 0xc3, + 0xe9, 0x66, 0xc6, 0xe1, 0x24, 0xa6, 0xaa, 0xff, 0xc3, 0xec, 0xbc, 0xf8, 0xec, 0xd3, 0x59, 0x50, + 0x9c, 0xd9, 0x06, 0xbd, 0xf6, 0x83, 0x16, 0x5d, 0xf3, 0x4e, 0x53, 0xe7, 0xa0, 0x6f, 0x8b, 0x32, + 0xac, 0xa0, 0xf4, 0x08, 0x3b, 0xad, 0x3a, 0x7f, 0x93, 0xec, 0xd5, 0x49, 0x93, 0x34, 0xe2, 0x20, + 0xfc, 0x50, 0xbb, 0x7f, 0x81, 0x8f, 0x3e, 0x3f, 0x01, 0x47, 0x04, 0x81, 0xe2, 0x4d, 0xb2, 0xc7, + 0xa7, 0x42, 0xff, 0xba, 0x62, 0xd7, 0xaf, 0xfb, 0x39, 0x0b, 0xc6, 0xd4, 0xd7, 0x9d, 0xc0, 0x56, + 0x9f, 0x37, 0xb7, 0xfa, 0x85, 0xae, 0x0b, 0x3c, 0x67, 0x93, 0x7f, 0xb5, 0x00, 0xe7, 0x14, 0x0e, + 0x65, 0xf7, 0xf9, 0x1f, 0xb1, 0xaa, 0xae, 0x42, 0xd9, 0x57, 0x8a, 0x28, 0xcb, 0xd4, 0x00, 0x25, + 0x6a, 0xa8, 0x04, 0x87, 0x72, 0x6d, 0x7e, 0xa2, 0x2d, 0x1a, 0xd5, 0x35, 0xb4, 0x42, 0x1b, 0x3b, + 0x0f, 0xc5, 0xb6, 0xe7, 0x8a, 0x3b, 0xe3, 0x53, 0x72, 0xb4, 0xef, 0x2c, 0x57, 0x0f, 0xf7, 0x2b, + 0x4f, 0xe4, 0xbd, 0x0e, 0xd0, 0xcb, 0x2a, 0x9a, 0xbd, 0xb3, 0x5c, 0xc5, 0xb4, 0x32, 0x9a, 0x83, + 0x09, 0xf9, 0x00, 0x72, 0x97, 0x72, 0x50, 0x81, 0x2f, 0xae, 0x16, 0xa5, 0x66, 0xc5, 0x26, 0x18, + 0xa7, 0xf1, 0x51, 0x15, 0x26, 0xb7, 0xdb, 0xeb, 0xa4, 0x49, 0x62, 0xfe, 0xc1, 0x37, 0x09, 0x57, + 0x42, 0x96, 0x13, 0x61, 0xeb, 0x66, 0x0a, 0x8e, 0x3b, 0x6a, 0xd8, 0x7f, 0xce, 0x8e, 0x78, 0x31, + 0x7a, 0xb5, 0x30, 0xa0, 0x0b, 0x8b, 0x52, 0xff, 0x30, 0x97, 0x73, 0x3f, 0xab, 0xe2, 0x26, 0xd9, + 0x5b, 0x0b, 0x28, 0xb3, 0x9d, 0xbd, 0x2a, 0x8c, 0x35, 0x3f, 0xd0, 0x75, 0xcd, 0xff, 0x42, 0x01, + 0xce, 0xa8, 0x11, 0x30, 0xf8, 0xba, 0xbf, 0xe8, 0x63, 0xf0, 0x3c, 0x8c, 0xb8, 0x64, 0xc3, 0x69, + 0x37, 0x63, 0xa5, 0x11, 0x1f, 0xe4, 0xaf, 0x22, 0xd5, 0xa4, 0x18, 0xeb, 0x38, 0x47, 0x18, 0xb6, + 0x9f, 0x18, 0x61, 0x77, 0x6b, 0xec, 0xd0, 0x35, 0xae, 0x76, 0x8d, 0x95, 0xbb, 0x6b, 0x9e, 0x84, + 0x41, 0x6f, 0x87, 0xf2, 0x5a, 0x05, 0x93, 0x85, 0x5a, 0xa6, 0x85, 0x98, 0xc3, 0xd0, 0x27, 0x60, + 0xb8, 0x11, 0xec, 0xec, 0x38, 0xbe, 0xcb, 0xae, 0xbc, 0xf2, 0xfc, 0x08, 0x65, 0xc7, 0x16, 0x78, + 0x11, 0x96, 0x30, 0x74, 0x1e, 0x06, 0x9c, 0x70, 0x93, 0xab, 0x25, 0xca, 0xf3, 0x25, 0xda, 0xd2, + 0x5c, 0xb8, 0x19, 0x61, 0x56, 0x4a, 0xa5, 0xaa, 0xfb, 0x41, 0xb8, 0xed, 0xf9, 0x9b, 0x55, 0x2f, + 0x14, 0x5b, 0x42, 0xdd, 0x85, 0xf7, 0x14, 0x04, 0x6b, 0x58, 0x68, 0x09, 0x06, 0x5b, 0x41, 0x18, + 0x47, 0xd3, 0x43, 0x6c, 0xb8, 0x9f, 0xc8, 0x39, 0x88, 0xf8, 0xd7, 0xd6, 0x82, 0x30, 0x4e, 0x3e, + 0x80, 0xfe, 0x8b, 0x30, 0xaf, 0x8e, 0xbe, 0x05, 0x8a, 0xc4, 0xdf, 0x9d, 0x1e, 0x66, 0x54, 0x66, + 0xb2, 0xa8, 0x2c, 0xfa, 0xbb, 0x77, 0x9d, 0x30, 0x39, 0xa5, 0x17, 0xfd, 0x5d, 0x4c, 0xeb, 0xa0, + 0xcf, 0x43, 0x59, 0x6e, 0xf1, 0x48, 0x68, 0xcc, 0x32, 0x97, 0x98, 0x3c, 0x18, 0x30, 0x79, 0xaf, + 0xed, 0x85, 0x64, 0x87, 0xf8, 0x71, 0x94, 0x9c, 0x69, 0x12, 0x1a, 0xe1, 0x84, 0x1a, 0xfa, 0xbc, + 0x54, 0xd3, 0xae, 0x04, 0x6d, 0x3f, 0x8e, 0xa6, 0xcb, 0xac, 0x7b, 0x99, 0x0f, 0x68, 0x77, 0x13, + 0xbc, 0xb4, 0x1e, 0x97, 0x57, 0xc6, 0x06, 0x29, 0x84, 0x61, 0xac, 0xe9, 0xed, 0x12, 0x9f, 0x44, + 0x51, 0x2d, 0x0c, 0xd6, 0xc9, 0x34, 0xb0, 0x9e, 0x9f, 0xcb, 0x7e, 0x57, 0x0a, 0xd6, 0xc9, 0xfc, + 0xd4, 0xc1, 0x7e, 0x65, 0xec, 0x96, 0x5e, 0x07, 0x9b, 0x24, 0xd0, 0x1d, 0x18, 0xa7, 0x72, 0x8d, + 0x97, 0x10, 0x1d, 0xe9, 0x45, 0x94, 0x49, 0x1f, 0xd8, 0xa8, 0x84, 0x53, 0x44, 0xd0, 0x1b, 0x50, + 0x6e, 0x7a, 0x1b, 0xa4, 0xb1, 0xd7, 0x68, 0x92, 0xe9, 0x51, 0x46, 0x31, 0x73, 0x5b, 0xdd, 0x92, + 0x48, 0x5c, 0x2e, 0x52, 0x7f, 0x71, 0x52, 0x1d, 0xdd, 0x85, 0xb3, 0x31, 0x09, 0x77, 0x3c, 0xdf, + 0xa1, 0xdb, 0x41, 0xc8, 0x0b, 0xec, 0x75, 0x6e, 0x8c, 0xad, 0xb7, 0x8b, 0x62, 0xe8, 0xce, 0xae, + 0x65, 0x62, 0xe1, 0x9c, 0xda, 0xe8, 0x36, 0x4c, 0xb0, 0x9d, 0x50, 0x6b, 0x37, 0x9b, 0xb5, 0xa0, + 0xe9, 0x35, 0xf6, 0xa6, 0xc7, 0x19, 0xc1, 0x4f, 0xc8, 0x7b, 0x61, 0xd9, 0x04, 0x1f, 0xee, 0x57, + 0x20, 0xf9, 0x87, 0xd3, 0xb5, 0xd1, 0x3a, 0x7b, 0x8e, 0x69, 0x87, 0x5e, 0xbc, 0x47, 0xd7, 0x2f, + 0x79, 0x10, 0x4f, 0x4f, 0x74, 0x15, 0x85, 0x75, 0x54, 0xf5, 0x66, 0xa3, 0x17, 0xe2, 0x34, 0x41, + 0xba, 0xb5, 0xa3, 0xd8, 0xf5, 0xfc, 0xe9, 0x49, 0x76, 0x62, 0xa8, 0x9d, 0x51, 0xa7, 0x85, 0x98, + 0xc3, 0xd8, 0x53, 0x0c, 0xfd, 0x71, 0x9b, 0x9e, 0xa0, 0x53, 0x0c, 0x31, 0x79, 0x8a, 0x91, 0x00, + 0x9c, 0xe0, 0x50, 0xa6, 0x26, 0x8e, 0xf7, 0xa6, 0x11, 0x43, 0x55, 0xdb, 0x65, 0x6d, 0xed, 0xf3, + 0x98, 0x96, 0xa3, 0x5b, 0x30, 0x4c, 0xfc, 0xdd, 0xa5, 0x30, 0xd8, 0x99, 0x3e, 0x95, 0xbf, 0x67, + 0x17, 0x39, 0x0a, 0x3f, 0xd0, 0x13, 0x01, 0x4f, 0x14, 0x63, 0x49, 0x02, 0x3d, 0x80, 0xe9, 0x8c, + 0x19, 0xe1, 0x13, 0x70, 0x9a, 0x4d, 0xc0, 0x6b, 0xa2, 0xee, 0xf4, 0x5a, 0x0e, 0xde, 0x61, 0x17, + 0x18, 0xce, 0xa5, 0x8e, 0xbe, 0x00, 0x63, 0x7c, 0x43, 0xf1, 0x77, 0xdc, 0x68, 0xfa, 0x0c, 0xfb, + 0x9a, 0x4b, 0xf9, 0x9b, 0x93, 0x23, 0xce, 0x9f, 0x11, 0x1d, 0x1a, 0xd3, 0x4b, 0x23, 0x6c, 0x52, + 0xb3, 0xd7, 0x61, 0x5c, 0x9d, 0x5b, 0x6c, 0xe9, 0xa0, 0x0a, 0x0c, 0x32, 0x6e, 0x47, 0xe8, 0xb7, + 0xca, 0x74, 0xa6, 0x18, 0x27, 0x84, 0x79, 0x39, 0x9b, 0x29, 0xef, 0x7d, 0x32, 0xbf, 0x17, 0x13, + 0x2e, 0x55, 0x17, 0xb5, 0x99, 0x92, 0x00, 0x9c, 0xe0, 0xd8, 0xff, 0x97, 0x73, 0x8d, 0xc9, 0xe1, + 0xd8, 0xc7, 0x75, 0xf0, 0x2c, 0x94, 0xb6, 0x82, 0x28, 0xa6, 0xd8, 0xac, 0x8d, 0xc1, 0x84, 0x4f, + 0xbc, 0x21, 0xca, 0xb1, 0xc2, 0x40, 0xaf, 0xc2, 0x58, 0x43, 0x6f, 0x40, 0xdc, 0x65, 0x6a, 0x08, + 0x8c, 0xd6, 0xb1, 0x89, 0x8b, 0x5e, 0x81, 0x12, 0xb3, 0xc2, 0x68, 0x04, 0x4d, 0xc1, 0x64, 0xc9, + 0x0b, 0xb9, 0x54, 0x13, 0xe5, 0x87, 0xda, 0x6f, 0xac, 0xb0, 0xd1, 0x65, 0x18, 0xa2, 0x5d, 0x58, + 0xae, 0x89, 0x5b, 0x44, 0xa9, 0x6a, 0x6e, 0xb0, 0x52, 0x2c, 0xa0, 0xf6, 0x5f, 0x2f, 0x68, 0xa3, + 0x4c, 0x25, 0x52, 0x82, 0x6a, 0x30, 0x7c, 0xdf, 0xf1, 0x62, 0xcf, 0xdf, 0x14, 0xec, 0xc2, 0xd3, + 0x5d, 0xaf, 0x14, 0x56, 0xe9, 0x1e, 0xaf, 0xc0, 0x2f, 0x3d, 0xf1, 0x07, 0x4b, 0x32, 0x94, 0x62, + 0xd8, 0xf6, 0x7d, 0x4a, 0xb1, 0xd0, 0x2f, 0x45, 0xcc, 0x2b, 0x70, 0x8a, 0xe2, 0x0f, 0x96, 0x64, + 0xd0, 0xdb, 0x00, 0x72, 0x59, 0x12, 0x57, 0x58, 0x3f, 0x3c, 0xdb, 0x9b, 0xe8, 0x9a, 0xaa, 0x33, + 0x3f, 0x4e, 0xaf, 0xd4, 0xe4, 0x3f, 0xd6, 0xe8, 0xd9, 0x31, 0x63, 0xab, 0x3a, 0x3b, 0x83, 0xbe, + 0x9d, 0x9e, 0x04, 0x4e, 0x18, 0x13, 0x77, 0x2e, 0x16, 0x83, 0xf3, 0xc9, 0xfe, 0x64, 0x8a, 0x35, + 0x6f, 0x87, 0xe8, 0xa7, 0x86, 0x20, 0x82, 0x13, 0x7a, 0xf6, 0x2f, 0x15, 0x61, 0x3a, 0xaf, 0xbb, + 0x74, 0xd1, 0x91, 0x07, 0x5e, 0xbc, 0x40, 0xb9, 0x21, 0xcb, 0x5c, 0x74, 0x8b, 0xa2, 0x1c, 0x2b, + 0x0c, 0x3a, 0xfb, 0x91, 0xb7, 0x29, 0x45, 0xc2, 0xc1, 0x64, 0xf6, 0xeb, 0xac, 0x14, 0x0b, 0x28, + 0xc5, 0x0b, 0x89, 0x13, 0x09, 0xf3, 0x1a, 0x6d, 0x95, 0x60, 0x56, 0x8a, 0x05, 0x54, 0xd7, 0x37, + 0x0d, 0xf4, 0xd0, 0x37, 0x19, 0x43, 0x34, 0x78, 0xbc, 0x43, 0x84, 0xbe, 0x08, 0xb0, 0xe1, 0xf9, + 0x5e, 0xb4, 0xc5, 0xa8, 0x0f, 0x1d, 0x99, 0xba, 0xe2, 0xa5, 0x96, 0x14, 0x15, 0xac, 0x51, 0x44, + 0x2f, 0xc1, 0x88, 0xda, 0x80, 0xcb, 0x55, 0xf6, 0xd6, 0xa8, 0xd9, 0x6e, 0x24, 0xa7, 0x51, 0x15, + 0xeb, 0x78, 0xf6, 0xbb, 0xe9, 0xf5, 0x22, 0x76, 0x80, 0x36, 0xbe, 0x56, 0xbf, 0xe3, 0x5b, 0xe8, + 0x3e, 0xbe, 0xf6, 0xaf, 0x17, 0x61, 0xc2, 0x68, 0xac, 0x1d, 0xf5, 0x71, 0x66, 0x5d, 0xa7, 0xf7, + 0x9c, 0x13, 0x13, 0xb1, 0xff, 0xec, 0xde, 0x5b, 0x45, 0xbf, 0x0b, 0xe9, 0x0e, 0xe0, 0xf5, 0xd1, + 0x17, 0xa1, 0xdc, 0x74, 0x22, 0xa6, 0xbb, 0x22, 0x62, 0xdf, 0xf5, 0x43, 0x2c, 0x91, 0x23, 0x9c, + 0x28, 0xd6, 0xae, 0x1a, 0x4e, 0x3b, 0x21, 0x49, 0x2f, 0x64, 0xca, 0xfb, 0x48, 0xfb, 0x2d, 0xd5, + 0x09, 0xca, 0x20, 0xed, 0x61, 0x0e, 0x43, 0xaf, 0xc0, 0x68, 0x48, 0xd8, 0xaa, 0x58, 0xa0, 0xac, + 0x1c, 0x5b, 0x66, 0x83, 0x09, 0xcf, 0x87, 0x35, 0x18, 0x36, 0x30, 0x13, 0x56, 0x7e, 0xa8, 0x0b, + 0x2b, 0xff, 0x34, 0x0c, 0xb3, 0x1f, 0x6a, 0x05, 0xa8, 0xd9, 0x58, 0xe6, 0xc5, 0x58, 0xc2, 0xd3, + 0x0b, 0xa6, 0xd4, 0xe7, 0x82, 0xf9, 0x24, 0x8c, 0x57, 0x1d, 0xb2, 0x13, 0xf8, 0x8b, 0xbe, 0xdb, + 0x0a, 0x3c, 0x3f, 0x46, 0xd3, 0x30, 0xc0, 0x6e, 0x07, 0xbe, 0xb7, 0x07, 0x28, 0x05, 0x3c, 0x40, + 0x19, 0x73, 0x7b, 0x13, 0xce, 0x54, 0x83, 0xfb, 0xfe, 0x7d, 0x27, 0x74, 0xe7, 0x6a, 0xcb, 0x9a, + 0x9c, 0xbb, 0x2a, 0xe5, 0x2c, 0x6e, 0x0f, 0x95, 0x79, 0xa6, 0x6a, 0x35, 0xf9, 0x5d, 0xbb, 0xe4, + 0x35, 0x49, 0x8e, 0x36, 0xe2, 0x6f, 0x15, 0x8c, 0x96, 0x12, 0x7c, 0xf5, 0x60, 0x64, 0xe5, 0x3e, + 0x18, 0xbd, 0x09, 0xa5, 0x0d, 0x8f, 0x34, 0x5d, 0x4c, 0x36, 0xc4, 0x12, 0x7b, 0x2a, 0xdf, 0xc4, + 0x63, 0x89, 0x62, 0x4a, 0xed, 0x13, 0x97, 0xd2, 0x96, 0x44, 0x65, 0xac, 0xc8, 0xa0, 0x6d, 0x98, + 0x94, 0x62, 0x80, 0x84, 0x8a, 0x05, 0xf7, 0x74, 0x37, 0xd9, 0xc2, 0x24, 0x7e, 0xfa, 0x60, 0xbf, + 0x32, 0x89, 0x53, 0x64, 0x70, 0x07, 0x61, 0x2a, 0x96, 0xed, 0xd0, 0xa3, 0x75, 0x80, 0x0d, 0x3f, + 0x13, 0xcb, 0x98, 0x84, 0xc9, 0x4a, 0xed, 0x1f, 0xb5, 0xe0, 0xb1, 0x8e, 0x91, 0x11, 0x92, 0xf6, + 0x31, 0xcf, 0x42, 0x5a, 0xf2, 0x2d, 0xf4, 0x96, 0x7c, 0xed, 0x9f, 0xb5, 0xe0, 0xf4, 0xe2, 0x4e, + 0x2b, 0xde, 0xab, 0x7a, 0xe6, 0xeb, 0xce, 0xcb, 0x30, 0xb4, 0x43, 0x5c, 0xaf, 0xbd, 0x23, 0x66, + 0xae, 0x22, 0x8f, 0x9f, 0x15, 0x56, 0x7a, 0xb8, 0x5f, 0x19, 0xab, 0xc7, 0x41, 0xe8, 0x6c, 0x12, + 0x5e, 0x80, 0x05, 0x3a, 0x3b, 0xc4, 0xbd, 0xf7, 0xc9, 0x2d, 0x6f, 0xc7, 0x93, 0x26, 0x3b, 0x5d, + 0x75, 0x67, 0xb3, 0x72, 0x40, 0x67, 0xdf, 0x6c, 0x3b, 0x7e, 0xec, 0xc5, 0x7b, 0xe2, 0x61, 0x46, + 0x12, 0xc1, 0x09, 0x3d, 0xfb, 0xeb, 0x16, 0x4c, 0xc8, 0x75, 0x3f, 0xe7, 0xba, 0x21, 0x89, 0x22, + 0x34, 0x03, 0x05, 0xaf, 0x25, 0x7a, 0x09, 0xa2, 0x97, 0x85, 0xe5, 0x1a, 0x2e, 0x78, 0x2d, 0x54, + 0x83, 0x32, 0xb7, 0xfc, 0x49, 0x16, 0x57, 0x5f, 0xf6, 0x43, 0xac, 0x07, 0x6b, 0xb2, 0x26, 0x4e, + 0x88, 0x48, 0x0e, 0x8e, 0x9d, 0x99, 0x45, 0xf3, 0xd5, 0xeb, 0x86, 0x28, 0xc7, 0x0a, 0x03, 0x5d, + 0x81, 0x92, 0x1f, 0xb8, 0xdc, 0x10, 0x8b, 0xdf, 0x7e, 0x6c, 0xc9, 0xae, 0x8a, 0x32, 0xac, 0xa0, + 0xf6, 0x0f, 0x5a, 0x30, 0x2a, 0xbf, 0xac, 0x4f, 0x66, 0x92, 0x6e, 0xad, 0x84, 0x91, 0x4c, 0xb6, + 0x16, 0x65, 0x06, 0x19, 0xc4, 0xe0, 0x01, 0x8b, 0x47, 0xe1, 0x01, 0xed, 0x1f, 0x29, 0xc0, 0xb8, + 0xec, 0x4e, 0xbd, 0xbd, 0x1e, 0x91, 0x18, 0xad, 0x41, 0xd9, 0xe1, 0x43, 0x4e, 0xe4, 0x8a, 0x7d, + 0x32, 0x5b, 0xf8, 0x30, 0xe6, 0x27, 0xb9, 0x96, 0xe7, 0x64, 0x6d, 0x9c, 0x10, 0x42, 0x4d, 0x98, + 0xf2, 0x83, 0x98, 0x1d, 0xd1, 0x0a, 0xde, 0xed, 0x09, 0x24, 0x4d, 0xfd, 0x9c, 0xa0, 0x3e, 0xb5, + 0x9a, 0xa6, 0x82, 0x3b, 0x09, 0xa3, 0x45, 0xa9, 0xf0, 0x28, 0xe6, 0x8b, 0x1b, 0xfa, 0x2c, 0x64, + 0xeb, 0x3b, 0xec, 0x5f, 0xb5, 0xa0, 0x2c, 0xd1, 0x4e, 0xe2, 0xb5, 0x6b, 0x05, 0x86, 0x23, 0x36, + 0x09, 0x72, 0x68, 0xec, 0x6e, 0x1d, 0xe7, 0xf3, 0x95, 0xdc, 0x3c, 0xfc, 0x7f, 0x84, 0x25, 0x0d, + 0xa6, 0xef, 0x56, 0xdd, 0xff, 0x88, 0xe8, 0xbb, 0x55, 0x7f, 0x72, 0x6e, 0x98, 0x3f, 0x60, 0x7d, + 0xd6, 0xc4, 0x5a, 0xca, 0x20, 0xb5, 0x42, 0xb2, 0xe1, 0x3d, 0x48, 0x33, 0x48, 0x35, 0x56, 0x8a, + 0x05, 0x14, 0xbd, 0x0d, 0xa3, 0x0d, 0xa9, 0xe8, 0x4c, 0x8e, 0x81, 0xcb, 0x5d, 0x95, 0xee, 0xea, + 0x7d, 0x86, 0x1b, 0x69, 0x2f, 0x68, 0xf5, 0xb1, 0x41, 0xcd, 0x7c, 0x6e, 0x2f, 0xf6, 0x7a, 0x6e, + 0x4f, 0xe8, 0xe6, 0x3f, 0x3e, 0xff, 0x98, 0x05, 0x43, 0x5c, 0x5d, 0xd6, 0x9f, 0x7e, 0x51, 0x7b, + 0xae, 0x4a, 0xc6, 0xee, 0x2e, 0x2d, 0x14, 0xcf, 0x4f, 0x68, 0x05, 0xca, 0xec, 0x07, 0x53, 0x1b, + 0x14, 0xf3, 0xad, 0xd3, 0x79, 0xab, 0x7a, 0x07, 0xef, 0xca, 0x6a, 0x38, 0xa1, 0x60, 0xff, 0x50, + 0x91, 0x1e, 0x55, 0x09, 0xaa, 0x71, 0x83, 0x5b, 0x8f, 0xee, 0x06, 0x2f, 0x3c, 0xaa, 0x1b, 0x7c, + 0x13, 0x26, 0x1a, 0xda, 0xe3, 0x56, 0x32, 0x93, 0x57, 0xba, 0x2e, 0x12, 0xed, 0x1d, 0x8c, 0xab, + 0x8c, 0x16, 0x4c, 0x22, 0x38, 0x4d, 0x15, 0x7d, 0x3b, 0x8c, 0xf2, 0x79, 0x16, 0xad, 0x70, 0x8b, + 0x85, 0x4f, 0xe4, 0xaf, 0x17, 0xbd, 0x09, 0xb6, 0x12, 0xeb, 0x5a, 0x75, 0x6c, 0x10, 0xb3, 0x7f, + 0xa9, 0x04, 0x83, 0x8b, 0xbb, 0xc4, 0x8f, 0x4f, 0xe0, 0x40, 0x6a, 0xc0, 0xb8, 0xe7, 0xef, 0x06, + 0xcd, 0x5d, 0xe2, 0x72, 0xf8, 0x51, 0x2e, 0xd7, 0xb3, 0x82, 0xf4, 0xf8, 0xb2, 0x41, 0x02, 0xa7, + 0x48, 0x3e, 0x0a, 0x09, 0xf3, 0x3a, 0x0c, 0xf1, 0xb9, 0x17, 0xe2, 0x65, 0xa6, 0x32, 0x98, 0x0d, + 0xa2, 0xd8, 0x05, 0x89, 0xf4, 0xcb, 0xb5, 0xcf, 0xa2, 0x3a, 0x7a, 0x17, 0xc6, 0x37, 0xbc, 0x30, + 0x8a, 0xa9, 0x68, 0x18, 0xc5, 0xce, 0x4e, 0xeb, 0x21, 0x24, 0x4a, 0x35, 0x0e, 0x4b, 0x06, 0x25, + 0x9c, 0xa2, 0x8c, 0x36, 0x61, 0x8c, 0x0a, 0x39, 0x49, 0x53, 0xc3, 0x47, 0x6e, 0x4a, 0xa9, 0x8c, + 0x6e, 0xe9, 0x84, 0xb0, 0x49, 0x97, 0x1e, 0x26, 0x0d, 0x26, 0x14, 0x95, 0x18, 0x47, 0xa1, 0x0e, + 0x13, 0x2e, 0x0d, 0x71, 0x18, 0x3d, 0x93, 0x98, 0xd9, 0x4a, 0xd9, 0x3c, 0x93, 0x34, 0xe3, 0x94, + 0x77, 0xa0, 0x4c, 0xe8, 0x10, 0x52, 0xc2, 0x42, 0x31, 0x7e, 0xb5, 0xbf, 0xbe, 0xae, 0x78, 0x8d, + 0x30, 0x30, 0x65, 0xf9, 0x45, 0x49, 0x09, 0x27, 0x44, 0xd1, 0x02, 0x0c, 0x45, 0x24, 0xf4, 0x48, + 0x24, 0x54, 0xe4, 0x5d, 0xa6, 0x91, 0xa1, 0x71, 0x8b, 0x4f, 0xfe, 0x1b, 0x8b, 0xaa, 0x74, 0x79, + 0x39, 0x4c, 0x1a, 0x62, 0x5a, 0x71, 0x6d, 0x79, 0xcd, 0xb1, 0x52, 0x2c, 0xa0, 0xe8, 0x0d, 0x18, + 0x0e, 0x49, 0x93, 0x29, 0x8b, 0xc6, 0xfa, 0x5f, 0xe4, 0x5c, 0xf7, 0xc4, 0xeb, 0x61, 0x49, 0x00, + 0xdd, 0x04, 0x14, 0x12, 0xca, 0x43, 0x78, 0xfe, 0xa6, 0x32, 0xe6, 0x10, 0xba, 0xee, 0xc7, 0x45, + 0xfb, 0xa7, 0x70, 0x82, 0x21, 0x8d, 0x6f, 0x71, 0x46, 0x35, 0x74, 0x1d, 0xa6, 0x54, 0xe9, 0xb2, + 0x1f, 0xc5, 0x8e, 0xdf, 0x20, 0x4c, 0xcd, 0x5d, 0x4e, 0xb8, 0x22, 0x9c, 0x46, 0xc0, 0x9d, 0x75, + 0xec, 0x9f, 0xa6, 0xec, 0x0c, 0x1d, 0xad, 0x13, 0xe0, 0x05, 0x5e, 0x37, 0x79, 0x81, 0x73, 0xb9, + 0x33, 0x97, 0xc3, 0x07, 0x1c, 0x58, 0x30, 0xa2, 0xcd, 0x6c, 0xb2, 0x66, 0xad, 0x2e, 0x6b, 0xb6, + 0x0d, 0x93, 0x74, 0xa5, 0xdf, 0x5e, 0x8f, 0x48, 0xb8, 0x4b, 0x5c, 0xb6, 0x30, 0x0b, 0x0f, 0xb7, + 0x30, 0xd5, 0x2b, 0xf3, 0xad, 0x14, 0x41, 0xdc, 0xd1, 0x04, 0x7a, 0x59, 0x6a, 0x4e, 0x8a, 0x86, + 0x91, 0x16, 0xd7, 0x8a, 0x1c, 0xee, 0x57, 0x26, 0xb5, 0x0f, 0xd1, 0x35, 0x25, 0xf6, 0x3b, 0xf2, + 0x1b, 0xd5, 0x6b, 0x7e, 0x43, 0x2d, 0x96, 0xd4, 0x6b, 0xbe, 0x5a, 0x0e, 0x38, 0xc1, 0xa1, 0x7b, + 0x94, 0x8a, 0x20, 0xe9, 0xd7, 0x7c, 0x2a, 0xa0, 0x60, 0x06, 0xb1, 0x5f, 0x00, 0x58, 0x7c, 0x40, + 0x1a, 0x7c, 0xa9, 0xeb, 0x0f, 0x90, 0x56, 0xfe, 0x03, 0xa4, 0xfd, 0x1f, 0x2d, 0x18, 0x5f, 0x5a, + 0x30, 0xc4, 0xc4, 0x59, 0x00, 0x2e, 0x1b, 0xdd, 0xbb, 0xb7, 0x2a, 0x75, 0xeb, 0x5c, 0x3d, 0xaa, + 0x4a, 0xb1, 0x86, 0x81, 0xce, 0x41, 0xb1, 0xd9, 0xf6, 0x85, 0xc8, 0x32, 0x7c, 0xb0, 0x5f, 0x29, + 0xde, 0x6a, 0xfb, 0x98, 0x96, 0x69, 0x16, 0x82, 0xc5, 0xbe, 0x2d, 0x04, 0x7b, 0x7a, 0xea, 0xa1, + 0x0a, 0x0c, 0xde, 0xbf, 0xef, 0xb9, 0xdc, 0x1f, 0x42, 0xe8, 0xfd, 0xef, 0xdd, 0x5b, 0xae, 0x46, + 0x98, 0x97, 0xdb, 0x5f, 0x29, 0xc2, 0xcc, 0x52, 0x93, 0x3c, 0xf8, 0x80, 0x3e, 0x21, 0xfd, 0xda, + 0x37, 0x1e, 0x8d, 0x5f, 0x3c, 0xaa, 0x0d, 0x6b, 0xef, 0xf1, 0xd8, 0x80, 0x61, 0xfe, 0x98, 0x2d, + 0x3d, 0x44, 0x5e, 0xcd, 0x6a, 0x3d, 0x7f, 0x40, 0x66, 0xf9, 0xa3, 0xb8, 0x30, 0x70, 0x57, 0x37, + 0xad, 0x28, 0xc5, 0x92, 0xf8, 0xcc, 0x67, 0x60, 0x54, 0xc7, 0x3c, 0x92, 0x35, 0xf9, 0x5f, 0x2a, + 0xc2, 0x24, 0xed, 0xc1, 0x23, 0x9d, 0x88, 0x3b, 0x9d, 0x13, 0x71, 0xdc, 0x16, 0xc5, 0xbd, 0x67, + 0xe3, 0xed, 0xf4, 0x6c, 0x3c, 0x9f, 0x37, 0x1b, 0x27, 0x3d, 0x07, 0xdf, 0x63, 0xc1, 0xa9, 0xa5, + 0x66, 0xd0, 0xd8, 0x4e, 0x59, 0xfd, 0xbe, 0x04, 0x23, 0xf4, 0x1c, 0x8f, 0x0c, 0x87, 0x34, 0xc3, + 0x45, 0x51, 0x80, 0xb0, 0x8e, 0xa7, 0x55, 0xbb, 0x73, 0x67, 0xb9, 0x9a, 0xe5, 0xd9, 0x28, 0x40, + 0x58, 0xc7, 0xb3, 0xbf, 0x66, 0xc1, 0x85, 0xeb, 0x0b, 0x8b, 0xc9, 0x52, 0xec, 0x70, 0xae, 0xa4, + 0x52, 0xa0, 0xab, 0x75, 0x25, 0x91, 0x02, 0xab, 0xac, 0x17, 0x02, 0xfa, 0x51, 0x71, 0x1c, 0xfe, + 0x29, 0x0b, 0x4e, 0x5d, 0xf7, 0x62, 0x7a, 0x2d, 0xa7, 0xdd, 0xfc, 0xe8, 0xbd, 0x1c, 0x79, 0x71, + 0x10, 0xee, 0xa5, 0xdd, 0xfc, 0xb0, 0x82, 0x60, 0x0d, 0x8b, 0xb7, 0xbc, 0xeb, 0x31, 0x33, 0xaa, + 0x82, 0xa9, 0x8a, 0xc2, 0xa2, 0x1c, 0x2b, 0x0c, 0xfa, 0x61, 0xae, 0x17, 0x32, 0x51, 0x62, 0x4f, + 0x9c, 0xb0, 0xea, 0xc3, 0xaa, 0x12, 0x80, 0x13, 0x1c, 0xfb, 0x8f, 0x2c, 0xa8, 0x5c, 0x6f, 0xb6, + 0xa3, 0x98, 0x84, 0x1b, 0x51, 0xce, 0xe9, 0xf8, 0x02, 0x94, 0x89, 0x14, 0xdc, 0x45, 0xaf, 0x15, + 0xab, 0xa9, 0x24, 0x7a, 0xee, 0x6d, 0xa8, 0xf0, 0xfa, 0xf0, 0x21, 0x38, 0x9a, 0x11, 0xf8, 0x12, + 0x20, 0xa2, 0xb7, 0xa5, 0xbb, 0x5f, 0x32, 0x3f, 0xae, 0xc5, 0x0e, 0x28, 0xce, 0xa8, 0x61, 0xff, + 0xa8, 0x05, 0x67, 0xd4, 0x07, 0x7f, 0xe4, 0x3e, 0xd3, 0xfe, 0xf9, 0x02, 0x8c, 0xdd, 0x58, 0x5b, + 0xab, 0x5d, 0x27, 0xb1, 0xb8, 0xb6, 0x7b, 0xeb, 0xd6, 0xb1, 0xa6, 0x22, 0xec, 0x26, 0x05, 0xb6, + 0x63, 0xaf, 0x39, 0xcb, 0xbd, 0xf8, 0x67, 0x97, 0xfd, 0xf8, 0x76, 0x58, 0x8f, 0x43, 0xcf, 0xdf, + 0xcc, 0x54, 0x2a, 0x4a, 0xe6, 0xa2, 0x98, 0xc7, 0x5c, 0xa0, 0x17, 0x60, 0x88, 0x85, 0x11, 0x90, + 0x93, 0xf0, 0xb8, 0x12, 0xa2, 0x58, 0xe9, 0xe1, 0x7e, 0xa5, 0x7c, 0x07, 0x2f, 0xf3, 0x3f, 0x58, + 0xa0, 0xa2, 0x3b, 0x30, 0xb2, 0x15, 0xc7, 0xad, 0x1b, 0xc4, 0x71, 0x49, 0x28, 0x8f, 0xc3, 0x8b, + 0x59, 0xc7, 0x21, 0x1d, 0x04, 0x8e, 0x96, 0x9c, 0x20, 0x49, 0x59, 0x84, 0x75, 0x3a, 0x76, 0x1d, + 0x20, 0x81, 0x1d, 0x93, 0x42, 0xc5, 0xfe, 0x7d, 0x0b, 0x86, 0xb9, 0x47, 0x67, 0x88, 0x5e, 0x83, + 0x01, 0xf2, 0x80, 0x34, 0x04, 0xab, 0x9c, 0xd9, 0xe1, 0x84, 0xd3, 0xe2, 0xcf, 0x03, 0xf4, 0x3f, + 0x66, 0xb5, 0xd0, 0x0d, 0x18, 0xa6, 0xbd, 0xbd, 0xae, 0xdc, 0x5b, 0x9f, 0xc8, 0xfb, 0x62, 0x35, + 0xed, 0x9c, 0x39, 0x13, 0x45, 0x58, 0x56, 0x67, 0xaa, 0xee, 0x46, 0xab, 0x4e, 0x4f, 0xec, 0xb8, + 0x1b, 0x63, 0xb1, 0xb6, 0x50, 0xe3, 0x48, 0x82, 0x1a, 0x57, 0x75, 0xcb, 0x42, 0x9c, 0x10, 0xb1, + 0xd7, 0xa0, 0x4c, 0x27, 0x75, 0xae, 0xe9, 0x39, 0xdd, 0xb5, 0xec, 0xcf, 0x40, 0x59, 0x6a, 0xbc, + 0x23, 0xe1, 0xc9, 0xc5, 0xa8, 0x4a, 0x85, 0x78, 0x84, 0x13, 0xb8, 0xbd, 0x01, 0xa7, 0x99, 0xa9, + 0x83, 0x13, 0x6f, 0x19, 0x7b, 0xac, 0xf7, 0x62, 0x7e, 0x56, 0x48, 0x9e, 0x7c, 0x66, 0xa6, 0x35, + 0x67, 0x89, 0x51, 0x49, 0x31, 0x91, 0x42, 0xed, 0x3f, 0x1c, 0x80, 0xc7, 0x97, 0xeb, 0xf9, 0xce, + 0xbe, 0xaf, 0xc0, 0x28, 0xe7, 0x4b, 0xe9, 0xd2, 0x76, 0x9a, 0xa2, 0x5d, 0xf5, 0x10, 0xb8, 0xa6, + 0xc1, 0xb0, 0x81, 0x89, 0x2e, 0x40, 0xd1, 0x7b, 0xcf, 0x4f, 0xdb, 0x1d, 0x2f, 0xbf, 0xb9, 0x8a, + 0x69, 0x39, 0x05, 0x53, 0x16, 0x97, 0xdf, 0x1d, 0x0a, 0xac, 0xd8, 0xdc, 0xd7, 0x61, 0xdc, 0x8b, + 0x1a, 0x91, 0xb7, 0xec, 0xd3, 0x73, 0x46, 0x3b, 0xa9, 0x94, 0x56, 0x84, 0x76, 0x5a, 0x41, 0x71, + 0x0a, 0x5b, 0xbb, 0xc8, 0x06, 0xfb, 0x66, 0x93, 0x7b, 0xba, 0x36, 0x51, 0x09, 0xa0, 0xc5, 0xbe, + 0x2e, 0x62, 0x56, 0x7c, 0x42, 0x02, 0xe0, 0x1f, 0x1c, 0x61, 0x09, 0xa3, 0x22, 0x67, 0x63, 0xcb, + 0x69, 0xcd, 0xb5, 0xe3, 0xad, 0xaa, 0x17, 0x35, 0x82, 0x5d, 0x12, 0xee, 0x31, 0x6d, 0x41, 0x29, + 0x11, 0x39, 0x15, 0x60, 0xe1, 0xc6, 0x5c, 0x8d, 0x62, 0xe2, 0xce, 0x3a, 0x26, 0x1b, 0x0c, 0xc7, + 0xc1, 0x06, 0xcf, 0xc1, 0x84, 0x6c, 0xa6, 0x4e, 0x22, 0x76, 0x29, 0x8e, 0xb0, 0x8e, 0x29, 0xdb, + 0x62, 0x51, 0xac, 0xba, 0x95, 0xc6, 0x47, 0x2f, 0xc3, 0x98, 0xe7, 0x7b, 0xb1, 0xe7, 0xc4, 0x41, + 0xc8, 0x58, 0x0a, 0xae, 0x18, 0x60, 0xa6, 0x7b, 0xcb, 0x3a, 0x00, 0x9b, 0x78, 0xf6, 0x7f, 0x1d, + 0x80, 0x29, 0x36, 0x6d, 0xdf, 0x5c, 0x61, 0x1f, 0x99, 0x15, 0x76, 0xa7, 0x73, 0x85, 0x1d, 0x07, + 0x7f, 0xff, 0x61, 0x2e, 0xb3, 0x77, 0xa1, 0xac, 0x8c, 0x9f, 0xa5, 0xf7, 0x83, 0x95, 0xe3, 0xfd, + 0xd0, 0x9b, 0xfb, 0x90, 0xef, 0xd6, 0xc5, 0xcc, 0x77, 0xeb, 0xbf, 0x63, 0x41, 0x62, 0x03, 0x8a, + 0x6e, 0x40, 0xb9, 0x15, 0x30, 0x3b, 0x8b, 0x50, 0x1a, 0x2f, 0x3d, 0x9e, 0x79, 0x51, 0xf1, 0x4b, + 0x91, 0x8f, 0x5f, 0x4d, 0xd6, 0xc0, 0x49, 0x65, 0x34, 0x0f, 0xc3, 0xad, 0x90, 0xd4, 0x63, 0xe6, + 0xf3, 0xdb, 0x93, 0x0e, 0x5f, 0x23, 0x1c, 0x1f, 0xcb, 0x8a, 0xf6, 0x2f, 0x58, 0x00, 0xfc, 0x69, + 0xd8, 0xf1, 0x37, 0xc9, 0x09, 0xa8, 0xbb, 0xab, 0x30, 0x10, 0xb5, 0x48, 0xa3, 0x9b, 0x05, 0x4c, + 0xd2, 0x9f, 0x7a, 0x8b, 0x34, 0x92, 0x01, 0xa7, 0xff, 0x30, 0xab, 0x6d, 0x7f, 0x2f, 0xc0, 0x78, + 0x82, 0xb6, 0x1c, 0x93, 0x1d, 0xf4, 0x9c, 0xe1, 0x03, 0x78, 0x2e, 0xe5, 0x03, 0x58, 0x66, 0xd8, + 0x9a, 0x66, 0xf5, 0x5d, 0x28, 0xee, 0x38, 0x0f, 0x84, 0xea, 0xec, 0x99, 0xee, 0xdd, 0xa0, 0xf4, + 0x67, 0x57, 0x9c, 0x07, 0x5c, 0x48, 0x7c, 0x46, 0x2e, 0x90, 0x15, 0xe7, 0xc1, 0x21, 0xb7, 0x73, + 0x61, 0x87, 0xd4, 0x2d, 0x2f, 0x8a, 0xbf, 0xf4, 0x5f, 0x92, 0xff, 0x6c, 0xd9, 0xd1, 0x46, 0x58, + 0x5b, 0x9e, 0x2f, 0x1e, 0x4a, 0xfb, 0x6a, 0xcb, 0xf3, 0xd3, 0x6d, 0x79, 0x7e, 0x1f, 0x6d, 0x79, + 0x3e, 0x7a, 0x1f, 0x86, 0x85, 0x51, 0x82, 0xf0, 0xb9, 0xbf, 0xda, 0x47, 0x7b, 0xc2, 0xa6, 0x81, + 0xb7, 0x79, 0x55, 0x0a, 0xc1, 0xa2, 0xb4, 0x67, 0xbb, 0xb2, 0x41, 0xf4, 0x37, 0x2d, 0x18, 0x17, + 0xbf, 0x31, 0x79, 0xaf, 0x4d, 0xa2, 0x58, 0xf0, 0x9e, 0x9f, 0xee, 0xbf, 0x0f, 0xa2, 0x22, 0xef, + 0xca, 0xa7, 0xe5, 0x31, 0x6b, 0x02, 0x7b, 0xf6, 0x28, 0xd5, 0x0b, 0xf4, 0x8f, 0x2c, 0x38, 0xbd, + 0xe3, 0x3c, 0xe0, 0x2d, 0xf2, 0x32, 0xec, 0xc4, 0x5e, 0x20, 0x8c, 0xf5, 0x5f, 0xeb, 0x6f, 0xfa, + 0x3b, 0xaa, 0xf3, 0x4e, 0x4a, 0xbb, 0xde, 0xd3, 0x59, 0x28, 0x3d, 0xbb, 0x9a, 0xd9, 0xaf, 0x99, + 0x0d, 0x28, 0xc9, 0xf5, 0x96, 0xa1, 0x6a, 0xa8, 0xea, 0x8c, 0xf5, 0x91, 0x6d, 0x42, 0x74, 0x47, + 0x3c, 0xda, 0x8e, 0x58, 0x6b, 0x8f, 0xb4, 0x9d, 0x77, 0x61, 0x54, 0x5f, 0x63, 0x8f, 0xb4, 0xad, + 0xf7, 0xe0, 0x54, 0xc6, 0x5a, 0x7a, 0xa4, 0x4d, 0xde, 0x87, 0x73, 0xb9, 0xeb, 0xe3, 0x51, 0x36, + 0x6c, 0xff, 0xbc, 0xa5, 0x9f, 0x83, 0x27, 0xf0, 0xe6, 0xb0, 0x60, 0xbe, 0x39, 0x5c, 0xec, 0xbe, + 0x73, 0x72, 0x1e, 0x1e, 0xde, 0xd6, 0x3b, 0x4d, 0x4f, 0x75, 0xf4, 0x06, 0x0c, 0x35, 0x69, 0x89, + 0xb4, 0x86, 0xb1, 0x7b, 0xef, 0xc8, 0x84, 0x97, 0x62, 0xe5, 0x11, 0x16, 0x14, 0xec, 0x5f, 0xb6, + 0x60, 0xe0, 0x04, 0x46, 0x02, 0x9b, 0x23, 0xf1, 0x5c, 0x2e, 0x69, 0x11, 0x0e, 0x70, 0x16, 0x3b, + 0xf7, 0x17, 0x1f, 0xc4, 0xc4, 0x8f, 0x98, 0xa8, 0x98, 0x39, 0x30, 0xdf, 0x01, 0xa7, 0x6e, 0x05, + 0x8e, 0x3b, 0xef, 0x34, 0x1d, 0xbf, 0x41, 0xc2, 0x65, 0x7f, 0xb3, 0xa7, 0x59, 0x96, 0x6e, 0x44, + 0x55, 0xe8, 0x65, 0x44, 0x65, 0x6f, 0x01, 0xd2, 0x1b, 0x10, 0x86, 0xab, 0x18, 0x86, 0x3d, 0xde, + 0x94, 0x18, 0xfe, 0xa7, 0xb2, 0xb9, 0xbb, 0x8e, 0x9e, 0x69, 0x26, 0x99, 0xbc, 0x00, 0x4b, 0x42, + 0xf6, 0x2b, 0x90, 0xe9, 0xac, 0xd6, 0x5b, 0x6d, 0x60, 0x7f, 0x1e, 0xa6, 0x58, 0xcd, 0x23, 0x8a, + 0xb4, 0x76, 0x4a, 0x2b, 0x99, 0x11, 0x99, 0xc6, 0xfe, 0xb2, 0x05, 0x13, 0xab, 0xa9, 0x80, 0x1d, + 0x97, 0xd9, 0x03, 0x68, 0x86, 0x32, 0xbc, 0xce, 0x4a, 0xb1, 0x80, 0x1e, 0xbb, 0x0e, 0xea, 0xcf, + 0x2d, 0x48, 0xfc, 0x47, 0x4f, 0x80, 0xf1, 0x5a, 0x30, 0x18, 0xaf, 0x4c, 0xdd, 0x88, 0xea, 0x4e, + 0x1e, 0xdf, 0x85, 0x6e, 0xaa, 0x60, 0x09, 0x5d, 0xd4, 0x22, 0x09, 0x19, 0xee, 0x5a, 0x3f, 0x6e, + 0x46, 0x54, 0x90, 0xe1, 0x13, 0x98, 0xed, 0x94, 0xc2, 0xfd, 0x88, 0xd8, 0x4e, 0xa9, 0xfe, 0xe4, + 0xec, 0xd0, 0x9a, 0xd6, 0x65, 0x76, 0x72, 0x7d, 0x2b, 0xb3, 0x85, 0x77, 0x9a, 0xde, 0xfb, 0x44, + 0x45, 0x7c, 0xa9, 0x08, 0xdb, 0x76, 0x51, 0x7a, 0xb8, 0x5f, 0x19, 0x53, 0xff, 0x78, 0x84, 0xb9, + 0xa4, 0x8a, 0x7d, 0x03, 0x26, 0x52, 0x03, 0x86, 0x5e, 0x82, 0xc1, 0xd6, 0x96, 0x13, 0x91, 0x94, + 0xbd, 0xe8, 0x60, 0x8d, 0x16, 0x1e, 0xee, 0x57, 0xc6, 0x55, 0x05, 0x56, 0x82, 0x39, 0xb6, 0xfd, + 0x3f, 0x2d, 0x18, 0x58, 0x0d, 0xdc, 0x93, 0x58, 0x4c, 0xaf, 0x1b, 0x8b, 0xe9, 0x7c, 0x5e, 0x7c, + 0xce, 0xdc, 0x75, 0xb4, 0x94, 0x5a, 0x47, 0x17, 0x73, 0x29, 0x74, 0x5f, 0x42, 0x3b, 0x30, 0xc2, + 0xa2, 0x7e, 0x0a, 0xfb, 0xd5, 0x17, 0x0c, 0x19, 0xa0, 0x92, 0x92, 0x01, 0x26, 0x34, 0x54, 0x4d, + 0x12, 0x78, 0x1a, 0x86, 0x85, 0x0d, 0x65, 0xda, 0xea, 0x5f, 0xe0, 0x62, 0x09, 0xb7, 0x7f, 0xac, + 0x08, 0x46, 0x94, 0x51, 0xf4, 0xab, 0x16, 0xcc, 0x86, 0xdc, 0x8d, 0xd2, 0xad, 0xb6, 0x43, 0xcf, + 0xdf, 0xac, 0x37, 0xb6, 0x88, 0xdb, 0x6e, 0x7a, 0xfe, 0xe6, 0xf2, 0xa6, 0x1f, 0xa8, 0xe2, 0xc5, + 0x07, 0xa4, 0xd1, 0x66, 0x0f, 0x21, 0x3d, 0x42, 0x9a, 0x2a, 0x1b, 0xa5, 0x6b, 0x07, 0xfb, 0x95, + 0x59, 0x7c, 0x24, 0xda, 0xf8, 0x88, 0x7d, 0x41, 0x5f, 0xb3, 0xe0, 0x2a, 0x0f, 0xbe, 0xd9, 0x7f, + 0xff, 0xbb, 0x48, 0x4c, 0x35, 0x49, 0x2a, 0x21, 0xb2, 0x46, 0xc2, 0x9d, 0xf9, 0x97, 0xc5, 0x80, + 0x5e, 0xad, 0x1d, 0xad, 0x2d, 0x7c, 0xd4, 0xce, 0xd9, 0xff, 0xaa, 0x08, 0x63, 0xc2, 0x83, 0x5f, + 0x84, 0x86, 0x79, 0xc9, 0x58, 0x12, 0x4f, 0xa4, 0x96, 0xc4, 0x94, 0x81, 0x7c, 0x3c, 0x51, 0x61, + 0x22, 0x98, 0x6a, 0x3a, 0x51, 0x7c, 0x83, 0x38, 0x61, 0xbc, 0x4e, 0x1c, 0x6e, 0xbb, 0x53, 0x3c, + 0xb2, 0x9d, 0x91, 0x52, 0xd1, 0xdc, 0x4a, 0x13, 0xc3, 0x9d, 0xf4, 0xd1, 0x2e, 0x20, 0x66, 0x80, + 0x14, 0x3a, 0x7e, 0xc4, 0xbf, 0xc5, 0x13, 0x6f, 0x06, 0x47, 0x6b, 0x75, 0x46, 0xb4, 0x8a, 0x6e, + 0x75, 0x50, 0xc3, 0x19, 0x2d, 0x68, 0x86, 0x65, 0x83, 0xfd, 0x1a, 0x96, 0x0d, 0xf5, 0x70, 0xad, + 0xf1, 0x61, 0xb2, 0x23, 0x08, 0xc3, 0x5b, 0x50, 0x56, 0x06, 0x80, 0xe2, 0xd0, 0xe9, 0x1e, 0xcb, + 0x24, 0x4d, 0x81, 0xab, 0x51, 0x12, 0xe3, 0xd3, 0x84, 0x9c, 0xfd, 0x8f, 0x0b, 0x46, 0x83, 0x7c, + 0x12, 0x57, 0xa1, 0xe4, 0x44, 0x91, 0xb7, 0xe9, 0x13, 0x57, 0xec, 0xd8, 0x8f, 0xe7, 0xed, 0x58, + 0xa3, 0x19, 0x66, 0x84, 0x39, 0x27, 0x6a, 0x62, 0x45, 0x03, 0xdd, 0xe0, 0x16, 0x52, 0xbb, 0x92, + 0xe7, 0xef, 0x8f, 0x1a, 0x48, 0x1b, 0xaa, 0x5d, 0x82, 0x45, 0x7d, 0xf4, 0x05, 0x6e, 0xc2, 0x76, + 0xd3, 0x0f, 0xee, 0xfb, 0xd7, 0x83, 0x40, 0xba, 0xdd, 0xf5, 0x47, 0x70, 0x4a, 0x1a, 0xae, 0xa9, + 0xea, 0xd8, 0xa4, 0xd6, 0x5f, 0xa0, 0xa2, 0xef, 0x84, 0x53, 0x94, 0xb4, 0xe9, 0x3c, 0x13, 0x21, + 0x02, 0x13, 0x22, 0x3c, 0x84, 0x2c, 0x13, 0x63, 0x97, 0xc9, 0xce, 0x9b, 0xb5, 0x13, 0xa5, 0xdf, + 0x4d, 0x93, 0x04, 0x4e, 0xd3, 0xb4, 0x7f, 0xd2, 0x02, 0x66, 0xf6, 0x7f, 0x02, 0x2c, 0xc3, 0x67, + 0x4d, 0x96, 0x61, 0x3a, 0x6f, 0x90, 0x73, 0xb8, 0x85, 0x17, 0xf9, 0xca, 0xaa, 0x85, 0xc1, 0x83, + 0x3d, 0x61, 0x3e, 0xd0, 0x9b, 0x93, 0xb5, 0xff, 0x8f, 0xc5, 0x0f, 0x31, 0xe5, 0x89, 0x8f, 0xbe, + 0x0b, 0x4a, 0x0d, 0xa7, 0xe5, 0x34, 0x78, 0x48, 0xec, 0x5c, 0xad, 0x8e, 0x51, 0x69, 0x76, 0x41, + 0xd4, 0xe0, 0x5a, 0x0a, 0x19, 0x66, 0xa4, 0x24, 0x8b, 0x7b, 0x6a, 0x26, 0x54, 0x93, 0x33, 0xdb, + 0x30, 0x66, 0x10, 0x7b, 0xa4, 0x22, 0xed, 0x77, 0xf1, 0x2b, 0x56, 0x85, 0xc5, 0xd9, 0x81, 0x29, + 0x5f, 0xfb, 0x4f, 0x2f, 0x14, 0x29, 0xa6, 0x7c, 0xbc, 0xd7, 0x25, 0xca, 0x6e, 0x1f, 0xcd, 0xad, + 0x21, 0x45, 0x06, 0x77, 0x52, 0xb6, 0x7f, 0xdc, 0x82, 0xc7, 0x74, 0x44, 0x2d, 0x48, 0x42, 0x2f, + 0x3d, 0x71, 0x15, 0x4a, 0x41, 0x8b, 0x84, 0x4e, 0x1c, 0x84, 0xe2, 0xd6, 0xb8, 0x22, 0x07, 0xfd, + 0xb6, 0x28, 0x3f, 0x14, 0x01, 0x25, 0x25, 0x75, 0x59, 0x8e, 0x55, 0x4d, 0x2a, 0xc7, 0xb0, 0xc1, + 0x88, 0x44, 0x00, 0x0b, 0x76, 0x06, 0xb0, 0x27, 0xd3, 0x08, 0x0b, 0x88, 0xfd, 0x87, 0x16, 0x5f, + 0x58, 0x7a, 0xd7, 0xd1, 0x7b, 0x30, 0xb9, 0xe3, 0xc4, 0x8d, 0xad, 0xc5, 0x07, 0xad, 0x90, 0xab, + 0xc7, 0xe5, 0x38, 0x3d, 0xd3, 0x6b, 0x9c, 0xb4, 0x8f, 0x4c, 0xac, 0xf2, 0x56, 0x52, 0xc4, 0x70, + 0x07, 0x79, 0xb4, 0x0e, 0x23, 0xac, 0x8c, 0x99, 0x7f, 0x47, 0xdd, 0x58, 0x83, 0xbc, 0xd6, 0xd4, + 0xab, 0xf3, 0x4a, 0x42, 0x07, 0xeb, 0x44, 0xed, 0x2f, 0x15, 0xf9, 0x6e, 0x67, 0xdc, 0xf6, 0xd3, + 0x30, 0xdc, 0x0a, 0xdc, 0x85, 0xe5, 0x2a, 0x16, 0xb3, 0xa0, 0xae, 0x91, 0x1a, 0x2f, 0xc6, 0x12, + 0x8e, 0x5e, 0x05, 0x20, 0x0f, 0x62, 0x12, 0xfa, 0x4e, 0x53, 0x59, 0xc9, 0x28, 0xbb, 0xd0, 0x6a, + 0xb0, 0x1a, 0xc4, 0x77, 0x22, 0xf2, 0x1d, 0x8b, 0x0a, 0x05, 0x6b, 0xe8, 0xe8, 0x1a, 0x40, 0x2b, + 0x0c, 0x76, 0x3d, 0x97, 0xf9, 0x13, 0x16, 0x4d, 0x1b, 0x92, 0x9a, 0x82, 0x60, 0x0d, 0x0b, 0xbd, + 0x0a, 0x63, 0x6d, 0x3f, 0xe2, 0x1c, 0x8a, 0xb3, 0x2e, 0xc2, 0x31, 0x96, 0x12, 0xeb, 0x86, 0x3b, + 0x3a, 0x10, 0x9b, 0xb8, 0x68, 0x0e, 0x86, 0x62, 0x87, 0xd9, 0x44, 0x0c, 0xe6, 0x1b, 0x73, 0xae, + 0x51, 0x0c, 0x3d, 0x20, 0x33, 0xad, 0x80, 0x45, 0x45, 0xf4, 0x96, 0x74, 0xce, 0xe0, 0x67, 0xbd, + 0xb0, 0xa2, 0xee, 0xef, 0x5e, 0xd0, 0x5c, 0x33, 0x84, 0x75, 0xb6, 0x41, 0xcb, 0xfe, 0x5a, 0x19, + 0x20, 0x61, 0xc7, 0xd1, 0xfb, 0x1d, 0xe7, 0xd1, 0xb3, 0xdd, 0x19, 0xf8, 0xe3, 0x3b, 0x8c, 0xd0, + 0xf7, 0x59, 0x30, 0xe2, 0x34, 0x9b, 0x41, 0xc3, 0x89, 0xd9, 0x28, 0x17, 0xba, 0x9f, 0x87, 0xa2, + 0xfd, 0xb9, 0xa4, 0x06, 0xef, 0xc2, 0x0b, 0x72, 0xe1, 0x69, 0x90, 0x9e, 0xbd, 0xd0, 0x1b, 0x46, + 0x9f, 0x92, 0x52, 0x1a, 0x5f, 0x1e, 0x33, 0x69, 0x29, 0xad, 0xcc, 0x8e, 0x7e, 0x4d, 0x40, 0x43, + 0x77, 0x8c, 0x48, 0x7b, 0x03, 0xf9, 0x41, 0x27, 0x0c, 0xae, 0xb4, 0x57, 0x90, 0x3d, 0x54, 0xd3, + 0xbd, 0xc9, 0x06, 0xf3, 0x23, 0xb3, 0x68, 0xe2, 0x4f, 0x0f, 0x4f, 0xb2, 0x77, 0x61, 0xc2, 0x35, + 0xef, 0x76, 0xb1, 0x9a, 0x9e, 0xca, 0xa3, 0x9b, 0x62, 0x05, 0x92, 0xdb, 0x3c, 0x05, 0xc0, 0x69, + 0xc2, 0xa8, 0xc6, 0xfd, 0xfa, 0x96, 0xfd, 0x8d, 0x40, 0x58, 0xe3, 0xdb, 0xb9, 0x73, 0xb9, 0x17, + 0xc5, 0x64, 0x87, 0x62, 0x26, 0x97, 0xf6, 0xaa, 0xa8, 0x8b, 0x15, 0x15, 0xf4, 0x06, 0x0c, 0x31, + 0xc7, 0xe0, 0x68, 0xba, 0x94, 0xaf, 0x4c, 0x34, 0x63, 0x5a, 0x24, 0x9b, 0x8a, 0xfd, 0x8d, 0xb0, + 0xa0, 0x80, 0x6e, 0xc8, 0xc0, 0x37, 0xd1, 0xb2, 0x7f, 0x27, 0x22, 0x2c, 0xf0, 0x4d, 0x79, 0xfe, + 0xe3, 0x49, 0x4c, 0x1b, 0x5e, 0x9e, 0x99, 0x7a, 0xc1, 0xa8, 0x49, 0x99, 0x23, 0xf1, 0x5f, 0x66, + 0x74, 0x98, 0x86, 0xfc, 0xee, 0x99, 0x59, 0x1f, 0x92, 0xe1, 0xbc, 0x6b, 0x92, 0xc0, 0x69, 0x9a, + 0x94, 0xd1, 0xe4, 0x3b, 0x57, 0xd8, 0xf3, 0xf7, 0xda, 0xff, 0x5c, 0xbe, 0x66, 0x97, 0x0c, 0x2f, + 0xc1, 0xa2, 0xfe, 0x89, 0xde, 0xfa, 0x33, 0x3e, 0x4c, 0xa6, 0xb7, 0xe8, 0x23, 0xe5, 0x32, 0x7e, + 0x7f, 0x00, 0xc6, 0xcd, 0x25, 0x85, 0xae, 0x42, 0x59, 0x10, 0x51, 0x51, 0x58, 0xd5, 0x2e, 0x59, + 0x91, 0x00, 0x9c, 0xe0, 0xb0, 0xe0, 0xbb, 0xac, 0xba, 0x66, 0x87, 0x99, 0x04, 0xdf, 0x55, 0x10, + 0xac, 0x61, 0x51, 0x79, 0x69, 0x3d, 0x08, 0x62, 0x75, 0xa9, 0xa8, 0x75, 0x37, 0xcf, 0x4a, 0xb1, + 0x80, 0xd2, 0xcb, 0x64, 0x9b, 0x84, 0x3e, 0x69, 0x9a, 0xc1, 0xdd, 0xd4, 0x65, 0x72, 0x53, 0x07, + 0x62, 0x13, 0x97, 0xde, 0x92, 0x41, 0xc4, 0x16, 0xb2, 0x90, 0xca, 0x12, 0xbb, 0xd6, 0x3a, 0x77, + 0xb1, 0x97, 0x70, 0xf4, 0x79, 0x78, 0x4c, 0x79, 0xc4, 0x63, 0xae, 0xa8, 0x96, 0x2d, 0x0e, 0x19, + 0x4a, 0x94, 0xc7, 0x16, 0xb2, 0xd1, 0x70, 0x5e, 0x7d, 0xf4, 0x3a, 0x8c, 0x0b, 0xce, 0x5d, 0x52, + 0x1c, 0x36, 0x6d, 0x27, 0x6e, 0x1a, 0x50, 0x9c, 0xc2, 0x96, 0xe1, 0xe9, 0x18, 0xf3, 0x2c, 0x29, + 0x94, 0x3a, 0xc3, 0xd3, 0xe9, 0x70, 0xdc, 0x51, 0x03, 0xcd, 0xc1, 0x04, 0x67, 0xad, 0x3c, 0x7f, + 0x93, 0xcf, 0x89, 0x70, 0xb7, 0x51, 0x5b, 0xea, 0xb6, 0x09, 0xc6, 0x69, 0x7c, 0xf4, 0x0a, 0x8c, + 0x3a, 0x61, 0x63, 0xcb, 0x8b, 0x49, 0x23, 0x6e, 0x87, 0xdc, 0x0f, 0x47, 0x33, 0x3e, 0x99, 0xd3, + 0x60, 0xd8, 0xc0, 0xb4, 0xdf, 0x87, 0x53, 0x19, 0x9e, 0x7a, 0x74, 0xe1, 0x38, 0x2d, 0x4f, 0x7e, + 0x53, 0xca, 0x42, 0x75, 0xae, 0xb6, 0x2c, 0xbf, 0x46, 0xc3, 0xa2, 0xab, 0x93, 0x79, 0xf4, 0x69, + 0x09, 0x5c, 0xd4, 0xea, 0x5c, 0x92, 0x00, 0x9c, 0xe0, 0xd8, 0xff, 0xab, 0x00, 0x13, 0x19, 0xca, + 0x77, 0x96, 0x44, 0x24, 0x25, 0x7b, 0x24, 0x39, 0x43, 0xcc, 0x68, 0x87, 0x85, 0x23, 0x44, 0x3b, + 0x2c, 0xf6, 0x8a, 0x76, 0x38, 0xf0, 0x41, 0xa2, 0x1d, 0x9a, 0x23, 0x36, 0xd8, 0xd7, 0x88, 0x65, + 0x44, 0x48, 0x1c, 0x3a, 0x62, 0x84, 0x44, 0x63, 0xd0, 0x87, 0xfb, 0x18, 0xf4, 0x1f, 0x2a, 0xc0, + 0x64, 0xda, 0x48, 0xee, 0x04, 0xd4, 0xb1, 0x6f, 0x18, 0xea, 0xd8, 0xec, 0x94, 0x3c, 0x69, 0xd3, + 0xbd, 0x3c, 0xd5, 0x2c, 0x4e, 0xa9, 0x66, 0x3f, 0xd9, 0x17, 0xb5, 0xee, 0x6a, 0xda, 0xbf, 0x57, + 0x80, 0x33, 0xe9, 0x2a, 0x0b, 0x4d, 0xc7, 0xdb, 0x39, 0x81, 0xb1, 0xb9, 0x6d, 0x8c, 0xcd, 0x73, + 0xfd, 0x7c, 0x0d, 0xeb, 0x5a, 0xee, 0x00, 0xdd, 0x4b, 0x0d, 0xd0, 0xd5, 0xfe, 0x49, 0x76, 0x1f, + 0xa5, 0xaf, 0x17, 0xe1, 0x62, 0x66, 0xbd, 0x44, 0x9b, 0xb9, 0x64, 0x68, 0x33, 0xaf, 0xa5, 0xb4, + 0x99, 0x76, 0xf7, 0xda, 0xc7, 0xa3, 0xde, 0x14, 0x2e, 0x94, 0x2c, 0x22, 0xde, 0x43, 0xaa, 0x36, + 0x0d, 0x17, 0x4a, 0x45, 0x08, 0x9b, 0x74, 0xbf, 0x91, 0x54, 0x9a, 0xff, 0xd6, 0x82, 0x73, 0x99, + 0x73, 0x73, 0x02, 0x2a, 0xac, 0x55, 0x53, 0x85, 0xf5, 0x74, 0xdf, 0xab, 0x35, 0x47, 0xa7, 0xf5, + 0x1b, 0x03, 0x39, 0xdf, 0xc2, 0x04, 0xf4, 0xdb, 0x30, 0xe2, 0x34, 0x1a, 0x24, 0x8a, 0x56, 0x02, + 0x57, 0x45, 0x88, 0x7b, 0x8e, 0xc9, 0x59, 0x49, 0xf1, 0xe1, 0x7e, 0x65, 0x26, 0x4d, 0x22, 0x01, + 0x63, 0x9d, 0x82, 0x19, 0xd4, 0xb2, 0x70, 0xac, 0x41, 0x2d, 0xaf, 0x01, 0xec, 0x2a, 0x6e, 0x3d, + 0x2d, 0xe4, 0x6b, 0x7c, 0xbc, 0x86, 0x85, 0xbe, 0x00, 0xa5, 0x48, 0x5c, 0xe3, 0x62, 0x29, 0xbe, + 0xd0, 0xe7, 0x5c, 0x39, 0xeb, 0xa4, 0x69, 0xfa, 0xea, 0x2b, 0x7d, 0x88, 0x22, 0x89, 0xbe, 0x0d, + 0x26, 0x23, 0x1e, 0x0a, 0x66, 0xa1, 0xe9, 0x44, 0xcc, 0x0f, 0x42, 0xac, 0x42, 0xe6, 0x80, 0x5f, + 0x4f, 0xc1, 0x70, 0x07, 0x36, 0x5a, 0x92, 0x1f, 0xc5, 0xe2, 0xd6, 0xf0, 0x85, 0x79, 0x39, 0xf9, + 0x20, 0x91, 0xc2, 0xec, 0x74, 0x7a, 0xf8, 0xd9, 0xc0, 0x6b, 0x35, 0xd1, 0x17, 0x00, 0xe8, 0xf2, + 0x11, 0xba, 0x84, 0xe1, 0xfc, 0xc3, 0x93, 0x9e, 0x2a, 0x6e, 0xa6, 0xe5, 0x27, 0x73, 0x5e, 0xac, + 0x2a, 0x22, 0x58, 0x23, 0x68, 0xff, 0xd0, 0x00, 0x3c, 0xde, 0xe5, 0x8c, 0x44, 0x73, 0xe6, 0x13, + 0xe8, 0x33, 0x69, 0xe1, 0x7a, 0x26, 0xb3, 0xb2, 0x21, 0x6d, 0xa7, 0x96, 0x62, 0xe1, 0x03, 0x2f, + 0xc5, 0x1f, 0xb0, 0x34, 0xb5, 0x07, 0x37, 0xe6, 0xfb, 0xec, 0x11, 0xcf, 0xfe, 0x63, 0xd4, 0x83, + 0x6c, 0x64, 0x28, 0x13, 0xae, 0xf5, 0xdd, 0x9d, 0xbe, 0xb5, 0x0b, 0x27, 0xab, 0xfc, 0xfd, 0x92, + 0x05, 0x4f, 0x64, 0xf6, 0xd7, 0x30, 0xd9, 0xb8, 0x0a, 0xe5, 0x06, 0x2d, 0xd4, 0x7c, 0xd5, 0x12, + 0x27, 0x5e, 0x09, 0xc0, 0x09, 0x8e, 0x61, 0x99, 0x51, 0xe8, 0x69, 0x99, 0xf1, 0x2f, 0x2d, 0xe8, + 0xd8, 0x1f, 0x27, 0x70, 0x50, 0x2f, 0x9b, 0x07, 0xf5, 0xc7, 0xfb, 0x99, 0xcb, 0x9c, 0x33, 0xfa, + 0x8f, 0x27, 0xe0, 0x6c, 0x8e, 0xaf, 0xc6, 0x2e, 0x4c, 0x6d, 0x36, 0x88, 0xe9, 0x05, 0x28, 0x3e, + 0x26, 0xd3, 0x61, 0xb2, 0xab, 0xcb, 0x20, 0xcb, 0x47, 0x34, 0xd5, 0x81, 0x82, 0x3b, 0x9b, 0x40, + 0x5f, 0xb2, 0xe0, 0xb4, 0x73, 0x3f, 0xea, 0x48, 0x60, 0x2a, 0xd6, 0xcc, 0x8b, 0x99, 0x4a, 0x90, + 0x1e, 0x09, 0x4f, 0x79, 0x82, 0xa6, 0x2c, 0x2c, 0x9c, 0xd9, 0x16, 0xc2, 0x22, 0x66, 0x28, 0x65, + 0xe7, 0xbb, 0xf8, 0xa9, 0x66, 0x39, 0xd5, 0xf0, 0x23, 0x5b, 0x42, 0xb0, 0xa2, 0x83, 0xde, 0x81, + 0xf2, 0xa6, 0xf4, 0x74, 0xcb, 0xb8, 0x12, 0x92, 0x81, 0xec, 0xee, 0xff, 0xc7, 0x1f, 0x28, 0x15, + 0x12, 0x4e, 0x88, 0xa2, 0xd7, 0xa1, 0xe8, 0x6f, 0x44, 0xdd, 0x72, 0x1c, 0xa5, 0x6c, 0x9a, 0xb8, + 0x37, 0xf8, 0xea, 0x52, 0x1d, 0xd3, 0x8a, 0xe8, 0x06, 0x14, 0xc3, 0x75, 0x57, 0x68, 0xf0, 0x32, + 0xcf, 0x70, 0x3c, 0x5f, 0xcd, 0xe9, 0x15, 0xa3, 0x84, 0xe7, 0xab, 0x98, 0x92, 0x40, 0x35, 0x18, + 0x64, 0x0e, 0x0e, 0xe2, 0x3e, 0xc8, 0xe4, 0x7c, 0xbb, 0x38, 0x0a, 0x71, 0x97, 0x71, 0x86, 0x80, + 0x39, 0x21, 0xb4, 0x06, 0x43, 0x0d, 0x96, 0x0f, 0x47, 0x04, 0xac, 0xfe, 0x54, 0xa6, 0xae, 0xae, + 0x4b, 0xa2, 0x20, 0xa1, 0xba, 0x62, 0x18, 0x58, 0xd0, 0x62, 0x54, 0x49, 0x6b, 0x6b, 0x23, 0x12, + 0xf9, 0xdb, 0xb2, 0xa9, 0x76, 0xc9, 0x7f, 0x25, 0xa8, 0x32, 0x0c, 0x2c, 0x68, 0xa1, 0xcf, 0x40, + 0x61, 0xa3, 0x21, 0xfc, 0x1f, 0x32, 0x95, 0x76, 0xa6, 0x43, 0xff, 0xfc, 0xd0, 0xc1, 0x7e, 0xa5, + 0xb0, 0xb4, 0x80, 0x0b, 0x1b, 0x0d, 0xb4, 0x0a, 0xc3, 0x1b, 0xdc, 0x05, 0x58, 0xe8, 0xe5, 0x9e, + 0xca, 0xf6, 0x4e, 0xee, 0xf0, 0x12, 0xe6, 0x76, 0xfb, 0x02, 0x80, 0x25, 0x11, 0x16, 0x82, 0x53, + 0xb9, 0x32, 0x8b, 0x58, 0xd4, 0xb3, 0x47, 0x73, 0x3f, 0xe7, 0xf7, 0x73, 0xe2, 0x10, 0x8d, 0x35, + 0x8a, 0x74, 0x55, 0x3b, 0x32, 0x89, 0xa6, 0x88, 0xd5, 0x91, 0xb9, 0xaa, 0x7b, 0xe4, 0x17, 0xe5, + 0xab, 0x5a, 0x21, 0xe1, 0x84, 0x28, 0xda, 0x86, 0xb1, 0xdd, 0xa8, 0xb5, 0x45, 0xe4, 0x96, 0x66, + 0xa1, 0x3b, 0x72, 0xae, 0xb0, 0xbb, 0x02, 0xd1, 0x0b, 0xe3, 0xb6, 0xd3, 0xec, 0x38, 0x85, 0xd8, + 0xab, 0xf6, 0x5d, 0x9d, 0x18, 0x36, 0x69, 0xd3, 0xe1, 0x7f, 0xaf, 0x1d, 0xac, 0xef, 0xc5, 0x44, + 0x04, 0xaf, 0xce, 0x1c, 0xfe, 0x37, 0x39, 0x4a, 0xe7, 0xf0, 0x0b, 0x00, 0x96, 0x44, 0xd0, 0x5d, + 0x31, 0x3c, 0xec, 0xf4, 0x9c, 0xcc, 0x0f, 0xa6, 0x94, 0x99, 0xc5, 0x56, 0x1b, 0x14, 0x76, 0x5a, + 0x26, 0xa4, 0xd8, 0x29, 0xd9, 0xda, 0x0a, 0xe2, 0xc0, 0x4f, 0x9d, 0xd0, 0x53, 0xf9, 0xa7, 0x64, + 0x2d, 0x03, 0xbf, 0xf3, 0x94, 0xcc, 0xc2, 0xc2, 0x99, 0x6d, 0x21, 0x17, 0xc6, 0x5b, 0x41, 0x18, + 0xdf, 0x0f, 0x42, 0xb9, 0xbe, 0x50, 0x17, 0xbd, 0x82, 0x81, 0x29, 0x5a, 0x64, 0xc1, 0xd4, 0x4d, + 0x08, 0x4e, 0xd1, 0x44, 0x9f, 0x83, 0xe1, 0xa8, 0xe1, 0x34, 0xc9, 0xf2, 0xed, 0xe9, 0x53, 0xf9, + 0xd7, 0x4f, 0x9d, 0xa3, 0xe4, 0xac, 0x2e, 0x36, 0x39, 0x02, 0x05, 0x4b, 0x72, 0x68, 0x09, 0x06, + 0x59, 0x46, 0x04, 0x16, 0x77, 0x3b, 0x27, 0x26, 0x54, 0x87, 0x85, 0x29, 0x3f, 0x9b, 0x58, 0x31, + 0xe6, 0xd5, 0xe9, 0x1e, 0x10, 0xec, 0x75, 0x10, 0x4d, 0x9f, 0xc9, 0xdf, 0x03, 0x82, 0x2b, 0xbf, + 0x5d, 0xef, 0xb6, 0x07, 0x14, 0x12, 0x4e, 0x88, 0xd2, 0x93, 0x99, 0x9e, 0xa6, 0x67, 0xbb, 0x18, + 0xb4, 0xe4, 0x9e, 0xa5, 0xec, 0x64, 0xa6, 0x27, 0x29, 0x25, 0x61, 0xff, 0xee, 0x70, 0x27, 0xcf, + 0xc2, 0x04, 0xb2, 0xbf, 0x6c, 0x75, 0xbc, 0xd5, 0x7d, 0xba, 0x5f, 0xfd, 0xd0, 0x31, 0x72, 0xab, + 0x5f, 0xb2, 0xe0, 0x6c, 0x2b, 0xf3, 0x43, 0x04, 0x03, 0xd0, 0x9f, 0x9a, 0x89, 0x7f, 0xba, 0x8a, + 0x8d, 0x9f, 0x0d, 0xc7, 0x39, 0x2d, 0xa5, 0x25, 0x82, 0xe2, 0x07, 0x96, 0x08, 0x56, 0xa0, 0xc4, + 0x98, 0xcc, 0x1e, 0xf9, 0xe1, 0xd2, 0x82, 0x11, 0x63, 0x25, 0x16, 0x44, 0x45, 0xac, 0x48, 0xa0, + 0x1f, 0xb4, 0xe0, 0x42, 0xba, 0xeb, 0x98, 0x30, 0xb0, 0x88, 0x24, 0xcf, 0x65, 0xc1, 0x25, 0xf1, + 0xfd, 0x17, 0x6a, 0xdd, 0x90, 0x0f, 0x7b, 0x21, 0xe0, 0xee, 0x8d, 0xa1, 0x6a, 0x86, 0x30, 0x3a, + 0x64, 0x2a, 0xe0, 0xfb, 0x10, 0x48, 0x5f, 0x84, 0xd1, 0x9d, 0xa0, 0xed, 0xc7, 0xc2, 0xfe, 0x45, + 0x78, 0x2c, 0xb2, 0x07, 0xe7, 0x15, 0xad, 0x1c, 0x1b, 0x58, 0x29, 0x31, 0xb6, 0xf4, 0xd0, 0x62, + 0xec, 0xdb, 0xa9, 0x84, 0xf2, 0xe5, 0xfc, 0x88, 0x85, 0x42, 0xe2, 0x3f, 0x42, 0x5a, 0xf9, 0x93, + 0x95, 0x8d, 0x7e, 0xda, 0xca, 0x60, 0xea, 0xb9, 0xb4, 0xfc, 0x9a, 0x29, 0x2d, 0x5f, 0x4e, 0x4b, + 0xcb, 0x1d, 0xca, 0x57, 0x43, 0x50, 0xee, 0x3f, 0xec, 0x75, 0xbf, 0x71, 0xe4, 0xec, 0x26, 0x5c, + 0xea, 0x75, 0x2d, 0x31, 0x43, 0x28, 0x57, 0x3d, 0xb5, 0x25, 0x86, 0x50, 0xee, 0x72, 0x15, 0x33, + 0x48, 0xbf, 0x81, 0x46, 0xec, 0xff, 0x61, 0x41, 0xb1, 0x16, 0xb8, 0x27, 0xa0, 0x4c, 0xfe, 0xac, + 0xa1, 0x4c, 0x7e, 0x3c, 0x27, 0xd1, 0x7f, 0xae, 0xea, 0x78, 0x31, 0xa5, 0x3a, 0xbe, 0x90, 0x47, + 0xa0, 0xbb, 0xa2, 0xf8, 0x27, 0x8a, 0x30, 0x52, 0x0b, 0x5c, 0x65, 0x85, 0xfc, 0x1b, 0x0f, 0x63, + 0x85, 0x9c, 0x1b, 0x16, 0x56, 0xa3, 0xcc, 0xec, 0xa7, 0xa4, 0x13, 0xde, 0x5f, 0x30, 0x63, 0xe4, + 0x7b, 0xc4, 0xdb, 0xdc, 0x8a, 0x89, 0x9b, 0xfe, 0x9c, 0x93, 0x33, 0x46, 0xfe, 0x6f, 0x16, 0x4c, + 0xa4, 0x5a, 0x47, 0x4d, 0x18, 0x6b, 0xea, 0x9a, 0x40, 0xb1, 0x4e, 0x1f, 0x4a, 0x89, 0x28, 0x8c, + 0x39, 0xb5, 0x22, 0x6c, 0x12, 0x47, 0xb3, 0x00, 0xea, 0xa5, 0x4e, 0x6a, 0xc0, 0x18, 0xd7, 0xaf, + 0x9e, 0xf2, 0x22, 0xac, 0x61, 0xa0, 0x97, 0x60, 0x24, 0x0e, 0x5a, 0x41, 0x33, 0xd8, 0xdc, 0xbb, + 0x49, 0x64, 0x68, 0x1b, 0x65, 0xa2, 0xb5, 0x96, 0x80, 0xb0, 0x8e, 0x67, 0xff, 0x54, 0x91, 0x7f, + 0xa8, 0x1f, 0x7b, 0xdf, 0x5c, 0x93, 0x1f, 0xed, 0x35, 0xf9, 0x75, 0x0b, 0x26, 0x69, 0xeb, 0xcc, + 0x5c, 0x44, 0x5e, 0xb6, 0x2a, 0xfd, 0x8e, 0xd5, 0x25, 0xfd, 0xce, 0x65, 0x7a, 0x76, 0xb9, 0x41, + 0x3b, 0x16, 0x1a, 0x34, 0xed, 0x70, 0xa2, 0xa5, 0x58, 0x40, 0x05, 0x1e, 0x09, 0x43, 0xe1, 0x03, + 0xa5, 0xe3, 0x91, 0x30, 0xc4, 0x02, 0x2a, 0xb3, 0xf3, 0x0c, 0xe4, 0x64, 0xe7, 0x61, 0x81, 0xfa, + 0x84, 0x61, 0x81, 0x60, 0x7b, 0xb4, 0x40, 0x7d, 0xd2, 0xe2, 0x20, 0xc1, 0xb1, 0x7f, 0xbe, 0x08, + 0xa3, 0xb5, 0xc0, 0x4d, 0xde, 0xca, 0x5e, 0x34, 0xde, 0xca, 0x2e, 0xa5, 0xde, 0xca, 0x26, 0x75, + 0xdc, 0x6f, 0xbe, 0x8c, 0x7d, 0x58, 0x2f, 0x63, 0xff, 0xc2, 0x62, 0xb3, 0x56, 0x5d, 0xad, 0x8b, + 0xec, 0xc0, 0xcf, 0xc3, 0x08, 0x3b, 0x90, 0x98, 0xd3, 0x9d, 0x7c, 0x40, 0x62, 0x81, 0xf7, 0x57, + 0x93, 0x62, 0xac, 0xe3, 0xa0, 0x2b, 0x50, 0x8a, 0x88, 0x13, 0x36, 0xb6, 0xd4, 0x19, 0x27, 0x9e, + 0x57, 0x78, 0x19, 0x56, 0x50, 0xf4, 0x66, 0x12, 0x23, 0xae, 0x98, 0x9f, 0xe7, 0x56, 0xef, 0x0f, + 0xdf, 0x22, 0xf9, 0x81, 0xe1, 0xec, 0x7b, 0x80, 0x3a, 0xf1, 0xfb, 0x08, 0x8e, 0x54, 0x31, 0x83, + 0x23, 0x95, 0x3b, 0x02, 0x23, 0xfd, 0x99, 0x05, 0xe3, 0xb5, 0xc0, 0xa5, 0x5b, 0xf7, 0x1b, 0x69, + 0x9f, 0xea, 0x01, 0x32, 0x87, 0xba, 0x04, 0xc8, 0xfc, 0xfb, 0x16, 0x0c, 0xd7, 0x02, 0xf7, 0x04, + 0xf4, 0xee, 0xaf, 0x99, 0x7a, 0xf7, 0xc7, 0x72, 0x96, 0x44, 0x8e, 0xaa, 0xfd, 0x17, 0x8b, 0x30, + 0x46, 0xfb, 0x19, 0x6c, 0xca, 0x59, 0x32, 0x46, 0xc4, 0xea, 0x63, 0x44, 0x28, 0x9b, 0x1b, 0x34, + 0x9b, 0xc1, 0xfd, 0xf4, 0x8c, 0x2d, 0xb1, 0x52, 0x2c, 0xa0, 0xe8, 0x59, 0x28, 0xb5, 0x42, 0xb2, + 0xeb, 0x05, 0x82, 0x7f, 0xd4, 0x5e, 0x31, 0x6a, 0xa2, 0x1c, 0x2b, 0x0c, 0x2a, 0x77, 0x45, 0x9e, + 0xdf, 0x20, 0x32, 0xc9, 0xf6, 0x00, 0xcb, 0xc3, 0xc5, 0x23, 0x5f, 0x6b, 0xe5, 0xd8, 0xc0, 0x42, + 0xf7, 0xa0, 0xcc, 0xfe, 0xb3, 0x13, 0xe5, 0xe8, 0x79, 0x83, 0x44, 0xba, 0x09, 0x41, 0x00, 0x27, + 0xb4, 0xd0, 0x35, 0x80, 0x58, 0x46, 0x47, 0x8e, 0x44, 0x8c, 0x1b, 0xc5, 0x6b, 0xab, 0xb8, 0xc9, + 0x11, 0xd6, 0xb0, 0xd0, 0x33, 0x50, 0x8e, 0x1d, 0xaf, 0x79, 0xcb, 0xf3, 0x49, 0xc4, 0x54, 0xce, + 0x45, 0x99, 0x4d, 0x42, 0x14, 0xe2, 0x04, 0x4e, 0x79, 0x1d, 0xe6, 0x00, 0xce, 0xb3, 0x8e, 0x95, + 0x18, 0x36, 0xe3, 0x75, 0x6e, 0xa9, 0x52, 0xac, 0x61, 0xd8, 0xaf, 0xc0, 0x99, 0x5a, 0xe0, 0xd6, + 0x82, 0x30, 0x5e, 0x0a, 0xc2, 0xfb, 0x4e, 0xe8, 0xca, 0xf9, 0xab, 0xc8, 0xc4, 0x06, 0xf4, 0xec, + 0x19, 0xe4, 0x3b, 0xd3, 0x48, 0x59, 0xf0, 0x02, 0xe3, 0x76, 0x8e, 0xe8, 0xd4, 0xd1, 0x60, 0xf7, + 0xae, 0x4a, 0x30, 0x78, 0xdd, 0x89, 0x09, 0xba, 0xcd, 0x92, 0x92, 0x25, 0x57, 0x90, 0xa8, 0xfe, + 0xb4, 0x96, 0x94, 0x2c, 0x01, 0x66, 0xde, 0x59, 0x66, 0x7d, 0xfb, 0x67, 0x07, 0xd8, 0x69, 0x94, + 0xca, 0xb7, 0x87, 0xbe, 0x08, 0xe3, 0x11, 0xb9, 0xe5, 0xf9, 0xed, 0x07, 0x52, 0x08, 0xef, 0xe2, + 0x96, 0x53, 0x5f, 0xd4, 0x31, 0xb9, 0x2a, 0xcf, 0x2c, 0xc3, 0x29, 0x6a, 0x74, 0x9e, 0xc2, 0xb6, + 0x3f, 0x17, 0xdd, 0x89, 0x48, 0x28, 0xf2, 0xbd, 0xb1, 0x79, 0xc2, 0xb2, 0x10, 0x27, 0x70, 0xba, + 0x2e, 0xd9, 0x9f, 0xd5, 0xc0, 0xc7, 0x41, 0x10, 0xcb, 0x95, 0xcc, 0x32, 0x06, 0x69, 0xe5, 0xd8, + 0xc0, 0x42, 0x4b, 0x80, 0xa2, 0x76, 0xab, 0xd5, 0x64, 0x0f, 0xfb, 0x4e, 0xf3, 0x7a, 0x18, 0xb4, + 0x5b, 0xfc, 0xd5, 0xb3, 0xc8, 0x03, 0x13, 0xd6, 0x3b, 0xa0, 0x38, 0xa3, 0x06, 0x3d, 0x7d, 0x36, + 0x22, 0xf6, 0x9b, 0xad, 0xee, 0xa2, 0x50, 0xaf, 0xd7, 0x59, 0x11, 0x96, 0x30, 0xba, 0x98, 0x58, + 0xf3, 0x1c, 0x73, 0x28, 0x59, 0x4c, 0x58, 0x95, 0x62, 0x0d, 0x03, 0x2d, 0xc2, 0x70, 0xb4, 0x17, + 0x35, 0x62, 0x11, 0x91, 0x29, 0x27, 0x73, 0x67, 0x9d, 0xa1, 0x68, 0xd9, 0x24, 0x78, 0x15, 0x2c, + 0xeb, 0xa2, 0x1d, 0x18, 0xbf, 0xef, 0xf9, 0x6e, 0x70, 0x3f, 0x92, 0x13, 0x55, 0xca, 0x57, 0x8d, + 0xde, 0xe3, 0x98, 0xa9, 0xc9, 0x36, 0xe6, 0xed, 0x9e, 0x41, 0x0c, 0xa7, 0x88, 0xdb, 0xdf, 0xc5, + 0xee, 0x5e, 0x96, 0x8c, 0x2c, 0x6e, 0x87, 0x04, 0xed, 0xc0, 0x58, 0x8b, 0xad, 0x30, 0x11, 0x2a, + 0x5b, 0x2c, 0x93, 0x17, 0xfb, 0x14, 0xa2, 0xef, 0xd3, 0x73, 0x4d, 0x29, 0xb9, 0x98, 0x74, 0x52, + 0xd3, 0xc9, 0x61, 0x93, 0xba, 0xfd, 0xdf, 0x11, 0x3b, 0xe2, 0xeb, 0x5c, 0x32, 0x1e, 0x16, 0x96, + 0xcc, 0x42, 0x0c, 0x98, 0xc9, 0x57, 0xd1, 0x24, 0x03, 0x28, 0xac, 0xa1, 0xb1, 0xac, 0x8b, 0xde, + 0x64, 0x8f, 0xe2, 0xfc, 0x5c, 0xed, 0x95, 0x13, 0x9a, 0x63, 0x19, 0xef, 0xdf, 0xa2, 0x22, 0xd6, + 0x88, 0xa0, 0x5b, 0x30, 0x26, 0x72, 0x57, 0x09, 0x1d, 0x5c, 0xd1, 0xd0, 0xb1, 0x8c, 0x61, 0x1d, + 0x78, 0x98, 0x2e, 0xc0, 0x66, 0x65, 0xb4, 0x09, 0x17, 0xb4, 0x44, 0x8e, 0xd7, 0x43, 0x87, 0x3d, + 0x94, 0x7a, 0x6c, 0xcf, 0x6a, 0xc7, 0xf4, 0x13, 0x07, 0xfb, 0x95, 0x0b, 0x6b, 0xdd, 0x10, 0x71, + 0x77, 0x3a, 0xe8, 0x36, 0x9c, 0xe1, 0x0e, 0x83, 0x55, 0xe2, 0xb8, 0x4d, 0xcf, 0x57, 0xf7, 0x00, + 0x5f, 0xf6, 0xe7, 0x0e, 0xf6, 0x2b, 0x67, 0xe6, 0xb2, 0x10, 0x70, 0x76, 0x3d, 0xf4, 0x1a, 0x94, + 0x5d, 0x3f, 0x12, 0x63, 0x30, 0x64, 0xe4, 0x28, 0x2d, 0x57, 0x57, 0xeb, 0xea, 0xfb, 0x93, 0x3f, + 0x38, 0xa9, 0x80, 0x36, 0xb9, 0x1e, 0x4e, 0x89, 0xbd, 0xc3, 0xf9, 0xf9, 0xe8, 0xc5, 0x92, 0x30, + 0x5c, 0x86, 0xb8, 0x02, 0x5a, 0x99, 0xdc, 0x1a, 0xde, 0x44, 0x06, 0x61, 0xf4, 0x06, 0x20, 0xca, + 0x17, 0x7a, 0x0d, 0x32, 0xd7, 0x60, 0x11, 0xcb, 0x99, 0xda, 0xb2, 0x64, 0xb8, 0x68, 0xa0, 0x7a, + 0x07, 0x06, 0xce, 0xa8, 0x85, 0x6e, 0xd0, 0x73, 0x53, 0x2f, 0x15, 0xa6, 0xc3, 0x52, 0x96, 0x98, + 0xae, 0x92, 0x56, 0x48, 0x1a, 0x4e, 0x4c, 0x5c, 0x93, 0x22, 0x4e, 0xd5, 0xa3, 0x57, 0xb7, 0x4a, + 0x5e, 0x04, 0x66, 0x94, 0x8e, 0xce, 0x04, 0x46, 0x54, 0x0c, 0xdf, 0x0a, 0xa2, 0x78, 0x95, 0xc4, + 0xf7, 0x83, 0x70, 0x5b, 0x04, 0x45, 0x4b, 0xe2, 0x73, 0x26, 0x20, 0xac, 0xe3, 0x51, 0xb6, 0x9b, + 0xbd, 0x4a, 0x2f, 0x57, 0xd9, 0x83, 0x60, 0x29, 0xd9, 0x27, 0x37, 0x78, 0x31, 0x96, 0x70, 0x89, + 0xba, 0x5c, 0x5b, 0x60, 0x8f, 0x7b, 0x29, 0xd4, 0xe5, 0xda, 0x02, 0x96, 0x70, 0x44, 0x3a, 0xf3, + 0xbf, 0x8e, 0xe7, 0x2b, 0x51, 0x3b, 0x6f, 0x9f, 0x3e, 0x53, 0xc0, 0xfa, 0x30, 0xa9, 0x32, 0xcf, + 0xf2, 0x68, 0x71, 0xd1, 0xf4, 0x04, 0x5b, 0x24, 0xfd, 0x87, 0x9a, 0x53, 0x6a, 0xe9, 0xe5, 0x14, + 0x25, 0xdc, 0x41, 0xdb, 0x88, 0x9b, 0x32, 0xd9, 0x33, 0xf9, 0xd4, 0x55, 0x28, 0x47, 0xed, 0x75, + 0x37, 0xd8, 0x71, 0x3c, 0x9f, 0xbd, 0xc5, 0x69, 0x3c, 0x5d, 0x5d, 0x02, 0x70, 0x82, 0x83, 0x96, + 0xa0, 0xe4, 0x48, 0x9d, 0x33, 0xca, 0x0f, 0x92, 0xa0, 0x34, 0xcd, 0xdc, 0x6f, 0x58, 0x6a, 0x99, + 0x55, 0x5d, 0xf4, 0x2a, 0x8c, 0x09, 0x37, 0x31, 0x1e, 0x3a, 0x82, 0xbd, 0x95, 0x69, 0x7e, 0x00, + 0x75, 0x1d, 0x88, 0x4d, 0x5c, 0xf4, 0x05, 0x18, 0xa7, 0x54, 0x92, 0x83, 0x6d, 0xfa, 0x74, 0x3f, + 0x27, 0xa2, 0x96, 0x54, 0x44, 0xaf, 0x8c, 0x53, 0xc4, 0x90, 0x0b, 0xe7, 0x9d, 0x76, 0x1c, 0x30, + 0xbd, 0xbd, 0xb9, 0xfe, 0xd7, 0x82, 0x6d, 0xe2, 0xb3, 0x27, 0xb3, 0xd2, 0xfc, 0xa5, 0x83, 0xfd, + 0xca, 0xf9, 0xb9, 0x2e, 0x78, 0xb8, 0x2b, 0x15, 0x74, 0x07, 0x46, 0xe2, 0xa0, 0xc9, 0x2c, 0xf2, + 0xe9, 0x85, 0x78, 0x36, 0x3f, 0xee, 0xd0, 0x9a, 0x42, 0xd3, 0x75, 0x56, 0xaa, 0x2a, 0xd6, 0xe9, + 0xa0, 0x35, 0xbe, 0xc7, 0x58, 0x44, 0x56, 0x12, 0x4d, 0x3f, 0x96, 0x3f, 0x30, 0x2a, 0x70, 0xab, + 0xb9, 0x05, 0x45, 0x4d, 0xac, 0x93, 0x41, 0xd7, 0x61, 0xaa, 0x15, 0x7a, 0x01, 0x5b, 0xd8, 0xea, + 0xcd, 0x64, 0xda, 0xcc, 0x23, 0x51, 0x4b, 0x23, 0xe0, 0xce, 0x3a, 0x54, 0xa6, 0x95, 0x85, 0xd3, + 0xe7, 0x78, 0x52, 0x32, 0xce, 0xe7, 0xf3, 0x32, 0xac, 0xa0, 0x68, 0x85, 0x9d, 0xcb, 0x5c, 0xfa, + 0x9c, 0x9e, 0xc9, 0x0f, 0x2e, 0xa1, 0x4b, 0xa9, 0x9c, 0x3d, 0x53, 0x7f, 0x71, 0x42, 0x81, 0xde, + 0x1b, 0xd1, 0x96, 0x13, 0x92, 0x5a, 0x18, 0x34, 0x48, 0xa4, 0x05, 0x81, 0x7e, 0x9c, 0x07, 0x8e, + 0xa4, 0xf7, 0x46, 0x3d, 0x0b, 0x01, 0x67, 0xd7, 0x43, 0xae, 0x96, 0x8b, 0x9b, 0x72, 0xbd, 0xd1, + 0xf4, 0xf9, 0x2e, 0xf6, 0x4d, 0x29, 0x16, 0x39, 0x59, 0x8b, 0x46, 0x71, 0x84, 0x53, 0x34, 0xd1, + 0xb7, 0xc1, 0xa4, 0x88, 0xb3, 0x94, 0x8c, 0xfb, 0x85, 0xc4, 0x70, 0x12, 0xa7, 0x60, 0xb8, 0x03, + 0x9b, 0x87, 0xbe, 0x76, 0xd6, 0x9b, 0x44, 0x2c, 0xc2, 0x5b, 0x9e, 0xbf, 0x1d, 0x4d, 0x5f, 0x64, + 0x5f, 0x2d, 0x42, 0x5f, 0xa7, 0xa1, 0x38, 0xa3, 0x06, 0x5a, 0x83, 0xc9, 0x56, 0x48, 0xc8, 0x0e, + 0xe3, 0xb1, 0xc4, 0x75, 0x59, 0xe1, 0xde, 0xc0, 0xb4, 0x27, 0xb5, 0x14, 0xec, 0x30, 0xa3, 0x0c, + 0x77, 0x50, 0x98, 0xf9, 0x56, 0x98, 0xea, 0xb8, 0x0f, 0x8f, 0x14, 0x84, 0xfe, 0x4f, 0x07, 0xa1, + 0xac, 0x5e, 0x16, 0xd0, 0x55, 0xf3, 0xc1, 0xe8, 0x5c, 0xfa, 0xc1, 0xa8, 0x44, 0x05, 0x1c, 0xfd, + 0x8d, 0x68, 0xcd, 0xb0, 0x36, 0x2c, 0xe4, 0xa7, 0x7c, 0xd3, 0x45, 0x94, 0x9e, 0x9e, 0x8b, 0x9a, + 0xa2, 0xa8, 0xd8, 0xf7, 0xcb, 0xd3, 0x40, 0x57, 0xdd, 0x53, 0x9f, 0x19, 0x97, 0xd1, 0x93, 0x54, + 0xca, 0x73, 0x97, 0x6b, 0xe9, 0x14, 0xa4, 0x35, 0x5a, 0x88, 0x39, 0x8c, 0x49, 0xc3, 0x94, 0x79, + 0x63, 0xd2, 0xf0, 0xf0, 0x43, 0x4a, 0xc3, 0x92, 0x00, 0x4e, 0x68, 0xa1, 0x26, 0x4c, 0x35, 0xcc, + 0xec, 0xb1, 0xca, 0x5b, 0xf1, 0xc9, 0x9e, 0x79, 0x5c, 0xdb, 0x5a, 0xaa, 0xbe, 0x85, 0x34, 0x15, + 0xdc, 0x49, 0x18, 0xbd, 0x0a, 0xa5, 0xf7, 0x82, 0x88, 0x2d, 0x75, 0xc1, 0xc1, 0x48, 0xaf, 0xae, + 0xd2, 0x9b, 0xb7, 0xeb, 0xac, 0xfc, 0x70, 0xbf, 0x32, 0x52, 0x0b, 0x5c, 0xf9, 0x17, 0xab, 0x0a, + 0xe8, 0x01, 0x9c, 0x31, 0xce, 0x7d, 0xd5, 0x5d, 0xe8, 0xbf, 0xbb, 0x17, 0x44, 0x73, 0x67, 0x96, + 0xb3, 0x28, 0xe1, 0xec, 0x06, 0xe8, 0x61, 0xea, 0x07, 0x22, 0xf3, 0xb2, 0xe4, 0x92, 0x18, 0x33, + 0x54, 0xd6, 0x7d, 0xfa, 0x53, 0x08, 0xb8, 0xb3, 0x8e, 0xfd, 0x2b, 0xfc, 0x21, 0x46, 0xa8, 0x6b, + 0x49, 0xd4, 0x6e, 0x9e, 0x44, 0x62, 0xaf, 0x45, 0x43, 0x93, 0xfc, 0xd0, 0x8f, 0x7d, 0xbf, 0x6e, + 0xb1, 0xc7, 0xbe, 0x35, 0xb2, 0xd3, 0x6a, 0x3a, 0xf1, 0x49, 0x78, 0x13, 0xbd, 0x09, 0xa5, 0x58, + 0xb4, 0xd6, 0x2d, 0x17, 0x99, 0xd6, 0x29, 0xf6, 0xe0, 0xa9, 0xf8, 0x27, 0x59, 0x8a, 0x15, 0x19, + 0xfb, 0x9f, 0xf2, 0x19, 0x90, 0x90, 0x13, 0xd0, 0xea, 0x55, 0x4d, 0xad, 0x5e, 0xa5, 0xc7, 0x17, + 0xe4, 0x68, 0xf7, 0xfe, 0x89, 0xd9, 0x6f, 0x26, 0xaa, 0x7e, 0xd4, 0x5f, 0x99, 0xed, 0x1f, 0xb6, + 0xe0, 0x74, 0x96, 0x59, 0x16, 0xe5, 0x79, 0xb9, 0xa0, 0xac, 0x5e, 0xdd, 0xd5, 0x08, 0xde, 0x15, + 0xe5, 0x58, 0x61, 0xf4, 0x9d, 0xe6, 0xe3, 0x68, 0x61, 0xef, 0x6e, 0xc3, 0x58, 0x2d, 0x24, 0xda, + 0x1d, 0xf0, 0x3a, 0x77, 0x0f, 0xe4, 0xfd, 0x79, 0xf6, 0xc8, 0xae, 0x81, 0xf6, 0xcf, 0x14, 0xe0, + 0x34, 0x7f, 0x36, 0x9b, 0xdb, 0x0d, 0x3c, 0xb7, 0x16, 0xb8, 0x22, 0x45, 0xcb, 0x5b, 0x30, 0xda, + 0xd2, 0xb4, 0x1b, 0xdd, 0x02, 0x6f, 0xe9, 0x5a, 0x90, 0x44, 0xca, 0xd4, 0x4b, 0xb1, 0x41, 0x0b, + 0xb9, 0x30, 0x4a, 0x76, 0xbd, 0x86, 0x7a, 0x7b, 0x29, 0x1c, 0xf9, 0x6e, 0x50, 0xad, 0x2c, 0x6a, + 0x74, 0xb0, 0x41, 0xf5, 0x11, 0x64, 0xed, 0xb3, 0x7f, 0xc4, 0x82, 0xc7, 0x72, 0xc2, 0x74, 0xd1, + 0xe6, 0xee, 0xb3, 0x07, 0x4a, 0x91, 0x00, 0x4c, 0x35, 0xc7, 0x9f, 0x2d, 0xb1, 0x80, 0xa2, 0xcf, + 0x01, 0xf0, 0x67, 0x47, 0x2a, 0x74, 0xf5, 0x8a, 0x67, 0x64, 0x84, 0x62, 0xd1, 0x42, 0x68, 0xc8, + 0xfa, 0x58, 0xa3, 0x65, 0xff, 0x64, 0x11, 0x06, 0xd9, 0x33, 0x17, 0x5a, 0x82, 0xe1, 0x2d, 0x1e, + 0xb8, 0xba, 0x9f, 0x18, 0xd9, 0x89, 0xf4, 0xca, 0x0b, 0xb0, 0xac, 0x8c, 0x56, 0xe0, 0x14, 0x0f, + 0xfc, 0xdd, 0xac, 0x92, 0xa6, 0xb3, 0x27, 0x95, 0x20, 0x3c, 0x69, 0x96, 0x0a, 0x07, 0xb2, 0xdc, + 0x89, 0x82, 0xb3, 0xea, 0xa1, 0xd7, 0x61, 0x9c, 0x72, 0x8d, 0x41, 0x3b, 0x96, 0x94, 0x78, 0xc8, + 0x6f, 0xc5, 0xa6, 0xae, 0x19, 0x50, 0x9c, 0xc2, 0xa6, 0xe2, 0x5c, 0xab, 0x43, 0xdd, 0x33, 0x98, + 0x88, 0x73, 0xa6, 0x8a, 0xc7, 0xc4, 0x65, 0xf6, 0x58, 0x6d, 0x66, 0x7d, 0xb6, 0xb6, 0x15, 0x92, + 0x68, 0x2b, 0x68, 0xba, 0x22, 0xe7, 0x7a, 0x62, 0x8f, 0x95, 0x82, 0xe3, 0x8e, 0x1a, 0x94, 0xca, + 0x86, 0xe3, 0x35, 0xdb, 0x21, 0x49, 0xa8, 0x0c, 0x99, 0x54, 0x96, 0x52, 0x70, 0xdc, 0x51, 0x83, + 0xae, 0xa3, 0x33, 0x22, 0x09, 0xba, 0x0c, 0x52, 0xa0, 0x8c, 0xec, 0x86, 0xa5, 0xbb, 0x56, 0x97, + 0x28, 0x3d, 0xc2, 0x0c, 0x49, 0xa5, 0x51, 0xd7, 0x94, 0xa2, 0xc2, 0x51, 0x4b, 0x52, 0x79, 0x98, + 0x54, 0xdc, 0xdf, 0x5f, 0x80, 0x53, 0x19, 0xc6, 0xbc, 0xfc, 0xa8, 0xda, 0xf4, 0xa2, 0x58, 0x25, + 0x06, 0xd2, 0x8e, 0x2a, 0x5e, 0x8e, 0x15, 0x06, 0xdd, 0x0f, 0xfc, 0x30, 0x4c, 0x1f, 0x80, 0xc2, + 0x58, 0x4e, 0x40, 0x8f, 0x98, 0x62, 0xe7, 0x12, 0x0c, 0xb4, 0x23, 0x22, 0xe3, 0x6b, 0xa9, 0xf3, + 0x9b, 0xa9, 0xc9, 0x19, 0x84, 0xb2, 0xa6, 0x9b, 0x4a, 0x43, 0xad, 0xb1, 0xa6, 0x5c, 0xed, 0xcc, + 0x61, 0xb4, 0x73, 0x31, 0xf1, 0x1d, 0x3f, 0x16, 0x0c, 0x6c, 0x12, 0x15, 0x86, 0x95, 0x62, 0x01, + 0xb5, 0xbf, 0x52, 0x84, 0x73, 0xb9, 0xe6, 0xfd, 0xb4, 0xeb, 0x3b, 0x81, 0xef, 0xc5, 0x81, 0x7a, + 0x6a, 0xe5, 0x91, 0x60, 0x48, 0x6b, 0x6b, 0x45, 0x94, 0x63, 0x85, 0x81, 0x2e, 0xcb, 0xb4, 0xfd, + 0xe9, 0x14, 0x49, 0xf3, 0x55, 0x23, 0x73, 0x7f, 0xbf, 0xe9, 0xe7, 0x9e, 0x84, 0x81, 0x56, 0x10, + 0x34, 0xd3, 0x87, 0x16, 0xed, 0x6e, 0x10, 0x34, 0x31, 0x03, 0xa2, 0x4f, 0x88, 0xf1, 0x4a, 0xbd, + 0x2d, 0x62, 0xc7, 0x0d, 0x22, 0x6d, 0xd0, 0x9e, 0x86, 0xe1, 0x6d, 0xb2, 0x17, 0x7a, 0xfe, 0x66, + 0xfa, 0xcd, 0xf9, 0x26, 0x2f, 0xc6, 0x12, 0x6e, 0x26, 0xcc, 0x18, 0x3e, 0xee, 0xbc, 0x71, 0xa5, + 0x9e, 0x57, 0xe0, 0x0f, 0x14, 0x61, 0x02, 0xcf, 0x57, 0xbf, 0x39, 0x11, 0x77, 0x3a, 0x27, 0xe2, + 0xb8, 0xf3, 0xc6, 0xf5, 0x9e, 0x8d, 0x5f, 0xb4, 0x60, 0x82, 0x05, 0x95, 0x16, 0xf1, 0x47, 0xbc, + 0xc0, 0x3f, 0x01, 0x16, 0xef, 0x49, 0x18, 0x0c, 0x69, 0xa3, 0xe9, 0xdc, 0x48, 0xac, 0x27, 0x98, + 0xc3, 0xd0, 0x79, 0x18, 0x60, 0x5d, 0xa0, 0x93, 0x37, 0xca, 0xd3, 0x4a, 0x54, 0x9d, 0xd8, 0xc1, + 0xac, 0x94, 0x39, 0xd5, 0x63, 0xd2, 0x6a, 0x7a, 0xbc, 0xd3, 0xc9, 0xc3, 0xca, 0x47, 0xc3, 0xa9, + 0x3e, 0xb3, 0x6b, 0x1f, 0xcc, 0xa9, 0x3e, 0x9b, 0x64, 0x77, 0xf1, 0xe9, 0x8f, 0x0a, 0x70, 0x31, + 0xb3, 0x5e, 0xdf, 0x4e, 0xf5, 0xdd, 0x6b, 0x1f, 0x8f, 0xe9, 0x50, 0xb6, 0x45, 0x4f, 0xf1, 0x04, + 0x2d, 0x7a, 0x06, 0xfa, 0xe5, 0x30, 0x07, 0xfb, 0xf0, 0x75, 0xcf, 0x1c, 0xb2, 0x8f, 0x88, 0xaf, + 0x7b, 0x66, 0xdf, 0x72, 0xc4, 0xbf, 0x3f, 0x2f, 0xe4, 0x7c, 0x0b, 0x13, 0x04, 0xaf, 0xd0, 0x73, + 0x86, 0x01, 0x23, 0xc1, 0x31, 0x8f, 0xf2, 0x33, 0x86, 0x97, 0x61, 0x05, 0x45, 0x9e, 0xe6, 0x35, + 0x5e, 0xc8, 0x4f, 0x15, 0x9a, 0xdb, 0xd4, 0xac, 0xf9, 0x0e, 0xa6, 0x86, 0x20, 0xc3, 0x83, 0x7c, + 0x45, 0x13, 0xde, 0x8b, 0xfd, 0x0b, 0xef, 0xa3, 0xd9, 0x82, 0x3b, 0x9a, 0x83, 0x89, 0x1d, 0xcf, + 0xa7, 0xc7, 0xe6, 0x9e, 0xc9, 0xb2, 0xaa, 0x20, 0x2a, 0x2b, 0x26, 0x18, 0xa7, 0xf1, 0x67, 0x5e, + 0x85, 0xb1, 0x87, 0x57, 0x5b, 0x7e, 0xbd, 0x08, 0x8f, 0x77, 0xd9, 0xf6, 0xfc, 0xac, 0x37, 0xe6, + 0x40, 0x3b, 0xeb, 0x3b, 0xe6, 0xa1, 0x06, 0xa7, 0x37, 0xda, 0xcd, 0xe6, 0x1e, 0x33, 0x9a, 0x25, + 0xae, 0xc4, 0x10, 0x3c, 0xe5, 0x79, 0x99, 0xc8, 0x63, 0x29, 0x03, 0x07, 0x67, 0xd6, 0x44, 0x6f, + 0x00, 0x0a, 0x44, 0x9e, 0xe2, 0xeb, 0xc4, 0x17, 0xaf, 0x0b, 0x6c, 0xe0, 0x8b, 0xc9, 0x66, 0xbc, + 0xdd, 0x81, 0x81, 0x33, 0x6a, 0x51, 0xe1, 0x80, 0xde, 0x4a, 0x7b, 0xaa, 0x5b, 0x29, 0xe1, 0x00, + 0xeb, 0x40, 0x6c, 0xe2, 0xa2, 0xeb, 0x30, 0xe5, 0xec, 0x3a, 0x1e, 0x0f, 0x2e, 0x28, 0x09, 0x70, + 0xe9, 0x40, 0x29, 0xcb, 0xe6, 0xd2, 0x08, 0xb8, 0xb3, 0x4e, 0xca, 0xaf, 0x7c, 0x28, 0xdf, 0xaf, + 0xbc, 0xfb, 0xb9, 0xd8, 0x4b, 0xf7, 0x6b, 0xff, 0x67, 0x8b, 0x5e, 0x5f, 0x9c, 0xc9, 0x37, 0xc3, + 0x23, 0xbd, 0xca, 0xcc, 0x62, 0xb8, 0x32, 0x50, 0x73, 0xf1, 0x3e, 0xa3, 0x99, 0xc5, 0x24, 0x40, + 0x6c, 0xe2, 0xf2, 0x05, 0x11, 0x25, 0x9e, 0x45, 0x06, 0x8b, 0x2f, 0x42, 0x44, 0x28, 0x0c, 0xf4, + 0x79, 0x18, 0x76, 0xbd, 0x5d, 0x2f, 0x0a, 0x42, 0xb1, 0x59, 0x8e, 0xe8, 0x9f, 0x91, 0x9c, 0x83, + 0x55, 0x4e, 0x06, 0x4b, 0x7a, 0xf6, 0x0f, 0x14, 0x60, 0x4c, 0xb6, 0xf8, 0x66, 0x3b, 0x88, 0x9d, + 0x13, 0xb8, 0x96, 0xaf, 0x1b, 0xd7, 0xf2, 0x27, 0xba, 0xc5, 0xc9, 0x60, 0x5d, 0xca, 0xbd, 0x8e, + 0x6f, 0xa7, 0xae, 0xe3, 0xa7, 0x7a, 0x93, 0xea, 0x7e, 0x0d, 0xff, 0x33, 0x0b, 0xa6, 0x0c, 0xfc, + 0x13, 0xb8, 0x0d, 0x96, 0xcc, 0xdb, 0xe0, 0x89, 0x9e, 0xdf, 0x90, 0x73, 0x0b, 0x7c, 0x6f, 0x31, + 0xd5, 0x77, 0x76, 0xfa, 0xbf, 0x07, 0x03, 0x5b, 0x4e, 0xe8, 0x76, 0x8b, 0xc7, 0xdb, 0x51, 0x69, + 0xf6, 0x86, 0x13, 0xba, 0xfc, 0x0c, 0x7f, 0x56, 0x25, 0xfb, 0x74, 0x42, 0xb7, 0xa7, 0x23, 0x1d, + 0x6b, 0x0a, 0xbd, 0x02, 0x43, 0x51, 0x23, 0x68, 0x29, 0x33, 0xd7, 0x4b, 0x3c, 0x11, 0x28, 0x2d, + 0x39, 0xdc, 0xaf, 0x20, 0xb3, 0x39, 0x5a, 0x8c, 0x05, 0x3e, 0x7a, 0x0b, 0xc6, 0xd8, 0x2f, 0x65, + 0x7f, 0x51, 0xcc, 0xcf, 0x02, 0x51, 0xd7, 0x11, 0xb9, 0x19, 0x8f, 0x51, 0x84, 0x4d, 0x52, 0x33, + 0x9b, 0x50, 0x56, 0x9f, 0xf5, 0x48, 0x1d, 0xa0, 0xfe, 0x43, 0x11, 0x4e, 0x65, 0xac, 0x39, 0x14, + 0x19, 0x33, 0xf1, 0x7c, 0x9f, 0x4b, 0xf5, 0x03, 0xce, 0x45, 0xc4, 0xa4, 0x21, 0x57, 0xac, 0xad, + 0xbe, 0x1b, 0xbd, 0x13, 0x91, 0x74, 0xa3, 0xb4, 0xa8, 0x77, 0xa3, 0xb4, 0xb1, 0x13, 0x1b, 0x6a, + 0xda, 0x90, 0xea, 0xe9, 0x23, 0x9d, 0xd3, 0x3f, 0x29, 0xc2, 0xe9, 0xac, 0xd0, 0x3d, 0xe8, 0x3b, + 0x53, 0x19, 0x81, 0x5e, 0xec, 0x37, 0xe8, 0x0f, 0x4f, 0x13, 0x24, 0x12, 0x7a, 0xcf, 0x9a, 0x39, + 0x82, 0x7a, 0x0e, 0xb3, 0x68, 0x93, 0x79, 0xcd, 0x86, 0x3c, 0x93, 0x93, 0x3c, 0x3e, 0x3e, 0xdd, + 0x77, 0x07, 0x44, 0x0a, 0xa8, 0x28, 0xe5, 0x35, 0x2b, 0x8b, 0x7b, 0x7b, 0xcd, 0xca, 0x96, 0x67, + 0x3c, 0x18, 0xd1, 0xbe, 0xe6, 0x91, 0xce, 0xf8, 0x36, 0xbd, 0xad, 0xb4, 0x7e, 0x3f, 0xd2, 0x59, + 0xff, 0x11, 0x0b, 0x52, 0x36, 0xa5, 0x4a, 0x2d, 0x66, 0xe5, 0xaa, 0xc5, 0x2e, 0xc1, 0x40, 0x18, + 0x34, 0x49, 0x3a, 0x01, 0x0f, 0x0e, 0x9a, 0x04, 0x33, 0x08, 0xc5, 0x88, 0x13, 0x65, 0xc7, 0xa8, + 0x2e, 0xc8, 0x09, 0x11, 0xed, 0x49, 0x18, 0x6c, 0x92, 0x5d, 0xd2, 0x4c, 0x47, 0xb7, 0xbf, 0x45, + 0x0b, 0x31, 0x87, 0xd9, 0xbf, 0x38, 0x00, 0x17, 0xba, 0xfa, 0x9d, 0x53, 0x71, 0x68, 0xd3, 0x89, + 0xc9, 0x7d, 0x67, 0x2f, 0x1d, 0x86, 0xfa, 0x3a, 0x2f, 0xc6, 0x12, 0xce, 0xcc, 0xec, 0x79, 0xd8, + 0xc9, 0x94, 0x12, 0x51, 0x44, 0x9b, 0x14, 0x50, 0x53, 0x29, 0x55, 0x3c, 0x0e, 0xa5, 0xd4, 0x35, + 0x80, 0x28, 0x6a, 0x72, 0xab, 0x05, 0x57, 0xd8, 0xef, 0x27, 0xe1, 0x49, 0xeb, 0xb7, 0x04, 0x04, + 0x6b, 0x58, 0xa8, 0x0a, 0x93, 0xad, 0x30, 0x88, 0xb9, 0x4e, 0xb6, 0xca, 0xcd, 0x9d, 0x06, 0x4d, + 0x97, 0xdf, 0x5a, 0x0a, 0x8e, 0x3b, 0x6a, 0xa0, 0x97, 0x60, 0x44, 0xb8, 0x01, 0xd7, 0x82, 0xa0, + 0x29, 0xd4, 0x40, 0xca, 0x78, 0xa6, 0x9e, 0x80, 0xb0, 0x8e, 0xa7, 0x55, 0x63, 0x8a, 0xde, 0xe1, + 0xcc, 0x6a, 0x5c, 0xd9, 0xab, 0xe1, 0xa5, 0xc2, 0x78, 0x95, 0xfa, 0x0a, 0xe3, 0x95, 0x28, 0xc6, + 0xca, 0x7d, 0xbf, 0x6d, 0x41, 0x4f, 0x55, 0xd2, 0xcf, 0x0d, 0xc0, 0x29, 0xb1, 0x70, 0x1e, 0xf5, + 0x72, 0xb9, 0xd3, 0xb9, 0x5c, 0x8e, 0x43, 0x75, 0xf6, 0xcd, 0x35, 0x73, 0xd2, 0x6b, 0xe6, 0x07, + 0x2d, 0x30, 0xd9, 0x2b, 0xf4, 0xff, 0xe5, 0xc6, 0xf1, 0x7f, 0x29, 0x97, 0x5d, 0x73, 0xe5, 0x05, + 0xf2, 0x01, 0x23, 0xfa, 0xdb, 0xff, 0xc9, 0x82, 0x27, 0x7a, 0x52, 0x44, 0x8b, 0x50, 0x66, 0x3c, + 0xa0, 0x26, 0x9d, 0x3d, 0xa5, 0xcc, 0x21, 0x25, 0x20, 0x87, 0x25, 0x4d, 0x6a, 0xa2, 0xc5, 0x8e, + 0x84, 0x09, 0x4f, 0x67, 0x24, 0x4c, 0x38, 0x63, 0x0c, 0xcf, 0x43, 0x66, 0x4c, 0xf8, 0x95, 0x22, + 0x0c, 0xf1, 0x15, 0x7f, 0x02, 0x62, 0xd8, 0x92, 0xd0, 0xdb, 0x76, 0x09, 0xe4, 0xc5, 0xfb, 0x32, + 0x5b, 0x75, 0x62, 0x87, 0xb3, 0x09, 0xea, 0xb6, 0x4a, 0x34, 0xbc, 0x68, 0xd6, 0xb8, 0xcf, 0x66, + 0x52, 0x8a, 0x49, 0xe0, 0x34, 0xb4, 0xdb, 0xed, 0x8b, 0x00, 0x51, 0x1c, 0x7a, 0xfe, 0x26, 0xa5, + 0x21, 0x42, 0xc2, 0x7d, 0xb2, 0x4b, 0xeb, 0x75, 0x85, 0xcc, 0xfb, 0x90, 0xec, 0x74, 0x05, 0xc0, + 0x1a, 0xc5, 0x99, 0x97, 0xa1, 0xac, 0x90, 0x7b, 0x69, 0x71, 0x46, 0x75, 0xe6, 0xe2, 0xb3, 0x30, + 0x91, 0x6a, 0xeb, 0x48, 0x4a, 0xa0, 0x5f, 0xb2, 0x60, 0x82, 0x77, 0x79, 0xd1, 0xdf, 0x15, 0x67, + 0xea, 0xfb, 0x70, 0xba, 0x99, 0x71, 0xb6, 0x89, 0x19, 0xed, 0xff, 0x2c, 0x54, 0x4a, 0x9f, 0x2c, + 0x28, 0xce, 0x6c, 0x03, 0x5d, 0xa1, 0xeb, 0x96, 0x9e, 0x5d, 0x4e, 0x53, 0xb8, 0x6c, 0x8d, 0xf2, + 0x35, 0xcb, 0xcb, 0xb0, 0x82, 0xda, 0xbf, 0x6d, 0xc1, 0x14, 0xef, 0xf9, 0x4d, 0xb2, 0xa7, 0x76, + 0xf8, 0x87, 0xd9, 0x77, 0x91, 0xc3, 0xa4, 0x90, 0x93, 0xc3, 0x44, 0xff, 0xb4, 0x62, 0xd7, 0x4f, + 0xfb, 0x19, 0x0b, 0xc4, 0x0a, 0x3c, 0x01, 0x51, 0xfe, 0x5b, 0x4d, 0x51, 0x7e, 0x26, 0x7f, 0x51, + 0xe7, 0xc8, 0xf0, 0x7f, 0x66, 0xc1, 0x24, 0x47, 0x48, 0xde, 0x9c, 0x3f, 0xd4, 0x79, 0xe8, 0x27, + 0x19, 0xa1, 0xca, 0x50, 0x9e, 0xfd, 0x51, 0xc6, 0x64, 0x0d, 0x74, 0x9d, 0x2c, 0x57, 0x6e, 0xa0, + 0x23, 0x24, 0xe2, 0x3c, 0x72, 0x2c, 0x70, 0xfb, 0x0f, 0x2d, 0x40, 0xbc, 0x19, 0x83, 0xfd, 0xa1, + 0x4c, 0x05, 0x2b, 0xd5, 0xae, 0x8b, 0xe4, 0xa8, 0x51, 0x10, 0xac, 0x61, 0x1d, 0xcb, 0xf0, 0xa4, + 0x0c, 0x07, 0x8a, 0xbd, 0x0d, 0x07, 0x8e, 0x30, 0xa2, 0x7f, 0x30, 0x08, 0x69, 0xa7, 0x06, 0x74, + 0x17, 0x46, 0x1b, 0x4e, 0xcb, 0x59, 0xf7, 0x9a, 0x5e, 0xec, 0x91, 0xa8, 0x9b, 0xc5, 0xd1, 0x82, + 0x86, 0x27, 0x9e, 0x7a, 0xb5, 0x12, 0x6c, 0xd0, 0x41, 0xb3, 0x00, 0xad, 0xd0, 0xdb, 0xf5, 0x9a, + 0x64, 0x93, 0x69, 0x1c, 0x98, 0x93, 0x28, 0x37, 0xa3, 0x91, 0xa5, 0x58, 0xc3, 0xc8, 0xf0, 0xf7, + 0x2b, 0x3e, 0x3a, 0x7f, 0xbf, 0x81, 0x23, 0xfa, 0xfb, 0x0d, 0xf6, 0xe5, 0xef, 0x87, 0xe1, 0xac, + 0x64, 0x91, 0xe8, 0xff, 0x25, 0xaf, 0x49, 0x04, 0x5f, 0xcc, 0x5d, 0x47, 0x67, 0x0e, 0xf6, 0x2b, + 0x67, 0x71, 0x26, 0x06, 0xce, 0xa9, 0x89, 0x3e, 0x07, 0xd3, 0x4e, 0xb3, 0x19, 0xdc, 0x57, 0xa3, + 0xb6, 0x18, 0x35, 0x9c, 0x26, 0xd7, 0xd8, 0x0f, 0x33, 0xaa, 0xe7, 0x0f, 0xf6, 0x2b, 0xd3, 0x73, + 0x39, 0x38, 0x38, 0xb7, 0x76, 0xca, 0x5d, 0xb0, 0xd4, 0xd3, 0x5d, 0xf0, 0x35, 0x28, 0xb7, 0xc2, + 0xa0, 0xb1, 0xa2, 0xf9, 0x14, 0x5d, 0x64, 0x69, 0xfe, 0x65, 0xe1, 0xe1, 0x7e, 0x65, 0x4c, 0xfd, + 0x61, 0x37, 0x7c, 0x52, 0x21, 0xc3, 0x4b, 0x10, 0x1e, 0xa5, 0x97, 0xe0, 0x36, 0x9c, 0xaa, 0x93, + 0xd0, 0x63, 0xf9, 0x4a, 0xdd, 0xe4, 0xfc, 0x58, 0x83, 0x72, 0x98, 0x3a, 0x31, 0xfb, 0x0a, 0x7e, + 0xa5, 0xc5, 0x64, 0x96, 0x27, 0x64, 0x42, 0xc8, 0xfe, 0x53, 0x0b, 0x86, 0x85, 0x39, 0xfd, 0x09, + 0x30, 0x6a, 0x73, 0x86, 0xbe, 0xbc, 0x92, 0x7d, 0xab, 0xb0, 0xce, 0xe4, 0x6a, 0xca, 0x97, 0x53, + 0x9a, 0xf2, 0x27, 0xba, 0x11, 0xe9, 0xae, 0x23, 0xff, 0xdb, 0x45, 0x18, 0x37, 0x3d, 0x60, 0x4e, + 0x60, 0x08, 0x56, 0x61, 0x38, 0x12, 0xee, 0x56, 0x85, 0x7c, 0x83, 0xee, 0xf4, 0x24, 0x26, 0xd6, + 0x5a, 0xc2, 0xc1, 0x4a, 0x12, 0xc9, 0xf4, 0xe3, 0x2a, 0x3e, 0x42, 0x3f, 0xae, 0x5e, 0x4e, 0x48, + 0x03, 0xc7, 0xe1, 0x84, 0x64, 0x7f, 0x95, 0xdd, 0x6c, 0x7a, 0xf9, 0x09, 0x30, 0x3d, 0xd7, 0xcd, + 0x3b, 0xd0, 0xee, 0xb2, 0xb2, 0x44, 0xa7, 0x72, 0x98, 0x9f, 0x5f, 0xb0, 0xe0, 0x42, 0xc6, 0x57, + 0x69, 0x9c, 0xd0, 0xb3, 0x50, 0x72, 0xda, 0xae, 0xa7, 0xf6, 0xb2, 0xf6, 0x6a, 0x36, 0x27, 0xca, + 0xb1, 0xc2, 0x40, 0x0b, 0x30, 0x45, 0x1e, 0xb4, 0x3c, 0xfe, 0x6c, 0xa9, 0x9b, 0x54, 0x16, 0x79, + 0x40, 0xe0, 0xc5, 0x34, 0x10, 0x77, 0xe2, 0x2b, 0x97, 0xf9, 0x62, 0xae, 0xcb, 0xfc, 0x3f, 0xb4, + 0x60, 0x44, 0xb9, 0xd6, 0x3c, 0xf2, 0xd1, 0xfe, 0x36, 0x73, 0xb4, 0x1f, 0xef, 0x32, 0xda, 0x39, + 0xc3, 0xfc, 0x77, 0x0b, 0xaa, 0xbf, 0xb5, 0x20, 0x8c, 0xfb, 0xe0, 0xb0, 0x5e, 0x81, 0x52, 0x2b, + 0x0c, 0xe2, 0xa0, 0x11, 0x34, 0x05, 0x83, 0x75, 0x3e, 0x89, 0xe8, 0xc0, 0xcb, 0x0f, 0xb5, 0xdf, + 0x58, 0x61, 0xb3, 0xd1, 0x0b, 0xc2, 0x58, 0x30, 0x35, 0xc9, 0xe8, 0x05, 0x61, 0x8c, 0x19, 0x04, + 0xb9, 0x00, 0xb1, 0x13, 0x6e, 0x92, 0x98, 0x96, 0x89, 0xe0, 0x30, 0xf9, 0x87, 0x47, 0x3b, 0xf6, + 0x9a, 0xb3, 0x9e, 0x1f, 0x47, 0x71, 0x38, 0xbb, 0xec, 0xc7, 0xb7, 0x43, 0x2e, 0xaf, 0x69, 0x21, + 0x1a, 0x14, 0x2d, 0xac, 0xd1, 0x95, 0x8e, 0xad, 0xac, 0x8d, 0x41, 0xf3, 0xfd, 0x7d, 0x55, 0x94, + 0x63, 0x85, 0x61, 0xbf, 0xcc, 0xae, 0x12, 0x36, 0x40, 0x47, 0x8b, 0x9e, 0xf0, 0xb5, 0x92, 0x1a, + 0x5a, 0xf6, 0xf8, 0x56, 0xd5, 0x63, 0x34, 0x74, 0x3f, 0xb9, 0x69, 0xc3, 0xba, 0x7b, 0x4f, 0x12, + 0xc8, 0x01, 0x7d, 0x7b, 0x87, 0x59, 0xc6, 0x73, 0x3d, 0xae, 0x80, 0x23, 0x18, 0x62, 0xb0, 0x20, + 0xe5, 0x2c, 0x84, 0xf3, 0x72, 0x4d, 0x2c, 0x72, 0x2d, 0x48, 0xb9, 0x00, 0xe0, 0x04, 0x07, 0x5d, + 0x15, 0xd2, 0xfe, 0x80, 0x91, 0xaa, 0x50, 0x4a, 0xfb, 0xf2, 0xf3, 0x35, 0x71, 0xff, 0x79, 0x18, + 0x51, 0x29, 0x0b, 0x6b, 0x3c, 0xf3, 0x9b, 0x08, 0x95, 0xb3, 0x98, 0x14, 0x63, 0x1d, 0x07, 0xad, + 0xc1, 0x44, 0xc4, 0x55, 0x3d, 0x2a, 0x22, 0x22, 0x57, 0x99, 0x7d, 0x52, 0x9a, 0x73, 0xd4, 0x4d, + 0xf0, 0x21, 0x2b, 0xe2, 0x47, 0x87, 0xf4, 0x4e, 0x4d, 0x93, 0x40, 0xaf, 0xc3, 0x78, 0x33, 0x70, + 0xdc, 0x79, 0xa7, 0xe9, 0xf8, 0x0d, 0xf6, 0xbd, 0x25, 0x33, 0xd3, 0xd3, 0x2d, 0x03, 0x8a, 0x53, + 0xd8, 0x94, 0x31, 0xd3, 0x4b, 0x44, 0x14, 0x4f, 0xc7, 0xdf, 0x24, 0x91, 0x48, 0xb8, 0xc6, 0x18, + 0xb3, 0x5b, 0x39, 0x38, 0x38, 0xb7, 0x36, 0x7a, 0x05, 0x46, 0xe5, 0xe7, 0x6b, 0xbe, 0xd7, 0x89, + 0xed, 0xbd, 0x06, 0xc3, 0x06, 0x26, 0xba, 0x0f, 0x67, 0xe4, 0xff, 0xb5, 0xd0, 0xd9, 0xd8, 0xf0, + 0x1a, 0xc2, 0x97, 0x8f, 0x3b, 0x20, 0xcd, 0x49, 0x8f, 0xa6, 0xc5, 0x2c, 0xa4, 0xc3, 0xfd, 0xca, + 0x25, 0x31, 0x6a, 0x99, 0x70, 0x36, 0x89, 0xd9, 0xf4, 0xd1, 0x0a, 0x9c, 0xda, 0x22, 0x4e, 0x33, + 0xde, 0x5a, 0xd8, 0x22, 0x8d, 0x6d, 0xb9, 0x89, 0x98, 0x47, 0xb7, 0x66, 0xb1, 0x7e, 0xa3, 0x13, + 0x05, 0x67, 0xd5, 0x43, 0x6f, 0xc3, 0x74, 0xab, 0xbd, 0xde, 0xf4, 0xa2, 0xad, 0xd5, 0x20, 0x66, + 0x16, 0x24, 0x2a, 0xe3, 0x9f, 0x70, 0xfd, 0x56, 0xde, 0xec, 0xb5, 0x1c, 0x3c, 0x9c, 0x4b, 0x01, + 0xbd, 0x0f, 0x67, 0x52, 0x8b, 0x41, 0x38, 0xa2, 0x8e, 0xe7, 0xc7, 0x44, 0xae, 0x67, 0x55, 0x10, + 0x8e, 0xa5, 0x59, 0x20, 0x9c, 0xdd, 0xc4, 0x07, 0xb3, 0x2b, 0x7a, 0x8f, 0x56, 0xd6, 0x98, 0x32, + 0xf4, 0x0e, 0x8c, 0xea, 0xab, 0x48, 0x5c, 0x30, 0x97, 0xb3, 0x79, 0x16, 0x6d, 0xb5, 0x71, 0x96, + 0x4e, 0xad, 0x28, 0x1d, 0x86, 0x0d, 0x8a, 0x36, 0x81, 0xec, 0xef, 0x43, 0xb7, 0xa0, 0xd4, 0x68, + 0x7a, 0xc4, 0x8f, 0x97, 0x6b, 0xdd, 0x02, 0xb3, 0x2c, 0x08, 0x1c, 0x31, 0x60, 0x22, 0x88, 0x2c, + 0x2f, 0xc3, 0x8a, 0x82, 0xfd, 0x6b, 0x05, 0xa8, 0xf4, 0x88, 0x48, 0x9c, 0x52, 0x7f, 0x5b, 0x7d, + 0xa9, 0xbf, 0xe7, 0x64, 0xfe, 0xc2, 0xd5, 0x94, 0x4e, 0x20, 0x95, 0x9b, 0x30, 0xd1, 0x0c, 0xa4, + 0xf1, 0xfb, 0x36, 0x47, 0xd6, 0x35, 0xe8, 0x03, 0x3d, 0x0d, 0xea, 0x8d, 0x97, 0xb3, 0xc1, 0xfe, + 0x05, 0x91, 0xdc, 0x57, 0x10, 0xfb, 0xab, 0x05, 0x38, 0xa3, 0x86, 0xf0, 0x1b, 0x77, 0xe0, 0xee, + 0x74, 0x0e, 0xdc, 0x31, 0xbc, 0x21, 0xd9, 0xb7, 0x61, 0x88, 0x07, 0xb6, 0xe9, 0x83, 0x01, 0x7a, + 0xd2, 0x8c, 0x82, 0xa6, 0xae, 0x69, 0x23, 0x12, 0xda, 0x5f, 0xb1, 0x60, 0x62, 0x6d, 0xa1, 0x56, + 0x0f, 0x1a, 0xdb, 0x24, 0x9e, 0xe3, 0x0c, 0x2b, 0x16, 0xfc, 0x8f, 0xf5, 0x90, 0x7c, 0x4d, 0x16, + 0xc7, 0x74, 0x09, 0x06, 0xb6, 0x82, 0x28, 0x4e, 0x3f, 0x30, 0xdf, 0x08, 0xa2, 0x18, 0x33, 0x88, + 0xfd, 0x3b, 0x16, 0x0c, 0xb2, 0xac, 0xbb, 0xbd, 0x52, 0x41, 0xf7, 0xf3, 0x5d, 0xe8, 0x25, 0x18, + 0x22, 0x1b, 0x1b, 0xa4, 0x11, 0x8b, 0x59, 0x95, 0x5e, 0xb2, 0x43, 0x8b, 0xac, 0x94, 0x5e, 0xfa, + 0xac, 0x31, 0xfe, 0x17, 0x0b, 0x64, 0x74, 0x0f, 0xca, 0xb1, 0xb7, 0x43, 0xe6, 0x5c, 0x57, 0x3c, + 0xd1, 0x3d, 0x84, 0x53, 0xf2, 0x9a, 0x24, 0x80, 0x13, 0x5a, 0xf6, 0x57, 0x0a, 0x00, 0x49, 0xbc, + 0x84, 0x5e, 0x9f, 0x38, 0xdf, 0xf1, 0x78, 0x73, 0x39, 0xe3, 0xf1, 0x06, 0x25, 0x04, 0x33, 0x5e, + 0x6e, 0xd4, 0x30, 0x15, 0xfb, 0x1a, 0xa6, 0x81, 0xa3, 0x0c, 0xd3, 0x02, 0x4c, 0x25, 0xf1, 0x1e, + 0xcc, 0xe0, 0x37, 0x4c, 0x48, 0x59, 0x4b, 0x03, 0x71, 0x27, 0xbe, 0x4d, 0xe0, 0x92, 0x8c, 0x7a, + 0x2a, 0xef, 0x1a, 0x66, 0x01, 0x7a, 0x84, 0xac, 0xe0, 0xc9, 0xeb, 0x54, 0x21, 0xf7, 0x75, 0xea, + 0xc7, 0x2d, 0x38, 0x9d, 0x6e, 0x87, 0xb9, 0xe4, 0x7d, 0xd9, 0x82, 0x33, 0xec, 0x8d, 0x8e, 0xb5, + 0xda, 0xf9, 0x22, 0xf8, 0x62, 0x76, 0x1c, 0x8c, 0xee, 0x3d, 0x4e, 0xdc, 0xb1, 0x57, 0xb2, 0x48, + 0xe3, 0xec, 0x16, 0xed, 0x2f, 0x5b, 0x70, 0x2e, 0x37, 0xd9, 0x13, 0xba, 0x02, 0x25, 0xa7, 0xe5, + 0x71, 0x05, 0x98, 0xd8, 0xef, 0x4c, 0x7a, 0xac, 0x2d, 0x73, 0xf5, 0x97, 0x82, 0xaa, 0x24, 0x94, + 0x85, 0xdc, 0x24, 0x94, 0x3d, 0x73, 0x4a, 0xda, 0xdf, 0x67, 0x81, 0xf0, 0xc2, 0xea, 0xe3, 0x90, + 0x79, 0x4b, 0xe6, 0xf0, 0x35, 0x02, 0xce, 0x5f, 0xca, 0x77, 0x4b, 0x13, 0x61, 0xe6, 0xd5, 0xa5, + 0x6e, 0x04, 0x97, 0x37, 0x68, 0xd9, 0x2e, 0x08, 0x68, 0x95, 0x30, 0x9d, 0x55, 0xef, 0xde, 0x5c, + 0x03, 0x70, 0x19, 0xae, 0x96, 0xc9, 0x53, 0x5d, 0x21, 0x55, 0x05, 0xc1, 0x1a, 0x96, 0xfd, 0xef, + 0x0a, 0x30, 0x22, 0x03, 0x9c, 0xb7, 0xfd, 0x7e, 0x24, 0xcb, 0x23, 0x65, 0x3c, 0x62, 0xa9, 0x6f, + 0x29, 0xe1, 0x5a, 0x22, 0x90, 0x27, 0xa9, 0x6f, 0x25, 0x00, 0x27, 0x38, 0xe8, 0x69, 0x18, 0x8e, + 0xda, 0xeb, 0x0c, 0x3d, 0xe5, 0x33, 0x54, 0xe7, 0xc5, 0x58, 0xc2, 0xd1, 0xe7, 0x60, 0x92, 0xd7, + 0x0b, 0x83, 0x96, 0xb3, 0xc9, 0xb5, 0xad, 0x83, 0xca, 0xd9, 0x77, 0x72, 0x25, 0x05, 0x3b, 0xdc, + 0xaf, 0x9c, 0x4e, 0x97, 0x31, 0x3d, 0x7d, 0x07, 0x15, 0xf6, 0xf6, 0xcf, 0x1b, 0xa1, 0xcb, 0xb4, + 0xc3, 0x64, 0x20, 0x01, 0x61, 0x1d, 0xcf, 0x7e, 0x07, 0x50, 0x67, 0xa8, 0x77, 0xf4, 0x06, 0x37, + 0xf8, 0xf2, 0x42, 0xe2, 0x76, 0xd3, 0xdb, 0xeb, 0x2e, 0xad, 0xd2, 0xdc, 0x9f, 0xd7, 0xc2, 0xaa, + 0xbe, 0xfd, 0xd7, 0x8a, 0x30, 0x99, 0x76, 0x70, 0x44, 0x37, 0x60, 0x88, 0xdf, 0x91, 0x82, 0x7c, + 0x97, 0x67, 0x61, 0xcd, 0x2d, 0x92, 0x9d, 0x16, 0xe2, 0x9a, 0x15, 0xf5, 0xd1, 0xdb, 0x30, 0xe2, + 0x06, 0xf7, 0xfd, 0xfb, 0x4e, 0xe8, 0xce, 0xd5, 0x96, 0xc5, 0x72, 0xce, 0x64, 0xb5, 0xab, 0x09, + 0x9a, 0xee, 0x6a, 0xc9, 0x9e, 0x40, 0x12, 0x10, 0xd6, 0xc9, 0xa1, 0x35, 0x16, 0xbe, 0x72, 0xc3, + 0xdb, 0x5c, 0x71, 0x5a, 0xdd, 0xac, 0x7f, 0x17, 0x24, 0x92, 0x46, 0x79, 0x4c, 0xc4, 0xb8, 0xe4, + 0x00, 0x9c, 0x10, 0x42, 0xdf, 0x09, 0xa7, 0xa2, 0x1c, 0xed, 0x5c, 0x5e, 0xe6, 0x8f, 0x6e, 0x0a, + 0xab, 0xf9, 0xc7, 0xa8, 0x10, 0x94, 0xa5, 0xc7, 0xcb, 0x6a, 0xc6, 0xfe, 0xf5, 0x53, 0x60, 0x6c, + 0x62, 0x23, 0x11, 0x94, 0x75, 0x4c, 0x89, 0xa0, 0x30, 0x94, 0xc8, 0x4e, 0x2b, 0xde, 0xab, 0x7a, + 0x61, 0xb7, 0x44, 0x85, 0x8b, 0x02, 0xa7, 0x93, 0xa6, 0x84, 0x60, 0x45, 0x27, 0x3b, 0x5b, 0x57, + 0xf1, 0x43, 0xcc, 0xd6, 0x35, 0x70, 0x82, 0xd9, 0xba, 0x56, 0x61, 0x78, 0xd3, 0x8b, 0x31, 0x69, + 0x05, 0x82, 0x3b, 0xcd, 0x5c, 0x87, 0xd7, 0x39, 0x4a, 0x67, 0x5e, 0x18, 0x01, 0xc0, 0x92, 0x08, + 0x7a, 0x43, 0xed, 0xc0, 0xa1, 0x7c, 0xe1, 0xae, 0xf3, 0xfd, 0x32, 0x73, 0x0f, 0x8a, 0x9c, 0x5c, + 0xc3, 0x0f, 0x9b, 0x93, 0x6b, 0x49, 0x66, 0xd2, 0x2a, 0xe5, 0x9b, 0xea, 0xb3, 0x44, 0x59, 0x3d, + 0xf2, 0x67, 0xdd, 0xd5, 0xb3, 0x8f, 0x95, 0xf3, 0x4f, 0x02, 0x95, 0x58, 0xac, 0xcf, 0x9c, 0x63, + 0xdf, 0x67, 0xc1, 0x99, 0x56, 0x56, 0x22, 0x3e, 0xf1, 0xd6, 0xf4, 0x52, 0xdf, 0x99, 0x06, 0x8d, + 0x06, 0x99, 0x94, 0x9f, 0x89, 0x86, 0xb3, 0x9b, 0xa3, 0x03, 0x1d, 0xae, 0xbb, 0x22, 0x69, 0xd6, + 0x93, 0x39, 0xc9, 0xcb, 0xba, 0xa4, 0x2c, 0x5b, 0xcb, 0x48, 0x94, 0xf5, 0xf1, 0xbc, 0x44, 0x59, + 0x7d, 0xa7, 0xc7, 0x7a, 0x43, 0xa5, 0x2d, 0x1b, 0xcb, 0x5f, 0x4a, 0x3c, 0x29, 0x59, 0xcf, 0x64, + 0x65, 0x6f, 0xa8, 0x64, 0x65, 0x5d, 0xe2, 0xea, 0xf1, 0x54, 0x64, 0x3d, 0x53, 0x94, 0x69, 0x69, + 0xc6, 0x26, 0x8e, 0x27, 0xcd, 0x98, 0x71, 0xd5, 0xf0, 0x4c, 0x57, 0xcf, 0xf4, 0xb8, 0x6a, 0x0c, + 0xba, 0xdd, 0x2f, 0x1b, 0x9e, 0x52, 0x6d, 0xea, 0xa1, 0x52, 0xaa, 0xdd, 0xd5, 0x53, 0x94, 0xa1, + 0x1e, 0x39, 0xb8, 0x28, 0x52, 0x9f, 0x89, 0xc9, 0xee, 0xea, 0x17, 0xe0, 0xa9, 0x7c, 0xba, 0xea, + 0x9e, 0xeb, 0xa4, 0x9b, 0x79, 0x05, 0x76, 0x24, 0x3c, 0x3b, 0x7d, 0x32, 0x09, 0xcf, 0xce, 0x1c, + 0x7b, 0xc2, 0xb3, 0xb3, 0x27, 0x90, 0xf0, 0xec, 0xb1, 0x0f, 0x35, 0xe1, 0xd9, 0xf4, 0x23, 0x48, + 0x78, 0xb6, 0x9a, 0x24, 0x3c, 0x3b, 0x97, 0x3f, 0x25, 0x19, 0xf6, 0xc3, 0x39, 0x69, 0xce, 0xee, + 0x32, 0x23, 0x02, 0x1e, 0x81, 0x43, 0x04, 0xfe, 0xcb, 0x4e, 0xee, 0x9c, 0x15, 0xa6, 0x83, 0x4f, + 0x89, 0x02, 0xe1, 0x84, 0x14, 0xa5, 0x9b, 0xa4, 0x3d, 0x7b, 0xbc, 0x8b, 0x1e, 0x37, 0x4b, 0x43, + 0xd6, 0x25, 0xd9, 0xd9, 0xeb, 0x3c, 0xd9, 0xd9, 0xf9, 0xfc, 0x93, 0x3c, 0x7d, 0xdd, 0x99, 0x29, + 0xce, 0xbe, 0xbf, 0x00, 0x17, 0xbb, 0xef, 0x8b, 0x44, 0x3d, 0x57, 0x4b, 0x9e, 0x93, 0x52, 0xea, + 0x39, 0x2e, 0x5b, 0x25, 0x58, 0x7d, 0x87, 0x39, 0xba, 0x0e, 0x53, 0xca, 0xf0, 0xb8, 0xe9, 0x35, + 0xf6, 0xb4, 0xa4, 0xd1, 0xca, 0xc1, 0xb2, 0x9e, 0x46, 0xc0, 0x9d, 0x75, 0xd0, 0x1c, 0x4c, 0x18, + 0x85, 0xcb, 0x55, 0x21, 0x43, 0x29, 0x7d, 0x60, 0xdd, 0x04, 0xe3, 0x34, 0xbe, 0xfd, 0xd3, 0x16, + 0x3c, 0x96, 0x93, 0x4b, 0xa4, 0xef, 0x28, 0x3e, 0x1b, 0x30, 0xd1, 0x32, 0xab, 0xf6, 0x08, 0xf6, + 0x65, 0x64, 0x2c, 0x51, 0x7d, 0x4d, 0x01, 0x70, 0x9a, 0xa8, 0xfd, 0x55, 0x0b, 0x2e, 0x74, 0x35, + 0x42, 0x41, 0x18, 0xce, 0x6e, 0xee, 0x44, 0xce, 0x42, 0x48, 0x5c, 0xe2, 0xc7, 0x9e, 0xd3, 0xac, + 0xb7, 0x48, 0x43, 0x53, 0xb0, 0x32, 0x5b, 0x9f, 0xeb, 0x2b, 0xf5, 0xb9, 0x4e, 0x0c, 0x9c, 0x53, + 0x13, 0x2d, 0x01, 0xea, 0x84, 0x88, 0x19, 0x66, 0xd1, 0x1c, 0x3b, 0xe9, 0xe1, 0x8c, 0x1a, 0xf3, + 0x57, 0x7e, 0xf3, 0xf7, 0x2e, 0x7e, 0xec, 0xb7, 0x7e, 0xef, 0xe2, 0xc7, 0x7e, 0xfb, 0xf7, 0x2e, + 0x7e, 0xec, 0xbb, 0x0f, 0x2e, 0x5a, 0xbf, 0x79, 0x70, 0xd1, 0xfa, 0xad, 0x83, 0x8b, 0xd6, 0x6f, + 0x1f, 0x5c, 0xb4, 0x7e, 0xf7, 0xe0, 0xa2, 0xf5, 0x95, 0xdf, 0xbf, 0xf8, 0xb1, 0xb7, 0x0a, 0xbb, + 0xcf, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe3, 0xc5, 0xa7, 0xa5, 0x2c, 0xed, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/core/v1/generated.proto b/vendor/k8s.io/api/core/v1/generated.proto index 81e4fcbc13..bb88fb27cf 100644 --- a/vendor/k8s.io/api/core/v1/generated.proto +++ b/vendor/k8s.io/api/core/v1/generated.proto @@ -2084,13 +2084,6 @@ message NodeSpec { // +optional optional string podCIDR = 1; - // podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this - // field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for - // each of IPv4 and IPv6. - // +optional - // +patchStrategy=merge - repeated string podCIDRs = 7; - // ID of the node assigned by the cloud provider in the format: :// // +optional optional string providerID = 3; @@ -2143,9 +2136,6 @@ message NodeStatus { // List of addresses reachable to the node. // Queried from cloud provider, if available. // More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses - // Note: This field is declared as mergeable, but the merge key is not sufficiently - // unique, which can cause data corruption when it is merged. Callers should instead - // use a full-replacement patch. See http://pr.k8s.io/79391 for an example. // +optional // +patchMergeKey=type // +patchStrategy=merge @@ -2852,14 +2842,6 @@ message PodExecOptions { repeated string command = 6; } -// IP address information for entries in the (plural) PodIPs field. -// Each entry includes: -// IP: An IP address allocated to the pod. Routable at least within the cluster. -message PodIP { - // ip is an IP address (IPv4 or IPv6) assigned to the pod - optional string ip = 1; -} - // PodList is a list of Pods. message PodList { // Standard list metadata. @@ -3233,17 +3215,6 @@ message PodSpec { // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. // +optional optional string preemptionPolicy = 31; - - // Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. - // This field will be autopopulated at admission time by the RuntimeClass admission controller. If - // the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. - // The RuntimeClass admission controller will reject Pod create requests which have the overhead already - // set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value - // defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. - // More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md - // This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature. - // +optional - map overhead = 32; } // PodStatus represents information about the status of a pod. Status may trail the actual @@ -3306,14 +3277,6 @@ message PodStatus { // +optional optional string podIP = 6; - // podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must - // match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list - // is empty if no IPs have been allocated yet. - // +optional - // +patchStrategy=merge - // +patchMergeKey=ip - repeated PodIP podIPs = 12; - // RFC 3339 date and time at which the object was acknowledged by the Kubelet. // This is before the Kubelet pulled the container image(s) for the pod. // +optional diff --git a/vendor/k8s.io/api/core/v1/types.go b/vendor/k8s.io/api/core/v1/types.go index 42573b99e2..d014d0baf3 100644 --- a/vendor/k8s.io/api/core/v1/types.go +++ b/vendor/k8s.io/api/core/v1/types.go @@ -3001,16 +3001,6 @@ type PodSpec struct { // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. // +optional PreemptionPolicy *PreemptionPolicy `json:"preemptionPolicy,omitempty" protobuf:"bytes,31,opt,name=preemptionPolicy"` - // Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. - // This field will be autopopulated at admission time by the RuntimeClass admission controller. If - // the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. - // The RuntimeClass admission controller will reject Pod create requests which have the overhead already - // set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value - // defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. - // More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md - // This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature. - // +optional - Overhead ResourceList `json:"overhead,omitempty" protobuf:"bytes,32,opt,name=overhead"` } const ( @@ -3126,14 +3116,6 @@ type PodDNSConfigOption struct { Value *string `json:"value,omitempty" protobuf:"bytes,2,opt,name=value"` } -// IP address information for entries in the (plural) PodIPs field. -// Each entry includes: -// IP: An IP address allocated to the pod. Routable at least within the cluster. -type PodIP struct { - // ip is an IP address (IPv4 or IPv6) assigned to the pod - IP string `json:"ip,omitempty" protobuf:"bytes,1,opt,name=ip"` -} - // PodStatus represents information about the status of a pod. Status may trail the actual // state of a system, especially if the node that hosts the pod cannot contact the control // plane. @@ -3189,14 +3171,6 @@ type PodStatus struct { // +optional PodIP string `json:"podIP,omitempty" protobuf:"bytes,6,opt,name=podIP"` - // podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must - // match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list - // is empty if no IPs have been allocated yet. - // +optional - // +patchStrategy=merge - // +patchMergeKey=ip - PodIPs []PodIP `json:"podIPs,omitempty" protobuf:"bytes,12,rep,name=podIPs" patchStrategy:"merge" patchMergeKey:"ip"` - // RFC 3339 date and time at which the object was acknowledged by the Kubelet. // This is before the Kubelet pulled the container image(s) for the pod. // +optional @@ -3917,14 +3891,6 @@ type NodeSpec struct { // PodCIDR represents the pod IP range assigned to the node. // +optional PodCIDR string `json:"podCIDR,omitempty" protobuf:"bytes,1,opt,name=podCIDR"` - - // podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this - // field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for - // each of IPv4 and IPv6. - // +optional - // +patchStrategy=merge - PodCIDRs []string `json:"podCIDRs,omitempty" protobuf:"bytes,7,opt,name=podCIDRs" patchStrategy:"merge"` - // ID of the node assigned by the cloud provider in the format: :// // +optional ProviderID string `json:"providerID,omitempty" protobuf:"bytes,3,opt,name=providerID"` @@ -4106,9 +4072,6 @@ type NodeStatus struct { // List of addresses reachable to the node. // Queried from cloud provider, if available. // More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses - // Note: This field is declared as mergeable, but the merge key is not sufficiently - // unique, which can cause data corruption when it is merged. Callers should instead - // use a full-replacement patch. See http://pr.k8s.io/79391 for an example. // +optional // +patchMergeKey=type // +patchStrategy=merge @@ -4208,6 +4171,9 @@ type NodeConditionType string const ( // NodeReady means kubelet is healthy and ready to accept pods. NodeReady NodeConditionType = "Ready" + // NodeOutOfDisk means the kubelet will not accept new pods due to insufficient free disk + // space on the node. + NodeOutOfDisk NodeConditionType = "OutOfDisk" // NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory. NodeMemoryPressure NodeConditionType = "MemoryPressure" // NodeDiskPressure means the kubelet is under pressure due to insufficient available disk. diff --git a/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go index 790dfc489d..c0489ca170 100644 --- a/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -1112,7 +1112,6 @@ func (NodeSelectorTerm) SwaggerDoc() map[string]string { var map_NodeSpec = map[string]string{ "": "NodeSpec describes the attributes that a node is created with.", "podCIDR": "PodCIDR represents the pod IP range assigned to the node.", - "podCIDRs": "podCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. If this field is specified, the 0th entry must match the podCIDR field. It may contain at most 1 value for each of IPv4 and IPv6.", "providerID": "ID of the node assigned by the cloud provider in the format: ://", "unschedulable": "Unschedulable controls node schedulability of new pods. By default, node is schedulable. More info: https://kubernetes.io/docs/concepts/nodes/node/#manual-node-administration", "taints": "If specified, the node's taints.", @@ -1130,7 +1129,7 @@ var map_NodeStatus = map[string]string{ "allocatable": "Allocatable represents the resources of a node that are available for scheduling. Defaults to Capacity.", "phase": "NodePhase is the recently observed lifecycle phase of the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#phase The field is never populated, and now is deprecated.", "conditions": "Conditions is an array of current observed node conditions. More info: https://kubernetes.io/docs/concepts/nodes/node/#condition", - "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses Note: This field is declared as mergeable, but the merge key is not sufficiently unique, which can cause data corruption when it is merged. Callers should instead use a full-replacement patch. See http://pr.k8s.io/79391 for an example.", + "addresses": "List of addresses reachable to the node. Queried from cloud provider, if available. More info: https://kubernetes.io/docs/concepts/nodes/node/#addresses", "daemonEndpoints": "Endpoints of daemons running on the Node.", "nodeInfo": "Set of ids/uuids to uniquely identify the node. More info: https://kubernetes.io/docs/concepts/nodes/node/#info", "images": "List of container images on this node", @@ -1447,15 +1446,6 @@ func (PodExecOptions) SwaggerDoc() map[string]string { return map_PodExecOptions } -var map_PodIP = map[string]string{ - "": "IP address information for entries in the (plural) PodIPs field. Each entry includes:\n IP: An IP address allocated to the pod. Routable at least within the cluster.", - "ip": "ip is an IP address (IPv4 or IPv6) assigned to the pod", -} - -func (PodIP) SwaggerDoc() map[string]string { - return map_PodIP -} - var map_PodList = map[string]string{ "": "PodList is a list of Pods.", "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", @@ -1567,7 +1557,6 @@ var map_PodSpec = map[string]string{ "runtimeClassName": "RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. If unset or empty, the \"legacy\" RuntimeClass will be used, which is an implicit class with an empty definition that uses the default runtime handler. More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md This is a beta feature as of Kubernetes v1.14.", "enableServiceLinks": "EnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.", "preemptionPolicy": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature.", - "overhead": "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. This field will be autopopulated at admission time by the RuntimeClass admission controller. If the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. The RuntimeClass admission controller will reject Pod create requests which have the overhead already set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.", } func (PodSpec) SwaggerDoc() map[string]string { @@ -1583,7 +1572,6 @@ var map_PodStatus = map[string]string{ "nominatedNodeName": "nominatedNodeName is set only when this pod preempts other pods on the node, but it cannot be scheduled right away as preemption victims receive their graceful termination periods. This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to give the resources on this node to a higher priority pod that is created after preemption. As a result, this field may be different than PodSpec.nodeName when the pod is scheduled.", "hostIP": "IP address of the host to which the pod is assigned. Empty if not yet scheduled.", "podIP": "IP address allocated to the pod. Routable at least within the cluster. Empty if not yet allocated.", - "podIPs": "podIPs holds the IP addresses allocated to the pod. If this field is specified, the 0th entry must match the podIP field. Pods may be allocated at most 1 value for each of IPv4 and IPv6. This list is empty if no IPs have been allocated yet.", "startTime": "RFC 3339 date and time at which the object was acknowledged by the Kubelet. This is before the Kubelet pulled the container image(s) for the pod.", "initContainerStatuses": "The list has one entry per init container in the manifest. The most recent successful init container will have ready = true, the most recently started container will have startTime set. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", "containerStatuses": "The list has one entry per container in the manifest. Each entry is currently the output of `docker inspect`. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#pod-and-container-status", diff --git a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go index 09010f28b5..114e1974cd 100644 --- a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -2470,11 +2470,6 @@ func (in *NodeSelectorTerm) DeepCopy() *NodeSelectorTerm { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *NodeSpec) DeepCopyInto(out *NodeSpec) { *out = *in - if in.PodCIDRs != nil { - in, out := &in.PodCIDRs, &out.PodCIDRs - *out = make([]string, len(*in)) - copy(*out, *in) - } if in.Taints != nil { in, out := &in.Taints, &out.Taints *out = make([]Taint, len(*in)) @@ -3303,22 +3298,6 @@ func (in *PodExecOptions) DeepCopyObject() runtime.Object { return nil } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodIP) DeepCopyInto(out *PodIP) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodIP. -func (in *PodIP) DeepCopy() *PodIP { - if in == nil { - return nil - } - out := new(PodIP) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PodList) DeepCopyInto(out *PodList) { *out = *in @@ -3654,13 +3633,6 @@ func (in *PodSpec) DeepCopyInto(out *PodSpec) { *out = new(PreemptionPolicy) **out = **in } - if in.Overhead != nil { - in, out := &in.Overhead, &out.Overhead - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } return } @@ -3684,11 +3656,6 @@ func (in *PodStatus) DeepCopyInto(out *PodStatus) { (*in)[i].DeepCopyInto(&(*out)[i]) } } - if in.PodIPs != nil { - in, out := &in.PodIPs, &out.PodIPs - *out = make([]PodIP, len(*in)) - copy(*out, *in) - } if in.StartTime != nil { in, out := &in.StartTime, &out.StartTime *out = (*in).DeepCopy() diff --git a/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go b/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go index 750b8cdb5e..4439535dcb 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go @@ -93,7 +93,7 @@ import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -910,7 +910,7 @@ func (m *DeploymentRollback) MarshalTo(dAtA []byte) (int, error) { for k := range m.UpdatedAnnotations { keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, string(k)) } - sortkeys.Strings(keysForUpdatedAnnotations) + github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) for _, k := range keysForUpdatedAnnotations { dAtA[i] = 0x12 i++ @@ -2782,7 +2782,7 @@ func (m *ScaleStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.Selector { keysForSelector = append(keysForSelector, string(k)) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) for _, k := range keysForSelector { dAtA[i] = 0x12 i++ @@ -3891,7 +3891,7 @@ func (this *DeploymentRollback) String() string { for k := range this.UpdatedAnnotations { keysForUpdatedAnnotations = append(keysForUpdatedAnnotations, k) } - sortkeys.Strings(keysForUpdatedAnnotations) + github_com_gogo_protobuf_sortkeys.Strings(keysForUpdatedAnnotations) mapStringForUpdatedAnnotations := "map[string]string{" for _, k := range keysForUpdatedAnnotations { mapStringForUpdatedAnnotations += fmt.Sprintf("%v: %v,", k, this.UpdatedAnnotations[k]) @@ -4418,7 +4418,7 @@ func (this *ScaleStatus) String() string { for k := range this.Selector { keysForSelector = append(keysForSelector, k) } - sortkeys.Strings(keysForSelector) + github_com_gogo_protobuf_sortkeys.Strings(keysForSelector) mapStringForSelector := "map[string]string{" for _, k := range keysForSelector { mapStringForSelector += fmt.Sprintf("%v: %v,", k, this.Selector[k]) diff --git a/vendor/k8s.io/api/node/v1alpha1/generated.pb.go b/vendor/k8s.io/api/node/v1alpha1/generated.pb.go index 849dc6e2b9..16f5af9299 100644 --- a/vendor/k8s.io/api/node/v1alpha1/generated.pb.go +++ b/vendor/k8s.io/api/node/v1alpha1/generated.pb.go @@ -24,7 +24,6 @@ limitations under the License. k8s.io/kubernetes/vendor/k8s.io/api/node/v1alpha1/generated.proto It has these top-level messages: - Overhead RuntimeClass RuntimeClassList RuntimeClassSpec @@ -35,12 +34,6 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import k8s_io_apimachinery_pkg_api_resource "k8s.io/apimachinery/pkg/api/resource" - -import k8s_io_api_core_v1 "k8s.io/api/core/v1" - -import sortkeys "github.com/gogo/protobuf/sortkeys" - import strings "strings" import reflect "reflect" @@ -57,77 +50,23 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *Overhead) Reset() { *m = Overhead{} } -func (*Overhead) ProtoMessage() {} -func (*Overhead) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - func (m *RuntimeClass) Reset() { *m = RuntimeClass{} } func (*RuntimeClass) ProtoMessage() {} -func (*RuntimeClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +func (*RuntimeClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } func (m *RuntimeClassList) Reset() { *m = RuntimeClassList{} } func (*RuntimeClassList) ProtoMessage() {} -func (*RuntimeClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (*RuntimeClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } func (m *RuntimeClassSpec) Reset() { *m = RuntimeClassSpec{} } func (*RuntimeClassSpec) ProtoMessage() {} -func (*RuntimeClassSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } +func (*RuntimeClassSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } func init() { - proto.RegisterType((*Overhead)(nil), "k8s.io.api.node.v1alpha1.Overhead") proto.RegisterType((*RuntimeClass)(nil), "k8s.io.api.node.v1alpha1.RuntimeClass") proto.RegisterType((*RuntimeClassList)(nil), "k8s.io.api.node.v1alpha1.RuntimeClassList") proto.RegisterType((*RuntimeClassSpec)(nil), "k8s.io.api.node.v1alpha1.RuntimeClassSpec") } -func (m *Overhead) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Overhead) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.PodFixed) > 0 { - keysForPodFixed := make([]string, 0, len(m.PodFixed)) - for k := range m.PodFixed { - keysForPodFixed = append(keysForPodFixed, string(k)) - } - sortkeys.Strings(keysForPodFixed) - for _, k := range keysForPodFixed { - dAtA[i] = 0xa - i++ - v := m.PodFixed[k8s_io_api_core_v1.ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n1, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - } - return i, nil -} - func (m *RuntimeClass) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -146,19 +85,19 @@ func (m *RuntimeClass) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n2, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n2 + i += n1 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n3, err := m.Spec.MarshalTo(dAtA[i:]) + n2, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n3 + i += n2 return i, nil } @@ -180,11 +119,11 @@ func (m *RuntimeClassList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n4, err := m.ListMeta.MarshalTo(dAtA[i:]) + n3, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n4 + i += n3 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -219,16 +158,6 @@ func (m *RuntimeClassSpec) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.RuntimeHandler))) i += copy(dAtA[i:], m.RuntimeHandler) - if m.Overhead != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Overhead.Size())) - n5, err := m.Overhead.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n5 - } return i, nil } @@ -241,21 +170,6 @@ func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return offset + 1 } -func (m *Overhead) Size() (n int) { - var l int - _ = l - if len(m.PodFixed) > 0 { - for k, v := range m.PodFixed { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } - } - return n -} - func (m *RuntimeClass) Size() (n int) { var l int _ = l @@ -285,10 +199,6 @@ func (m *RuntimeClassSpec) Size() (n int) { _ = l l = len(m.RuntimeHandler) n += 1 + l + sovGenerated(uint64(l)) - if m.Overhead != nil { - l = m.Overhead.Size() - n += 1 + l + sovGenerated(uint64(l)) - } return n } @@ -305,26 +215,6 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (this *Overhead) String() string { - if this == nil { - return "nil" - } - keysForPodFixed := make([]string, 0, len(this.PodFixed)) - for k := range this.PodFixed { - keysForPodFixed = append(keysForPodFixed, string(k)) - } - sortkeys.Strings(keysForPodFixed) - mapStringForPodFixed := "k8s_io_api_core_v1.ResourceList{" - for _, k := range keysForPodFixed { - mapStringForPodFixed += fmt.Sprintf("%v: %v,", k, this.PodFixed[k8s_io_api_core_v1.ResourceName(k)]) - } - mapStringForPodFixed += "}" - s := strings.Join([]string{`&Overhead{`, - `PodFixed:` + mapStringForPodFixed + `,`, - `}`, - }, "") - return s -} func (this *RuntimeClass) String() string { if this == nil { return "nil" @@ -353,7 +243,6 @@ func (this *RuntimeClassSpec) String() string { } s := strings.Join([]string{`&RuntimeClassSpec{`, `RuntimeHandler:` + fmt.Sprintf("%v", this.RuntimeHandler) + `,`, - `Overhead:` + strings.Replace(fmt.Sprintf("%v", this.Overhead), "Overhead", "Overhead", 1) + `,`, `}`, }, "") return s @@ -366,179 +255,6 @@ func valueToStringGenerated(v interface{}) string { pv := reflect.Indirect(rv).Interface() return fmt.Sprintf("*%v", pv) } -func (m *Overhead) 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: Overhead: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Overhead: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PodFixed", 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 > l { - return io.ErrUnexpectedEOF - } - if m.PodFixed == nil { - m.PodFixed = make(k8s_io_api_core_v1.ResourceList) - } - var mapkey k8s_io_api_core_v1.ResourceName - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - 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 > l { - return io.ErrUnexpectedEOF - } - mapkey = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.PodFixed[k8s_io_api_core_v1.ResourceName(mapkey)] = *mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *RuntimeClass) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -818,39 +534,6 @@ func (m *RuntimeClassSpec) Unmarshal(dAtA []byte) error { } m.RuntimeHandler = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 2: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Overhead", 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 > l { - return io.ErrUnexpectedEOF - } - if m.Overhead == nil { - m.Overhead = &Overhead{} - } - if err := m.Overhead.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -982,42 +665,32 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 580 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x53, 0x3d, 0x6f, 0xd3, 0x40, - 0x18, 0xce, 0xa5, 0xad, 0x64, 0xae, 0x1f, 0xaa, 0x3c, 0xa0, 0x28, 0x83, 0x13, 0x79, 0x40, 0x11, - 0x52, 0xcf, 0xa4, 0x42, 0xa8, 0x62, 0x40, 0xc2, 0x7c, 0x08, 0x44, 0xa0, 0x60, 0x36, 0xc4, 0xc0, - 0xc5, 0x7e, 0x71, 0x8c, 0x63, 0x9f, 0x75, 0x3e, 0x47, 0x64, 0x43, 0x2c, 0x48, 0x4c, 0xfc, 0x04, - 0xfe, 0x08, 0xcc, 0x19, 0x33, 0xa1, 0x4e, 0x29, 0x31, 0xff, 0x82, 0x09, 0xd9, 0x3e, 0xa7, 0xf9, - 0x20, 0x34, 0x6c, 0xbe, 0xf3, 0xf3, 0x71, 0xcf, 0xf3, 0xde, 0xe1, 0xbb, 0xfe, 0x49, 0x4c, 0x3c, - 0x66, 0xf8, 0x49, 0x17, 0x78, 0x08, 0x02, 0x62, 0x63, 0x00, 0xa1, 0xc3, 0xb8, 0x21, 0x7f, 0xd0, - 0xc8, 0x33, 0x42, 0xe6, 0x80, 0x31, 0x68, 0xd3, 0x7e, 0xd4, 0xa3, 0x6d, 0xc3, 0x85, 0x10, 0x38, - 0x15, 0xe0, 0x90, 0x88, 0x33, 0xc1, 0xd4, 0x5a, 0x81, 0x24, 0x34, 0xf2, 0x48, 0x86, 0x24, 0x25, - 0xb2, 0x7e, 0xe4, 0x7a, 0xa2, 0x97, 0x74, 0x89, 0xcd, 0x02, 0xc3, 0x65, 0x2e, 0x33, 0x72, 0x42, - 0x37, 0x79, 0x9b, 0xaf, 0xf2, 0x45, 0xfe, 0x55, 0x08, 0xd5, 0xf5, 0x39, 0x4b, 0x9b, 0xf1, 0xcc, - 0x72, 0xd9, 0xac, 0x7e, 0xf3, 0x02, 0x13, 0x50, 0xbb, 0xe7, 0x85, 0xc0, 0x87, 0x46, 0xe4, 0xbb, - 0x39, 0x89, 0x43, 0xcc, 0x12, 0x6e, 0xc3, 0x7f, 0xb1, 0x62, 0x23, 0x00, 0x41, 0xff, 0xe6, 0x65, - 0xac, 0x63, 0xf1, 0x24, 0x14, 0x5e, 0xb0, 0x6a, 0x73, 0xeb, 0x32, 0x42, 0x6c, 0xf7, 0x20, 0xa0, - 0xcb, 0x3c, 0x7d, 0x5c, 0xc5, 0xca, 0xe9, 0x00, 0x78, 0x0f, 0xa8, 0xa3, 0xfe, 0x40, 0x58, 0x89, - 0x98, 0xf3, 0xd0, 0x7b, 0x0f, 0x4e, 0x0d, 0x35, 0xb7, 0x5a, 0xbb, 0xc7, 0x37, 0xc8, 0xba, 0x8a, - 0x49, 0x49, 0x23, 0xcf, 0x25, 0xe5, 0x41, 0x28, 0xf8, 0xd0, 0xfc, 0x84, 0x46, 0x93, 0x46, 0x25, - 0x9d, 0x34, 0x94, 0x72, 0xff, 0xf7, 0xa4, 0xd1, 0x58, 0xed, 0x97, 0x58, 0xb2, 0xb2, 0x8e, 0x17, - 0x8b, 0x8f, 0xe7, 0xff, 0x84, 0x3c, 0xa3, 0x01, 0x7c, 0x3e, 0x6f, 0x1c, 0x6d, 0x32, 0x01, 0xf2, - 0x22, 0xa1, 0xa1, 0xf0, 0xc4, 0xd0, 0x9a, 0x65, 0xa9, 0xfb, 0x78, 0x7f, 0xe1, 0x90, 0xea, 0x21, - 0xde, 0xf2, 0x61, 0x58, 0x43, 0x4d, 0xd4, 0xba, 0x62, 0x65, 0x9f, 0xea, 0x7d, 0xbc, 0x33, 0xa0, - 0xfd, 0x04, 0x6a, 0xd5, 0x26, 0x6a, 0xed, 0x1e, 0x93, 0xb9, 0xdc, 0x33, 0x2f, 0x12, 0xf9, 0x6e, - 0x5e, 0xc4, 0xaa, 0x57, 0x41, 0xbe, 0x5d, 0x3d, 0x41, 0xfa, 0x77, 0x84, 0xf7, 0xac, 0xa2, 0xf5, - 0x7b, 0x7d, 0x1a, 0xc7, 0xea, 0x1b, 0xac, 0x64, 0x73, 0x76, 0xa8, 0xa0, 0xb9, 0xe3, 0x62, 0xab, - 0x2b, 0xea, 0x31, 0xc9, 0xd0, 0x64, 0xd0, 0x26, 0xa7, 0xdd, 0x77, 0x60, 0x8b, 0xa7, 0x20, 0xa8, - 0xa9, 0xca, 0x52, 0xf1, 0xc5, 0x9e, 0x35, 0x53, 0x55, 0x3b, 0x78, 0x3b, 0x8e, 0xc0, 0x96, 0x67, - 0xbf, 0xbe, 0x7e, 0x66, 0xf3, 0xe7, 0x7a, 0x19, 0x81, 0x6d, 0xee, 0x49, 0xdd, 0xed, 0x6c, 0x65, - 0xe5, 0x2a, 0xfa, 0x37, 0x84, 0x0f, 0xe7, 0x81, 0xd9, 0x80, 0xd4, 0xd7, 0x2b, 0x21, 0xc8, 0x66, - 0x21, 0x32, 0x76, 0x1e, 0xe1, 0xb0, 0xbc, 0x17, 0xe5, 0xce, 0x5c, 0x80, 0x27, 0x78, 0xc7, 0x13, - 0x10, 0xc4, 0xb5, 0x6a, 0x7e, 0xeb, 0xae, 0x6d, 0x96, 0xc0, 0xdc, 0x97, 0x92, 0x3b, 0x8f, 0x33, - 0xb2, 0x55, 0x68, 0xe8, 0x5f, 0x97, 0xce, 0x9f, 0x45, 0x53, 0xef, 0xe0, 0x03, 0xf9, 0x14, 0x1e, - 0xd1, 0xd0, 0xe9, 0x03, 0x2f, 0x86, 0x6f, 0x5e, 0x95, 0x12, 0x07, 0xd6, 0xc2, 0x5f, 0x6b, 0x09, - 0xad, 0x76, 0xb0, 0xc2, 0xe4, 0x85, 0x97, 0x35, 0xeb, 0x97, 0x3f, 0x0d, 0x73, 0x2f, 0xcb, 0x5b, - 0xae, 0xac, 0x99, 0x82, 0x49, 0x46, 0x53, 0xad, 0x32, 0x9e, 0x6a, 0x95, 0xb3, 0xa9, 0x56, 0xf9, - 0x90, 0x6a, 0x68, 0x94, 0x6a, 0x68, 0x9c, 0x6a, 0xe8, 0x2c, 0xd5, 0xd0, 0xcf, 0x54, 0x43, 0x5f, - 0x7e, 0x69, 0x95, 0x57, 0x4a, 0x29, 0xf8, 0x27, 0x00, 0x00, 0xff, 0xff, 0xe3, 0x77, 0x13, 0xf2, - 0x2c, 0x05, 0x00, 0x00, + // 421 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x41, 0x6b, 0xd4, 0x40, + 0x14, 0xc7, 0x33, 0xb5, 0x85, 0x75, 0x5a, 0x4b, 0xc9, 0x41, 0xc2, 0x1e, 0xa6, 0x65, 0x0f, 0x52, + 0x04, 0x67, 0xdc, 0x22, 0xe2, 0x49, 0x30, 0x5e, 0x14, 0x2b, 0x42, 0xbc, 0x89, 0x07, 0x27, 0xc9, + 0x33, 0x19, 0xb3, 0xc9, 0x0c, 0x99, 0x49, 0xc0, 0x9b, 0x1f, 0xc1, 0x2f, 0xa4, 0xe7, 0x3d, 0xf6, + 0xd8, 0x53, 0x71, 0xe3, 0x17, 0x91, 0x99, 0x64, 0xbb, 0xdb, 0x2e, 0xc5, 0xbd, 0xe5, 0xbd, 0xf9, + 0xff, 0x7f, 0xef, 0xfd, 0x5f, 0xf0, 0xab, 0xe2, 0x85, 0xa6, 0x42, 0xb2, 0xa2, 0x89, 0xa1, 0xae, + 0xc0, 0x80, 0x66, 0x2d, 0x54, 0xa9, 0xac, 0xd9, 0xf0, 0xc0, 0x95, 0x60, 0x95, 0x4c, 0x81, 0xb5, + 0x53, 0x3e, 0x53, 0x39, 0x9f, 0xb2, 0x0c, 0x2a, 0xa8, 0xb9, 0x81, 0x94, 0xaa, 0x5a, 0x1a, 0xe9, + 0x07, 0xbd, 0x92, 0x72, 0x25, 0xa8, 0x55, 0xd2, 0xa5, 0x72, 0xfc, 0x24, 0x13, 0x26, 0x6f, 0x62, + 0x9a, 0xc8, 0x92, 0x65, 0x32, 0x93, 0xcc, 0x19, 0xe2, 0xe6, 0xab, 0xab, 0x5c, 0xe1, 0xbe, 0x7a, + 0xd0, 0xf8, 0xd9, 0x6a, 0x64, 0xc9, 0x93, 0x5c, 0x54, 0x50, 0x7f, 0x67, 0xaa, 0xc8, 0x6c, 0x43, + 0xb3, 0x12, 0x0c, 0x67, 0xed, 0xc6, 0xf8, 0x31, 0xbb, 0xcb, 0x55, 0x37, 0x95, 0x11, 0x25, 0x6c, + 0x18, 0x9e, 0xff, 0xcf, 0xa0, 0x93, 0x1c, 0x4a, 0x7e, 0xdb, 0x37, 0xf9, 0x8d, 0xf0, 0x41, 0xd4, + 0x4b, 0x5e, 0xcf, 0xb8, 0xd6, 0xfe, 0x17, 0x3c, 0xb2, 0x4b, 0xa5, 0xdc, 0xf0, 0x00, 0x9d, 0xa0, + 0xd3, 0xfd, 0xb3, 0xa7, 0x74, 0x75, 0x8b, 0x6b, 0x36, 0x55, 0x45, 0x66, 0x1b, 0x9a, 0x5a, 0x35, + 0x6d, 0xa7, 0xf4, 0x43, 0xfc, 0x0d, 0x12, 0xf3, 0x1e, 0x0c, 0x0f, 0xfd, 0xf9, 0xd5, 0xb1, 0xd7, + 0x5d, 0x1d, 0xe3, 0x55, 0x2f, 0xba, 0xa6, 0xfa, 0xe7, 0x78, 0x57, 0x2b, 0x48, 0x82, 0x1d, 0x47, + 0x7f, 0x4c, 0xef, 0xba, 0x34, 0x5d, 0xdf, 0xeb, 0xa3, 0x82, 0x24, 0x3c, 0x18, 0xb8, 0xbb, 0xb6, + 0x8a, 0x1c, 0x65, 0xf2, 0x0b, 0xe1, 0xa3, 0x75, 0xe1, 0xb9, 0xd0, 0xc6, 0xff, 0xbc, 0x11, 0x82, + 0x6e, 0x17, 0xc2, 0xba, 0x5d, 0x84, 0xa3, 0x61, 0xd4, 0x68, 0xd9, 0x59, 0x0b, 0xf0, 0x0e, 0xef, + 0x09, 0x03, 0xa5, 0x0e, 0x76, 0x4e, 0xee, 0x9d, 0xee, 0x9f, 0x3d, 0xda, 0x2e, 0x41, 0xf8, 0x60, + 0x40, 0xee, 0xbd, 0xb5, 0xe6, 0xa8, 0x67, 0x4c, 0xa2, 0x9b, 0xeb, 0xdb, 0x64, 0xfe, 0x4b, 0x7c, + 0x38, 0xfc, 0xb6, 0x37, 0xbc, 0x4a, 0x67, 0x50, 0xbb, 0x10, 0xf7, 0xc3, 0x87, 0x03, 0xe1, 0x30, + 0xba, 0xf1, 0x1a, 0xdd, 0x52, 0x87, 0x74, 0xbe, 0x20, 0xde, 0xc5, 0x82, 0x78, 0x97, 0x0b, 0xe2, + 0xfd, 0xe8, 0x08, 0x9a, 0x77, 0x04, 0x5d, 0x74, 0x04, 0x5d, 0x76, 0x04, 0xfd, 0xe9, 0x08, 0xfa, + 0xf9, 0x97, 0x78, 0x9f, 0x46, 0xcb, 0x35, 0xff, 0x05, 0x00, 0x00, 0xff, 0xff, 0x94, 0x34, 0x0e, + 0xef, 0x30, 0x03, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/node/v1alpha1/generated.proto b/vendor/k8s.io/api/node/v1alpha1/generated.proto index 05c48aeed7..ca4e5e5350 100644 --- a/vendor/k8s.io/api/node/v1alpha1/generated.proto +++ b/vendor/k8s.io/api/node/v1alpha1/generated.proto @@ -21,8 +21,6 @@ syntax = 'proto2'; package k8s.io.api.node.v1alpha1; -import "k8s.io/api/core/v1/generated.proto"; -import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; @@ -30,13 +28,6 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1alpha1"; -// Overhead structure represents the resource overhead associated with running a pod. -message Overhead { - // PodFixed represents the fixed resource overhead associated with running a pod. - // +optional - map podFixed = 1; -} - // RuntimeClass defines a class of container runtime supported in the cluster. // The RuntimeClass is used to determine which container runtime is used to run // all containers in a pod. RuntimeClasses are (currently) manually defined by a @@ -81,12 +72,5 @@ message RuntimeClassSpec { // The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements // and is immutable. optional string runtimeHandler = 1; - - // Overhead represents the resource overhead associated with running a pod for a - // given RuntimeClass. For more details, see - // https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md - // This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature. - // +optional - optional Overhead overhead = 2; } diff --git a/vendor/k8s.io/api/node/v1alpha1/types.go b/vendor/k8s.io/api/node/v1alpha1/types.go index 6466a83678..2ce67c116f 100644 --- a/vendor/k8s.io/api/node/v1alpha1/types.go +++ b/vendor/k8s.io/api/node/v1alpha1/types.go @@ -17,7 +17,6 @@ limitations under the License. package v1alpha1 import ( - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -59,20 +58,6 @@ type RuntimeClassSpec struct { // The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements // and is immutable. RuntimeHandler string `json:"runtimeHandler" protobuf:"bytes,1,opt,name=runtimeHandler"` - - // Overhead represents the resource overhead associated with running a pod for a - // given RuntimeClass. For more details, see - // https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md - // This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature. - // +optional - Overhead *Overhead `json:"overhead,omitempty" protobuf:"bytes,2,opt,name=overhead"` -} - -// Overhead structure represents the resource overhead associated with running a pod. -type Overhead struct { - // PodFixed represents the fixed resource overhead associated with running a pod. - // +optional - PodFixed corev1.ResourceList `json:"podFixed,omitempty" protobuf:"bytes,1,opt,name=podFixed,casttype=k8s.io/api/core/v1.ResourceList,castkey=k8s.io/api/core/v1.ResourceName,castvalue=k8s.io/apimachinery/pkg/api/resource.Quantity"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go index cc6a134b85..a51fa525df 100644 --- a/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/node/v1alpha1/types_swagger_doc_generated.go @@ -27,15 +27,6 @@ package v1alpha1 // Those methods can be generated by using hack/update-generated-swagger-docs.sh // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. -var map_Overhead = map[string]string{ - "": "Overhead structure represents the resource overhead associated with running a pod.", - "podFixed": "PodFixed represents the fixed resource overhead associated with running a pod.", -} - -func (Overhead) SwaggerDoc() map[string]string { - return map_Overhead -} - var map_RuntimeClass = map[string]string{ "": "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md", "metadata": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", @@ -59,7 +50,6 @@ func (RuntimeClassList) SwaggerDoc() map[string]string { var map_RuntimeClassSpec = map[string]string{ "": "RuntimeClassSpec is a specification of a RuntimeClass. It contains parameters that are required to describe the RuntimeClass to the Container Runtime Interface (CRI) implementation, as well as any other components that need to understand how the pod will be run. The RuntimeClassSpec is immutable.", "runtimeHandler": "RuntimeHandler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The RuntimeHandler must conform to the DNS Label (RFC 1123) requirements and is immutable.", - "overhead": "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature.", } func (RuntimeClassSpec) SwaggerDoc() map[string]string { diff --git a/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go b/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go index beedb6b7df..91b8d80168 100644 --- a/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/node/v1alpha1/zz_generated.deepcopy.go @@ -21,39 +21,15 @@ limitations under the License. package v1alpha1 import ( - v1 "k8s.io/api/core/v1" 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 *Overhead) DeepCopyInto(out *Overhead) { - *out = *in - if in.PodFixed != nil { - in, out := &in.PodFixed, &out.PodFixed - *out = make(v1.ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Overhead. -func (in *Overhead) DeepCopy() *Overhead { - if in == nil { - return nil - } - out := new(Overhead) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RuntimeClass) DeepCopyInto(out *RuntimeClass) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) + out.Spec = in.Spec return } @@ -111,11 +87,6 @@ func (in *RuntimeClassList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RuntimeClassSpec) DeepCopyInto(out *RuntimeClassSpec) { *out = *in - if in.Overhead != nil { - in, out := &in.Overhead, &out.Overhead - *out = new(Overhead) - (*in).DeepCopyInto(*out) - } return } diff --git a/vendor/k8s.io/api/node/v1beta1/generated.pb.go b/vendor/k8s.io/api/node/v1beta1/generated.pb.go index 2b92f27eb5..27251a8a89 100644 --- a/vendor/k8s.io/api/node/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/node/v1beta1/generated.pb.go @@ -24,7 +24,6 @@ limitations under the License. k8s.io/kubernetes/vendor/k8s.io/api/node/v1beta1/generated.proto It has these top-level messages: - Overhead RuntimeClass RuntimeClassList */ @@ -34,12 +33,6 @@ import proto "github.com/gogo/protobuf/proto" import fmt "fmt" import math "math" -import k8s_io_apimachinery_pkg_api_resource "k8s.io/apimachinery/pkg/api/resource" - -import k8s_io_api_core_v1 "k8s.io/api/core/v1" - -import sortkeys "github.com/gogo/protobuf/sortkeys" - import strings "strings" import reflect "reflect" @@ -56,72 +49,18 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package -func (m *Overhead) Reset() { *m = Overhead{} } -func (*Overhead) ProtoMessage() {} -func (*Overhead) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } - func (m *RuntimeClass) Reset() { *m = RuntimeClass{} } func (*RuntimeClass) ProtoMessage() {} -func (*RuntimeClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } +func (*RuntimeClass) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } func (m *RuntimeClassList) Reset() { *m = RuntimeClassList{} } func (*RuntimeClassList) ProtoMessage() {} -func (*RuntimeClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } +func (*RuntimeClassList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } func init() { - proto.RegisterType((*Overhead)(nil), "k8s.io.api.node.v1beta1.Overhead") proto.RegisterType((*RuntimeClass)(nil), "k8s.io.api.node.v1beta1.RuntimeClass") proto.RegisterType((*RuntimeClassList)(nil), "k8s.io.api.node.v1beta1.RuntimeClassList") } -func (m *Overhead) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *Overhead) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if len(m.PodFixed) > 0 { - keysForPodFixed := make([]string, 0, len(m.PodFixed)) - for k := range m.PodFixed { - keysForPodFixed = append(keysForPodFixed, string(k)) - } - sortkeys.Strings(keysForPodFixed) - for _, k := range keysForPodFixed { - dAtA[i] = 0xa - i++ - v := m.PodFixed[k8s_io_api_core_v1.ResourceName(k)] - msgSize := 0 - if (&v) != nil { - msgSize = (&v).Size() - msgSize += 1 + sovGenerated(uint64(msgSize)) - } - mapSize := 1 + len(k) + sovGenerated(uint64(len(k))) + msgSize - i = encodeVarintGenerated(dAtA, i, uint64(mapSize)) - dAtA[i] = 0xa - i++ - i = encodeVarintGenerated(dAtA, i, uint64(len(k))) - i += copy(dAtA[i:], k) - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n1, err := (&v).MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n1 - } - } - return i, nil -} - func (m *RuntimeClass) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -140,25 +79,15 @@ func (m *RuntimeClass) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n2, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n2 + i += n1 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Handler))) i += copy(dAtA[i:], m.Handler) - if m.Overhead != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Overhead.Size())) - n3, err := m.Overhead.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n3 - } return i, nil } @@ -180,11 +109,11 @@ func (m *RuntimeClassList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n4, err := m.ListMeta.MarshalTo(dAtA[i:]) + n2, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n4 + i += n2 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -209,21 +138,6 @@ func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return offset + 1 } -func (m *Overhead) Size() (n int) { - var l int - _ = l - if len(m.PodFixed) > 0 { - for k, v := range m.PodFixed { - _ = k - _ = v - l = v.Size() - mapEntrySize := 1 + len(k) + sovGenerated(uint64(len(k))) + 1 + l + sovGenerated(uint64(l)) - n += mapEntrySize + 1 + sovGenerated(uint64(mapEntrySize)) - } - } - return n -} - func (m *RuntimeClass) Size() (n int) { var l int _ = l @@ -231,10 +145,6 @@ func (m *RuntimeClass) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Handler) n += 1 + l + sovGenerated(uint64(l)) - if m.Overhead != nil { - l = m.Overhead.Size() - n += 1 + l + sovGenerated(uint64(l)) - } return n } @@ -265,26 +175,6 @@ func sovGenerated(x uint64) (n int) { func sozGenerated(x uint64) (n int) { return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (this *Overhead) String() string { - if this == nil { - return "nil" - } - keysForPodFixed := make([]string, 0, len(this.PodFixed)) - for k := range this.PodFixed { - keysForPodFixed = append(keysForPodFixed, string(k)) - } - sortkeys.Strings(keysForPodFixed) - mapStringForPodFixed := "k8s_io_api_core_v1.ResourceList{" - for _, k := range keysForPodFixed { - mapStringForPodFixed += fmt.Sprintf("%v: %v,", k, this.PodFixed[k8s_io_api_core_v1.ResourceName(k)]) - } - mapStringForPodFixed += "}" - s := strings.Join([]string{`&Overhead{`, - `PodFixed:` + mapStringForPodFixed + `,`, - `}`, - }, "") - return s -} func (this *RuntimeClass) String() string { if this == nil { return "nil" @@ -292,7 +182,6 @@ func (this *RuntimeClass) String() string { s := strings.Join([]string{`&RuntimeClass{`, `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, `Handler:` + fmt.Sprintf("%v", this.Handler) + `,`, - `Overhead:` + strings.Replace(fmt.Sprintf("%v", this.Overhead), "Overhead", "Overhead", 1) + `,`, `}`, }, "") return s @@ -316,179 +205,6 @@ func valueToStringGenerated(v interface{}) string { pv := reflect.Indirect(rv).Interface() return fmt.Sprintf("*%v", pv) } -func (m *Overhead) 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: Overhead: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: Overhead: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PodFixed", 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 > l { - return io.ErrUnexpectedEOF - } - if m.PodFixed == nil { - m.PodFixed = make(k8s_io_api_core_v1.ResourceList) - } - var mapkey k8s_io_api_core_v1.ResourceName - mapvalue := &k8s_io_apimachinery_pkg_api_resource.Quantity{} - 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 > l { - return io.ErrUnexpectedEOF - } - mapkey = k8s_io_api_core_v1.ResourceName(dAtA[iNdEx:postStringIndexmapkey]) - iNdEx = postStringIndexmapkey - } else if fieldNum == 2 { - var mapmsglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - mapmsglen |= (int(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - postmsgIndex := iNdEx + mapmsglen - if mapmsglen < 0 { - return ErrInvalidLengthGenerated - } - if postmsgIndex > l { - return io.ErrUnexpectedEOF - } - mapvalue = &k8s_io_apimachinery_pkg_api_resource.Quantity{} - if err := mapvalue.Unmarshal(dAtA[iNdEx:postmsgIndex]); err != nil { - return err - } - iNdEx = postmsgIndex - } else { - iNdEx = entryPreIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > postIndex { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - m.PodFixed[k8s_io_api_core_v1.ResourceName(mapkey)] = *mapvalue - iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func (m *RuntimeClass) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -577,39 +293,6 @@ func (m *RuntimeClass) Unmarshal(dAtA []byte) error { } m.Handler = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Overhead", 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 > l { - return io.ErrUnexpectedEOF - } - if m.Overhead == nil { - m.Overhead = &Overhead{} - } - if err := m.Overhead.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -852,40 +535,30 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 551 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x52, 0xbb, 0x8e, 0xd3, 0x4c, - 0x14, 0xce, 0x64, 0x15, 0x25, 0x3b, 0xd9, 0xd5, 0x1f, 0xb9, 0xf9, 0xa3, 0x14, 0x4e, 0x88, 0x84, - 0x14, 0x8a, 0xcc, 0x90, 0x08, 0xa1, 0x15, 0x15, 0x32, 0x17, 0x71, 0x5f, 0x70, 0x89, 0x28, 0x98, - 0xd8, 0x07, 0xc7, 0x38, 0xf6, 0x58, 0xe3, 0x71, 0x44, 0x3a, 0x44, 0x83, 0x44, 0xc5, 0x03, 0xf1, - 0x00, 0xe9, 0xd8, 0x06, 0x69, 0xab, 0x2c, 0x31, 0x0d, 0xcf, 0x40, 0x85, 0x3c, 0xb6, 0xb3, 0x61, - 0x43, 0x76, 0x97, 0x6e, 0xe6, 0xcc, 0x77, 0x39, 0xdf, 0x39, 0x83, 0x6f, 0x7b, 0x07, 0x11, 0x71, - 0x39, 0xf5, 0xe2, 0x11, 0x88, 0x00, 0x24, 0x44, 0x74, 0x0a, 0x81, 0xcd, 0x05, 0xcd, 0x1f, 0x58, - 0xe8, 0xd2, 0x80, 0xdb, 0x40, 0xa7, 0x83, 0x11, 0x48, 0x36, 0xa0, 0x0e, 0x04, 0x20, 0x98, 0x04, - 0x9b, 0x84, 0x82, 0x4b, 0xae, 0xfd, 0x9f, 0x01, 0x09, 0x0b, 0x5d, 0x92, 0x02, 0x49, 0x0e, 0x6c, - 0xf5, 0x1d, 0x57, 0x8e, 0xe3, 0x11, 0xb1, 0xb8, 0x4f, 0x1d, 0xee, 0x70, 0xaa, 0xf0, 0xa3, 0xf8, - 0x8d, 0xba, 0xa9, 0x8b, 0x3a, 0x65, 0x3a, 0xad, 0xee, 0x9a, 0xa1, 0xc5, 0x45, 0x6a, 0x78, 0xd6, - 0xab, 0x75, 0xe3, 0x14, 0xe3, 0x33, 0x6b, 0xec, 0x06, 0x20, 0x66, 0x34, 0xf4, 0x1c, 0x45, 0x12, - 0x10, 0xf1, 0x58, 0x58, 0xf0, 0x4f, 0xac, 0x88, 0xfa, 0x20, 0xd9, 0xdf, 0xbc, 0xe8, 0x36, 0x96, - 0x88, 0x03, 0xe9, 0xfa, 0x9b, 0x36, 0x37, 0x2f, 0x22, 0x44, 0xd6, 0x18, 0x7c, 0x76, 0x96, 0xd7, - 0xfd, 0x5a, 0xc6, 0xb5, 0xc3, 0x29, 0x88, 0x31, 0x30, 0x5b, 0xfb, 0x86, 0x70, 0x2d, 0xe4, 0xf6, - 0x7d, 0xf7, 0x1d, 0xd8, 0x4d, 0xd4, 0xd9, 0xe9, 0xd5, 0x87, 0x94, 0x6c, 0x99, 0x30, 0x29, 0x58, - 0xe4, 0x79, 0xce, 0xb8, 0x17, 0x48, 0x31, 0x33, 0x3e, 0xa2, 0xf9, 0xa2, 0x5d, 0x4a, 0x16, 0xed, - 0x5a, 0x51, 0xff, 0xb5, 0x68, 0xb7, 0x37, 0xc7, 0x4b, 0xcc, 0x7c, 0x62, 0x4f, 0xdc, 0x48, 0x7e, - 0x38, 0x39, 0x17, 0xf2, 0x8c, 0xf9, 0xf0, 0xe9, 0xa4, 0xdd, 0xbf, 0xcc, 0x02, 0xc8, 0x8b, 0x98, - 0x05, 0xd2, 0x95, 0x33, 0x73, 0x15, 0xa5, 0xe5, 0xe1, 0xfd, 0x3f, 0x9a, 0xd4, 0x1a, 0x78, 0xc7, - 0x83, 0x59, 0x13, 0x75, 0x50, 0x6f, 0xd7, 0x4c, 0x8f, 0xda, 0x5d, 0x5c, 0x99, 0xb2, 0x49, 0x0c, - 0xcd, 0x72, 0x07, 0xf5, 0xea, 0x43, 0xb2, 0x16, 0x7b, 0xe5, 0x45, 0x42, 0xcf, 0x51, 0x73, 0xd8, - 0xf4, 0xca, 0xc8, 0xb7, 0xca, 0x07, 0xa8, 0xfb, 0x13, 0xe1, 0x3d, 0x33, 0x1b, 0xfa, 0x9d, 0x09, - 0x8b, 0x22, 0xed, 0x35, 0xae, 0xa5, 0x6b, 0xb6, 0x99, 0x64, 0xca, 0xb1, 0x3e, 0xbc, 0x7e, 0x9e, - 0x7a, 0x44, 0x52, 0x34, 0x99, 0x0e, 0xc8, 0xe1, 0xe8, 0x2d, 0x58, 0xf2, 0x29, 0x48, 0x66, 0x68, - 0xf9, 0x50, 0xf1, 0x69, 0xcd, 0x5c, 0xa9, 0x6a, 0xd7, 0x70, 0x75, 0xcc, 0x02, 0x7b, 0x02, 0x42, - 0xb5, 0xbf, 0x6b, 0xfc, 0x97, 0xc3, 0xab, 0x0f, 0xb2, 0xb2, 0x59, 0xbc, 0x6b, 0x8f, 0x71, 0x8d, - 0xe7, 0x8b, 0x6b, 0xee, 0xa8, 0x66, 0xae, 0x5c, 0xb8, 0x61, 0x63, 0x2f, 0x5d, 0x67, 0x71, 0x33, - 0x57, 0x02, 0xdd, 0x2f, 0x08, 0x37, 0xd6, 0xa3, 0xa6, 0xab, 0xd4, 0x5e, 0x6d, 0xc4, 0x25, 0x97, - 0x8b, 0x9b, 0xb2, 0x55, 0xd8, 0x46, 0xf1, 0x83, 0x8a, 0xca, 0x5a, 0xd4, 0x47, 0xb8, 0xe2, 0x4a, - 0xf0, 0xa3, 0x66, 0x59, 0x7d, 0xcf, 0xab, 0x5b, 0x9b, 0x5f, 0xef, 0xcb, 0xd8, 0xcf, 0x15, 0x2b, - 0x0f, 0x53, 0xae, 0x99, 0x49, 0x18, 0xfd, 0xf9, 0x52, 0x2f, 0x1d, 0x2d, 0xf5, 0xd2, 0xf1, 0x52, - 0x2f, 0xbd, 0x4f, 0x74, 0x34, 0x4f, 0x74, 0x74, 0x94, 0xe8, 0xe8, 0x38, 0xd1, 0xd1, 0xf7, 0x44, - 0x47, 0x9f, 0x7f, 0xe8, 0xa5, 0x97, 0xd5, 0x5c, 0xf1, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0x61, - 0xf4, 0xbb, 0x0a, 0xae, 0x04, 0x00, 0x00, + // 389 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x92, 0xcd, 0x6a, 0xdb, 0x40, + 0x14, 0x85, 0x35, 0x2e, 0xc6, 0xae, 0xdc, 0x52, 0xa3, 0x4d, 0x8d, 0x17, 0x63, 0x63, 0x28, 0xb8, + 0x0b, 0xcf, 0xd4, 0xa6, 0x94, 0x2e, 0x8b, 0xba, 0x69, 0x4b, 0x4b, 0x41, 0xcb, 0x90, 0x45, 0x46, + 0xd2, 0x8d, 0x34, 0x91, 0xa5, 0x11, 0x9a, 0x91, 0x20, 0xbb, 0x3c, 0x42, 0xf6, 0x79, 0x95, 0x3c, + 0x80, 0x97, 0x5e, 0x7a, 0x65, 0x62, 0xe5, 0x45, 0x82, 0x7e, 0xfc, 0x43, 0x8c, 0x49, 0x76, 0xba, + 0xe7, 0x9e, 0x73, 0xee, 0x87, 0x18, 0xfd, 0x47, 0xf0, 0x5d, 0x12, 0x2e, 0x68, 0x90, 0xda, 0x90, + 0x44, 0xa0, 0x40, 0xd2, 0x0c, 0x22, 0x57, 0x24, 0xb4, 0x5e, 0xb0, 0x98, 0xd3, 0x48, 0xb8, 0x40, + 0xb3, 0xa9, 0x0d, 0x8a, 0x4d, 0xa9, 0x07, 0x11, 0x24, 0x4c, 0x81, 0x4b, 0xe2, 0x44, 0x28, 0x61, + 0x7c, 0xac, 0x8c, 0x84, 0xc5, 0x9c, 0x14, 0x46, 0x52, 0x1b, 0xfb, 0x13, 0x8f, 0x2b, 0x3f, 0xb5, + 0x89, 0x23, 0x42, 0xea, 0x09, 0x4f, 0xd0, 0xd2, 0x6f, 0xa7, 0x97, 0xe5, 0x54, 0x0e, 0xe5, 0x57, + 0xd5, 0xd3, 0xff, 0xba, 0x3f, 0x18, 0x32, 0xc7, 0xe7, 0x11, 0x24, 0xd7, 0x34, 0x0e, 0xbc, 0x42, + 0x90, 0x34, 0x04, 0xc5, 0x68, 0x76, 0x74, 0xbd, 0x4f, 0x4f, 0xa5, 0x92, 0x34, 0x52, 0x3c, 0x84, + 0xa3, 0xc0, 0xb7, 0x97, 0x02, 0xd2, 0xf1, 0x21, 0x64, 0xcf, 0x73, 0xa3, 0x3b, 0xa4, 0xbf, 0xb3, + 0x2a, 0xcb, 0xcf, 0x39, 0x93, 0xd2, 0xb8, 0xd0, 0xdb, 0x05, 0x94, 0xcb, 0x14, 0xeb, 0xa1, 0x21, + 0x1a, 0x77, 0x66, 0x5f, 0xc8, 0xfe, 0x57, 0xec, 0xba, 0x49, 0x1c, 0x78, 0x85, 0x20, 0x49, 0xe1, + 0x26, 0xd9, 0x94, 0xfc, 0xb7, 0xaf, 0xc0, 0x51, 0xff, 0x40, 0x31, 0xd3, 0x58, 0xac, 0x07, 0x5a, + 0xbe, 0x1e, 0xe8, 0x7b, 0xcd, 0xda, 0xb5, 0x1a, 0x9f, 0xf5, 0x96, 0xcf, 0x22, 0x77, 0x0e, 0x49, + 0xaf, 0x31, 0x44, 0xe3, 0xb7, 0xe6, 0x87, 0xda, 0xde, 0xfa, 0x55, 0xc9, 0xd6, 0x76, 0x3f, 0xba, + 0x47, 0x7a, 0xf7, 0x90, 0xee, 0x2f, 0x97, 0xca, 0x38, 0x3f, 0x22, 0x24, 0xaf, 0x23, 0x2c, 0xd2, + 0x25, 0x5f, 0xb7, 0x3e, 0xd8, 0xde, 0x2a, 0x07, 0x74, 0x7f, 0xf4, 0x26, 0x57, 0x10, 0xca, 0x5e, + 0x63, 0xf8, 0x66, 0xdc, 0x99, 0x7d, 0x22, 0x27, 0xde, 0x01, 0x39, 0xe4, 0x32, 0xdf, 0xd7, 0x8d, + 0xcd, 0xdf, 0x45, 0xd6, 0xaa, 0x2a, 0xcc, 0xc9, 0x62, 0x83, 0xb5, 0xe5, 0x06, 0x6b, 0xab, 0x0d, + 0xd6, 0x6e, 0x72, 0x8c, 0x16, 0x39, 0x46, 0xcb, 0x1c, 0xa3, 0x55, 0x8e, 0xd1, 0x43, 0x8e, 0xd1, + 0xed, 0x23, 0xd6, 0xce, 0x5a, 0x75, 0xe3, 0x53, 0x00, 0x00, 0x00, 0xff, 0xff, 0x93, 0x68, 0xe5, + 0x0d, 0xb5, 0x02, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/node/v1beta1/generated.proto b/vendor/k8s.io/api/node/v1beta1/generated.proto index 42e529d5e5..9082fbd334 100644 --- a/vendor/k8s.io/api/node/v1beta1/generated.proto +++ b/vendor/k8s.io/api/node/v1beta1/generated.proto @@ -21,8 +21,6 @@ syntax = 'proto2'; package k8s.io.api.node.v1beta1; -import "k8s.io/api/core/v1/generated.proto"; -import "k8s.io/apimachinery/pkg/api/resource/generated.proto"; import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/generated.proto"; import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; @@ -30,13 +28,6 @@ import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; // Package-wide variables from generator "generated". option go_package = "v1beta1"; -// Overhead structure represents the resource overhead associated with running a pod. -message Overhead { - // PodFixed represents the fixed resource overhead associated with running a pod. - // +optional - map podFixed = 1; -} - // RuntimeClass defines a class of container runtime supported in the cluster. // The RuntimeClass is used to determine which container runtime is used to run // all containers in a pod. RuntimeClasses are (currently) manually defined by a @@ -60,13 +51,6 @@ message RuntimeClass { // The Handler must conform to the DNS Label (RFC 1123) requirements, and is // immutable. optional string handler = 2; - - // Overhead represents the resource overhead associated with running a pod for a - // given RuntimeClass. For more details, see - // https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md - // This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature. - // +optional - optional Overhead overhead = 3; } // RuntimeClassList is a list of RuntimeClass objects. diff --git a/vendor/k8s.io/api/node/v1beta1/types.go b/vendor/k8s.io/api/node/v1beta1/types.go index f389322d7b..993c6e5066 100644 --- a/vendor/k8s.io/api/node/v1beta1/types.go +++ b/vendor/k8s.io/api/node/v1beta1/types.go @@ -17,7 +17,6 @@ limitations under the License. package v1beta1 import ( - corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -49,20 +48,6 @@ type RuntimeClass struct { // The Handler must conform to the DNS Label (RFC 1123) requirements, and is // immutable. Handler string `json:"handler" protobuf:"bytes,2,opt,name=handler"` - - // Overhead represents the resource overhead associated with running a pod for a - // given RuntimeClass. For more details, see - // https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md - // This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature. - // +optional - Overhead *Overhead `json:"overhead,omitempty" protobuf:"bytes,3,opt,name=overhead"` -} - -// Overhead structure represents the resource overhead associated with running a pod. -type Overhead struct { - // PodFixed represents the fixed resource overhead associated with running a pod. - // +optional - PodFixed corev1.ResourceList `json:"podFixed,omitempty" protobuf:"bytes,1,opt,name=podFixed,casttype=k8s.io/api/core/v1.ResourceList,castkey=k8s.io/api/core/v1.ResourceName,castvalue=k8s.io/apimachinery/pkg/api/resource.Quantity"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go index 6fa14b716d..8bfa304e78 100644 --- a/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/node/v1beta1/types_swagger_doc_generated.go @@ -27,20 +27,10 @@ package v1beta1 // Those methods can be generated by using hack/update-generated-swagger-docs.sh // AUTO-GENERATED FUNCTIONS START HERE. DO NOT EDIT. -var map_Overhead = map[string]string{ - "": "Overhead structure represents the resource overhead associated with running a pod.", - "podFixed": "PodFixed represents the fixed resource overhead associated with running a pod.", -} - -func (Overhead) SwaggerDoc() map[string]string { - return map_Overhead -} - var map_RuntimeClass = map[string]string{ "": "RuntimeClass defines a class of container runtime supported in the cluster. The RuntimeClass is used to determine which container runtime is used to run all containers in a pod. RuntimeClasses are (currently) manually defined by a user or cluster provisioner, and referenced in the PodSpec. The Kubelet is responsible for resolving the RuntimeClassName reference before running the pod. For more details, see https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md", "metadata": "More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", "handler": "Handler specifies the underlying runtime and configuration that the CRI implementation will use to handle pods of this class. The possible values are specific to the node & CRI configuration. It is assumed that all handlers are available on every node, and handlers of the same name are equivalent on every node. For example, a handler called \"runc\" might specify that the runc OCI runtime (using native Linux containers) will be used to run the containers in a pod. The Handler must conform to the DNS Label (RFC 1123) requirements, and is immutable.", - "overhead": "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. For more details, see https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.15, and is only honored by servers that enable the PodOverhead feature.", } func (RuntimeClass) SwaggerDoc() map[string]string { diff --git a/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go index f9c9f77f7a..f211e84994 100644 --- a/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/node/v1beta1/zz_generated.deepcopy.go @@ -21,43 +21,14 @@ limitations under the License. package v1beta1 import ( - v1 "k8s.io/api/core/v1" 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 *Overhead) DeepCopyInto(out *Overhead) { - *out = *in - if in.PodFixed != nil { - in, out := &in.PodFixed, &out.PodFixed - *out = make(v1.ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Overhead. -func (in *Overhead) DeepCopy() *Overhead { - if in == nil { - return nil - } - out := new(Overhead) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RuntimeClass) DeepCopyInto(out *RuntimeClass) { *out = *in out.TypeMeta = in.TypeMeta in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.Overhead != nil { - in, out := &in.Overhead, &out.Overhead - *out = new(Overhead) - (*in).DeepCopyInto(*out) - } return } diff --git a/vendor/k8s.io/api/policy/v1beta1/generated.pb.go b/vendor/k8s.io/api/policy/v1beta1/generated.pb.go index 83a405cb4f..b0fe972b27 100644 --- a/vendor/k8s.io/api/policy/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/policy/v1beta1/generated.pb.go @@ -55,7 +55,7 @@ import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -523,7 +523,7 @@ func (m *PodDisruptionBudgetStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.DisruptedPods { keysForDisruptedPods = append(keysForDisruptedPods, string(k)) } - sortkeys.Strings(keysForDisruptedPods) + github_com_gogo_protobuf_sortkeys.Strings(keysForDisruptedPods) for _, k := range keysForDisruptedPods { dAtA[i] = 0x12 i++ @@ -1574,7 +1574,7 @@ func (this *PodDisruptionBudgetStatus) String() string { for k := range this.DisruptedPods { keysForDisruptedPods = append(keysForDisruptedPods, k) } - sortkeys.Strings(keysForDisruptedPods) + github_com_gogo_protobuf_sortkeys.Strings(keysForDisruptedPods) mapStringForDisruptedPods := "map[string]k8s_io_apimachinery_pkg_apis_meta_v1.Time{" for _, k := range keysForDisruptedPods { mapStringForDisruptedPods += fmt.Sprintf("%v: %v,", k, this.DisruptedPods[k]) diff --git a/vendor/k8s.io/api/storage/v1/generated.pb.go b/vendor/k8s.io/api/storage/v1/generated.pb.go index 4ed843ad3b..96bba0537e 100644 --- a/vendor/k8s.io/api/storage/v1/generated.pb.go +++ b/vendor/k8s.io/api/storage/v1/generated.pb.go @@ -41,7 +41,7 @@ import math "math" import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -133,7 +133,7 @@ func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) { for k := range m.Parameters { keysForParameters = append(keysForParameters, string(k)) } - sortkeys.Strings(keysForParameters) + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) for _, k := range keysForParameters { dAtA[i] = 0x1a i++ @@ -416,7 +416,7 @@ func (m *VolumeAttachmentStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.AttachmentMetadata { keysForAttachmentMetadata = append(keysForAttachmentMetadata, string(k)) } - sortkeys.Strings(keysForAttachmentMetadata) + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) for _, k := range keysForAttachmentMetadata { dAtA[i] = 0x12 i++ @@ -656,7 +656,7 @@ func (this *StorageClass) String() string { for k := range this.Parameters { keysForParameters = append(keysForParameters, k) } - sortkeys.Strings(keysForParameters) + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) mapStringForParameters := "map[string]string{" for _, k := range keysForParameters { mapStringForParameters += fmt.Sprintf("%v: %v,", k, this.Parameters[k]) @@ -740,7 +740,7 @@ func (this *VolumeAttachmentStatus) String() string { for k := range this.AttachmentMetadata { keysForAttachmentMetadata = append(keysForAttachmentMetadata, k) } - sortkeys.Strings(keysForAttachmentMetadata) + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) mapStringForAttachmentMetadata := "map[string]string{" for _, k := range keysForAttachmentMetadata { mapStringForAttachmentMetadata += fmt.Sprintf("%v: %v,", k, this.AttachmentMetadata[k]) diff --git a/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go b/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go index d5362c8426..3289641bc9 100644 --- a/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go +++ b/vendor/k8s.io/api/storage/v1alpha1/generated.pb.go @@ -39,7 +39,7 @@ import math "math" import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -265,7 +265,7 @@ func (m *VolumeAttachmentStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.AttachmentMetadata { keysForAttachmentMetadata = append(keysForAttachmentMetadata, string(k)) } - sortkeys.Strings(keysForAttachmentMetadata) + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) for _, k := range keysForAttachmentMetadata { dAtA[i] = 0x12 i++ @@ -496,7 +496,7 @@ func (this *VolumeAttachmentStatus) String() string { for k := range this.AttachmentMetadata { keysForAttachmentMetadata = append(keysForAttachmentMetadata, k) } - sortkeys.Strings(keysForAttachmentMetadata) + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) mapStringForAttachmentMetadata := "map[string]string{" for _, k := range keysForAttachmentMetadata { mapStringForAttachmentMetadata += fmt.Sprintf("%v: %v,", k, this.AttachmentMetadata[k]) diff --git a/vendor/k8s.io/api/storage/v1beta1/generated.pb.go b/vendor/k8s.io/api/storage/v1beta1/generated.pb.go index 71a5592bc6..d76a35e655 100644 --- a/vendor/k8s.io/api/storage/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/storage/v1beta1/generated.pb.go @@ -39,7 +39,6 @@ limitations under the License. VolumeAttachmentSpec VolumeAttachmentStatus VolumeError - VolumeNodeResources */ package v1beta1 @@ -49,7 +48,7 @@ import math "math" import k8s_io_api_core_v1 "k8s.io/api/core/v1" -import sortkeys "github.com/gogo/protobuf/sortkeys" +import github_com_gogo_protobuf_sortkeys "github.com/gogo/protobuf/sortkeys" import strings "strings" import reflect "reflect" @@ -127,10 +126,6 @@ func (m *VolumeError) Reset() { *m = VolumeError{} } func (*VolumeError) ProtoMessage() {} func (*VolumeError) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{14} } -func (m *VolumeNodeResources) Reset() { *m = VolumeNodeResources{} } -func (*VolumeNodeResources) ProtoMessage() {} -func (*VolumeNodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{15} } - func init() { proto.RegisterType((*CSIDriver)(nil), "k8s.io.api.storage.v1beta1.CSIDriver") proto.RegisterType((*CSIDriverList)(nil), "k8s.io.api.storage.v1beta1.CSIDriverList") @@ -147,7 +142,6 @@ func init() { proto.RegisterType((*VolumeAttachmentSpec)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentSpec") proto.RegisterType((*VolumeAttachmentStatus)(nil), "k8s.io.api.storage.v1beta1.VolumeAttachmentStatus") proto.RegisterType((*VolumeError)(nil), "k8s.io.api.storage.v1beta1.VolumeError") - proto.RegisterType((*VolumeNodeResources)(nil), "k8s.io.api.storage.v1beta1.VolumeNodeResources") } func (m *CSIDriver) Marshal() (dAtA []byte, err error) { size := m.Size() @@ -331,16 +325,6 @@ func (m *CSINodeDriver) MarshalTo(dAtA []byte) (int, error) { i += copy(dAtA[i:], s) } } - if m.Allocatable != nil { - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Allocatable.Size())) - n6, err := m.Allocatable.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n6 - } return i, nil } @@ -362,11 +346,11 @@ func (m *CSINodeList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n7, err := m.ListMeta.MarshalTo(dAtA[i:]) + n6, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n7 + i += n6 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -430,11 +414,11 @@ func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n8, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n7, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n8 + i += n7 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Provisioner))) @@ -444,7 +428,7 @@ func (m *StorageClass) MarshalTo(dAtA []byte) (int, error) { for k := range m.Parameters { keysForParameters = append(keysForParameters, string(k)) } - sortkeys.Strings(keysForParameters) + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) for _, k := range keysForParameters { dAtA[i] = 0x1a i++ @@ -531,11 +515,11 @@ func (m *StorageClassList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n9, err := m.ListMeta.MarshalTo(dAtA[i:]) + n8, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n9 + i += n8 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -569,27 +553,27 @@ func (m *VolumeAttachment) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n10, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n9, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n10 + i += n9 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n11, err := m.Spec.MarshalTo(dAtA[i:]) + n10, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n11 + i += n10 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n12, err := m.Status.MarshalTo(dAtA[i:]) + n11, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n12 + i += n11 return i, nil } @@ -611,11 +595,11 @@ func (m *VolumeAttachmentList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n13, err := m.ListMeta.MarshalTo(dAtA[i:]) + n12, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n13 + i += n12 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -656,11 +640,11 @@ func (m *VolumeAttachmentSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.InlineVolumeSpec.Size())) - n14, err := m.InlineVolumeSpec.MarshalTo(dAtA[i:]) + n13, err := m.InlineVolumeSpec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n14 + i += n13 } return i, nil } @@ -687,11 +671,11 @@ func (m *VolumeAttachmentSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Source.Size())) - n15, err := m.Source.MarshalTo(dAtA[i:]) + n14, err := m.Source.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n15 + i += n14 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.NodeName))) @@ -727,7 +711,7 @@ func (m *VolumeAttachmentStatus) MarshalTo(dAtA []byte) (int, error) { for k := range m.AttachmentMetadata { keysForAttachmentMetadata = append(keysForAttachmentMetadata, string(k)) } - sortkeys.Strings(keysForAttachmentMetadata) + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) for _, k := range keysForAttachmentMetadata { dAtA[i] = 0x12 i++ @@ -748,21 +732,21 @@ func (m *VolumeAttachmentStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AttachError.Size())) - n16, err := m.AttachError.MarshalTo(dAtA[i:]) + n15, err := m.AttachError.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n16 + i += n15 } if m.DetachError != nil { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DetachError.Size())) - n17, err := m.DetachError.MarshalTo(dAtA[i:]) + n16, err := m.DetachError.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n17 + i += n16 } return i, nil } @@ -785,11 +769,11 @@ func (m *VolumeError) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Time.Size())) - n18, err := m.Time.MarshalTo(dAtA[i:]) + n17, err := m.Time.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n18 + i += n17 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Message))) @@ -797,29 +781,6 @@ func (m *VolumeError) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func (m *VolumeNodeResources) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalTo(dAtA) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *VolumeNodeResources) MarshalTo(dAtA []byte) (int, error) { - var i int - _ = i - var l int - _ = l - if m.Count != nil { - dAtA[i] = 0x8 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(*m.Count)) - } - return i, nil -} - func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { for v >= 1<<7 { dAtA[offset] = uint8(v&0x7f | 0x80) @@ -888,10 +849,6 @@ func (m *CSINodeDriver) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) } } - if m.Allocatable != nil { - l = m.Allocatable.Size() - n += 1 + l + sovGenerated(uint64(l)) - } return n } @@ -1061,15 +1018,6 @@ func (m *VolumeError) Size() (n int) { return n } -func (m *VolumeNodeResources) Size() (n int) { - var l int - _ = l - if m.Count != nil { - n += 1 + sovGenerated(uint64(*m.Count)) - } - return n -} - func sovGenerated(x uint64) (n int) { for { n++ @@ -1135,7 +1083,6 @@ func (this *CSINodeDriver) String() string { `Name:` + fmt.Sprintf("%v", this.Name) + `,`, `NodeID:` + fmt.Sprintf("%v", this.NodeID) + `,`, `TopologyKeys:` + fmt.Sprintf("%v", this.TopologyKeys) + `,`, - `Allocatable:` + strings.Replace(fmt.Sprintf("%v", this.Allocatable), "VolumeNodeResources", "VolumeNodeResources", 1) + `,`, `}`, }, "") return s @@ -1169,7 +1116,7 @@ func (this *StorageClass) String() string { for k := range this.Parameters { keysForParameters = append(keysForParameters, k) } - sortkeys.Strings(keysForParameters) + github_com_gogo_protobuf_sortkeys.Strings(keysForParameters) mapStringForParameters := "map[string]string{" for _, k := range keysForParameters { mapStringForParameters += fmt.Sprintf("%v: %v,", k, this.Parameters[k]) @@ -1253,7 +1200,7 @@ func (this *VolumeAttachmentStatus) String() string { for k := range this.AttachmentMetadata { keysForAttachmentMetadata = append(keysForAttachmentMetadata, k) } - sortkeys.Strings(keysForAttachmentMetadata) + github_com_gogo_protobuf_sortkeys.Strings(keysForAttachmentMetadata) mapStringForAttachmentMetadata := "map[string]string{" for _, k := range keysForAttachmentMetadata { mapStringForAttachmentMetadata += fmt.Sprintf("%v: %v,", k, this.AttachmentMetadata[k]) @@ -1279,16 +1226,6 @@ func (this *VolumeError) String() string { }, "") return s } -func (this *VolumeNodeResources) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&VolumeNodeResources{`, - `Count:` + valueToStringGenerated(this.Count) + `,`, - `}`, - }, "") - return s -} func valueToStringGenerated(v interface{}) string { rv := reflect.ValueOf(v) if rv.IsNil() { @@ -1836,39 +1773,6 @@ func (m *CSINodeDriver) Unmarshal(dAtA []byte) error { } m.TopologyKeys = append(m.TopologyKeys, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 4: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Allocatable", 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 > l { - return io.ErrUnexpectedEOF - } - if m.Allocatable == nil { - m.Allocatable = &VolumeNodeResources{} - } - if err := m.Allocatable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -3426,76 +3330,6 @@ func (m *VolumeError) Unmarshal(dAtA []byte) error { } return nil } -func (m *VolumeNodeResources) 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: VolumeNodeResources: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: VolumeNodeResources: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Count", wireType) - } - var v int32 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - v |= (int32(b) & 0x7F) << shift - if b < 0x80 { - break - } - } - m.Count = &v - default: - iNdEx = preIndex - skippy, err := skipGenerated(dAtA[iNdEx:]) - if err != nil { - return err - } - if skippy < 0 { - return ErrInvalidLengthGenerated - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} func skipGenerated(dAtA []byte) (n int, err error) { l := len(dAtA) iNdEx := 0 @@ -3606,87 +3440,83 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 1311 bytes of a gzipped FileDescriptorProto + // 1247 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x57, 0x4d, 0x6f, 0x1b, 0x45, - 0x18, 0xce, 0xc6, 0xf9, 0x1c, 0x27, 0xad, 0x33, 0x8d, 0xc0, 0xf8, 0x60, 0x47, 0x46, 0xd0, 0xb4, - 0x6a, 0xd7, 0x6d, 0x55, 0xaa, 0xaa, 0x12, 0x87, 0x6c, 0x1a, 0x09, 0xb7, 0x75, 0x1a, 0x26, 0x51, - 0x85, 0x2a, 0x0e, 0x8c, 0x77, 0xdf, 0x3a, 0xdb, 0x78, 0x77, 0xb6, 0x33, 0x63, 0x43, 0x6e, 0x9c, - 0xe0, 0x8a, 0x38, 0xf0, 0x0b, 0xf8, 0x0b, 0x20, 0xc1, 0x85, 0x23, 0x3d, 0xa1, 0x8a, 0x53, 0x4f, - 0x16, 0x5d, 0x7e, 0x02, 0xb7, 0x88, 0x03, 0x9a, 0xd9, 0x89, 0x77, 0xfd, 0xd5, 0x24, 0x1c, 0x72, - 0xf3, 0xbc, 0x1f, 0xcf, 0xfb, 0xf5, 0xcc, 0x3b, 0x6b, 0xb4, 0x79, 0x70, 0x57, 0xd8, 0x3e, 0xab, - 0x1d, 0x74, 0x9a, 0xc0, 0x43, 0x90, 0x20, 0x6a, 0x5d, 0x08, 0x3d, 0xc6, 0x6b, 0x46, 0x41, 0x23, - 0xbf, 0x26, 0x24, 0xe3, 0xb4, 0x05, 0xb5, 0xee, 0xcd, 0x26, 0x48, 0x7a, 0xb3, 0xd6, 0x82, 0x10, - 0x38, 0x95, 0xe0, 0xd9, 0x11, 0x67, 0x92, 0xe1, 0x52, 0x62, 0x6b, 0xd3, 0xc8, 0xb7, 0x8d, 0xad, - 0x6d, 0x6c, 0x4b, 0xd7, 0x5b, 0xbe, 0xdc, 0xef, 0x34, 0x6d, 0x97, 0x05, 0xb5, 0x16, 0x6b, 0xb1, - 0x9a, 0x76, 0x69, 0x76, 0x9e, 0xe9, 0x93, 0x3e, 0xe8, 0x5f, 0x09, 0x54, 0xa9, 0x9a, 0x09, 0xeb, - 0x32, 0xae, 0x62, 0x0e, 0x87, 0x2b, 0xdd, 0x4e, 0x6d, 0x02, 0xea, 0xee, 0xfb, 0x21, 0xf0, 0xc3, - 0x5a, 0x74, 0xd0, 0x52, 0x02, 0x51, 0x0b, 0x40, 0xd2, 0x71, 0x5e, 0xb5, 0x49, 0x5e, 0xbc, 0x13, - 0x4a, 0x3f, 0x80, 0x11, 0x87, 0x3b, 0x27, 0x39, 0x08, 0x77, 0x1f, 0x02, 0x3a, 0xec, 0x57, 0xfd, - 0xd5, 0x42, 0x8b, 0x9b, 0xbb, 0xf5, 0xfb, 0xdc, 0xef, 0x02, 0xc7, 0x5f, 0xa0, 0x05, 0x95, 0x91, - 0x47, 0x25, 0x2d, 0x5a, 0x6b, 0xd6, 0x7a, 0xfe, 0xd6, 0x0d, 0x3b, 0x6d, 0x57, 0x1f, 0xd8, 0x8e, - 0x0e, 0x5a, 0x4a, 0x20, 0x6c, 0x65, 0x6d, 0x77, 0x6f, 0xda, 0x8f, 0x9b, 0xcf, 0xc1, 0x95, 0x0d, - 0x90, 0xd4, 0xc1, 0x2f, 0x7b, 0x95, 0xa9, 0xb8, 0x57, 0x41, 0xa9, 0x8c, 0xf4, 0x51, 0xf1, 0x43, - 0x34, 0x23, 0x22, 0x70, 0x8b, 0xd3, 0x1a, 0xfd, 0x8a, 0x3d, 0x79, 0x18, 0x76, 0x3f, 0xad, 0xdd, - 0x08, 0x5c, 0x67, 0xc9, 0xc0, 0xce, 0xa8, 0x13, 0xd1, 0x20, 0xd5, 0x5f, 0x2c, 0xb4, 0xdc, 0xb7, - 0x7a, 0xe4, 0x0b, 0x89, 0x3f, 0x1f, 0x29, 0xc0, 0x3e, 0x5d, 0x01, 0xca, 0x5b, 0xa7, 0x5f, 0x30, - 0x71, 0x16, 0x8e, 0x25, 0x99, 0xe4, 0x1f, 0xa0, 0x59, 0x5f, 0x42, 0x20, 0x8a, 0xd3, 0x6b, 0xb9, - 0xf5, 0xfc, 0xad, 0x0f, 0x4e, 0x95, 0xbd, 0xb3, 0x6c, 0x10, 0x67, 0xeb, 0xca, 0x97, 0x24, 0x10, - 0xd5, 0x6f, 0xb3, 0xb9, 0xab, 0x9a, 0xf0, 0x3d, 0x74, 0x81, 0x4a, 0x49, 0xdd, 0x7d, 0x02, 0x2f, - 0x3a, 0x3e, 0x07, 0x4f, 0x57, 0xb0, 0xe0, 0xe0, 0xb8, 0x57, 0xb9, 0xb0, 0x31, 0xa0, 0x21, 0x43, - 0x96, 0xca, 0x37, 0x62, 0x5e, 0x3d, 0x7c, 0xc6, 0x1e, 0x87, 0x0d, 0xd6, 0x09, 0xa5, 0x6e, 0xb0, - 0xf1, 0xdd, 0x19, 0xd0, 0x90, 0x21, 0xcb, 0xea, 0xcf, 0x16, 0x9a, 0xdf, 0xdc, 0xad, 0x6f, 0x33, - 0x0f, 0xce, 0x81, 0x00, 0xf5, 0x01, 0x02, 0x5c, 0x3e, 0xa1, 0x85, 0x2a, 0xa9, 0x89, 0xe3, 0xff, - 0x27, 0x69, 0xa1, 0xb2, 0x31, 0xfc, 0x5d, 0x43, 0x33, 0x21, 0x0d, 0x40, 0xa7, 0xbe, 0x98, 0xfa, - 0x6c, 0xd3, 0x00, 0x88, 0xd6, 0xe0, 0x0f, 0xd1, 0x5c, 0xc8, 0x3c, 0xa8, 0xdf, 0xd7, 0x09, 0x2c, - 0x3a, 0x17, 0x8c, 0xcd, 0xdc, 0xb6, 0x96, 0x12, 0xa3, 0xc5, 0xb7, 0xd1, 0x92, 0x64, 0x11, 0x6b, - 0xb3, 0xd6, 0xe1, 0x43, 0x38, 0x14, 0xc5, 0xdc, 0x5a, 0x6e, 0x7d, 0xd1, 0x29, 0xc4, 0xbd, 0xca, - 0xd2, 0x5e, 0x46, 0x4e, 0x06, 0xac, 0x70, 0x13, 0xe5, 0x69, 0xbb, 0xcd, 0x5c, 0x2a, 0x69, 0xb3, - 0x0d, 0xc5, 0x19, 0x5d, 0x63, 0xed, 0x6d, 0x35, 0x3e, 0x61, 0xed, 0x4e, 0x00, 0x2a, 0x38, 0x01, - 0xc1, 0x3a, 0xdc, 0x05, 0xe1, 0x5c, 0x8c, 0x7b, 0x95, 0xfc, 0x46, 0x8a, 0x43, 0xb2, 0xa0, 0xd5, - 0x9f, 0x2c, 0x94, 0x37, 0x55, 0x9f, 0x03, 0xe5, 0x3f, 0x19, 0xa4, 0xfc, 0xfb, 0xa7, 0x98, 0xd7, - 0x04, 0xc2, 0xbb, 0xfd, 0xb4, 0x35, 0xdb, 0xf7, 0xd0, 0xbc, 0xa7, 0x87, 0x26, 0x8a, 0x96, 0x86, - 0xbe, 0x72, 0x0a, 0x68, 0x73, 0xa3, 0x2e, 0x9a, 0x00, 0xf3, 0xc9, 0x59, 0x90, 0x63, 0xa8, 0xea, - 0xf7, 0x73, 0x68, 0x69, 0x37, 0xf1, 0xdd, 0x6c, 0x53, 0x21, 0xce, 0x81, 0xd0, 0x1f, 0xa1, 0x7c, - 0xc4, 0x59, 0xd7, 0x17, 0x3e, 0x0b, 0x81, 0x1b, 0x5a, 0x5d, 0x32, 0x2e, 0xf9, 0x9d, 0x54, 0x45, - 0xb2, 0x76, 0xb8, 0x8d, 0x50, 0x44, 0x39, 0x0d, 0x40, 0xaa, 0x16, 0xe4, 0x74, 0x0b, 0xee, 0xbe, - 0xad, 0x05, 0xd9, 0xb2, 0xec, 0x9d, 0xbe, 0xeb, 0x56, 0x28, 0xf9, 0x61, 0x9a, 0x62, 0xaa, 0x20, - 0x19, 0x7c, 0x7c, 0x80, 0x96, 0x39, 0xb8, 0x6d, 0xea, 0x07, 0x3b, 0xac, 0xed, 0xbb, 0x87, 0x9a, - 0x9a, 0x8b, 0xce, 0x56, 0xdc, 0xab, 0x2c, 0x93, 0xac, 0xe2, 0xa8, 0x57, 0xb9, 0x31, 0xfa, 0xaa, - 0xd9, 0x3b, 0xc0, 0x85, 0x2f, 0x24, 0x84, 0x32, 0x21, 0xec, 0x80, 0x0f, 0x19, 0xc4, 0x56, 0x77, - 0x27, 0x50, 0x9b, 0xe5, 0x71, 0x24, 0x7d, 0x16, 0x8a, 0xe2, 0x6c, 0x7a, 0x77, 0x1a, 0x19, 0x39, - 0x19, 0xb0, 0xc2, 0x8f, 0xd0, 0xaa, 0xa2, 0xf9, 0x97, 0x49, 0x80, 0xad, 0xaf, 0x22, 0x1a, 0xaa, - 0x56, 0x15, 0xe7, 0xf4, 0x22, 0x2b, 0xc6, 0xbd, 0xca, 0xea, 0xc6, 0x18, 0x3d, 0x19, 0xeb, 0x85, - 0x3f, 0x43, 0x2b, 0x5d, 0x2d, 0x72, 0xfc, 0xd0, 0xf3, 0xc3, 0x56, 0x83, 0x79, 0x50, 0x9c, 0xd7, - 0x45, 0x5f, 0x8d, 0x7b, 0x95, 0x95, 0x27, 0xc3, 0xca, 0xa3, 0x71, 0x42, 0x32, 0x0a, 0x82, 0x5f, - 0xa0, 0x15, 0x1d, 0x11, 0x3c, 0xb3, 0x08, 0x7c, 0x10, 0xc5, 0x05, 0x3d, 0xbf, 0xf5, 0xec, 0xfc, - 0x54, 0xeb, 0x14, 0x91, 0x8e, 0xd7, 0xc5, 0x2e, 0xb4, 0xc1, 0x95, 0x8c, 0xef, 0x01, 0x0f, 0x9c, - 0xf7, 0xcc, 0xbc, 0x56, 0x36, 0x86, 0xa1, 0xc8, 0x28, 0x7a, 0xe9, 0x63, 0x74, 0x71, 0x68, 0xe0, - 0xb8, 0x80, 0x72, 0x07, 0x70, 0x98, 0x2c, 0x3a, 0xa2, 0x7e, 0xe2, 0x55, 0x34, 0xdb, 0xa5, 0xed, - 0x0e, 0x24, 0x0c, 0x24, 0xc9, 0xe1, 0xde, 0xf4, 0x5d, 0xab, 0xfa, 0x9b, 0x85, 0x0a, 0x59, 0xf6, - 0x9c, 0xc3, 0xda, 0x68, 0x0c, 0xae, 0x8d, 0xf5, 0xd3, 0x12, 0x7b, 0xc2, 0xee, 0xf8, 0x71, 0x1a, - 0x15, 0x92, 0xe1, 0x24, 0xef, 0x60, 0x00, 0xa1, 0x3c, 0x87, 0xab, 0x4d, 0x06, 0xde, 0xaa, 0x1b, - 0x27, 0xef, 0xf1, 0x34, 0xbb, 0x49, 0x8f, 0x16, 0x7e, 0x8a, 0xe6, 0x84, 0xa4, 0xb2, 0xa3, 0xee, - 0xbc, 0x42, 0xbd, 0x75, 0x26, 0x54, 0xed, 0x99, 0x3e, 0x5a, 0xc9, 0x99, 0x18, 0xc4, 0xea, 0xef, - 0x16, 0x5a, 0x1d, 0x76, 0x39, 0x87, 0x61, 0x7f, 0x3a, 0x38, 0xec, 0x6b, 0x67, 0xa9, 0x68, 0xc2, - 0xc0, 0xff, 0xb4, 0xd0, 0x3b, 0x23, 0xc5, 0xeb, 0xe7, 0x51, 0xed, 0x89, 0x68, 0x68, 0x1b, 0x6d, - 0xa7, 0x6f, 0xbe, 0xde, 0x13, 0x3b, 0x63, 0xf4, 0x64, 0xac, 0x17, 0x7e, 0x8e, 0x0a, 0x7e, 0xd8, - 0xf6, 0x43, 0x48, 0x64, 0xbb, 0xe9, 0xb8, 0xc7, 0x5e, 0xe6, 0x61, 0x64, 0x3d, 0xe6, 0xd5, 0xb8, - 0x57, 0x29, 0xd4, 0x87, 0x50, 0xc8, 0x08, 0x6e, 0xf5, 0x8f, 0x31, 0xe3, 0xd1, 0x6f, 0xe1, 0x35, - 0xb4, 0x90, 0x7c, 0xcf, 0x01, 0x37, 0x65, 0xf4, 0xdb, 0xbd, 0x61, 0xe4, 0xa4, 0x6f, 0xa1, 0x19, - 0xa4, 0x5b, 0x61, 0x12, 0x3d, 0x1b, 0x83, 0xb4, 0x67, 0x86, 0x41, 0xfa, 0x4c, 0x0c, 0xa2, 0xca, - 0x44, 0x7d, 0x00, 0xe9, 0x86, 0xe6, 0x06, 0x33, 0xd9, 0x36, 0x72, 0xd2, 0xb7, 0xa8, 0xfe, 0x9b, - 0x1b, 0x33, 0x25, 0x4d, 0xc5, 0x4c, 0x49, 0xc7, 0x9f, 0xb1, 0xc3, 0x25, 0x79, 0xfd, 0x92, 0x3c, - 0xfc, 0x83, 0x85, 0x30, 0xed, 0x43, 0x34, 0x8e, 0xa9, 0x9a, 0xf0, 0xe9, 0xc1, 0xd9, 0x6f, 0x88, - 0xbd, 0x31, 0x02, 0x96, 0xbc, 0x93, 0x25, 0x93, 0x04, 0x1e, 0x35, 0x20, 0x63, 0x32, 0xc0, 0x3e, - 0xca, 0x27, 0xd2, 0x2d, 0xce, 0x19, 0x37, 0x57, 0xf6, 0xf2, 0xc9, 0x09, 0x69, 0x73, 0xa7, 0xac, - 0x3f, 0xe4, 0x52, 0xff, 0xa3, 0x5e, 0x25, 0x9f, 0xd1, 0x93, 0x2c, 0xb6, 0x0a, 0xe5, 0x41, 0x1a, - 0x6a, 0xe6, 0x7f, 0x84, 0xba, 0x0f, 0x93, 0x43, 0x65, 0xb0, 0x4b, 0x5b, 0xe8, 0xdd, 0x09, 0x0d, - 0x3a, 0xd3, 0xbb, 0xf2, 0x8d, 0x85, 0xb2, 0x31, 0xf0, 0x23, 0x34, 0xa3, 0xfe, 0x6a, 0x9a, 0x0d, - 0x73, 0xf5, 0x74, 0x1b, 0x66, 0xcf, 0x0f, 0x20, 0x5d, 0x94, 0xea, 0x44, 0x34, 0x0a, 0xbe, 0x82, - 0xe6, 0x03, 0x10, 0x82, 0xb6, 0x4c, 0xe4, 0xf4, 0xab, 0xaf, 0x91, 0x88, 0xc9, 0xb1, 0xbe, 0x7a, - 0x07, 0x5d, 0x1a, 0xf3, 0x1d, 0x8d, 0x2b, 0x68, 0xd6, 0xd5, 0xff, 0x85, 0x54, 0x42, 0xb3, 0xce, - 0xa2, 0xda, 0x32, 0x9b, 0xfa, 0x2f, 0x50, 0x22, 0x77, 0xae, 0xbf, 0x7c, 0x53, 0x9e, 0x7a, 0xf5, - 0xa6, 0x3c, 0xf5, 0xfa, 0x4d, 0x79, 0xea, 0xeb, 0xb8, 0x6c, 0xbd, 0x8c, 0xcb, 0xd6, 0xab, 0xb8, - 0x6c, 0xbd, 0x8e, 0xcb, 0xd6, 0x5f, 0x71, 0xd9, 0xfa, 0xee, 0xef, 0xf2, 0xd4, 0xd3, 0x79, 0xd3, - 0xef, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xce, 0x65, 0xbb, 0xc7, 0x7f, 0x10, 0x00, 0x00, + 0x18, 0xce, 0xc6, 0xf9, 0x1c, 0x27, 0xad, 0x33, 0x44, 0x60, 0x7c, 0xb0, 0x23, 0x23, 0x68, 0x5a, + 0xb5, 0xeb, 0xb6, 0x2a, 0xa8, 0xaa, 0xc4, 0x21, 0x4e, 0x23, 0xe1, 0xb6, 0x4e, 0xc3, 0x24, 0xaa, + 0x50, 0xc5, 0x81, 0xc9, 0xee, 0x5b, 0x67, 0x1b, 0xef, 0xce, 0x76, 0x76, 0x6c, 0xf0, 0x8d, 0x13, + 0x1c, 0x41, 0x1c, 0xf8, 0x05, 0xfc, 0x05, 0x90, 0xe0, 0xc2, 0x91, 0x9e, 0x50, 0xc5, 0xa9, 0x27, + 0x8b, 0x2e, 0xff, 0xa2, 0xe2, 0x80, 0x66, 0x76, 0xec, 0xfd, 0xb0, 0xdd, 0x38, 0x1c, 0x7c, 0xf3, + 0xbc, 0x1f, 0xcf, 0xfb, 0xf5, 0xcc, 0x3b, 0x6b, 0xb4, 0x7b, 0x7a, 0x3b, 0x30, 0x1d, 0x56, 0x3b, + 0xed, 0x1c, 0x03, 0xf7, 0x40, 0x40, 0x50, 0xeb, 0x82, 0x67, 0x33, 0x5e, 0xd3, 0x0a, 0xea, 0x3b, + 0xb5, 0x40, 0x30, 0x4e, 0x5b, 0x50, 0xeb, 0xde, 0x38, 0x06, 0x41, 0x6f, 0xd4, 0x5a, 0xe0, 0x01, + 0xa7, 0x02, 0x6c, 0xd3, 0xe7, 0x4c, 0x30, 0x5c, 0x8a, 0x6c, 0x4d, 0xea, 0x3b, 0xa6, 0xb6, 0x35, + 0xb5, 0x6d, 0xe9, 0x5a, 0xcb, 0x11, 0x27, 0x9d, 0x63, 0xd3, 0x62, 0x6e, 0xad, 0xc5, 0x5a, 0xac, + 0xa6, 0x5c, 0x8e, 0x3b, 0x4f, 0xd4, 0x49, 0x1d, 0xd4, 0xaf, 0x08, 0xaa, 0x54, 0x4d, 0x84, 0xb5, + 0x18, 0x97, 0x31, 0xb3, 0xe1, 0x4a, 0xb7, 0x62, 0x1b, 0x97, 0x5a, 0x27, 0x8e, 0x07, 0xbc, 0x57, + 0xf3, 0x4f, 0x5b, 0x52, 0x10, 0xd4, 0x5c, 0x10, 0x74, 0x9c, 0x57, 0x6d, 0x92, 0x17, 0xef, 0x78, + 0xc2, 0x71, 0x61, 0xc4, 0xe1, 0xa3, 0xb3, 0x1c, 0x02, 0xeb, 0x04, 0x5c, 0x9a, 0xf5, 0xab, 0xfe, + 0x66, 0xa0, 0xd5, 0xdd, 0xc3, 0xc6, 0x5d, 0xee, 0x74, 0x81, 0xe3, 0x2f, 0xd0, 0x8a, 0xcc, 0xc8, + 0xa6, 0x82, 0x16, 0x8d, 0x2d, 0x63, 0x3b, 0x7f, 0xf3, 0xba, 0x19, 0xb7, 0x6b, 0x08, 0x6c, 0xfa, + 0xa7, 0x2d, 0x29, 0x08, 0x4c, 0x69, 0x6d, 0x76, 0x6f, 0x98, 0x0f, 0x8f, 0x9f, 0x82, 0x25, 0x9a, + 0x20, 0x68, 0x1d, 0x3f, 0xef, 0x57, 0xe6, 0xc2, 0x7e, 0x05, 0xc5, 0x32, 0x32, 0x44, 0xc5, 0xf7, + 0xd1, 0x42, 0xe0, 0x83, 0x55, 0x9c, 0x57, 0xe8, 0x97, 0xcd, 0xc9, 0xc3, 0x30, 0x87, 0x69, 0x1d, + 0xfa, 0x60, 0xd5, 0xd7, 0x34, 0xec, 0x82, 0x3c, 0x11, 0x05, 0x52, 0xfd, 0xd5, 0x40, 0xeb, 0x43, + 0xab, 0x07, 0x4e, 0x20, 0xf0, 0xe7, 0x23, 0x05, 0x98, 0xd3, 0x15, 0x20, 0xbd, 0x55, 0xfa, 0x05, + 0x1d, 0x67, 0x65, 0x20, 0x49, 0x24, 0x7f, 0x0f, 0x2d, 0x3a, 0x02, 0xdc, 0xa0, 0x38, 0xbf, 0x95, + 0xdb, 0xce, 0xdf, 0x7c, 0x7f, 0xaa, 0xec, 0xeb, 0xeb, 0x1a, 0x71, 0xb1, 0x21, 0x7d, 0x49, 0x04, + 0x51, 0xfd, 0x36, 0x99, 0xbb, 0xac, 0x09, 0xdf, 0x41, 0x17, 0xa8, 0x10, 0xd4, 0x3a, 0x21, 0xf0, + 0xac, 0xe3, 0x70, 0xb0, 0x55, 0x05, 0x2b, 0x75, 0x1c, 0xf6, 0x2b, 0x17, 0x76, 0x52, 0x1a, 0x92, + 0xb1, 0x94, 0xbe, 0x3e, 0xb3, 0x1b, 0xde, 0x13, 0xf6, 0xd0, 0x6b, 0xb2, 0x8e, 0x27, 0x54, 0x83, + 0xb5, 0xef, 0x41, 0x4a, 0x43, 0x32, 0x96, 0xd5, 0x5f, 0x0c, 0xb4, 0xbc, 0x7b, 0xd8, 0xd8, 0x67, + 0x36, 0xcc, 0x80, 0x00, 0x8d, 0x14, 0x01, 0x2e, 0x9d, 0xd1, 0x42, 0x99, 0xd4, 0xc4, 0xf1, 0x7f, + 0x17, 0xb5, 0x50, 0xda, 0x68, 0xfe, 0x6e, 0xa1, 0x05, 0x8f, 0xba, 0xa0, 0x52, 0x5f, 0x8d, 0x7d, + 0xf6, 0xa9, 0x0b, 0x44, 0x69, 0xf0, 0x07, 0x68, 0xc9, 0x63, 0x36, 0x34, 0xee, 0xaa, 0x04, 0x56, + 0xeb, 0x17, 0xb4, 0xcd, 0xd2, 0xbe, 0x92, 0x12, 0xad, 0xc5, 0xb7, 0xd0, 0x9a, 0x60, 0x3e, 0x6b, + 0xb3, 0x56, 0xef, 0x3e, 0xf4, 0x82, 0x62, 0x6e, 0x2b, 0xb7, 0xbd, 0x5a, 0x2f, 0x84, 0xfd, 0xca, + 0xda, 0x51, 0x42, 0x4e, 0x52, 0x56, 0xd5, 0x9f, 0x0d, 0x94, 0xd7, 0x19, 0xcd, 0x80, 0x8e, 0x9f, + 0xa4, 0xe9, 0xf8, 0xde, 0x14, 0xbd, 0x9c, 0x40, 0x46, 0x6b, 0x98, 0xb6, 0x62, 0xe2, 0x11, 0x5a, + 0xb6, 0x55, 0x43, 0x83, 0xa2, 0xa1, 0xa0, 0x2f, 0x4f, 0x01, 0xad, 0xd9, 0x7e, 0x51, 0x07, 0x58, + 0x8e, 0xce, 0x01, 0x19, 0x40, 0x55, 0x7f, 0x58, 0x42, 0x6b, 0x87, 0x91, 0xef, 0x6e, 0x9b, 0x06, + 0xc1, 0x0c, 0xc8, 0xf6, 0x21, 0xca, 0xfb, 0x9c, 0x75, 0x9d, 0xc0, 0x61, 0x1e, 0x70, 0x3d, 0xf2, + 0xb7, 0xb4, 0x4b, 0xfe, 0x20, 0x56, 0x91, 0xa4, 0x1d, 0x6e, 0x23, 0xe4, 0x53, 0x4e, 0x5d, 0x10, + 0xb2, 0x05, 0x39, 0xd5, 0x82, 0xdb, 0x6f, 0x6a, 0x41, 0xb2, 0x2c, 0xf3, 0x60, 0xe8, 0xba, 0xe7, + 0x09, 0xde, 0x8b, 0x53, 0x8c, 0x15, 0x24, 0x81, 0x8f, 0x4f, 0xd1, 0x3a, 0x07, 0xab, 0x4d, 0x1d, + 0xf7, 0x80, 0xb5, 0x1d, 0xab, 0x57, 0x5c, 0x50, 0x69, 0xee, 0x85, 0xfd, 0xca, 0x3a, 0x49, 0x2a, + 0x5e, 0xf7, 0x2b, 0xd7, 0x47, 0x5f, 0x1c, 0xf3, 0x00, 0x78, 0xe0, 0x04, 0x02, 0x3c, 0xf1, 0x88, + 0xb5, 0x3b, 0x2e, 0xa4, 0x7c, 0x48, 0x1a, 0x5b, 0xf2, 0xda, 0x95, 0xb7, 0xfe, 0xa1, 0x2f, 0x1c, + 0xe6, 0x05, 0xc5, 0xc5, 0x98, 0xd7, 0xcd, 0x84, 0x9c, 0xa4, 0xac, 0xf0, 0x03, 0xb4, 0x49, 0xdb, + 0x6d, 0xf6, 0x65, 0x14, 0x60, 0xef, 0x2b, 0x9f, 0x7a, 0xb2, 0x55, 0xc5, 0x25, 0xb5, 0x64, 0x8a, + 0x61, 0xbf, 0xb2, 0xb9, 0x33, 0x46, 0x4f, 0xc6, 0x7a, 0xe1, 0xcf, 0xd0, 0x46, 0x57, 0x89, 0xea, + 0x8e, 0x67, 0x3b, 0x5e, 0xab, 0xc9, 0x6c, 0x28, 0x2e, 0xab, 0xa2, 0xaf, 0x84, 0xfd, 0xca, 0xc6, + 0xa3, 0xac, 0xf2, 0xf5, 0x38, 0x21, 0x19, 0x05, 0xc1, 0xcf, 0xd0, 0x86, 0x8a, 0x08, 0xb6, 0xbe, + 0xa4, 0x0e, 0x04, 0xc5, 0x15, 0x35, 0xbf, 0xed, 0xe4, 0xfc, 0x64, 0xeb, 0x24, 0x91, 0x06, 0x57, + 0xf9, 0x10, 0xda, 0x60, 0x09, 0xc6, 0x8f, 0x80, 0xbb, 0xf5, 0x77, 0xf5, 0xbc, 0x36, 0x76, 0xb2, + 0x50, 0x64, 0x14, 0xbd, 0xf4, 0x31, 0xba, 0x98, 0x19, 0x38, 0x2e, 0xa0, 0xdc, 0x29, 0xf4, 0xa2, + 0x25, 0x44, 0xe4, 0x4f, 0xbc, 0x89, 0x16, 0xbb, 0xb4, 0xdd, 0x81, 0x88, 0x81, 0x24, 0x3a, 0xdc, + 0x99, 0xbf, 0x6d, 0x54, 0x7f, 0x37, 0x50, 0x21, 0xc9, 0x9e, 0x19, 0xac, 0x8d, 0x66, 0x7a, 0x6d, + 0x6c, 0x4f, 0x4b, 0xec, 0x09, 0xbb, 0xe3, 0xa7, 0x79, 0x54, 0x88, 0x86, 0x13, 0xbd, 0x51, 0x2e, + 0x78, 0x62, 0x06, 0x57, 0x9b, 0xa4, 0xde, 0x91, 0xeb, 0x6f, 0x2a, 0x22, 0x9b, 0xdd, 0xa4, 0x07, + 0x05, 0x3f, 0x46, 0x4b, 0x81, 0xa0, 0xa2, 0x23, 0xef, 0xbc, 0x44, 0xbd, 0x79, 0x2e, 0x54, 0xe5, + 0x19, 0x3f, 0x28, 0xd1, 0x99, 0x68, 0xc4, 0xea, 0x1f, 0x06, 0xda, 0xcc, 0xba, 0xcc, 0x60, 0xd8, + 0x9f, 0xa6, 0x87, 0x7d, 0xf5, 0x3c, 0x15, 0x4d, 0x18, 0xf8, 0x5f, 0x06, 0x7a, 0x7b, 0xa4, 0x78, + 0xd6, 0xe1, 0x16, 0xc8, 0x3d, 0xe1, 0x67, 0xb6, 0xd1, 0x7e, 0xfc, 0x1e, 0xab, 0x3d, 0x71, 0x30, + 0x46, 0x4f, 0xc6, 0x7a, 0xe1, 0xa7, 0xa8, 0xe0, 0x78, 0x6d, 0xc7, 0x83, 0x48, 0x76, 0x18, 0x8f, + 0x7b, 0xec, 0x65, 0xce, 0x22, 0xab, 0x31, 0x6f, 0x86, 0xfd, 0x4a, 0xa1, 0x91, 0x41, 0x21, 0x23, + 0xb8, 0xd5, 0x3f, 0xc7, 0x8c, 0x47, 0xbd, 0x85, 0x57, 0xd1, 0x4a, 0xf4, 0xad, 0x05, 0x5c, 0x97, + 0x31, 0x6c, 0xf7, 0x8e, 0x96, 0x93, 0xa1, 0x85, 0x62, 0x90, 0x6a, 0x85, 0x4e, 0xf4, 0x7c, 0x0c, + 0x52, 0x9e, 0x09, 0x06, 0xa9, 0x33, 0xd1, 0x88, 0x32, 0x13, 0xf9, 0x71, 0xa2, 0x1a, 0x9a, 0x4b, + 0x67, 0xb2, 0xaf, 0xe5, 0x64, 0x68, 0x51, 0xfd, 0x37, 0x37, 0x66, 0x4a, 0x8a, 0x8a, 0x89, 0x92, + 0x06, 0x9f, 0x98, 0xd9, 0x92, 0xec, 0x61, 0x49, 0x36, 0xfe, 0xd1, 0x40, 0x98, 0x0e, 0x21, 0x9a, + 0x03, 0xaa, 0x46, 0x7c, 0xba, 0x77, 0xfe, 0x1b, 0x62, 0xee, 0x8c, 0x80, 0x45, 0xef, 0x64, 0x49, + 0x27, 0x81, 0x47, 0x0d, 0xc8, 0x98, 0x0c, 0xb0, 0x83, 0xf2, 0x91, 0x74, 0x8f, 0x73, 0xc6, 0xf5, + 0x95, 0xbd, 0x74, 0x76, 0x42, 0xca, 0xbc, 0x5e, 0x96, 0x5f, 0x00, 0x3b, 0xb1, 0xff, 0xeb, 0x7e, + 0x25, 0x9f, 0xd0, 0x93, 0x24, 0xb6, 0x0c, 0x65, 0x43, 0x1c, 0x6a, 0xe1, 0x7f, 0x84, 0xba, 0x0b, + 0x93, 0x43, 0x25, 0xb0, 0x4b, 0x7b, 0xe8, 0x9d, 0x09, 0x0d, 0x3a, 0xd7, 0xbb, 0xf2, 0x8d, 0x81, + 0x92, 0x31, 0xf0, 0x03, 0xb4, 0x20, 0xff, 0x06, 0xea, 0x0d, 0x73, 0x65, 0xba, 0x0d, 0x73, 0xe4, + 0xb8, 0x10, 0x2f, 0x4a, 0x79, 0x22, 0x0a, 0x05, 0x5f, 0x46, 0xcb, 0x2e, 0x04, 0x01, 0x6d, 0xe9, + 0xc8, 0xf1, 0x57, 0x5f, 0x33, 0x12, 0x93, 0x81, 0xbe, 0x7e, 0xed, 0xf9, 0xab, 0xf2, 0xdc, 0x8b, + 0x57, 0xe5, 0xb9, 0x97, 0xaf, 0xca, 0x73, 0x5f, 0x87, 0x65, 0xe3, 0x79, 0x58, 0x36, 0x5e, 0x84, + 0x65, 0xe3, 0x65, 0x58, 0x36, 0xfe, 0x0e, 0xcb, 0xc6, 0xf7, 0xff, 0x94, 0xe7, 0x1e, 0x2f, 0xeb, + 0xbe, 0xfd, 0x17, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xfc, 0xf7, 0xf5, 0xe3, 0x0f, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/storage/v1beta1/generated.proto b/vendor/k8s.io/api/storage/v1beta1/generated.proto index 3bcc2139ca..b78d59aa58 100644 --- a/vendor/k8s.io/api/storage/v1beta1/generated.proto +++ b/vendor/k8s.io/api/storage/v1beta1/generated.proto @@ -144,10 +144,6 @@ message CSINodeDriver { // This can be empty if driver does not support topology. // +optional repeated string topologyKeys = 3; - - // allocatable represents the volume resources of a node that are available for scheduling. - // +optional - optional VolumeNodeResources allocatable = 4; } // CSINodeList is a collection of CSINode objects. @@ -334,13 +330,3 @@ message VolumeError { optional string message = 2; } -// VolumeNodeResources is a set of resource limits for scheduling of volumes. -message VolumeNodeResources { - // Maximum number of unique volumes managed by the CSI driver that can be used on a node. - // A volume that is both attached and mounted on a node is considered to be used once, not twice. - // The same rule applies for a unique volume that is shared among multiple pods on the same node. - // If this field is nil, then the supported number of volumes on this node is unbounded. - // +optional - optional int32 count = 1; -} - diff --git a/vendor/k8s.io/api/storage/v1beta1/types.go b/vendor/k8s.io/api/storage/v1beta1/types.go index 762fcfcd00..cca50d8209 100644 --- a/vendor/k8s.io/api/storage/v1beta1/types.go +++ b/vendor/k8s.io/api/storage/v1beta1/types.go @@ -17,7 +17,7 @@ limitations under the License. package v1beta1 import ( - v1 "k8s.io/api/core/v1" + "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -357,20 +357,6 @@ type CSINodeDriver struct { // This can be empty if driver does not support topology. // +optional TopologyKeys []string `json:"topologyKeys" protobuf:"bytes,3,rep,name=topologyKeys"` - - // allocatable represents the volume resources of a node that are available for scheduling. - // +optional - Allocatable *VolumeNodeResources `json:"allocatable,omitempty" protobuf:"bytes,4,opt,name=allocatable"` -} - -// VolumeNodeResources is a set of resource limits for scheduling of volumes. -type VolumeNodeResources struct { - // Maximum number of unique volumes managed by the CSI driver that can be used on a node. - // A volume that is both attached and mounted on a node is considered to be used once, not twice. - // The same rule applies for a unique volume that is shared among multiple pods on the same node. - // If this field is nil, then the supported number of volumes on this node is unbounded. - // +optional - Count *int32 `json:"count,omitempty" protobuf:"varint,1,opt,name=count"` } // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object diff --git a/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go index 0bc3456b97..ec741ecf70 100644 --- a/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/storage/v1beta1/types_swagger_doc_generated.go @@ -72,7 +72,6 @@ var map_CSINodeDriver = map[string]string{ "name": "This is the name of the CSI driver that this object refers to. This MUST be the same name returned by the CSI GetPluginName() call for that driver.", "nodeID": "nodeID of the node from the driver point of view. This field enables Kubernetes to communicate with storage systems that do not share the same nomenclature for nodes. For example, Kubernetes may refer to a given node as \"node1\", but the storage system may refer to the same node as \"nodeA\". When Kubernetes issues a command to the storage system to attach a volume to a specific node, it can use this field to refer to the node name using the ID that the storage system will understand, e.g. \"nodeA\" instead of \"node1\". This field is required.", "topologyKeys": "topologyKeys is the list of keys supported by the driver. When a driver is initialized on a cluster, it provides a set of topology keys that it understands (e.g. \"company.com/zone\", \"company.com/region\"). When a driver is initialized on a node, it provides the same topology keys along with values. Kubelet will expose these topology keys as labels on its own node object. When Kubernetes does topology aware provisioning, it can use this list to determine which labels it should retrieve from the node object and pass back to the driver. It is possible for different nodes to use different topology keys. This can be empty if driver does not support topology.", - "allocatable": "allocatable represents the volume resources of a node that are available for scheduling.", } func (CSINodeDriver) SwaggerDoc() map[string]string { @@ -187,13 +186,4 @@ func (VolumeError) SwaggerDoc() map[string]string { return map_VolumeError } -var map_VolumeNodeResources = map[string]string{ - "": "VolumeNodeResources is a set of resource limits for scheduling of volumes.", - "count": "Maximum number of unique volumes managed by the CSI driver that can be used on a node. A volume that is both attached and mounted on a node is considered to be used once, not twice. The same rule applies for a unique volume that is shared among multiple pods on the same node. If this field is nil, then the supported number of volumes on this node is unbounded.", -} - -func (VolumeNodeResources) SwaggerDoc() map[string]string { - return map_VolumeNodeResources -} - // AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go index 6b4726559f..3059423320 100644 --- a/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/storage/v1beta1/zz_generated.deepcopy.go @@ -146,11 +146,6 @@ func (in *CSINodeDriver) DeepCopyInto(out *CSINodeDriver) { *out = make([]string, len(*in)) copy(*out, *in) } - if in.Allocatable != nil { - in, out := &in.Allocatable, &out.Allocatable - *out = new(VolumeNodeResources) - (*in).DeepCopyInto(*out) - } return } @@ -466,24 +461,3 @@ func (in *VolumeError) DeepCopy() *VolumeError { in.DeepCopyInto(out) return out } - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VolumeNodeResources) DeepCopyInto(out *VolumeNodeResources) { - *out = *in - if in.Count != nil { - in, out := &in.Count, &out.Count - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeNodeResources. -func (in *VolumeNodeResources) DeepCopy() *VolumeNodeResources { - if in == nil { - return nil - } - out := new(VolumeNodeResources) - in.DeepCopyInto(out) - return out -} diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/features/OWNERS b/vendor/k8s.io/apiextensions-apiserver/pkg/features/OWNERS new file mode 100644 index 0000000000..05b08249ae --- /dev/null +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/features/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- feature-approvers diff --git a/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go b/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go new file mode 100644 index 0000000000..e72a3c18e0 --- /dev/null +++ b/vendor/k8s.io/apiextensions-apiserver/pkg/features/kube_features.go @@ -0,0 +1,77 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package features + +import ( + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/component-base/featuregate" +) + +const ( + // Every feature gate should add method here following this template: + // + // // owner: @username + // // alpha: v1.4 + // MyFeature() bool + + // owner: @sttts, @nikhita + // alpha: v1.8 + // beta: v1.9 + // + // CustomResourceValidation is a list of validation methods for CustomResources + CustomResourceValidation featuregate.Feature = "CustomResourceValidation" + + // owner: @roycaihw, @sttts + // alpha: v1.14 + // + // CustomResourcePublishOpenAPI enables publishing of CRD OpenAPI specs. + CustomResourcePublishOpenAPI featuregate.Feature = "CustomResourcePublishOpenAPI" + + // owner: @sttts, @nikhita + // alpha: v1.10 + // beta: v1.11 + // + // CustomResourceSubresources defines the subresources for CustomResources + CustomResourceSubresources featuregate.Feature = "CustomResourceSubresources" + + // owner: @mbohlool, @roycaihw + // alpha: v1.13 + // + // CustomResourceWebhookConversion defines the webhook conversion for Custom Resources. + CustomResourceWebhookConversion featuregate.Feature = "CustomResourceWebhookConversion" + + // owner: @sttts + // alpha: v1.15 + // + // CustomResourceDefaulting enables OpenAPI defaulting in CustomResources. + CustomResourceDefaulting featuregate.Feature = "CustomResourceDefaulting" +) + +func init() { + utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates) +} + +// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. +// To add a new feature, define a key for it above and add it here. The features will be +// available throughout Kubernetes binaries. +var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ + CustomResourceValidation: {Default: true, PreRelease: featuregate.Beta}, + CustomResourceSubresources: {Default: true, PreRelease: featuregate.Beta}, + CustomResourceWebhookConversion: {Default: true, PreRelease: featuregate.Beta}, + CustomResourcePublishOpenAPI: {Default: true, PreRelease: featuregate.Beta}, + CustomResourceDefaulting: {Default: false, PreRelease: featuregate.Alpha}, +} diff --git a/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go b/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go index 5b26ed2626..12c8a7b6cb 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go +++ b/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go @@ -122,11 +122,11 @@ func (intstr IntOrString) MarshalJSON() ([]byte, error) { // the OpenAPI spec of this type. // // See: https://github.com/kubernetes/kube-openapi/tree/master/pkg/generators -func (_ IntOrString) OpenAPISchemaType() []string { return []string{"string"} } +func (IntOrString) OpenAPISchemaType() []string { return []string{"string"} } // OpenAPISchemaFormat is used by the kube-openapi generator when constructing // the OpenAPI spec of this type. -func (_ IntOrString) OpenAPISchemaFormat() string { return "int-or-string" } +func (IntOrString) OpenAPISchemaFormat() string { return "int-or-string" } func (intstr *IntOrString) Fuzz(c fuzz.Continue) { if intstr == nil { diff --git a/vendor/k8s.io/apiserver/pkg/features/OWNERS b/vendor/k8s.io/apiserver/pkg/features/OWNERS new file mode 100644 index 0000000000..05b08249ae --- /dev/null +++ b/vendor/k8s.io/apiserver/pkg/features/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- feature-approvers diff --git a/vendor/k8s.io/apiserver/pkg/features/kube_features.go b/vendor/k8s.io/apiserver/pkg/features/kube_features.go new file mode 100644 index 0000000000..3cd4f7f8f5 --- /dev/null +++ b/vendor/k8s.io/apiserver/pkg/features/kube_features.go @@ -0,0 +1,158 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package features + +import ( + "k8s.io/apimachinery/pkg/util/runtime" + + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/component-base/featuregate" +) + +const ( + // Every feature gate should add method here following this template: + // + // // owner: @username + // // alpha: v1.4 + // MyFeature() bool + + // owner: @tallclair + // alpha: v1.5 + // beta: v1.6 + // + // StreamingProxyRedirects controls whether the apiserver should intercept (and follow) + // redirects from the backend (Kubelet) for streaming requests (exec/attach/port-forward). + StreamingProxyRedirects featuregate.Feature = "StreamingProxyRedirects" + + // owner: @tallclair + // alpha: v1.10 + // beta: v1.14 + // + // ValidateProxyRedirects controls whether the apiserver should validate that redirects are only + // followed to the same host. Only used if StreamingProxyRedirects is enabled. + ValidateProxyRedirects featuregate.Feature = "ValidateProxyRedirects" + + // owner: @tallclair + // alpha: v1.7 + // beta: v1.8 + // GA: v1.12 + // + // AdvancedAuditing enables a much more general API auditing pipeline, which includes support for + // pluggable output backends and an audit policy specifying how different requests should be + // audited. + AdvancedAuditing featuregate.Feature = "AdvancedAuditing" + + // owner: @pbarker + // alpha: v1.13 + // + // DynamicAuditing enables configuration of audit policy and webhook backends through an + // AuditSink API object. + DynamicAuditing featuregate.Feature = "DynamicAuditing" + + // owner: @ilackams + // alpha: v1.7 + // + // Enables compression of REST responses (GET and LIST only) + APIResponseCompression featuregate.Feature = "APIResponseCompression" + + // owner: @smarterclayton + // alpha: v1.8 + // beta: v1.9 + // + // Allow API clients to retrieve resource lists in chunks rather than + // all at once. + APIListChunking featuregate.Feature = "APIListChunking" + + // owner: @apelisse + // alpha: v1.12 + // beta: v1.13 + // + // Allow requests to be processed but not stored, so that + // validation, merging, mutation can be tested without + // committing. + DryRun featuregate.Feature = "DryRun" + + // owner: @caesarxuchao + // alpha: v1.15 + // + // Allow apiservers to show a count of remaining items in the response + // to a chunking list request. + RemainingItemCount featuregate.Feature = "RemainingItemCount" + + // owner: @apelisse, @lavalamp + // alpha: v1.14 + // + // Server-side apply. Merging happens on the server. + ServerSideApply featuregate.Feature = "ServerSideApply" + + // owner: @caesarxuchao + // alpha: v1.14 + // beta: v1.15 + // + // Allow apiservers to expose the storage version hash in the discovery + // document. + StorageVersionHash featuregate.Feature = "StorageVersionHash" + + // owner: @ksubrmnn + // alpha: v1.14 + // + // Allows kube-proxy to run in Overlay mode for Windows + WinOverlay featuregate.Feature = "WinOverlay" + + // owner: @ksubrmnn + // alpha: v1.14 + // + // Allows kube-proxy to create DSR loadbalancers for Windows + WinDSR featuregate.Feature = "WinDSR" + + // owner: @wojtek-t + // alpha: v1.15 + // + // Enables support for watch bookmark events. + WatchBookmark featuregate.Feature = "WatchBookmark" + + // owner: @MikeSpreitzer @yue9944882 + // alpha: v1.15 + // + // + // Enables managing request concurrency with prioritization and fairness at each server + RequestManagement featuregate.Feature = "RequestManagement" +) + +func init() { + runtime.Must(utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates)) +} + +// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. +// To add a new feature, define a key for it above and add it here. The features will be +// available throughout Kubernetes binaries. +var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ + StreamingProxyRedirects: {Default: true, PreRelease: featuregate.Beta}, + ValidateProxyRedirects: {Default: true, PreRelease: featuregate.Beta}, + AdvancedAuditing: {Default: true, PreRelease: featuregate.GA}, + DynamicAuditing: {Default: false, PreRelease: featuregate.Alpha}, + APIResponseCompression: {Default: false, PreRelease: featuregate.Alpha}, + APIListChunking: {Default: true, PreRelease: featuregate.Beta}, + DryRun: {Default: true, PreRelease: featuregate.Beta}, + RemainingItemCount: {Default: false, PreRelease: featuregate.Alpha}, + ServerSideApply: {Default: false, PreRelease: featuregate.Alpha}, + StorageVersionHash: {Default: true, PreRelease: featuregate.Beta}, + WinOverlay: {Default: false, PreRelease: featuregate.Alpha}, + WinDSR: {Default: false, PreRelease: featuregate.Alpha}, + WatchBookmark: {Default: false, PreRelease: featuregate.Alpha}, + RequestManagement: {Default: false, PreRelease: featuregate.Alpha}, +} diff --git a/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go b/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go index 81d2bccb4e..9cb565e2cc 100644 --- a/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go +++ b/vendor/k8s.io/apiserver/pkg/server/healthz/healthz.go @@ -93,14 +93,6 @@ func InstallHandler(mux mux, checks ...HealthzChecker) { InstallPathHandler(mux, "/healthz", checks...) } -// InstallReadyzHandler registers handlers for health checking on the path -// "/readyz" to mux. *All handlers* for mux must be specified in -// exactly one call to InstallHandler. Calling InstallHandler more -// than once for the same mux will result in a panic. -func InstallReadyzHandler(mux mux, checks ...HealthzChecker) { - InstallPathHandler(mux, "/readyz", checks...) -} - // InstallPathHandler registers handlers for health checking on // a specific path to mux. *All handlers* for the path must be // specified in exactly one call to InstallPathHandler. Calling diff --git a/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go b/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go new file mode 100644 index 0000000000..5911b7568c --- /dev/null +++ b/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go @@ -0,0 +1,33 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package feature + +import ( + "k8s.io/component-base/featuregate" +) + +var ( + // DefaultMutableFeatureGate is a mutable version of DefaultFeatureGate. + // Only top-level commands/options setup and the k8s.io/component-base/featuregate/testing package should make use of this. + // Tests that need to modify feature gates for the duration of their test should use: + // defer featuregatetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features., )() + DefaultMutableFeatureGate featuregate.MutableFeatureGate = featuregate.NewFeatureGate() + + // DefaultFeatureGate is a shared global FeatureGate. + // Top-level commands/options setup that needs to modify this feature gate should use DefaultMutableFeatureGate. + DefaultFeatureGate featuregate.FeatureGate = DefaultMutableFeatureGate +) diff --git a/vendor/k8s.io/cli-runtime/pkg/printers/json.go b/vendor/k8s.io/cli-runtime/pkg/printers/json.go index 1c35b97d73..bb5bec7488 100644 --- a/vendor/k8s.io/cli-runtime/pkg/printers/json.go +++ b/vendor/k8s.io/cli-runtime/pkg/printers/json.go @@ -22,9 +22,7 @@ import ( "fmt" "io" "reflect" - "sync/atomic" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "sigs.k8s.io/yaml" @@ -43,20 +41,6 @@ func (p *JSONPrinter) PrintObj(obj runtime.Object, w io.Writer) error { } switch obj := obj.(type) { - case *metav1.WatchEvent: - if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj.Object.Object)).Type().PkgPath()) { - return fmt.Errorf(InternalObjectPrinterErr) - } - data, err := json.Marshal(obj) - if err != nil { - return err - } - _, err = w.Write(data) - if err != nil { - return err - } - _, err = w.Write([]byte{'\n'}) - return err case *runtime.Unknown: var buf bytes.Buffer err := json.Indent(&buf, obj.Raw, "", " ") @@ -84,10 +68,7 @@ func (p *JSONPrinter) PrintObj(obj runtime.Object, w io.Writer) error { // YAMLPrinter is an implementation of ResourcePrinter which outputs an object as YAML. // The input object is assumed to be in the internal version of an API and is converted // to the given version first. -// If PrintObj() is called multiple times, objects are separated with a '---' separator. -type YAMLPrinter struct { - printCount int64 -} +type YAMLPrinter struct{} // PrintObj prints the data as YAML. func (p *YAMLPrinter) PrintObj(obj runtime.Object, w io.Writer) error { @@ -98,28 +79,7 @@ func (p *YAMLPrinter) PrintObj(obj runtime.Object, w io.Writer) error { return fmt.Errorf(InternalObjectPrinterErr) } - count := atomic.AddInt64(&p.printCount, 1) - if count > 1 { - if _, err := w.Write([]byte("---\n")); err != nil { - return err - } - } - switch obj := obj.(type) { - case *metav1.WatchEvent: - if InternalObjectPreventer.IsForbidden(reflect.Indirect(reflect.ValueOf(obj.Object.Object)).Type().PkgPath()) { - return fmt.Errorf(InternalObjectPrinterErr) - } - data, err := json.Marshal(obj) - if err != nil { - return err - } - data, err = yaml.JSONToYAML(data) - if err != nil { - return err - } - _, err = w.Write(data) - return err case *runtime.Unknown: data, err := yaml.JSONToYAML(obj.Raw) if err != nil { diff --git a/vendor/k8s.io/cli-runtime/pkg/printers/name.go b/vendor/k8s.io/cli-runtime/pkg/printers/name.go index 086166af27..d04c5c6bbc 100644 --- a/vendor/k8s.io/cli-runtime/pkg/printers/name.go +++ b/vendor/k8s.io/cli-runtime/pkg/printers/name.go @@ -23,7 +23,6 @@ import ( "strings" "k8s.io/apimachinery/pkg/api/meta" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" @@ -43,11 +42,6 @@ type NamePrinter struct { // PrintObj is an implementation of ResourcePrinter.PrintObj which decodes the object // and print "resource/name" pair. If the object is a List, print all items in it. func (p *NamePrinter) PrintObj(obj runtime.Object, w io.Writer) error { - switch castObj := obj.(type) { - case *metav1.WatchEvent: - obj = castObj.Object.Object - } - // we use reflect.Indirect here in order to obtain the actual value from a pointer. // using reflect.Indirect indiscriminately is valid here, as all runtime.Objects are supposed to be pointers. // we need an actual value in order to retrieve the package path for an object. diff --git a/vendor/k8s.io/cloud-provider/SECURITY_CONTACTS b/vendor/k8s.io/cloud-provider/SECURITY_CONTACTS index 68e73edaff..c8282d6bd6 100644 --- a/vendor/k8s.io/cloud-provider/SECURITY_CONTACTS +++ b/vendor/k8s.io/cloud-provider/SECURITY_CONTACTS @@ -13,8 +13,3 @@ cheftako andrewsykim dims -cjcullen -joelsmith -liggitt -philips -tallclair diff --git a/vendor/k8s.io/cloud-provider/go.mod b/vendor/k8s.io/cloud-provider/go.mod index 3eb3b5f300..623d4fdd56 100644 --- a/vendor/k8s.io/cloud-provider/go.mod +++ b/vendor/k8s.io/cloud-provider/go.mod @@ -5,21 +5,18 @@ module k8s.io/cloud-provider go 1.12 require ( - k8s.io/api v0.0.0-20190711103429-37c3b8b1ca65 - k8s.io/apimachinery v0.0.0-20190711103026-7bf792636534 - k8s.io/client-go v0.0.0-20190711103903-4a0861cac5e0 + k8s.io/api v0.0.0-20190620085002-8f739060a0b3 + k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719 + k8s.io/client-go v0.0.0-20190620085041-d697df55dbe9 k8s.io/klog v0.3.1 - k8s.io/utils v0.0.0-20190607212802-c55fbcfc754a + k8s.io/utils v0.0.0-20190221042446-c2654d5206da ) replace ( - golang.org/x/crypto => golang.org/x/crypto v0.0.0-20181025213731-e84da0312774 - golang.org/x/net => golang.org/x/net v0.0.0-20190206173232-65e2d4e15006 golang.org/x/sync => golang.org/x/sync v0.0.0-20181108010431-42b317875d0f golang.org/x/sys => golang.org/x/sys v0.0.0-20190209173611-3b5209105503 - golang.org/x/text => golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db golang.org/x/tools => golang.org/x/tools v0.0.0-20190313210603-aa82965741a9 - k8s.io/api => k8s.io/api v0.0.0-20190711103429-37c3b8b1ca65 - k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190711103026-7bf792636534 - k8s.io/client-go => k8s.io/client-go v0.0.0-20190711103903-4a0861cac5e0 + k8s.io/api => k8s.io/api v0.0.0-20190620085002-8f739060a0b3 + k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719 + k8s.io/client-go => k8s.io/client-go v0.0.0-20190620085041-d697df55dbe9 ) diff --git a/vendor/k8s.io/cloud-provider/go.sum b/vendor/k8s.io/cloud-provider/go.sum index 67e62220ba..e36c71bc55 100644 --- a/vendor/k8s.io/cloud-provider/go.sum +++ b/vendor/k8s.io/cloud-provider/go.sum @@ -1,16 +1,15 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= github.com/Azure/go-autorest v11.1.2+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgrijalva/jwt-go v0.0.0-20160705203006-01aeca54ebda/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v0.0.0-20190203023257-5858425f7550/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.0.0 h1:2jyBKDKU/8v3v2xVR2PtiWQviFUyiaGk2rpfyFT8rTM= -github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415 h1:WSBJMqJbLxsn+bTCPyPYZfqHdJmc8MK4wrBjMft6BAM= +github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 h1:LbsanbbD6LieFkXbj9YNNBupiGHJgFeLpO0j0Fza1h8= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= @@ -18,25 +17,20 @@ github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y github.com/google/btree v0.0.0-20160524151835-7d79101e329e/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf h1:+RRA9JqSOZFfKrOeqr2z77+8R2RKyh8PG66dcu1V0ck= +github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= +github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d h1:7XGaL1e6bYS1yIonGp9761ExpPPV1ui0SAC59Yube9k= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= github.com/gregjones/httpcache v0.0.0-20170728041850-787624de3eb7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be h1:AHimNtVIpiBjPUhEF5KNCkrUyqTSA5zWUl8sQ2bfGBE= +github.com/json-iterator/go v0.0.0-20180701071628-ab8a2e0c74be/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= @@ -44,21 +38,20 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/onsi/ginkgo v1.6.0 h1:Ix8l273rp3QzYgXSR+c8d1fTG7UPgYkOSELPhiY/YGw= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w= -github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo= -github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3 h1:EooPXg51Tn+xmWPXJUGCnJhJSpeuMlBmfJVcqIRmmv8= +github.com/onsi/gomega v0.0.0-20190113212917-5533ce8a0da3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= golang.org/x/crypto v0.0.0-20181025213731-e84da0312774 h1:a4tQYYYuK9QdeO/+kEvNYyuR21S+7ve5EANok6hABhI= golang.org/x/crypto v0.0.0-20181025213731-e84da0312774/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190206173232-65e2d4e15006 h1:bfLnR+k0tq5Lqt6dflRLcZiz6UaXCMt3vhYJ1l4FQ80= golang.org/x/net v0.0.0-20190206173232-65e2d4e15006/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a h1:tImsplftrFpALCYumobsd0K86vlAs/eXGFms2txfJfA= @@ -67,6 +60,7 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTm golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190209173611-3b5209105503 h1:5SvYFrOM3W8Mexn9/oA44Ji7vhXAZQ9hiP+1Q/DMrWg= golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db h1:6/JqlYfC1CCaLnGceQTI+sDGhC9UBSPAsBqI0Gun6kU= golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20161028155119-f51c12702a4d h1:TnM+PKb3ylGmZvyPXmo9m/wktg7Jn/a/fNmr33HSj8g= @@ -77,8 +71,6 @@ google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.0 h1:3zYtXIO92bvsdS3ggAdA8Gb4Azj0YU+TVY1uGYNFA8o= @@ -87,17 +79,14 @@ gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkep gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -k8s.io/api v0.0.0-20190711103429-37c3b8b1ca65/go.mod h1:ndtPUvriKipo+umdrlC6qqG9GNRQ8vbS0t70FMFrjuw= -k8s.io/apimachinery v0.0.0-20190711103026-7bf792636534/go.mod h1:M2fZgZL9DbLfeJaPBCDqSqNsdsmLN+V29knYJnIXlMA= -k8s.io/client-go v0.0.0-20190711103903-4a0861cac5e0/go.mod h1:MdhWxiGHTqqubuL4pqFLTAhEjVr0Oa6nj8mAy3kFIEI= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/api v0.0.0-20190620085002-8f739060a0b3/go.mod h1:TBhBqb1AWbBQbW3XRusr7n7E4v2+5ZY8r8sAMnyFC5A= +k8s.io/apimachinery v0.0.0-20190612205821-1799e75a0719/go.mod h1:I4A+glKBHiTgiEjQiCCQfCAIcIMFGt291SmsvcrFzJA= +k8s.io/client-go v0.0.0-20190620085041-d697df55dbe9/go.mod h1:tJOzO9NIWw9Uik0XLSObd2NqQJ8jcW6ZW3n0y10S35o= k8s.io/klog v0.3.1 h1:RVgyDHY/kFKtLqh67NvEWIgkMneNoIrdkN0CxDSQc68= k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 h1:TRb4wNWoBVrH9plmkp2q86FIDppkbrEXdXlxU3a3BMI= k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30/go.mod h1:BXM9ceUBTj2QnfH2MK1odQs778ajze1RxcmP6S8RVVc= -k8s.io/utils v0.0.0-20190607212802-c55fbcfc754a h1:2jUDc9gJja832Ftp+QbDV0tVhQHMISFn01els+2ZAcw= -k8s.io/utils v0.0.0-20190607212802-c55fbcfc754a/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20190221042446-c2654d5206da h1:ElyM7RPonbKnQqOcw7dG2IK5uvQQn3b/WPHqD5mBvP4= +k8s.io/utils v0.0.0-20190221042446-c2654d5206da/go.mod h1:8k8uAuAQ0rXslZKaEWd0c3oVhZz7sSzSiPnVZayjIX0= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= diff --git a/vendor/k8s.io/cloud-provider/plugins.go b/vendor/k8s.io/cloud-provider/plugins.go index e8a41d87aa..9fc6aff8cd 100644 --- a/vendor/k8s.io/cloud-provider/plugins.go +++ b/vendor/k8s.io/cloud-provider/plugins.go @@ -42,8 +42,11 @@ var ( }{ {"aws", false, "The AWS provider is deprecated and will be removed in a future release"}, {"azure", false, "The Azure provider is deprecated and will be removed in a future release"}, + {"cloudstack", false, "The CloudStack Controller project is no longer maintained."}, {"gce", false, "The GCE provider is deprecated and will be removed in a future release"}, {"openstack", true, "https://github.com/kubernetes/cloud-provider-openstack"}, + {"ovirt", false, "The ovirt Controller project is no longer maintained."}, + {"photon", false, "The Photon Controller project is no longer maintained."}, {"vsphere", false, "The vSphere provider is deprecated and will be removed in a future release"}, } ) diff --git a/vendor/k8s.io/code-generator/go.mod b/vendor/k8s.io/code-generator/go.mod index db670455a5..997b52d5df 100644 --- a/vendor/k8s.io/code-generator/go.mod +++ b/vendor/k8s.io/code-generator/go.mod @@ -6,7 +6,7 @@ go 1.12 require ( github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415 - github.com/spf13/pflag v1.0.3 + github.com/spf13/pflag v1.0.1 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384 // indirect gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485 gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect diff --git a/vendor/k8s.io/code-generator/go.sum b/vendor/k8s.io/code-generator/go.sum index 1e37d44f41..c9cf7c6214 100644 --- a/vendor/k8s.io/code-generator/go.sum +++ b/vendor/k8s.io/code-generator/go.sum @@ -2,8 +2,8 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415 h1:WSBJMqJbLxsn+bTCPyPYZfqHdJmc8MK4wrBjMft6BAM= github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/pflag v1.0.1 h1:aCvUg6QPl3ibpQUxyLkrEkCHtPqYJL4x9AuhqVqFis4= +github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 h1:I6A9Ag9FpEKOjcKrRNjQkPHawoXIhKyTGfvvjFAiiAk= golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= diff --git a/vendor/k8s.io/component-base/featuregate/feature_gate.go b/vendor/k8s.io/component-base/featuregate/feature_gate.go new file mode 100644 index 0000000000..0243fb371a --- /dev/null +++ b/vendor/k8s.io/component-base/featuregate/feature_gate.go @@ -0,0 +1,333 @@ +/* +Copyright 2016 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package featuregate + +import ( + "fmt" + "sort" + "strconv" + "strings" + "sync" + "sync/atomic" + + "github.com/spf13/pflag" + "k8s.io/klog" +) + +type Feature string + +const ( + flagName = "feature-gates" + + // allAlphaGate is a global toggle for alpha features. Per-feature key + // values override the default set by allAlphaGate. Examples: + // AllAlpha=false,NewFeature=true will result in newFeature=true + // AllAlpha=true,NewFeature=false will result in newFeature=false + allAlphaGate Feature = "AllAlpha" +) + +var ( + // The generic features. + defaultFeatures = map[Feature]FeatureSpec{ + allAlphaGate: {Default: false, PreRelease: Alpha}, + } + + // Special handling for a few gates. + specialFeatures = map[Feature]func(known map[Feature]FeatureSpec, enabled map[Feature]bool, val bool){ + allAlphaGate: setUnsetAlphaGates, + } +) + +type FeatureSpec struct { + // Default is the default enablement state for the feature + Default bool + // LockToDefault indicates that the feature is locked to its default and cannot be changed + LockToDefault bool + // PreRelease indicates the maturity level of the feature + PreRelease prerelease +} + +type prerelease string + +const ( + // Values for PreRelease. + Alpha = prerelease("ALPHA") + Beta = prerelease("BETA") + GA = prerelease("") + + // Deprecated + Deprecated = prerelease("DEPRECATED") +) + +// FeatureGate indicates whether a given feature is enabled or not +type FeatureGate interface { + // Enabled returns true if the key is enabled. + Enabled(key Feature) bool + // KnownFeatures returns a slice of strings describing the FeatureGate's known features. + KnownFeatures() []string + // DeepCopy returns a deep copy of the FeatureGate object, such that gates can be + // set on the copy without mutating the original. This is useful for validating + // config against potential feature gate changes before committing those changes. + DeepCopy() MutableFeatureGate +} + +// MutableFeatureGate parses and stores flag gates for known features from +// a string like feature1=true,feature2=false,... +type MutableFeatureGate interface { + FeatureGate + + // AddFlag adds a flag for setting global feature gates to the specified FlagSet. + AddFlag(fs *pflag.FlagSet) + // Set parses and stores flag gates for known features + // from a string like feature1=true,feature2=false,... + Set(value string) error + // SetFromMap stores flag gates for known features from a map[string]bool or returns an error + SetFromMap(m map[string]bool) error + // Add adds features to the featureGate. + Add(features map[Feature]FeatureSpec) error +} + +// featureGate implements FeatureGate as well as pflag.Value for flag parsing. +type featureGate struct { + special map[Feature]func(map[Feature]FeatureSpec, map[Feature]bool, bool) + + // lock guards writes to known, enabled, and reads/writes of closed + lock sync.Mutex + // known holds a map[Feature]FeatureSpec + known *atomic.Value + // enabled holds a map[Feature]bool + enabled *atomic.Value + // closed is set to true when AddFlag is called, and prevents subsequent calls to Add + closed bool +} + +func setUnsetAlphaGates(known map[Feature]FeatureSpec, enabled map[Feature]bool, val bool) { + for k, v := range known { + if v.PreRelease == Alpha { + if _, found := enabled[k]; !found { + enabled[k] = val + } + } + } +} + +// Set, String, and Type implement pflag.Value +var _ pflag.Value = &featureGate{} + +func NewFeatureGate() *featureGate { + known := map[Feature]FeatureSpec{} + for k, v := range defaultFeatures { + known[k] = v + } + + knownValue := &atomic.Value{} + knownValue.Store(known) + + enabled := map[Feature]bool{} + enabledValue := &atomic.Value{} + enabledValue.Store(enabled) + + f := &featureGate{ + known: knownValue, + special: specialFeatures, + enabled: enabledValue, + } + return f +} + +// Set parses a string of the form "key1=value1,key2=value2,..." into a +// map[string]bool of known keys or returns an error. +func (f *featureGate) Set(value string) error { + m := make(map[string]bool) + for _, s := range strings.Split(value, ",") { + if len(s) == 0 { + continue + } + arr := strings.SplitN(s, "=", 2) + k := strings.TrimSpace(arr[0]) + if len(arr) != 2 { + return fmt.Errorf("missing bool value for %s", k) + } + v := strings.TrimSpace(arr[1]) + boolValue, err := strconv.ParseBool(v) + if err != nil { + return fmt.Errorf("invalid value of %s=%s, err: %v", k, v, err) + } + m[k] = boolValue + } + return f.SetFromMap(m) +} + +// SetFromMap stores flag gates for known features from a map[string]bool or returns an error +func (f *featureGate) SetFromMap(m map[string]bool) error { + f.lock.Lock() + defer f.lock.Unlock() + + // Copy existing state + known := map[Feature]FeatureSpec{} + for k, v := range f.known.Load().(map[Feature]FeatureSpec) { + known[k] = v + } + enabled := map[Feature]bool{} + for k, v := range f.enabled.Load().(map[Feature]bool) { + enabled[k] = v + } + + for k, v := range m { + k := Feature(k) + featureSpec, ok := known[k] + if !ok { + return fmt.Errorf("unrecognized feature gate: %s", k) + } + if featureSpec.LockToDefault && featureSpec.Default != v { + return fmt.Errorf("cannot set feature gate %v to %v, feature is locked to %v", k, v, featureSpec.Default) + } + enabled[k] = v + // Handle "special" features like "all alpha gates" + if fn, found := f.special[k]; found { + fn(known, enabled, v) + } + + if featureSpec.PreRelease == Deprecated { + klog.Warningf("Setting deprecated feature gate %s=%t. It will be removed in a future release.", k, v) + } else if featureSpec.PreRelease == GA { + klog.Warningf("Setting GA feature gate %s=%t. It will be removed in a future release.", k, v) + } + } + + // Persist changes + f.known.Store(known) + f.enabled.Store(enabled) + + klog.V(1).Infof("feature gates: %v", f.enabled) + return nil +} + +// String returns a string containing all enabled feature gates, formatted as "key1=value1,key2=value2,...". +func (f *featureGate) String() string { + pairs := []string{} + for k, v := range f.enabled.Load().(map[Feature]bool) { + pairs = append(pairs, fmt.Sprintf("%s=%t", k, v)) + } + sort.Strings(pairs) + return strings.Join(pairs, ",") +} + +func (f *featureGate) Type() string { + return "mapStringBool" +} + +// Add adds features to the featureGate. +func (f *featureGate) Add(features map[Feature]FeatureSpec) error { + f.lock.Lock() + defer f.lock.Unlock() + + if f.closed { + return fmt.Errorf("cannot add a feature gate after adding it to the flag set") + } + + // Copy existing state + known := map[Feature]FeatureSpec{} + for k, v := range f.known.Load().(map[Feature]FeatureSpec) { + known[k] = v + } + + for name, spec := range features { + if existingSpec, found := known[name]; found { + if existingSpec == spec { + continue + } + return fmt.Errorf("feature gate %q with different spec already exists: %v", name, existingSpec) + } + + known[name] = spec + } + + // Persist updated state + f.known.Store(known) + + return nil +} + +// Enabled returns true if the key is enabled. +func (f *featureGate) Enabled(key Feature) bool { + if v, ok := f.enabled.Load().(map[Feature]bool)[key]; ok { + return v + } + return f.known.Load().(map[Feature]FeatureSpec)[key].Default +} + +// AddFlag adds a flag for setting global feature gates to the specified FlagSet. +func (f *featureGate) AddFlag(fs *pflag.FlagSet) { + f.lock.Lock() + // TODO(mtaufen): Shouldn't we just close it on the first Set/SetFromMap instead? + // Not all components expose a feature gates flag using this AddFlag method, and + // in the future, all components will completely stop exposing a feature gates flag, + // in favor of componentconfig. + f.closed = true + f.lock.Unlock() + + known := f.KnownFeatures() + fs.Var(f, flagName, ""+ + "A set of key=value pairs that describe feature gates for alpha/experimental features. "+ + "Options are:\n"+strings.Join(known, "\n")) +} + +// KnownFeatures returns a slice of strings describing the FeatureGate's known features. +// Deprecated and GA features are hidden from the list. +func (f *featureGate) KnownFeatures() []string { + var known []string + for k, v := range f.known.Load().(map[Feature]FeatureSpec) { + if v.PreRelease == GA || v.PreRelease == Deprecated { + continue + } + known = append(known, fmt.Sprintf("%s=true|false (%s - default=%t)", k, v.PreRelease, v.Default)) + } + sort.Strings(known) + return known +} + +// DeepCopy returns a deep copy of the FeatureGate object, such that gates can be +// set on the copy without mutating the original. This is useful for validating +// config against potential feature gate changes before committing those changes. +func (f *featureGate) DeepCopy() MutableFeatureGate { + // Copy existing state. + known := map[Feature]FeatureSpec{} + for k, v := range f.known.Load().(map[Feature]FeatureSpec) { + known[k] = v + } + enabled := map[Feature]bool{} + for k, v := range f.enabled.Load().(map[Feature]bool) { + enabled[k] = v + } + + // Store copied state in new atomics. + knownValue := &atomic.Value{} + knownValue.Store(known) + enabledValue := &atomic.Value{} + enabledValue.Store(enabled) + + // Construct a new featureGate around the copied state. + // Note that specialFeatures is treated as immutable by convention, + // and we maintain the value of f.closed across the copy. + return &featureGate{ + special: specialFeatures, + known: knownValue, + enabled: enabledValue, + closed: f.closed, + } +} diff --git a/vendor/k8s.io/cri-api/LICENSE b/vendor/k8s.io/cri-api/LICENSE new file mode 100644 index 0000000000..8dada3edaf --- /dev/null +++ b/vendor/k8s.io/cri-api/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.pb.go similarity index 95% rename from vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go rename to vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.pb.go index f93bf5c680..4b410c5d7c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.pb.go +++ b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.pb.go @@ -1676,6 +1676,8 @@ type WindowsContainerSecurityContext struct { // exist in the container image and be resolved there by the runtime; // otherwise, the runtime MUST return error. RunAsUsername string `protobuf:"bytes,1,opt,name=run_as_username,json=runAsUsername,proto3" json:"run_as_username,omitempty"` + // The contents of the GMSA credential spec to use to run this container. + CredentialSpec string `protobuf:"bytes,2,opt,name=credential_spec,json=credentialSpec,proto3" json:"credential_spec,omitempty"` } func (m *WindowsContainerSecurityContext) Reset() { *m = WindowsContainerSecurityContext{} } @@ -1691,6 +1693,13 @@ func (m *WindowsContainerSecurityContext) GetRunAsUsername() string { return "" } +func (m *WindowsContainerSecurityContext) GetCredentialSpec() string { + if m != nil { + return m.CredentialSpec + } + return "" +} + // WindowsContainerConfig contains platform-specific configuration for // Windows-based containers. type WindowsContainerConfig struct { @@ -6485,6 +6494,12 @@ func (m *WindowsContainerSecurityContext) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintApi(dAtA, i, uint64(len(m.RunAsUsername))) i += copy(dAtA[i:], m.RunAsUsername) } + if len(m.CredentialSpec) > 0 { + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(m.CredentialSpec))) + i += copy(dAtA[i:], m.CredentialSpec) + } return i, nil } @@ -9775,6 +9790,10 @@ func (m *WindowsContainerSecurityContext) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + l = len(m.CredentialSpec) + if l > 0 { + n += 1 + l + sovApi(uint64(l)) + } return n } @@ -11381,6 +11400,7 @@ func (this *WindowsContainerSecurityContext) String() string { } s := strings.Join([]string{`&WindowsContainerSecurityContext{`, `RunAsUsername:` + fmt.Sprintf("%v", this.RunAsUsername) + `,`, + `CredentialSpec:` + fmt.Sprintf("%v", this.CredentialSpec) + `,`, `}`, }, "") return s @@ -17980,6 +18000,35 @@ func (m *WindowsContainerSecurityContext) Unmarshal(dAtA []byte) error { } m.RunAsUsername = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CredentialSpec", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CredentialSpec = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -26960,300 +27009,302 @@ var ( func init() { proto.RegisterFile("api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 4720 bytes of a gzipped FileDescriptorProto + // 4737 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5c, 0xcd, 0x6f, 0x1b, 0x49, - 0x76, 0x57, 0x93, 0xfa, 0x20, 0x1f, 0x45, 0x89, 0x2a, 0xcb, 0x16, 0x4d, 0x8f, 0x35, 0x56, 0xcf, - 0xf8, 0x73, 0xc7, 0xf2, 0x58, 0xb3, 0xeb, 0x89, 0xed, 0x59, 0xdb, 0xb4, 0x24, 0xdb, 0xcc, 0xda, - 0x14, 0xd3, 0x94, 0xe6, 0x63, 0x67, 0x80, 0xde, 0x16, 0xbb, 0x44, 0xf5, 0x9a, 0xec, 0xea, 0xe9, + 0x76, 0x57, 0x93, 0xfa, 0x20, 0x1f, 0x45, 0x8a, 0x2a, 0xcb, 0x16, 0x4d, 0x8f, 0x35, 0x56, 0xcf, + 0xf8, 0x73, 0xc7, 0xf2, 0x58, 0xb3, 0xeb, 0x89, 0xed, 0x59, 0xdb, 0x34, 0x25, 0xdb, 0xcc, 0xda, + 0x14, 0xd3, 0x94, 0xe6, 0x63, 0x67, 0x80, 0xde, 0x16, 0xbb, 0x44, 0xf5, 0x9a, 0xec, 0xee, 0xe9, 0x6e, 0xda, 0x56, 0x02, 0x04, 0x0b, 0x2c, 0xb2, 0x87, 0x00, 0x01, 0x72, 0xce, 0x71, 0x73, 0xc8, 0x21, 0xb7, 0x00, 0x41, 0x0e, 0x39, 0x6d, 0x90, 0xc3, 0x5e, 0x02, 0xe4, 0xb4, 0x48, 0x90, 0x4b, - 0x66, 0x92, 0x5c, 0x02, 0x24, 0xc8, 0x1f, 0x90, 0x43, 0x50, 0x5f, 0xcd, 0xfe, 0xe4, 0x87, 0xc7, - 0xbb, 0xb3, 0x39, 0xa9, 0xfb, 0xf5, 0x7b, 0xaf, 0x5e, 0xbd, 0x7a, 0xf5, 0xea, 0xd5, 0xaf, 0x8a, - 0x82, 0xa2, 0xe1, 0x58, 0x9b, 0x8e, 0x4b, 0x7c, 0x82, 0x2a, 0xee, 0xc0, 0xf6, 0xad, 0x3e, 0xde, - 0x7c, 0x71, 0xd3, 0xe8, 0x39, 0xc7, 0xc6, 0x56, 0xed, 0x7a, 0xd7, 0xf2, 0x8f, 0x07, 0x87, 0x9b, - 0x1d, 0xd2, 0xbf, 0xd1, 0x25, 0x5d, 0x72, 0x83, 0x31, 0x1e, 0x0e, 0x8e, 0xd8, 0x1b, 0x7b, 0x61, - 0x4f, 0x5c, 0x81, 0x7a, 0x0d, 0x96, 0x3e, 0xc6, 0xae, 0x67, 0x11, 0x5b, 0xc3, 0x5f, 0x0e, 0xb0, - 0xe7, 0xa3, 0x2a, 0x2c, 0xbc, 0xe0, 0x94, 0xaa, 0x72, 0x41, 0xb9, 0x52, 0xd4, 0xe4, 0xab, 0xfa, - 0x17, 0x0a, 0x2c, 0x07, 0xcc, 0x9e, 0x43, 0x6c, 0x0f, 0x67, 0x73, 0xa3, 0x0d, 0x58, 0x14, 0xc6, - 0xe9, 0xb6, 0xd1, 0xc7, 0xd5, 0x1c, 0xfb, 0x5c, 0x12, 0xb4, 0xa6, 0xd1, 0xc7, 0xe8, 0x32, 0x2c, - 0x4b, 0x16, 0xa9, 0x24, 0xcf, 0xb8, 0x96, 0x04, 0x59, 0xb4, 0x86, 0x36, 0xe1, 0x94, 0x64, 0x34, - 0x1c, 0x2b, 0x60, 0x9e, 0x65, 0xcc, 0x2b, 0xe2, 0x53, 0xdd, 0xb1, 0x04, 0xbf, 0xfa, 0x39, 0x14, - 0x77, 0x9a, 0xed, 0x6d, 0x62, 0x1f, 0x59, 0x5d, 0x6a, 0xa2, 0x87, 0x5d, 0x2a, 0x53, 0x55, 0x2e, - 0xe4, 0xa9, 0x89, 0xe2, 0x15, 0xd5, 0xa0, 0xe0, 0x61, 0xc3, 0xed, 0x1c, 0x63, 0xaf, 0x9a, 0x63, - 0x9f, 0x82, 0x77, 0x2a, 0x45, 0x1c, 0xdf, 0x22, 0xb6, 0x57, 0xcd, 0x73, 0x29, 0xf1, 0xaa, 0xfe, - 0x5c, 0x81, 0x52, 0x8b, 0xb8, 0xfe, 0x33, 0xc3, 0x71, 0x2c, 0xbb, 0x8b, 0x6e, 0x41, 0x81, 0xf9, - 0xb2, 0x43, 0x7a, 0xcc, 0x07, 0x4b, 0x5b, 0xb5, 0xcd, 0xf8, 0xb0, 0x6c, 0xb6, 0x04, 0x87, 0x16, - 0xf0, 0xa2, 0x8b, 0xb0, 0xd4, 0x21, 0xb6, 0x6f, 0x58, 0x36, 0x76, 0x75, 0x87, 0xb8, 0x3e, 0x73, - 0xd1, 0x9c, 0x56, 0x0e, 0xa8, 0xb4, 0x15, 0x74, 0x0e, 0x8a, 0xc7, 0xc4, 0xf3, 0x39, 0x47, 0x9e, - 0x71, 0x14, 0x28, 0x81, 0x7d, 0x5c, 0x83, 0x05, 0xf6, 0xd1, 0x72, 0x84, 0x33, 0xe6, 0xe9, 0x6b, - 0xc3, 0x51, 0x7f, 0xa5, 0xc0, 0xdc, 0x33, 0x32, 0xb0, 0xfd, 0x58, 0x33, 0x86, 0x7f, 0x2c, 0x06, - 0x2a, 0xd4, 0x8c, 0xe1, 0x1f, 0x0f, 0x9b, 0xa1, 0x1c, 0x7c, 0xac, 0x78, 0x33, 0xf4, 0x63, 0x0d, - 0x0a, 0x2e, 0x36, 0x4c, 0x62, 0xf7, 0x4e, 0x98, 0x09, 0x05, 0x2d, 0x78, 0xa7, 0x83, 0xe8, 0xe1, - 0x9e, 0x65, 0x0f, 0x5e, 0xe9, 0x2e, 0xee, 0x19, 0x87, 0xb8, 0xc7, 0x4c, 0x29, 0x68, 0x4b, 0x82, - 0xac, 0x71, 0x2a, 0xda, 0x81, 0x92, 0xe3, 0x12, 0xc7, 0xe8, 0x1a, 0xd4, 0x8f, 0xd5, 0x39, 0xe6, - 0x2a, 0x35, 0xe9, 0x2a, 0x66, 0x76, 0x6b, 0xc8, 0xa9, 0x85, 0xc5, 0xd4, 0xbf, 0x52, 0x60, 0x99, - 0x06, 0x8f, 0xe7, 0x18, 0x1d, 0xbc, 0xc7, 0x86, 0x04, 0xdd, 0x86, 0x05, 0x1b, 0xfb, 0x2f, 0x89, - 0xfb, 0x5c, 0x0c, 0xc0, 0xdb, 0x49, 0xad, 0x81, 0xcc, 0x33, 0x62, 0x62, 0x4d, 0xf2, 0xa3, 0x9b, - 0x90, 0x77, 0x2c, 0x93, 0x75, 0x78, 0x02, 0x31, 0xca, 0x4b, 0x45, 0x2c, 0xa7, 0xc3, 0xfc, 0x30, - 0x89, 0x88, 0xe5, 0x74, 0x54, 0x15, 0xa0, 0x61, 0xfb, 0xb7, 0xbe, 0xfb, 0xb1, 0xd1, 0x1b, 0x60, - 0xb4, 0x0a, 0x73, 0x2f, 0xe8, 0x03, 0x33, 0x36, 0xaf, 0xf1, 0x17, 0xf5, 0xab, 0x3c, 0x9c, 0x7b, - 0x4a, 0xfd, 0xd5, 0x36, 0x6c, 0xf3, 0x90, 0xbc, 0x6a, 0xe3, 0xce, 0xc0, 0xb5, 0xfc, 0x93, 0x6d, - 0x62, 0xfb, 0xf8, 0x95, 0x8f, 0x9a, 0xb0, 0x62, 0x4b, 0xcd, 0xba, 0x0c, 0x4d, 0xaa, 0xa1, 0xb4, - 0xb5, 0x31, 0xc2, 0x08, 0xee, 0x22, 0xad, 0x62, 0x47, 0x09, 0x1e, 0x7a, 0x32, 0x1c, 0x37, 0xa9, - 0x2d, 0xc7, 0xb4, 0xa5, 0x74, 0xa9, 0xbd, 0xcb, 0x2c, 0x13, 0xba, 0xe4, 0xc0, 0x4a, 0x4d, 0x1f, - 0x01, 0x9d, 0xd5, 0xba, 0xe1, 0xe9, 0x03, 0x0f, 0xbb, 0xcc, 0x31, 0xa5, 0xad, 0xb7, 0x92, 0x5a, - 0x86, 0x2e, 0xd0, 0x8a, 0xee, 0xc0, 0xae, 0x7b, 0x07, 0x1e, 0x76, 0x59, 0x12, 0x10, 0xb1, 0xa4, - 0xbb, 0x84, 0xf8, 0x47, 0x9e, 0x8c, 0x1f, 0x49, 0xd6, 0x18, 0x15, 0xdd, 0x80, 0x53, 0xde, 0xc0, - 0x71, 0x7a, 0xb8, 0x8f, 0x6d, 0xdf, 0xe8, 0xe9, 0x5d, 0x97, 0x0c, 0x1c, 0xaf, 0x3a, 0x77, 0x21, - 0x7f, 0x25, 0xaf, 0xa1, 0xf0, 0xa7, 0xc7, 0xec, 0x0b, 0x5a, 0x07, 0x70, 0x5c, 0xeb, 0x85, 0xd5, - 0xc3, 0x5d, 0x6c, 0x56, 0xe7, 0x99, 0xd2, 0x10, 0x05, 0xbd, 0x0f, 0xab, 0x1e, 0xee, 0x74, 0x48, - 0xdf, 0xd1, 0x1d, 0x97, 0x1c, 0x59, 0x3d, 0xcc, 0xa3, 0x7f, 0x81, 0x45, 0x3f, 0x12, 0xdf, 0x5a, - 0xfc, 0x13, 0x9b, 0x07, 0xf7, 0x58, 0x4e, 0xa3, 0x3d, 0x65, 0x8d, 0x57, 0x0b, 0x13, 0x74, 0x15, - 0x58, 0x57, 0x99, 0x49, 0xea, 0xcf, 0x73, 0x70, 0x9a, 0x79, 0xb2, 0x45, 0x4c, 0x31, 0xcc, 0x22, - 0x49, 0xbd, 0x03, 0xe5, 0x0e, 0xd3, 0xa9, 0x3b, 0x86, 0x8b, 0x6d, 0x5f, 0x4c, 0xd2, 0x45, 0x4e, - 0x6c, 0x31, 0x1a, 0xfa, 0x14, 0x2a, 0x9e, 0x88, 0x0a, 0xbd, 0xc3, 0xc3, 0x42, 0x8c, 0xd9, 0xf5, - 0xa4, 0x09, 0x23, 0x62, 0x49, 0x5b, 0xf6, 0x12, 0xc1, 0xb5, 0xe0, 0x9d, 0x78, 0x1d, 0xbf, 0xc7, - 0xb3, 0x5d, 0x69, 0xeb, 0xbb, 0x19, 0x0a, 0xe3, 0x86, 0x6f, 0xb6, 0xb9, 0xd8, 0xae, 0xed, 0xbb, - 0x27, 0x9a, 0x54, 0x52, 0xbb, 0x03, 0x8b, 0xe1, 0x0f, 0xa8, 0x02, 0xf9, 0xe7, 0xf8, 0x44, 0x74, - 0x8a, 0x3e, 0x0e, 0x27, 0x01, 0xcf, 0x35, 0xfc, 0xe5, 0x4e, 0xee, 0x77, 0x14, 0xd5, 0x05, 0x34, - 0x6c, 0xe5, 0x19, 0xf6, 0x0d, 0xd3, 0xf0, 0x0d, 0x84, 0x60, 0x96, 0x2d, 0x23, 0x5c, 0x05, 0x7b, - 0xa6, 0x5a, 0x07, 0x62, 0xf2, 0x16, 0x35, 0xfa, 0x88, 0xde, 0x82, 0x62, 0x10, 0xe8, 0x62, 0x2d, - 0x19, 0x12, 0x68, 0x4e, 0x37, 0x7c, 0x1f, 0xf7, 0x1d, 0x9f, 0x85, 0x58, 0x59, 0x93, 0xaf, 0xea, - 0x7f, 0xcf, 0x42, 0x25, 0x31, 0x26, 0x0f, 0xa0, 0xd0, 0x17, 0xcd, 0x8b, 0x89, 0xf6, 0x6e, 0x4a, - 0x62, 0x4f, 0x98, 0xaa, 0x05, 0x52, 0x34, 0x6f, 0xd2, 0x1c, 0x1a, 0x5a, 0xff, 0x82, 0x77, 0x3a, - 0xe2, 0x3d, 0xd2, 0xd5, 0x4d, 0xcb, 0xc5, 0x1d, 0x9f, 0xb8, 0x27, 0xc2, 0xdc, 0xc5, 0x1e, 0xe9, - 0xee, 0x48, 0x1a, 0xba, 0x03, 0x60, 0xda, 0x1e, 0x1d, 0xec, 0x23, 0xab, 0xcb, 0x8c, 0x2e, 0x6d, - 0x9d, 0x4b, 0x1a, 0x11, 0x2c, 0x76, 0x5a, 0xd1, 0xb4, 0x3d, 0x61, 0xfe, 0x43, 0x28, 0xd3, 0x35, - 0x43, 0xef, 0xf3, 0x75, 0x8a, 0xcf, 0x94, 0xd2, 0xd6, 0xf9, 0xb4, 0x3e, 0x04, 0xab, 0x99, 0xb6, - 0xe8, 0x0c, 0x5f, 0x3c, 0xf4, 0x08, 0xe6, 0x59, 0xf2, 0xf6, 0xaa, 0xf3, 0x4c, 0x78, 0x73, 0x94, - 0x03, 0x44, 0x44, 0x3c, 0x65, 0x02, 0x3c, 0x20, 0x84, 0x34, 0x3a, 0x80, 0x92, 0x61, 0xdb, 0xc4, - 0x37, 0x78, 0xa2, 0x59, 0x60, 0xca, 0x3e, 0x98, 0x40, 0x59, 0x7d, 0x28, 0xc5, 0x35, 0x86, 0xf5, - 0xa0, 0xef, 0xc3, 0x1c, 0xcb, 0x44, 0x62, 0x22, 0x5e, 0x9e, 0x30, 0x68, 0x35, 0x2e, 0x55, 0xbb, - 0x0d, 0xa5, 0x90, 0xb1, 0xd3, 0x04, 0x69, 0xed, 0x1e, 0x54, 0xe2, 0xa6, 0x4d, 0x15, 0xe4, 0x7f, - 0x00, 0xab, 0xda, 0xc0, 0x1e, 0x1a, 0x26, 0xab, 0xaf, 0x3b, 0x30, 0x2f, 0x06, 0x9b, 0x47, 0x9c, - 0x3a, 0xde, 0x47, 0x9a, 0x90, 0x08, 0x97, 0x53, 0xc7, 0x86, 0x6d, 0xf6, 0xb0, 0x2b, 0xda, 0x95, - 0xe5, 0xd4, 0x13, 0x4e, 0x55, 0xbf, 0x0f, 0xa7, 0x63, 0x8d, 0x8b, 0x6a, 0xee, 0x5d, 0x58, 0x72, - 0x88, 0xa9, 0x7b, 0x9c, 0xac, 0x5b, 0xa6, 0x4c, 0x43, 0x4e, 0xc0, 0xdb, 0x30, 0xa9, 0x78, 0xdb, - 0x27, 0x4e, 0xd2, 0xf8, 0xc9, 0xc4, 0xab, 0x70, 0x26, 0x2e, 0xce, 0x9b, 0x57, 0xef, 0xc3, 0x9a, - 0x86, 0xfb, 0xe4, 0x05, 0x7e, 0x5d, 0xd5, 0x35, 0xa8, 0x26, 0x15, 0x08, 0xe5, 0x9f, 0xc1, 0xda, - 0x90, 0xda, 0xf6, 0x0d, 0x7f, 0xe0, 0x4d, 0xa5, 0x5c, 0x94, 0xba, 0x87, 0xc4, 0xe3, 0xc3, 0x59, - 0xd0, 0xe4, 0xab, 0x7a, 0x35, 0xac, 0xba, 0xc9, 0x2b, 0x0b, 0xde, 0x02, 0x5a, 0x82, 0x9c, 0xe5, - 0x08, 0x75, 0x39, 0xcb, 0x51, 0x9f, 0x40, 0x31, 0x58, 0x9a, 0xd1, 0xdd, 0x61, 0x8d, 0x99, 0x9b, - 0x74, 0x21, 0x0f, 0xca, 0xd0, 0xfd, 0xc4, 0x52, 0x22, 0x9a, 0xbc, 0x0b, 0x10, 0xa4, 0x3c, 0x59, - 0x21, 0x9c, 0x1b, 0xa1, 0x58, 0x0b, 0xb1, 0xab, 0x3f, 0x9d, 0x0b, 0x27, 0xc2, 0x50, 0x27, 0xcc, - 0xa0, 0x13, 0x66, 0x24, 0x31, 0xe6, 0x5e, 0x2b, 0x31, 0x7e, 0x08, 0x73, 0x9e, 0x6f, 0xf8, 0x58, - 0x54, 0x51, 0x1b, 0xa3, 0xc4, 0xa9, 0x11, 0x58, 0xe3, 0xfc, 0xe8, 0x3c, 0x40, 0xc7, 0xc5, 0x86, - 0x8f, 0x4d, 0xdd, 0xe0, 0x59, 0x3c, 0xaf, 0x15, 0x05, 0xa5, 0xee, 0xa3, 0xed, 0x61, 0x25, 0x38, - 0xc7, 0x0c, 0xbb, 0x3a, 0x4a, 0x73, 0x64, 0xa8, 0x86, 0x35, 0x61, 0x90, 0x55, 0xe6, 0x27, 0xcc, - 0x2a, 0x42, 0x01, 0x97, 0x0a, 0xe5, 0xcc, 0x85, 0xf1, 0x39, 0x93, 0x8b, 0x4e, 0x92, 0x33, 0x0b, - 0xe3, 0x73, 0xa6, 0x50, 0x36, 0x3a, 0x67, 0xa6, 0x64, 0x89, 0x62, 0x5a, 0x96, 0xf8, 0x36, 0xb3, - 0xe3, 0x3f, 0x2b, 0x50, 0x4d, 0x4e, 0x56, 0x91, 0xa4, 0xee, 0xc0, 0xbc, 0xc7, 0x28, 0x93, 0xa4, - 0x48, 0x21, 0x2b, 0x24, 0xd0, 0x13, 0x98, 0xb5, 0xec, 0x23, 0xc2, 0x76, 0x7b, 0xa9, 0x45, 0x4e, - 0x56, 0xab, 0x9b, 0x0d, 0xfb, 0x88, 0x70, 0x6f, 0x32, 0x0d, 0xb5, 0x0f, 0xa1, 0x18, 0x90, 0xa6, - 0xea, 0xdb, 0x1e, 0xac, 0xc6, 0x62, 0x9b, 0xef, 0x0a, 0x82, 0x29, 0xa1, 0x4c, 0x37, 0x25, 0xd4, - 0x9f, 0xe4, 0xc2, 0x53, 0xf6, 0x91, 0xd5, 0xf3, 0xb1, 0x9b, 0x98, 0xb2, 0x1f, 0x49, 0xed, 0x7c, - 0xbe, 0x5e, 0x1a, 0xab, 0x9d, 0x17, 0xaf, 0x62, 0xd6, 0x7d, 0x01, 0x4b, 0x2c, 0x28, 0x75, 0x0f, - 0xf7, 0x58, 0x65, 0x22, 0xaa, 0xc4, 0xef, 0x8d, 0x52, 0xc3, 0x2d, 0xe1, 0xa1, 0xdd, 0x16, 0x72, - 0xdc, 0x83, 0xe5, 0x5e, 0x98, 0x56, 0x7b, 0x00, 0x28, 0xc9, 0x34, 0x95, 0x4f, 0xdb, 0x34, 0x17, - 0xd2, 0x2d, 0x71, 0xca, 0x72, 0x7a, 0xc4, 0xcc, 0x98, 0x24, 0x56, 0xb8, 0xc1, 0x9a, 0x90, 0x50, - 0xff, 0x2b, 0x0f, 0x30, 0xfc, 0xf8, 0xff, 0x28, 0x09, 0x3e, 0x08, 0x12, 0x10, 0xaf, 0xf8, 0xae, - 0x8c, 0x52, 0x9c, 0x9a, 0x7a, 0xf6, 0xa2, 0xa9, 0x87, 0xd7, 0x7e, 0xd7, 0x47, 0xaa, 0x99, 0x3a, - 0xe9, 0x2c, 0xfc, 0xb6, 0x25, 0x9d, 0xa7, 0x70, 0x26, 0x1e, 0x44, 0x22, 0xe3, 0x6c, 0xc1, 0x9c, - 0xe5, 0xe3, 0x3e, 0xc7, 0x8f, 0x52, 0xf7, 0x7b, 0x21, 0x21, 0xce, 0xaa, 0x6e, 0x40, 0xb1, 0xd1, - 0x37, 0xba, 0xb8, 0xed, 0xe0, 0x0e, 0x6d, 0xd4, 0xa2, 0x2f, 0xc2, 0x10, 0xfe, 0xa2, 0x6e, 0x41, - 0xe1, 0x07, 0xf8, 0x84, 0xcf, 0xfe, 0x09, 0x0d, 0x55, 0xff, 0x24, 0x07, 0x6b, 0x6c, 0xf5, 0xd9, - 0x96, 0xe8, 0x8d, 0x86, 0x3d, 0x32, 0x70, 0x3b, 0xd8, 0x63, 0x61, 0xe1, 0x0c, 0x74, 0x07, 0xbb, - 0x16, 0x31, 0x05, 0xb8, 0x50, 0xec, 0x38, 0x83, 0x16, 0x23, 0xa0, 0x73, 0x40, 0x5f, 0xf4, 0x2f, - 0x07, 0x44, 0x44, 0x6c, 0x5e, 0x2b, 0x74, 0x9c, 0xc1, 0xef, 0xd1, 0x77, 0x29, 0xeb, 0x1d, 0x1b, - 0x2e, 0xf6, 0x58, 0x40, 0x72, 0xd9, 0x36, 0x23, 0xa0, 0x9b, 0x70, 0xba, 0x8f, 0xfb, 0xc4, 0x3d, - 0xd1, 0x7b, 0x56, 0xdf, 0xf2, 0x75, 0xcb, 0xd6, 0x0f, 0x4f, 0x7c, 0xec, 0x89, 0xe0, 0x43, 0xfc, - 0xe3, 0x53, 0xfa, 0xad, 0x61, 0x3f, 0xa4, 0x5f, 0x90, 0x0a, 0x65, 0x42, 0xfa, 0xba, 0xd7, 0x21, - 0x2e, 0xd6, 0x0d, 0xf3, 0xc7, 0x6c, 0x41, 0xce, 0x6b, 0x25, 0x42, 0xfa, 0x6d, 0x4a, 0xab, 0x9b, - 0x3f, 0x46, 0x6f, 0x43, 0xa9, 0xe3, 0x0c, 0x3c, 0xec, 0xeb, 0xf4, 0x0f, 0x5b, 0x6f, 0x8b, 0x1a, - 0x70, 0xd2, 0xb6, 0x33, 0xf0, 0x42, 0x0c, 0x7d, 0xea, 0xff, 0x85, 0x30, 0xc3, 0x33, 0xea, 0x66, - 0x03, 0xca, 0x11, 0x70, 0x82, 0xee, 0x13, 0x19, 0x0a, 0x21, 0xf6, 0x89, 0xf4, 0x99, 0xd2, 0x5c, - 0xd2, 0x93, 0x9e, 0x64, 0xcf, 0x94, 0xe6, 0x9f, 0x38, 0x72, 0x93, 0xc8, 0x9e, 0xa9, 0xcb, 0x7b, - 0xf8, 0x85, 0x00, 0xb0, 0x8a, 0x1a, 0x7f, 0x51, 0x4d, 0x80, 0x6d, 0xc3, 0x31, 0x0e, 0xad, 0x9e, - 0xe5, 0x9f, 0xa0, 0xab, 0x50, 0x31, 0x4c, 0x53, 0xef, 0x48, 0x8a, 0x85, 0x25, 0xac, 0xb8, 0x6c, - 0x98, 0xe6, 0x76, 0x88, 0x8c, 0xbe, 0x03, 0x2b, 0xa6, 0x4b, 0x9c, 0x28, 0x2f, 0xc7, 0x19, 0x2b, - 0xf4, 0x43, 0x98, 0x59, 0xfd, 0xf7, 0x39, 0x38, 0x1f, 0x1d, 0xd8, 0x38, 0x00, 0xf4, 0x00, 0x16, - 0x63, 0xad, 0x66, 0x80, 0x0f, 0x43, 0x6b, 0xb5, 0x88, 0x44, 0x0c, 0x10, 0xc9, 0x25, 0x00, 0x91, - 0x54, 0x88, 0x29, 0xff, 0x46, 0x21, 0xa6, 0xd9, 0x37, 0x02, 0x31, 0xcd, 0x4d, 0x07, 0x31, 0x5d, - 0x62, 0xd9, 0x47, 0x4a, 0xb3, 0xdd, 0x38, 0x0f, 0xb5, 0x72, 0xc0, 0x63, 0x4b, 0x3c, 0x3a, 0x06, - 0x45, 0x2d, 0x4c, 0x03, 0x45, 0x15, 0x32, 0xa1, 0x28, 0x1a, 0x35, 0x8e, 0x63, 0xb8, 0x7d, 0xe2, - 0x4a, 0xac, 0x49, 0x54, 0x5d, 0xcb, 0x92, 0x2e, 0x70, 0xa6, 0x4c, 0x54, 0x0a, 0x32, 0x51, 0xa9, - 0x0b, 0xb0, 0x68, 0x13, 0xdd, 0xc6, 0x2f, 0x75, 0x3a, 0x96, 0x5e, 0xb5, 0xc4, 0x07, 0xd6, 0x26, - 0x4d, 0xfc, 0xb2, 0x45, 0x29, 0x09, 0xdc, 0x6a, 0x71, 0x3a, 0xdc, 0x0a, 0x6d, 0xc0, 0x62, 0xdf, - 0xf0, 0x9e, 0x63, 0x93, 0x99, 0xe2, 0x55, 0xcb, 0x2c, 0x88, 0x4b, 0x9c, 0x46, 0x6d, 0xf0, 0xd0, - 0x45, 0x08, 0x9c, 0x24, 0x98, 0x96, 0x18, 0x53, 0x59, 0x52, 0x19, 0x9b, 0xfa, 0xb7, 0x0a, 0xac, - 0x46, 0xc3, 0x5c, 0xa0, 0x15, 0x8f, 0xa1, 0xe8, 0xca, 0x4c, 0x26, 0x42, 0xfb, 0x6a, 0x46, 0xe1, - 0x9d, 0x4c, 0x7d, 0xda, 0x50, 0x16, 0xfd, 0x30, 0x13, 0x24, 0xbb, 0x31, 0x4e, 0xdf, 0x38, 0x98, - 0x4c, 0x6d, 0xc0, 0xdb, 0x9f, 0x58, 0xb6, 0x49, 0x5e, 0x7a, 0x99, 0xb3, 0x34, 0x25, 0xd6, 0x94, - 0x94, 0x58, 0x53, 0x7f, 0xa1, 0xc0, 0x99, 0xb8, 0x2e, 0xe1, 0x8a, 0x46, 0xd2, 0x15, 0xdf, 0x49, - 0x9a, 0x1e, 0x17, 0x4e, 0x75, 0xc6, 0x17, 0x99, 0xce, 0xb8, 0x39, 0x5e, 0xe3, 0x58, 0x77, 0xfc, - 0xa5, 0x02, 0x67, 0x33, 0xcd, 0x88, 0x2d, 0x29, 0x4a, 0x7c, 0x49, 0x11, 0xcb, 0x51, 0x87, 0x0c, - 0x6c, 0x3f, 0xb4, 0x1c, 0x6d, 0xb3, 0x43, 0x0b, 0x9e, 0xf7, 0xf5, 0xbe, 0xf1, 0xca, 0xea, 0x0f, - 0xfa, 0x62, 0x3d, 0xa2, 0xea, 0x9e, 0x71, 0xca, 0x6b, 0x2c, 0x48, 0x6a, 0x1d, 0x56, 0x02, 0x2b, - 0x47, 0xc2, 0x8a, 0x21, 0x98, 0x30, 0x17, 0x85, 0x09, 0x6d, 0x98, 0xdf, 0xc1, 0x2f, 0xac, 0x0e, - 0x7e, 0x23, 0xa7, 0x2a, 0x17, 0xa0, 0xe4, 0x60, 0xb7, 0x6f, 0x79, 0x5e, 0x90, 0x68, 0x8b, 0x5a, - 0x98, 0xa4, 0xfe, 0xc7, 0x3c, 0x2c, 0xc7, 0xa3, 0xe3, 0x7e, 0x02, 0x95, 0x7c, 0x27, 0x65, 0x09, - 0x88, 0x77, 0x34, 0x54, 0x76, 0xde, 0x94, 0xc5, 0x48, 0x2e, 0x0b, 0x1a, 0x08, 0x0a, 0x17, 0x51, - 0xa9, 0x50, 0x8f, 0x74, 0x48, 0xbf, 0x6f, 0xd8, 0xa6, 0x3c, 0x0c, 0x13, 0xaf, 0xd4, 0x7f, 0x86, - 0xdb, 0xa5, 0x6e, 0xa7, 0x64, 0xf6, 0x4c, 0x07, 0x8f, 0xee, 0xa3, 0x2d, 0x9b, 0xa1, 0x9b, 0x2c, - 0x59, 0x17, 0x35, 0x10, 0xa4, 0x1d, 0xcb, 0x45, 0x9b, 0x30, 0x8b, 0xed, 0x17, 0xb2, 0xae, 0x4c, - 0x39, 0x2d, 0x93, 0x65, 0x91, 0xc6, 0xf8, 0xd0, 0x0d, 0x98, 0xef, 0xd3, 0xb0, 0x90, 0x3b, 0xea, - 0xb5, 0x8c, 0x43, 0x23, 0x4d, 0xb0, 0xa1, 0x2d, 0x58, 0x30, 0xd9, 0x38, 0xc9, 0x6d, 0x73, 0x35, - 0x05, 0x33, 0x65, 0x0c, 0x9a, 0x64, 0x44, 0xbb, 0x41, 0xd5, 0x5c, 0xcc, 0x2a, 0x77, 0x63, 0x43, - 0x91, 0x5a, 0x3a, 0xef, 0x47, 0x4b, 0x67, 0x60, 0xba, 0xb6, 0xc6, 0xeb, 0x1a, 0x5d, 0x3f, 0x9f, - 0x85, 0x42, 0x8f, 0x74, 0x79, 0x18, 0x95, 0xf8, 0x39, 0x6b, 0x8f, 0x74, 0x59, 0x14, 0xad, 0xd2, - 0x5d, 0x84, 0x69, 0xd9, 0x2c, 0xa9, 0x17, 0x34, 0xfe, 0x42, 0x27, 0x1f, 0x7b, 0xd0, 0x89, 0xdd, - 0xc1, 0xd5, 0x32, 0xfb, 0x54, 0x64, 0x94, 0x3d, 0xbb, 0xc3, 0xca, 0x4d, 0xdf, 0x3f, 0xa9, 0x2e, - 0x31, 0x3a, 0x7d, 0xa4, 0x1b, 0x44, 0x0e, 0x7a, 0x2c, 0x67, 0x6d, 0x10, 0xd3, 0xd2, 0xb6, 0xc4, - 0x3c, 0x1e, 0xc2, 0xc2, 0x4b, 0x9e, 0x08, 0xaa, 0x15, 0x26, 0x7f, 0x65, 0x7c, 0x7a, 0x11, 0x1a, - 0xa4, 0xe0, 0xb7, 0x59, 0xfa, 0xff, 0xbd, 0x02, 0x67, 0xb6, 0xd9, 0xfe, 0x29, 0x94, 0xc7, 0xa6, - 0xc1, 0x06, 0x6f, 0x07, 0xb0, 0x6d, 0x26, 0x90, 0x17, 0xef, 0xb7, 0x44, 0x6d, 0x1b, 0xb0, 0x24, - 0x95, 0x0b, 0x15, 0xf9, 0x89, 0x91, 0xdf, 0xb2, 0x17, 0x7e, 0x55, 0x3f, 0x82, 0xb5, 0x44, 0x2f, - 0xc4, 0x16, 0x66, 0x03, 0x16, 0x87, 0xf9, 0x2a, 0xe8, 0x44, 0x29, 0xa0, 0x35, 0x4c, 0xf5, 0x0e, - 0x9c, 0x6e, 0xfb, 0x86, 0xeb, 0x27, 0x5c, 0x30, 0x81, 0x2c, 0xc3, 0x74, 0xa3, 0xb2, 0x02, 0x76, - 0x6d, 0xc3, 0x6a, 0xdb, 0x27, 0xce, 0x6b, 0x28, 0xa5, 0x59, 0x87, 0xf6, 0x9f, 0x0c, 0xe4, 0xfa, - 0x20, 0x5f, 0xd5, 0x35, 0x8e, 0x40, 0x27, 0x5b, 0xbb, 0x0b, 0x67, 0x38, 0x00, 0xfc, 0x3a, 0x9d, - 0x38, 0x2b, 0xe1, 0xe7, 0xa4, 0xde, 0x67, 0x70, 0x6a, 0xb8, 0x2c, 0x0e, 0x31, 0x9b, 0x5b, 0x51, - 0xcc, 0xe6, 0xc2, 0x88, 0x51, 0x8f, 0x40, 0x36, 0x7f, 0x9e, 0x0b, 0xe5, 0xf5, 0x0c, 0xc4, 0xe6, - 0x6e, 0x14, 0xb1, 0xb9, 0x38, 0x4e, 0x77, 0x04, 0xb0, 0x49, 0x46, 0x6d, 0x3e, 0x25, 0x6a, 0x3f, - 0x4f, 0xc0, 0x3a, 0xb3, 0x59, 0xb8, 0x58, 0xcc, 0xda, 0xdf, 0x08, 0xaa, 0xa3, 0x71, 0x54, 0x27, - 0x68, 0x3a, 0xc0, 0xeb, 0x6f, 0xc7, 0x50, 0x9d, 0x8d, 0xb1, 0xf6, 0x06, 0xa0, 0xce, 0x5f, 0xcf, - 0x42, 0x31, 0xf8, 0x96, 0xf0, 0x79, 0xd2, 0x6d, 0xb9, 0x14, 0xb7, 0x85, 0x57, 0xe0, 0xfc, 0x37, - 0x5a, 0x81, 0x67, 0x27, 0x5e, 0x81, 0xcf, 0x41, 0x91, 0x3d, 0xe8, 0x2e, 0x3e, 0x12, 0x2b, 0x6a, - 0x81, 0x11, 0x34, 0x7c, 0x34, 0x0c, 0xc3, 0xf9, 0xa9, 0xc2, 0x30, 0x86, 0x23, 0x2d, 0xc4, 0x71, - 0xa4, 0xfb, 0xc1, 0x8a, 0xc8, 0x17, 0xd1, 0xcb, 0x23, 0xf4, 0xa6, 0xae, 0x85, 0xcd, 0xe8, 0x5a, - 0xc8, 0xd7, 0xd5, 0xf7, 0x46, 0x69, 0x19, 0xb9, 0x0a, 0x7e, 0x9b, 0x2b, 0xc4, 0x01, 0x07, 0x87, - 0xc2, 0xb1, 0x28, 0x32, 0xeb, 0x5d, 0x80, 0x20, 0x89, 0x48, 0x84, 0xe8, 0xdc, 0x88, 0x3e, 0x6a, - 0x21, 0x76, 0xaa, 0x36, 0x32, 0x34, 0xc3, 0x33, 0xa9, 0xc9, 0xf2, 0x63, 0xc6, 0x81, 0xd4, 0xff, - 0xce, 0x85, 0xf2, 0x4b, 0xc6, 0x21, 0xce, 0xfd, 0x04, 0x7e, 0x39, 0x65, 0x14, 0xdf, 0x8a, 0xc2, - 0x97, 0xaf, 0x19, 0x75, 0x09, 0xf4, 0x92, 0x55, 0x2e, 0x86, 0x2b, 0x3e, 0x73, 0xd0, 0xa8, 0x28, - 0x28, 0x75, 0xb6, 0x33, 0x38, 0xb2, 0x6c, 0xcb, 0x3b, 0xe6, 0xdf, 0xe7, 0xf9, 0xce, 0x40, 0x92, - 0xea, 0xec, 0xbe, 0x14, 0x7e, 0x65, 0xf9, 0x7a, 0x87, 0x98, 0x98, 0xc5, 0xf4, 0x9c, 0x56, 0xa0, - 0x84, 0x6d, 0x62, 0xe2, 0xe1, 0xcc, 0x2b, 0xbc, 0xde, 0xcc, 0x2b, 0xc6, 0x66, 0xde, 0x19, 0x98, - 0x77, 0xb1, 0xe1, 0x11, 0x5b, 0x6c, 0xcf, 0xc5, 0x1b, 0x1d, 0x9a, 0x3e, 0xf6, 0x3c, 0xda, 0x92, - 0x28, 0xd7, 0xc4, 0x6b, 0xa8, 0xcc, 0x5c, 0x1c, 0x5b, 0x66, 0x8e, 0x38, 0x1c, 0x8a, 0x95, 0x99, - 0xe5, 0xb1, 0x65, 0xe6, 0x44, 0x67, 0x43, 0xc3, 0x42, 0x7b, 0x69, 0xb2, 0x42, 0x3b, 0x5c, 0x97, - 0x2e, 0x47, 0xea, 0xd2, 0x6f, 0x73, 0xb2, 0xfe, 0x4a, 0x81, 0xb5, 0xc4, 0xb4, 0x12, 0xd3, 0xf5, - 0x76, 0xec, 0xf4, 0x68, 0x63, 0xac, 0xcf, 0x82, 0xc3, 0xa3, 0xc7, 0x91, 0xc3, 0xa3, 0x0f, 0xc6, - 0x0b, 0xbe, 0xf1, 0xb3, 0xa3, 0x3f, 0x52, 0xe0, 0xed, 0x03, 0xc7, 0x8c, 0x55, 0x78, 0x62, 0xdb, - 0x3f, 0x79, 0xe2, 0xb8, 0x2f, 0x6b, 0xfd, 0xdc, 0xb4, 0x38, 0x0b, 0x97, 0x53, 0x55, 0xb8, 0x90, - 0x6d, 0x86, 0x28, 0x99, 0x7e, 0x04, 0xcb, 0xbb, 0xaf, 0x70, 0xa7, 0x7d, 0x62, 0x77, 0xa6, 0x30, - 0xad, 0x02, 0xf9, 0x4e, 0xdf, 0x14, 0x28, 0x29, 0x7d, 0x0c, 0x57, 0x81, 0xf9, 0x68, 0x15, 0xa8, - 0x43, 0x65, 0xd8, 0x82, 0x18, 0xde, 0x33, 0x74, 0x78, 0x4d, 0xca, 0x4c, 0x95, 0x2f, 0x6a, 0xe2, - 0x4d, 0xd0, 0xb1, 0xcb, 0xaf, 0x44, 0x70, 0x3a, 0x76, 0xdd, 0x68, 0xb6, 0xc8, 0x47, 0xb3, 0x85, - 0xfa, 0x67, 0x0a, 0x94, 0x68, 0x0b, 0xdf, 0xc8, 0x7e, 0xb1, 0xd5, 0xca, 0x0f, 0xb7, 0x5a, 0xc1, - 0x8e, 0x6d, 0x36, 0xbc, 0x63, 0x1b, 0x5a, 0x3e, 0xc7, 0xc8, 0x49, 0xcb, 0xe7, 0x03, 0x3a, 0x76, - 0x5d, 0xf5, 0x02, 0x2c, 0x72, 0xdb, 0x44, 0xcf, 0x2b, 0x90, 0x1f, 0xb8, 0x3d, 0x19, 0x47, 0x03, - 0xb7, 0xa7, 0xfe, 0xb1, 0x02, 0xe5, 0xba, 0xef, 0x1b, 0x9d, 0xe3, 0x29, 0x3a, 0x10, 0x18, 0x97, - 0x0b, 0x1b, 0x97, 0xec, 0xc4, 0xd0, 0xdc, 0xd9, 0x0c, 0x73, 0xe7, 0x22, 0xe6, 0xaa, 0xb0, 0x24, - 0x6d, 0xc9, 0x34, 0xb8, 0x09, 0xa8, 0x45, 0x5c, 0xff, 0x11, 0x71, 0x5f, 0x1a, 0xae, 0x39, 0xdd, - 0x0e, 0x0c, 0xc1, 0xac, 0xb8, 0x43, 0x9b, 0xbf, 0x32, 0xa7, 0xb1, 0x67, 0xf5, 0x32, 0x9c, 0x8a, - 0xe8, 0xcb, 0x6c, 0xf8, 0x01, 0x94, 0x58, 0xde, 0x17, 0xa5, 0xf8, 0xcd, 0xf0, 0x71, 0xcd, 0x44, - 0xab, 0x84, 0xfa, 0xbb, 0xb0, 0x42, 0xeb, 0x03, 0x46, 0x0f, 0xa6, 0xe2, 0xf7, 0x62, 0x75, 0xea, - 0xf9, 0x0c, 0x45, 0xb1, 0x1a, 0xf5, 0x6f, 0x14, 0x98, 0x63, 0xf4, 0xc4, 0x9a, 0x7d, 0x0e, 0x8a, - 0x2e, 0x76, 0x88, 0xee, 0x1b, 0xdd, 0xe0, 0xc6, 0x32, 0x25, 0xec, 0x1b, 0x5d, 0x8f, 0x5d, 0xb8, - 0xa6, 0x1f, 0x4d, 0xab, 0x8b, 0x3d, 0x5f, 0x5e, 0x5b, 0x2e, 0x51, 0xda, 0x0e, 0x27, 0x51, 0x27, - 0x79, 0xd6, 0xef, 0xf3, 0xba, 0x73, 0x56, 0x63, 0xcf, 0x68, 0x93, 0x5f, 0xa2, 0x9b, 0x04, 0x52, - 0x67, 0x57, 0xec, 0x6a, 0x50, 0x88, 0xa1, 0xe8, 0xc1, 0xbb, 0xba, 0x0b, 0x28, 0xec, 0x05, 0xe1, - 0xef, 0x1b, 0x30, 0xcf, 0x9c, 0x24, 0xab, 0xa3, 0xb5, 0x0c, 0x37, 0x68, 0x82, 0x4d, 0x35, 0x00, - 0x71, 0x07, 0x47, 0x2a, 0xa2, 0xe9, 0x47, 0x65, 0x44, 0x85, 0xf4, 0x77, 0x0a, 0x9c, 0x8a, 0xb4, - 0x21, 0x6c, 0xbd, 0x1e, 0x6d, 0x24, 0xd3, 0x54, 0xd1, 0xc0, 0x76, 0x64, 0x49, 0xb8, 0x91, 0x65, - 0xd2, 0xaf, 0x69, 0x39, 0xf8, 0x07, 0x05, 0xa0, 0x3e, 0xf0, 0x8f, 0x05, 0x32, 0x18, 0x1e, 0x19, - 0x25, 0x3a, 0x32, 0xf4, 0x9b, 0x63, 0x78, 0xde, 0x4b, 0xe2, 0xca, 0x3d, 0x4d, 0xf0, 0xce, 0x30, - 0xbc, 0x81, 0x7f, 0x2c, 0x8f, 0xc2, 0xe8, 0x33, 0xba, 0x08, 0x4b, 0xfc, 0x96, 0xbc, 0x6e, 0x98, - 0xa6, 0x8b, 0x3d, 0x4f, 0x9c, 0x89, 0x95, 0x39, 0xb5, 0xce, 0x89, 0x94, 0xcd, 0x32, 0xb1, 0xed, - 0x5b, 0xfe, 0x89, 0xee, 0x93, 0xe7, 0xd8, 0x16, 0x7b, 0x93, 0xb2, 0xa4, 0xee, 0x53, 0x22, 0x3f, - 0x1c, 0xe8, 0x5a, 0x9e, 0xef, 0x4a, 0x36, 0x79, 0xfe, 0x22, 0xa8, 0x8c, 0x8d, 0x0e, 0x4a, 0xa5, - 0x35, 0xe8, 0xf5, 0xb8, 0x8b, 0x5f, 0x7f, 0xd8, 0xdf, 0x17, 0x1d, 0xca, 0x65, 0xc5, 0xf4, 0xd0, - 0x69, 0xa2, 0xbb, 0x6f, 0x10, 0x84, 0x79, 0x1f, 0x56, 0x42, 0x7d, 0x10, 0x61, 0x15, 0x29, 0x22, - 0x95, 0x68, 0x11, 0xa9, 0x3e, 0x06, 0xc4, 0x71, 0x87, 0x6f, 0xd8, 0x6f, 0xf5, 0x34, 0x9c, 0x8a, - 0x28, 0x12, 0x2b, 0xf1, 0x35, 0x28, 0x8b, 0x9b, 0x4e, 0x22, 0x50, 0xce, 0x42, 0x81, 0x66, 0xd4, - 0x8e, 0x65, 0xca, 0x73, 0xd2, 0x05, 0x87, 0x98, 0xdb, 0x96, 0xe9, 0xaa, 0x9f, 0x40, 0x59, 0xe3, - 0xed, 0x08, 0xde, 0x47, 0xb0, 0x24, 0xee, 0x45, 0xe9, 0x91, 0x8b, 0x89, 0x69, 0x17, 0xdf, 0xc3, - 0x8d, 0x68, 0x65, 0x3b, 0xfc, 0xaa, 0x9a, 0x50, 0xe3, 0x25, 0x43, 0x44, 0xbd, 0xec, 0xec, 0x23, - 0x90, 0x17, 0x01, 0xc6, 0xb6, 0x12, 0x95, 0x2f, 0xbb, 0xe1, 0x57, 0xf5, 0x3c, 0x9c, 0x4b, 0x6d, - 0x45, 0x78, 0xc2, 0x81, 0xca, 0xf0, 0x83, 0x69, 0xc9, 0x03, 0x63, 0x76, 0x10, 0xac, 0x84, 0x0e, - 0x82, 0xcf, 0x04, 0x45, 0x62, 0x4e, 0x2e, 0x62, 0xac, 0x02, 0x1c, 0x96, 0xfb, 0xf9, 0xac, 0x72, - 0x7f, 0x36, 0x52, 0xee, 0xab, 0xed, 0xc0, 0x9f, 0x62, 0x1b, 0xf6, 0x90, 0x6d, 0x17, 0x79, 0xdb, - 0x32, 0x21, 0xaa, 0xa3, 0x7a, 0xc9, 0x59, 0xb5, 0x90, 0x94, 0x7a, 0x15, 0xca, 0xd1, 0xd4, 0x18, - 0xca, 0x73, 0x4a, 0x22, 0xcf, 0x2d, 0xc5, 0x52, 0xdc, 0x87, 0xb1, 0x0a, 0x38, 0xdb, 0xc7, 0xb1, - 0xfa, 0xf7, 0x5e, 0x24, 0xd9, 0x5d, 0x4b, 0x39, 0xc3, 0xfd, 0x35, 0xe5, 0xb9, 0x55, 0xb1, 0x1e, - 0x3c, 0xf2, 0xa8, 0xbc, 0xe8, 0xb4, 0xfa, 0x0e, 0x94, 0x0e, 0xb2, 0x7e, 0x55, 0x31, 0x2b, 0xef, - 0x4b, 0xdc, 0x82, 0xd5, 0x47, 0x56, 0x0f, 0x7b, 0x27, 0x9e, 0x8f, 0xfb, 0x0d, 0x96, 0x94, 0x8e, - 0x2c, 0xec, 0xa2, 0x75, 0x00, 0xb6, 0x85, 0x71, 0x88, 0x15, 0x5c, 0xb6, 0x0f, 0x51, 0xd4, 0xff, - 0x54, 0x60, 0x79, 0x28, 0x78, 0xc0, 0xb6, 0x6e, 0x6f, 0x41, 0x91, 0xf6, 0xd7, 0xf3, 0x8d, 0xbe, - 0x23, 0xcf, 0xb3, 0x02, 0x02, 0xba, 0x0b, 0x73, 0x47, 0x9e, 0x84, 0x8c, 0x52, 0x01, 0xf4, 0x34, - 0x43, 0xb4, 0xd9, 0x23, 0xaf, 0x61, 0xa2, 0x8f, 0x00, 0x06, 0x1e, 0x36, 0xc5, 0x19, 0x56, 0x3e, - 0xab, 0x5a, 0x38, 0x08, 0x9f, 0x6f, 0x53, 0x01, 0x7e, 0xd5, 0xe2, 0x1e, 0x94, 0x2c, 0x9b, 0x98, - 0x98, 0x9d, 0x39, 0x9a, 0x02, 0x55, 0x1a, 0x23, 0x0e, 0x5c, 0xe2, 0xc0, 0xc3, 0xa6, 0x8a, 0xc5, - 0x5a, 0x28, 0xfd, 0x2b, 0x02, 0xa5, 0x09, 0x2b, 0x3c, 0x69, 0x1d, 0x05, 0x86, 0xcb, 0x88, 0xdd, - 0x18, 0xd5, 0x3b, 0xe6, 0x2d, 0xad, 0x62, 0x89, 0xd2, 0x46, 0x8a, 0xaa, 0x77, 0xe0, 0x74, 0x64, - 0x87, 0x34, 0xc5, 0x96, 0x45, 0x6d, 0xc5, 0x80, 0x92, 0x61, 0x38, 0x0b, 0x18, 0x42, 0x46, 0xf3, - 0x38, 0x18, 0xc2, 0xe3, 0x30, 0x84, 0xa7, 0x7e, 0x0e, 0x67, 0x23, 0x88, 0x4e, 0xc4, 0xa2, 0x7b, - 0xb1, 0xca, 0xed, 0xd2, 0x38, 0xad, 0xb1, 0x12, 0xee, 0x7f, 0x14, 0x58, 0x4d, 0x63, 0x78, 0x4d, - 0xc4, 0xf1, 0x47, 0x19, 0xf7, 0xef, 0x6e, 0x4f, 0x66, 0xd6, 0x6f, 0x04, 0xad, 0xdd, 0x87, 0x5a, - 0x9a, 0x3f, 0x93, 0xa3, 0x94, 0x9f, 0x66, 0x94, 0x7e, 0x96, 0x0f, 0x21, 0xef, 0x75, 0xdf, 0x77, - 0xad, 0xc3, 0x01, 0x0d, 0xf9, 0x37, 0x8e, 0x66, 0x35, 0x02, 0x5c, 0x86, 0xbb, 0xf6, 0xe6, 0x08, - 0xf1, 0xa1, 0x1d, 0xa9, 0xd8, 0xcc, 0xa7, 0x51, 0x6c, 0x86, 0x63, 0xea, 0xb7, 0x26, 0xd3, 0xf7, - 0x5b, 0x0b, 0x80, 0xfe, 0x2c, 0x07, 0x4b, 0xd1, 0x21, 0x42, 0xbb, 0x00, 0x46, 0x60, 0xb9, 0x98, - 0x28, 0x17, 0x27, 0xea, 0xa6, 0x16, 0x12, 0x44, 0xef, 0x41, 0xbe, 0xe3, 0x0c, 0xc4, 0xa8, 0xa5, - 0x1c, 0x06, 0x6f, 0x3b, 0x03, 0x9e, 0x51, 0x28, 0x1b, 0xdd, 0x53, 0xf1, 0xb3, 0xfd, 0xec, 0x2c, - 0xf9, 0x8c, 0x7d, 0xe7, 0x32, 0x82, 0x19, 0x3d, 0x81, 0xa5, 0x97, 0xae, 0xe5, 0x1b, 0x87, 0x3d, - 0xac, 0xf7, 0x8c, 0x13, 0xec, 0x8a, 0x2c, 0x39, 0x41, 0x22, 0x2b, 0x4b, 0xc1, 0xa7, 0x54, 0x4e, - 0xfd, 0x43, 0x28, 0x48, 0x8b, 0xc6, 0xac, 0x08, 0xfb, 0xb0, 0x36, 0xa0, 0x6c, 0x3a, 0xbb, 0x02, - 0x67, 0x1b, 0x36, 0xd1, 0x3d, 0x4c, 0x97, 0x71, 0x79, 0xdd, 0x7f, 0x4c, 0x8a, 0x5e, 0x65, 0xd2, - 0xdb, 0xc4, 0xc5, 0x4d, 0xc3, 0x26, 0x6d, 0x2e, 0xaa, 0xbe, 0x80, 0x52, 0xa8, 0x83, 0x63, 0x4c, - 0x68, 0xc0, 0x8a, 0x3c, 0x8a, 0xf7, 0xb0, 0x2f, 0x96, 0x97, 0x89, 0x1a, 0x5f, 0x16, 0x72, 0x6d, - 0xec, 0xf3, 0xeb, 0x13, 0xf7, 0xe0, 0xac, 0x86, 0x89, 0x83, 0xed, 0x60, 0x3c, 0x9f, 0x92, 0xee, - 0x14, 0x19, 0xfc, 0x2d, 0xa8, 0xa5, 0xc9, 0xf3, 0xfc, 0x70, 0xed, 0x12, 0x14, 0xe4, 0x4f, 0x64, - 0xd1, 0x02, 0xe4, 0xf7, 0xb7, 0x5b, 0x95, 0x19, 0xfa, 0x70, 0xb0, 0xd3, 0xaa, 0x28, 0xa8, 0x00, - 0xb3, 0xed, 0xed, 0xfd, 0x56, 0x25, 0x77, 0xad, 0x0f, 0x95, 0xf8, 0xef, 0x43, 0xd1, 0x1a, 0x9c, - 0x6a, 0x69, 0x7b, 0xad, 0xfa, 0xe3, 0xfa, 0x7e, 0x63, 0xaf, 0xa9, 0xb7, 0xb4, 0xc6, 0xc7, 0xf5, - 0xfd, 0xdd, 0xca, 0x0c, 0xda, 0x80, 0xf3, 0xe1, 0x0f, 0x4f, 0xf6, 0xda, 0xfb, 0xfa, 0xfe, 0x9e, - 0xbe, 0xbd, 0xd7, 0xdc, 0xaf, 0x37, 0x9a, 0xbb, 0x5a, 0x45, 0x41, 0xe7, 0xe1, 0x6c, 0x98, 0xe5, - 0x61, 0x63, 0xa7, 0xa1, 0xed, 0x6e, 0xd3, 0xe7, 0xfa, 0xd3, 0x4a, 0xee, 0xda, 0x4d, 0x28, 0x47, - 0x7e, 0xce, 0x49, 0x4d, 0x6a, 0xed, 0xed, 0x54, 0x66, 0x50, 0x19, 0x8a, 0x61, 0x3d, 0x05, 0x98, - 0x6d, 0xee, 0xed, 0xec, 0x56, 0x72, 0xd7, 0xee, 0xc0, 0x72, 0xec, 0xda, 0x2e, 0x5a, 0x81, 0x72, - 0xbb, 0xde, 0xdc, 0x79, 0xb8, 0xf7, 0xa9, 0xae, 0xed, 0xd6, 0x77, 0x3e, 0xab, 0xcc, 0xa0, 0x55, - 0xa8, 0x48, 0x52, 0x73, 0x6f, 0x9f, 0x53, 0x95, 0x6b, 0xcf, 0x63, 0x73, 0x0c, 0xa3, 0xd3, 0xb0, - 0x12, 0x34, 0xa3, 0x6f, 0x6b, 0xbb, 0xf5, 0xfd, 0x5d, 0xda, 0x7a, 0x84, 0xac, 0x1d, 0x34, 0x9b, - 0x8d, 0xe6, 0xe3, 0x8a, 0x42, 0xb5, 0x0e, 0xc9, 0xbb, 0x9f, 0x36, 0x28, 0x73, 0x2e, 0xca, 0x7c, - 0xd0, 0xfc, 0x41, 0x73, 0xef, 0x93, 0x66, 0x25, 0xbf, 0xf5, 0x8b, 0x15, 0x58, 0x92, 0x85, 0x1e, - 0x76, 0xd9, 0xad, 0x96, 0x16, 0x2c, 0xc8, 0x9f, 0x5c, 0xa7, 0x64, 0xe8, 0xe8, 0x0f, 0xc5, 0x6b, - 0x1b, 0x23, 0x38, 0x44, 0xbd, 0x3d, 0x83, 0x0e, 0x59, 0xfd, 0x1b, 0xba, 0x46, 0x7d, 0x29, 0xb5, - 0xda, 0x4c, 0xdc, 0xdc, 0xae, 0x5d, 0x1e, 0xcb, 0x17, 0xb4, 0x81, 0x69, 0x89, 0x1b, 0xfe, 0x41, - 0x11, 0xba, 0x9c, 0x56, 0x9b, 0xa6, 0xfc, 0x62, 0xa9, 0x76, 0x65, 0x3c, 0x63, 0xd0, 0xcc, 0x73, - 0xa8, 0xc4, 0x7f, 0x5c, 0x84, 0x52, 0xa0, 0xd3, 0x8c, 0x5f, 0x30, 0xd5, 0xae, 0x4d, 0xc2, 0x1a, - 0x6e, 0x2c, 0xf1, 0x33, 0x9c, 0xab, 0x93, 0xfc, 0x5c, 0x21, 0xb3, 0xb1, 0xac, 0x5f, 0x36, 0x70, - 0x07, 0x46, 0x6f, 0x3e, 0xa3, 0xd4, 0xdf, 0xbc, 0xa4, 0x5c, 0xb0, 0x4f, 0x73, 0x60, 0xfa, 0x25, - 0x6a, 0x75, 0x06, 0x1d, 0xc3, 0x72, 0xec, 0x7a, 0x02, 0x4a, 0x11, 0x4f, 0xbf, 0x87, 0x51, 0xbb, - 0x3a, 0x01, 0x67, 0x34, 0x22, 0xc2, 0xd7, 0x11, 0xd2, 0x23, 0x22, 0xe5, 0xb2, 0x43, 0x7a, 0x44, - 0xa4, 0xde, 0x6c, 0x60, 0xc1, 0x1d, 0xb9, 0x86, 0x90, 0x16, 0xdc, 0x69, 0x97, 0x1f, 0x6a, 0x97, - 0xc7, 0xf2, 0x85, 0x9d, 0x16, 0xbb, 0x94, 0x90, 0xe6, 0xb4, 0xf4, 0x4b, 0x0f, 0xb5, 0xab, 0x13, - 0x70, 0xc6, 0xa3, 0x60, 0x78, 0xc4, 0x99, 0x15, 0x05, 0x89, 0x03, 0xf9, 0xac, 0x28, 0x48, 0x9e, - 0x96, 0x8a, 0x28, 0x88, 0x1d, 0x4d, 0x5e, 0x99, 0xe0, 0x28, 0x25, 0x3b, 0x0a, 0xd2, 0x0f, 0x5d, - 0xd4, 0x19, 0xf4, 0x53, 0x05, 0xaa, 0x59, 0xc7, 0x14, 0x28, 0xa5, 0xbe, 0x1b, 0x73, 0xb2, 0x52, - 0xdb, 0x9a, 0x46, 0x24, 0xb0, 0xe2, 0x4b, 0x40, 0xc9, 0x75, 0x0f, 0x7d, 0x27, 0x6d, 0x64, 0x32, - 0x56, 0xd7, 0xda, 0x7b, 0x93, 0x31, 0x07, 0x4d, 0xb6, 0xa1, 0x20, 0x0f, 0x46, 0x50, 0x4a, 0x96, - 0x8e, 0x1d, 0xcb, 0xd4, 0xd4, 0x51, 0x2c, 0x81, 0xd2, 0xc7, 0x30, 0x4b, 0xa9, 0xe8, 0x7c, 0x3a, - 0xb7, 0x54, 0xb6, 0x9e, 0xf5, 0x39, 0x50, 0xf4, 0x0c, 0xe6, 0xf9, 0x49, 0x00, 0x4a, 0x41, 0x1e, - 0x22, 0xe7, 0x15, 0xb5, 0x0b, 0xd9, 0x0c, 0x81, 0xba, 0x2f, 0xf8, 0x7f, 0xe3, 0x10, 0x20, 0x3f, - 0x7a, 0x37, 0xfd, 0xe7, 0xcd, 0xd1, 0x33, 0x85, 0xda, 0xc5, 0x31, 0x5c, 0xe1, 0x49, 0x11, 0xab, - 0x7a, 0x2f, 0x8f, 0xdd, 0xba, 0x64, 0x4f, 0x8a, 0xf4, 0xcd, 0x11, 0x0f, 0x92, 0xe4, 0xe6, 0x29, - 0x2d, 0x48, 0x32, 0xb7, 0xac, 0x69, 0x41, 0x92, 0xbd, 0x1f, 0x53, 0x67, 0x90, 0x0f, 0xa7, 0x52, - 0xa0, 0x32, 0xf4, 0x5e, 0x56, 0x90, 0xa7, 0xe1, 0x76, 0xb5, 0xeb, 0x13, 0x72, 0x87, 0x07, 0x5f, - 0x4c, 0xfa, 0xb7, 0xb3, 0xf1, 0xa3, 0xcc, 0xc1, 0x8f, 0x4f, 0xf1, 0xad, 0x7f, 0xc9, 0xc3, 0x22, - 0x87, 0x41, 0x45, 0x05, 0xf3, 0x19, 0xc0, 0xf0, 0x04, 0x02, 0xbd, 0x93, 0xee, 0x93, 0xc8, 0x29, - 0x4d, 0xed, 0xdd, 0xd1, 0x4c, 0xe1, 0x40, 0x0b, 0xa1, 0xf9, 0x69, 0x81, 0x96, 0x3c, 0xb4, 0x48, - 0x0b, 0xb4, 0x94, 0x23, 0x01, 0x75, 0x06, 0x7d, 0x0c, 0xc5, 0x00, 0x36, 0x46, 0x69, 0xb0, 0x73, - 0x0c, 0x17, 0xaf, 0xbd, 0x33, 0x92, 0x27, 0x6c, 0x75, 0x08, 0x13, 0x4e, 0xb3, 0x3a, 0x89, 0x3d, - 0xa7, 0x59, 0x9d, 0x06, 0x2c, 0x0f, 0x7d, 0xc2, 0x91, 0xa3, 0x4c, 0x9f, 0x44, 0x80, 0xbb, 0x4c, - 0x9f, 0x44, 0xe1, 0x27, 0x75, 0xe6, 0xe1, 0xa5, 0x5f, 0x7e, 0xb5, 0xae, 0xfc, 0xd3, 0x57, 0xeb, - 0x33, 0x3f, 0xf9, 0x7a, 0x5d, 0xf9, 0xe5, 0xd7, 0xeb, 0xca, 0x3f, 0x7e, 0xbd, 0xae, 0xfc, 0xeb, - 0xd7, 0xeb, 0xca, 0x9f, 0xfe, 0xdb, 0xfa, 0xcc, 0x0f, 0x0b, 0x52, 0xfa, 0x70, 0x9e, 0xfd, 0x4f, - 0x9d, 0x0f, 0xfe, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x11, 0x3f, 0x6e, 0x39, 0x19, 0x49, 0x00, 0x00, + 0x66, 0x92, 0x5c, 0x02, 0x24, 0xc8, 0x1f, 0x90, 0x43, 0x50, 0x5f, 0xfd, 0xdd, 0xfc, 0xf0, 0x78, + 0x77, 0x36, 0x27, 0x75, 0xbf, 0x7e, 0xef, 0xd5, 0xab, 0x57, 0xaf, 0x5e, 0xbd, 0xfa, 0x55, 0x51, + 0x50, 0xd4, 0x6c, 0x63, 0xcb, 0x76, 0x2c, 0xcf, 0x42, 0x55, 0x67, 0x64, 0x7a, 0xc6, 0x10, 0x6f, + 0xbd, 0xb8, 0xa9, 0x0d, 0xec, 0x63, 0x6d, 0xbb, 0x7e, 0xbd, 0x6f, 0x78, 0xc7, 0xa3, 0xc3, 0xad, + 0x9e, 0x35, 0xbc, 0xd1, 0xb7, 0xfa, 0xd6, 0x0d, 0xca, 0x78, 0x38, 0x3a, 0xa2, 0x6f, 0xf4, 0x85, + 0x3e, 0x31, 0x05, 0xf2, 0x35, 0xa8, 0x7c, 0x8c, 0x1d, 0xd7, 0xb0, 0x4c, 0x05, 0x7f, 0x39, 0xc2, + 0xae, 0x87, 0x6a, 0xb0, 0xf4, 0x82, 0x51, 0x6a, 0xd2, 0x05, 0xe9, 0x4a, 0x51, 0x11, 0xaf, 0xf2, + 0x5f, 0x48, 0xb0, 0xe2, 0x33, 0xbb, 0xb6, 0x65, 0xba, 0x38, 0x9b, 0x1b, 0x6d, 0xc2, 0x32, 0x37, + 0x4e, 0x35, 0xb5, 0x21, 0xae, 0xe5, 0xe8, 0xe7, 0x12, 0xa7, 0xb5, 0xb5, 0x21, 0x46, 0x97, 0x61, + 0x45, 0xb0, 0x08, 0x25, 0x79, 0xca, 0x55, 0xe1, 0x64, 0xde, 0x1a, 0xda, 0x82, 0x53, 0x82, 0x51, + 0xb3, 0x0d, 0x9f, 0x79, 0x9e, 0x32, 0xaf, 0xf2, 0x4f, 0x0d, 0xdb, 0xe0, 0xfc, 0xf2, 0xe7, 0x50, + 0xdc, 0x69, 0x77, 0x9b, 0x96, 0x79, 0x64, 0xf4, 0x89, 0x89, 0x2e, 0x76, 0x88, 0x4c, 0x4d, 0xba, + 0x90, 0x27, 0x26, 0xf2, 0x57, 0x54, 0x87, 0x82, 0x8b, 0x35, 0xa7, 0x77, 0x8c, 0xdd, 0x5a, 0x8e, + 0x7e, 0xf2, 0xdf, 0x89, 0x94, 0x65, 0x7b, 0x86, 0x65, 0xba, 0xb5, 0x3c, 0x93, 0xe2, 0xaf, 0xf2, + 0xcf, 0x25, 0x28, 0x75, 0x2c, 0xc7, 0x7b, 0xa6, 0xd9, 0xb6, 0x61, 0xf6, 0xd1, 0x2d, 0x28, 0x50, + 0x5f, 0xf6, 0xac, 0x01, 0xf5, 0x41, 0x65, 0xbb, 0xbe, 0x15, 0x1f, 0x96, 0xad, 0x0e, 0xe7, 0x50, + 0x7c, 0x5e, 0x74, 0x11, 0x2a, 0x3d, 0xcb, 0xf4, 0x34, 0xc3, 0xc4, 0x8e, 0x6a, 0x5b, 0x8e, 0x47, + 0x5d, 0xb4, 0xa0, 0x94, 0x7d, 0x2a, 0x69, 0x05, 0x9d, 0x83, 0xe2, 0xb1, 0xe5, 0x7a, 0x8c, 0x23, + 0x4f, 0x39, 0x0a, 0x84, 0x40, 0x3f, 0xae, 0xc3, 0x12, 0xfd, 0x68, 0xd8, 0xdc, 0x19, 0x8b, 0xe4, + 0xb5, 0x65, 0xcb, 0xbf, 0x92, 0x60, 0xe1, 0x99, 0x35, 0x32, 0xbd, 0x58, 0x33, 0x9a, 0x77, 0xcc, + 0x07, 0x2a, 0xd4, 0x8c, 0xe6, 0x1d, 0x07, 0xcd, 0x10, 0x0e, 0x36, 0x56, 0xac, 0x19, 0xf2, 0xb1, + 0x0e, 0x05, 0x07, 0x6b, 0xba, 0x65, 0x0e, 0x4e, 0xa8, 0x09, 0x05, 0xc5, 0x7f, 0x27, 0x83, 0xe8, + 0xe2, 0x81, 0x61, 0x8e, 0x5e, 0xa9, 0x0e, 0x1e, 0x68, 0x87, 0x78, 0x40, 0x4d, 0x29, 0x28, 0x15, + 0x4e, 0x56, 0x18, 0x15, 0xed, 0x40, 0xc9, 0x76, 0x2c, 0x5b, 0xeb, 0x6b, 0xc4, 0x8f, 0xb5, 0x05, + 0xea, 0x2a, 0x39, 0xe9, 0x2a, 0x6a, 0x76, 0x27, 0xe0, 0x54, 0xc2, 0x62, 0xf2, 0x5f, 0x49, 0xb0, + 0x42, 0x82, 0xc7, 0xb5, 0xb5, 0x1e, 0xde, 0xa3, 0x43, 0x82, 0x6e, 0xc3, 0x92, 0x89, 0xbd, 0x97, + 0x96, 0xf3, 0x9c, 0x0f, 0xc0, 0xdb, 0x49, 0xad, 0xbe, 0xcc, 0x33, 0x4b, 0xc7, 0x8a, 0xe0, 0x47, + 0x37, 0x21, 0x6f, 0x1b, 0x3a, 0xed, 0xf0, 0x14, 0x62, 0x84, 0x97, 0x88, 0x18, 0x76, 0x8f, 0xfa, + 0x61, 0x1a, 0x11, 0xc3, 0xee, 0xc9, 0x32, 0x40, 0xcb, 0xf4, 0x6e, 0x7d, 0xf7, 0x63, 0x6d, 0x30, + 0xc2, 0x68, 0x0d, 0x16, 0x5e, 0x90, 0x07, 0x6a, 0x6c, 0x5e, 0x61, 0x2f, 0xf2, 0x57, 0x79, 0x38, + 0xf7, 0x94, 0xf8, 0xab, 0xab, 0x99, 0xfa, 0xa1, 0xf5, 0xaa, 0x8b, 0x7b, 0x23, 0xc7, 0xf0, 0x4e, + 0x9a, 0x96, 0xe9, 0xe1, 0x57, 0x1e, 0x6a, 0xc3, 0xaa, 0x29, 0x34, 0xab, 0x22, 0x34, 0x89, 0x86, + 0xd2, 0xf6, 0xe6, 0x18, 0x23, 0x98, 0x8b, 0x94, 0xaa, 0x19, 0x25, 0xb8, 0xe8, 0x49, 0x30, 0x6e, + 0x42, 0x5b, 0x8e, 0x6a, 0x4b, 0xe9, 0x52, 0x77, 0x97, 0x5a, 0xc6, 0x75, 0x89, 0x81, 0x15, 0x9a, + 0x3e, 0x02, 0x32, 0xab, 0x55, 0xcd, 0x55, 0x47, 0x2e, 0x76, 0xa8, 0x63, 0x4a, 0xdb, 0x6f, 0x25, + 0xb5, 0x04, 0x2e, 0x50, 0x8a, 0xce, 0xc8, 0x6c, 0xb8, 0x07, 0x2e, 0x76, 0x68, 0x12, 0xe0, 0xb1, + 0xa4, 0x3a, 0x96, 0xe5, 0x1d, 0xb9, 0x22, 0x7e, 0x04, 0x59, 0xa1, 0x54, 0x74, 0x03, 0x4e, 0xb9, + 0x23, 0xdb, 0x1e, 0xe0, 0x21, 0x36, 0x3d, 0x6d, 0xa0, 0xf6, 0x1d, 0x6b, 0x64, 0xbb, 0xb5, 0x85, + 0x0b, 0xf9, 0x2b, 0x79, 0x05, 0x85, 0x3f, 0x3d, 0xa6, 0x5f, 0xd0, 0x06, 0x80, 0xed, 0x18, 0x2f, + 0x8c, 0x01, 0xee, 0x63, 0xbd, 0xb6, 0x48, 0x95, 0x86, 0x28, 0xe8, 0x7d, 0x58, 0x73, 0x71, 0xaf, + 0x67, 0x0d, 0x6d, 0xd5, 0x76, 0xac, 0x23, 0x63, 0x80, 0x59, 0xf4, 0x2f, 0xd1, 0xe8, 0x47, 0xfc, + 0x5b, 0x87, 0x7d, 0xa2, 0xf3, 0xe0, 0x1e, 0xcd, 0x69, 0xa4, 0xa7, 0xb4, 0xf1, 0x5a, 0x61, 0x8a, + 0xae, 0x02, 0xed, 0x2a, 0x35, 0x49, 0xfe, 0x79, 0x0e, 0x4e, 0x53, 0x4f, 0x76, 0x2c, 0x9d, 0x0f, + 0x33, 0x4f, 0x52, 0xef, 0x40, 0xb9, 0x47, 0x75, 0xaa, 0xb6, 0xe6, 0x60, 0xd3, 0xe3, 0x93, 0x74, + 0x99, 0x11, 0x3b, 0x94, 0x86, 0x3e, 0x85, 0xaa, 0xcb, 0xa3, 0x42, 0xed, 0xb1, 0xb0, 0xe0, 0x63, + 0x76, 0x3d, 0x69, 0xc2, 0x98, 0x58, 0x52, 0x56, 0xdc, 0x44, 0x70, 0x2d, 0xb9, 0x27, 0x6e, 0xcf, + 0x1b, 0xb0, 0x6c, 0x57, 0xda, 0xfe, 0x6e, 0x86, 0xc2, 0xb8, 0xe1, 0x5b, 0x5d, 0x26, 0xb6, 0x6b, + 0x7a, 0xce, 0x89, 0x22, 0x94, 0xd4, 0xef, 0xc0, 0x72, 0xf8, 0x03, 0xaa, 0x42, 0xfe, 0x39, 0x3e, + 0xe1, 0x9d, 0x22, 0x8f, 0xc1, 0x24, 0x60, 0xb9, 0x86, 0xbd, 0xdc, 0xc9, 0xfd, 0x8e, 0x24, 0x3b, + 0x80, 0x82, 0x56, 0x9e, 0x61, 0x4f, 0xd3, 0x35, 0x4f, 0x43, 0x08, 0xe6, 0xe9, 0x32, 0xc2, 0x54, + 0xd0, 0x67, 0xa2, 0x75, 0xc4, 0x27, 0x6f, 0x51, 0x21, 0x8f, 0xe8, 0x2d, 0x28, 0xfa, 0x81, 0xce, + 0xd7, 0x92, 0x80, 0x40, 0x72, 0xba, 0xe6, 0x79, 0x78, 0x68, 0x7b, 0x34, 0xc4, 0xca, 0x8a, 0x78, + 0x95, 0xff, 0x7b, 0x1e, 0xaa, 0x89, 0x31, 0x79, 0x00, 0x85, 0x21, 0x6f, 0x9e, 0x4f, 0xb4, 0x77, + 0x53, 0x12, 0x7b, 0xc2, 0x54, 0xc5, 0x97, 0x22, 0x79, 0x93, 0xe4, 0xd0, 0xd0, 0xfa, 0xe7, 0xbf, + 0x93, 0x11, 0x1f, 0x58, 0x7d, 0x55, 0x37, 0x1c, 0xdc, 0xf3, 0x2c, 0xe7, 0x84, 0x9b, 0xbb, 0x3c, + 0xb0, 0xfa, 0x3b, 0x82, 0x86, 0xee, 0x00, 0xe8, 0xa6, 0x4b, 0x06, 0xfb, 0xc8, 0xe8, 0x53, 0xa3, + 0x4b, 0xdb, 0xe7, 0x92, 0x46, 0xf8, 0x8b, 0x9d, 0x52, 0xd4, 0x4d, 0x97, 0x9b, 0xff, 0x10, 0xca, + 0x64, 0xcd, 0x50, 0x87, 0x6c, 0x9d, 0x62, 0x33, 0xa5, 0xb4, 0x7d, 0x3e, 0xad, 0x0f, 0xfe, 0x6a, + 0xa6, 0x2c, 0xdb, 0xc1, 0x8b, 0x8b, 0x1e, 0xc1, 0x22, 0x4d, 0xde, 0x6e, 0x6d, 0x91, 0x0a, 0x6f, + 0x8d, 0x73, 0x00, 0x8f, 0x88, 0xa7, 0x54, 0x80, 0x05, 0x04, 0x97, 0x46, 0x07, 0x50, 0xd2, 0x4c, + 0xd3, 0xf2, 0x34, 0x96, 0x68, 0x96, 0xa8, 0xb2, 0x0f, 0xa6, 0x50, 0xd6, 0x08, 0xa4, 0x98, 0xc6, + 0xb0, 0x1e, 0xf4, 0x7d, 0x58, 0xa0, 0x99, 0x88, 0x4f, 0xc4, 0xcb, 0x53, 0x06, 0xad, 0xc2, 0xa4, + 0xea, 0xb7, 0xa1, 0x14, 0x32, 0x76, 0x96, 0x20, 0xad, 0xdf, 0x83, 0x6a, 0xdc, 0xb4, 0x99, 0x82, + 0xfc, 0x0f, 0x60, 0x4d, 0x19, 0x99, 0x81, 0x61, 0xa2, 0xfa, 0xba, 0x03, 0x8b, 0x7c, 0xb0, 0x59, + 0xc4, 0xc9, 0x93, 0x7d, 0xa4, 0x70, 0x89, 0x70, 0x39, 0x75, 0xac, 0x99, 0xfa, 0x00, 0x3b, 0xbc, + 0x5d, 0x51, 0x4e, 0x3d, 0x61, 0x54, 0xf9, 0xfb, 0x70, 0x3a, 0xd6, 0x38, 0xaf, 0xe6, 0xde, 0x85, + 0x8a, 0x6d, 0xe9, 0xaa, 0xcb, 0xc8, 0xaa, 0xa1, 0x8b, 0x34, 0x64, 0xfb, 0xbc, 0x2d, 0x9d, 0x88, + 0x77, 0x3d, 0xcb, 0x4e, 0x1a, 0x3f, 0x9d, 0x78, 0x0d, 0xce, 0xc4, 0xc5, 0x59, 0xf3, 0xf2, 0x7d, + 0x58, 0x57, 0xf0, 0xd0, 0x7a, 0x81, 0x5f, 0x57, 0x75, 0x1d, 0x6a, 0x49, 0x05, 0x5c, 0xf9, 0x67, + 0xb0, 0x1e, 0x50, 0xbb, 0x9e, 0xe6, 0x8d, 0xdc, 0x99, 0x94, 0xf3, 0x52, 0xf7, 0xd0, 0x72, 0xd9, + 0x70, 0x16, 0x14, 0xf1, 0x2a, 0x5f, 0x0d, 0xab, 0x6e, 0xb3, 0xca, 0x82, 0xb5, 0x80, 0x2a, 0x90, + 0x33, 0x6c, 0xae, 0x2e, 0x67, 0xd8, 0xf2, 0x13, 0x28, 0xfa, 0x4b, 0x33, 0xba, 0x1b, 0xd4, 0x98, + 0xb9, 0x69, 0x17, 0x72, 0xbf, 0x0c, 0xdd, 0x4f, 0x2c, 0x25, 0xbc, 0xc9, 0xbb, 0x00, 0x7e, 0xca, + 0x13, 0x15, 0xc2, 0xb9, 0x31, 0x8a, 0x95, 0x10, 0xbb, 0xfc, 0xd3, 0x85, 0x70, 0x22, 0x0c, 0x75, + 0x42, 0xf7, 0x3b, 0xa1, 0x47, 0x12, 0x63, 0xee, 0xb5, 0x12, 0xe3, 0x87, 0xb0, 0xe0, 0x7a, 0x9a, + 0x87, 0x79, 0x15, 0xb5, 0x39, 0x4e, 0x9c, 0x18, 0x81, 0x15, 0xc6, 0x8f, 0xce, 0x03, 0xf4, 0x1c, + 0xac, 0x79, 0x58, 0x57, 0x35, 0x96, 0xc5, 0xf3, 0x4a, 0x91, 0x53, 0x1a, 0x1e, 0x6a, 0x06, 0x95, + 0xe0, 0x02, 0x35, 0xec, 0xea, 0x38, 0xcd, 0x91, 0xa1, 0x0a, 0x6a, 0x42, 0x3f, 0xab, 0x2c, 0x4e, + 0x99, 0x55, 0xb8, 0x02, 0x26, 0x15, 0xca, 0x99, 0x4b, 0x93, 0x73, 0x26, 0x13, 0x9d, 0x26, 0x67, + 0x16, 0x26, 0xe7, 0x4c, 0xae, 0x6c, 0x7c, 0xce, 0x4c, 0xc9, 0x12, 0xc5, 0xb4, 0x2c, 0xf1, 0x6d, + 0x66, 0xc7, 0x7f, 0x96, 0xa0, 0x96, 0x9c, 0xac, 0x3c, 0x49, 0xdd, 0x81, 0x45, 0x97, 0x52, 0xa6, + 0x49, 0x91, 0x5c, 0x96, 0x4b, 0xa0, 0x27, 0x30, 0x6f, 0x98, 0x47, 0x16, 0xdd, 0xed, 0xa5, 0x16, + 0x39, 0x59, 0xad, 0x6e, 0xb5, 0xcc, 0x23, 0x8b, 0x79, 0x93, 0x6a, 0xa8, 0x7f, 0x08, 0x45, 0x9f, + 0x34, 0x53, 0xdf, 0xf6, 0x60, 0x2d, 0x16, 0xdb, 0x6c, 0x57, 0xe0, 0x4f, 0x09, 0x69, 0xb6, 0x29, + 0x21, 0xff, 0x24, 0x17, 0x9e, 0xb2, 0x8f, 0x8c, 0x81, 0x87, 0x9d, 0xc4, 0x94, 0xfd, 0x48, 0x68, + 0x67, 0xf3, 0xf5, 0xd2, 0x44, 0xed, 0xac, 0x78, 0xe5, 0xb3, 0xee, 0x0b, 0xa8, 0xd0, 0xa0, 0x54, + 0x5d, 0x3c, 0xa0, 0x95, 0x09, 0xaf, 0x12, 0xbf, 0x37, 0x4e, 0x0d, 0xb3, 0x84, 0x85, 0x76, 0x97, + 0xcb, 0x31, 0x0f, 0x96, 0x07, 0x61, 0x5a, 0xfd, 0x01, 0xa0, 0x24, 0xd3, 0x4c, 0x3e, 0xed, 0x92, + 0x5c, 0x48, 0xb6, 0xc4, 0x29, 0xcb, 0xe9, 0x11, 0x35, 0x63, 0x9a, 0x58, 0x61, 0x06, 0x2b, 0x5c, + 0x42, 0xfe, 0xaf, 0x3c, 0x40, 0xf0, 0xf1, 0xff, 0x51, 0x12, 0x7c, 0xe0, 0x27, 0x20, 0x56, 0xf1, + 0x5d, 0x19, 0xa7, 0x38, 0x35, 0xf5, 0xec, 0x45, 0x53, 0x0f, 0xab, 0xfd, 0xae, 0x8f, 0x55, 0x33, + 0x73, 0xd2, 0x59, 0xfa, 0x6d, 0x4b, 0x3a, 0x4f, 0xe1, 0x4c, 0x3c, 0x88, 0x78, 0xc6, 0xd9, 0x86, + 0x05, 0xc3, 0xc3, 0x43, 0x86, 0x1f, 0xa5, 0xee, 0xf7, 0x42, 0x42, 0x8c, 0x55, 0xde, 0x84, 0x62, + 0x6b, 0xa8, 0xf5, 0x71, 0xd7, 0xc6, 0x3d, 0xd2, 0xa8, 0x41, 0x5e, 0xb8, 0x21, 0xec, 0x45, 0xde, + 0x86, 0xc2, 0x0f, 0xf0, 0x09, 0x9b, 0xfd, 0x53, 0x1a, 0x2a, 0xff, 0x49, 0x0e, 0xd6, 0xe9, 0xea, + 0xd3, 0x14, 0xe8, 0x8d, 0x82, 0x5d, 0x6b, 0xe4, 0xf4, 0xb0, 0x4b, 0xc3, 0xc2, 0x1e, 0xa9, 0x36, + 0x76, 0x0c, 0x4b, 0xe7, 0xe0, 0x42, 0xb1, 0x67, 0x8f, 0x3a, 0x94, 0x80, 0xce, 0x01, 0x79, 0x51, + 0xbf, 0x1c, 0x59, 0x3c, 0x62, 0xf3, 0x4a, 0xa1, 0x67, 0x8f, 0x7e, 0x8f, 0xbc, 0x0b, 0x59, 0xf7, + 0x58, 0x73, 0xb0, 0x4b, 0x03, 0x92, 0xc9, 0x76, 0x29, 0x01, 0xdd, 0x84, 0xd3, 0x43, 0x3c, 0xb4, + 0x9c, 0x13, 0x75, 0x60, 0x0c, 0x0d, 0x4f, 0x35, 0x4c, 0xf5, 0xf0, 0xc4, 0xc3, 0x2e, 0x0f, 0x3e, + 0xc4, 0x3e, 0x3e, 0x25, 0xdf, 0x5a, 0xe6, 0x43, 0xf2, 0x05, 0xc9, 0x50, 0xb6, 0xac, 0xa1, 0xea, + 0xf6, 0x2c, 0x07, 0xab, 0x9a, 0xfe, 0x63, 0xba, 0x20, 0xe7, 0x95, 0x92, 0x65, 0x0d, 0xbb, 0x84, + 0xd6, 0xd0, 0x7f, 0x8c, 0xde, 0x86, 0x52, 0xcf, 0x1e, 0xb9, 0xd8, 0x53, 0xc9, 0x1f, 0xba, 0xde, + 0x16, 0x15, 0x60, 0xa4, 0xa6, 0x3d, 0x72, 0x43, 0x0c, 0x43, 0xe2, 0xff, 0xa5, 0x30, 0xc3, 0x33, + 0xe2, 0x66, 0x0d, 0xca, 0x11, 0x70, 0x82, 0xec, 0x13, 0x29, 0x0a, 0xc1, 0xf7, 0x89, 0xe4, 0x99, + 0xd0, 0x1c, 0x6b, 0x20, 0x3c, 0x49, 0x9f, 0x09, 0xcd, 0x3b, 0xb1, 0xc5, 0x26, 0x91, 0x3e, 0x13, + 0x97, 0x0f, 0xf0, 0x0b, 0x0e, 0x60, 0x15, 0x15, 0xf6, 0x22, 0xeb, 0x00, 0x4d, 0xcd, 0xd6, 0x0e, + 0x8d, 0x81, 0xe1, 0x9d, 0xa0, 0xab, 0x50, 0xd5, 0x74, 0x5d, 0xed, 0x09, 0x8a, 0x81, 0x05, 0xac, + 0xb8, 0xa2, 0xe9, 0x7a, 0x33, 0x44, 0x46, 0xdf, 0x81, 0x55, 0xdd, 0xb1, 0xec, 0x28, 0x2f, 0xc3, + 0x19, 0xab, 0xe4, 0x43, 0x98, 0x59, 0xfe, 0xf7, 0x05, 0x38, 0x1f, 0x1d, 0xd8, 0x38, 0x00, 0xf4, + 0x00, 0x96, 0x63, 0xad, 0x66, 0x80, 0x0f, 0x81, 0xb5, 0x4a, 0x44, 0x22, 0x06, 0x88, 0xe4, 0x12, + 0x80, 0x48, 0x2a, 0xc4, 0x94, 0x7f, 0xa3, 0x10, 0xd3, 0xfc, 0x1b, 0x81, 0x98, 0x16, 0x66, 0x83, + 0x98, 0x2e, 0xd1, 0xec, 0x23, 0xa4, 0xe9, 0x6e, 0x9c, 0x85, 0x5a, 0xd9, 0xe7, 0x31, 0x05, 0x1e, + 0x1d, 0x83, 0xa2, 0x96, 0x66, 0x81, 0xa2, 0x0a, 0x99, 0x50, 0x14, 0x89, 0x1a, 0xdb, 0xd6, 0x9c, + 0xa1, 0xe5, 0x08, 0xac, 0x89, 0x57, 0x5d, 0x2b, 0x82, 0xce, 0x71, 0xa6, 0x4c, 0x54, 0x0a, 0x32, + 0x51, 0xa9, 0x0b, 0xb0, 0x6c, 0x5a, 0xaa, 0x89, 0x5f, 0xaa, 0x64, 0x2c, 0xdd, 0x5a, 0x89, 0x0d, + 0xac, 0x69, 0xb5, 0xf1, 0xcb, 0x0e, 0xa1, 0x24, 0x70, 0xab, 0xe5, 0xd9, 0x70, 0x2b, 0xb4, 0x09, + 0xcb, 0x43, 0xcd, 0x7d, 0x8e, 0x75, 0x6a, 0x8a, 0x5b, 0x2b, 0xd3, 0x20, 0x2e, 0x31, 0x1a, 0xb1, + 0xc1, 0x45, 0x17, 0xc1, 0x77, 0x12, 0x67, 0xaa, 0x50, 0xa6, 0xb2, 0xa0, 0x52, 0x36, 0xf9, 0x6f, + 0x25, 0x58, 0x8b, 0x86, 0x39, 0x47, 0x2b, 0x1e, 0x43, 0xd1, 0x11, 0x99, 0x8c, 0x87, 0xf6, 0xd5, + 0x8c, 0xc2, 0x3b, 0x99, 0xfa, 0x94, 0x40, 0x16, 0xfd, 0x30, 0x13, 0x24, 0xbb, 0x31, 0x49, 0xdf, + 0x24, 0x98, 0x4c, 0x76, 0xe0, 0xed, 0x4f, 0x0c, 0x53, 0xb7, 0x5e, 0xba, 0x99, 0xb3, 0x34, 0x25, + 0xd6, 0xa4, 0x8c, 0x58, 0xeb, 0x39, 0x58, 0xc7, 0xa6, 0x67, 0x68, 0x03, 0xd5, 0xb5, 0x71, 0x4f, + 0x6c, 0xd6, 0x03, 0x32, 0x59, 0x3b, 0xe4, 0x5f, 0x48, 0x70, 0x26, 0xde, 0x28, 0xf7, 0x59, 0x2b, + 0xe9, 0xb3, 0xef, 0x24, 0xfb, 0x18, 0x17, 0x4e, 0xf5, 0xda, 0x17, 0x99, 0x5e, 0xbb, 0x39, 0x59, + 0xe3, 0x44, 0xbf, 0xfd, 0xa5, 0x04, 0x67, 0x33, 0xcd, 0x88, 0xad, 0x3d, 0x52, 0x7c, 0xed, 0xe1, + 0xeb, 0x56, 0xcf, 0x1a, 0x99, 0x5e, 0x68, 0xdd, 0x6a, 0xd2, 0xd3, 0x0d, 0xb6, 0x40, 0xa8, 0x43, + 0xed, 0x95, 0x31, 0x1c, 0x0d, 0xf9, 0xc2, 0x45, 0xd4, 0x3d, 0x63, 0x94, 0xd7, 0x58, 0xb9, 0xe4, + 0x06, 0xac, 0xfa, 0x56, 0x8e, 0xc5, 0x1f, 0x43, 0x78, 0x62, 0x2e, 0x8a, 0x27, 0x9a, 0xb0, 0xb8, + 0x83, 0x5f, 0x18, 0x3d, 0xfc, 0x46, 0x8e, 0x5f, 0x2e, 0x40, 0xc9, 0xc6, 0xce, 0xd0, 0x70, 0x5d, + 0x3f, 0x23, 0x17, 0x95, 0x30, 0x49, 0xfe, 0x8f, 0x45, 0x58, 0x89, 0x47, 0xc7, 0xfd, 0x04, 0x7c, + 0xf9, 0x4e, 0xca, 0x5a, 0x11, 0xef, 0x68, 0xa8, 0x3e, 0xbd, 0x29, 0xaa, 0x96, 0x5c, 0x16, 0x86, + 0xe0, 0x57, 0x38, 0xbc, 0xa4, 0x21, 0x1e, 0xe9, 0x59, 0xc3, 0xa1, 0x66, 0xea, 0xe2, 0xd4, 0x8c, + 0xbf, 0x12, 0xff, 0x69, 0x4e, 0x9f, 0xb8, 0x9d, 0x90, 0xe9, 0x33, 0x19, 0x3c, 0xb2, 0xe1, 0x36, + 0x4c, 0x0a, 0x83, 0xd2, 0xac, 0x5e, 0x54, 0x80, 0x93, 0x76, 0x0c, 0x07, 0x6d, 0xc1, 0x3c, 0x36, + 0x5f, 0x88, 0x02, 0x34, 0xe5, 0x58, 0x4d, 0xd4, 0x4f, 0x0a, 0xe5, 0x43, 0x37, 0x60, 0x71, 0x48, + 0xc2, 0x42, 0x6c, 0xbd, 0xd7, 0x33, 0x4e, 0x97, 0x14, 0xce, 0x86, 0xb6, 0x61, 0x49, 0xa7, 0xe3, + 0x24, 0xf6, 0xd7, 0xb5, 0x14, 0x70, 0x95, 0x32, 0x28, 0x82, 0x11, 0xed, 0xfa, 0xe5, 0x75, 0x31, + 0xab, 0x2e, 0x8e, 0x0d, 0x45, 0x6a, 0x8d, 0xbd, 0x1f, 0xad, 0xb1, 0x81, 0xea, 0xda, 0x9e, 0xac, + 0x6b, 0x7c, 0xa1, 0x7d, 0x16, 0x0a, 0x03, 0xab, 0xcf, 0xc2, 0xa8, 0xc4, 0x0e, 0x64, 0x07, 0x56, + 0x9f, 0x46, 0xd1, 0x1a, 0xd9, 0x6e, 0xe8, 0x86, 0x49, 0xb3, 0x7f, 0x41, 0x61, 0x2f, 0x64, 0xf2, + 0xd1, 0x07, 0xd5, 0x32, 0x7b, 0xb8, 0x56, 0xa6, 0x9f, 0x8a, 0x94, 0xb2, 0x67, 0xf6, 0x68, 0x5d, + 0xea, 0x79, 0x27, 0xb5, 0x0a, 0xa5, 0x93, 0x47, 0xb2, 0x93, 0x64, 0xe8, 0xc8, 0x4a, 0xd6, 0x4e, + 0x32, 0x2d, 0xbf, 0x0b, 0x70, 0xe4, 0x21, 0x2c, 0xbd, 0x64, 0x89, 0xa0, 0x56, 0xa5, 0xf2, 0x57, + 0x26, 0xa7, 0x17, 0xae, 0x41, 0x08, 0x7e, 0x9b, 0x7b, 0x84, 0xbf, 0x97, 0xe0, 0x4c, 0x93, 0x6e, + 0xb4, 0x42, 0x79, 0x6c, 0x16, 0x10, 0xf1, 0xb6, 0x8f, 0xef, 0x66, 0x22, 0x7e, 0xf1, 0x7e, 0x0b, + 0x78, 0xb7, 0x05, 0x15, 0xa1, 0x9c, 0xab, 0xc8, 0x4f, 0x0d, 0x11, 0x97, 0xdd, 0xf0, 0xab, 0xfc, + 0x11, 0xac, 0x27, 0x7a, 0xc1, 0xf7, 0x3a, 0x9b, 0xb0, 0x1c, 0xe4, 0x2b, 0xbf, 0x13, 0x25, 0x9f, + 0xd6, 0xd2, 0xe5, 0x3b, 0x70, 0xba, 0xeb, 0x69, 0x8e, 0x97, 0x70, 0xc1, 0x14, 0xb2, 0x14, 0xfc, + 0x8d, 0xca, 0x72, 0x7c, 0xb6, 0x0b, 0x6b, 0x5d, 0xcf, 0xb2, 0x5f, 0x43, 0x29, 0xc9, 0x3a, 0xa4, + 0xff, 0xd6, 0x48, 0xac, 0x0f, 0xe2, 0x55, 0x5e, 0x67, 0x50, 0x75, 0xb2, 0xb5, 0xbb, 0x70, 0x86, + 0x21, 0xc5, 0xaf, 0xd3, 0x89, 0xb3, 0x02, 0xa7, 0x4e, 0xea, 0x7d, 0x06, 0xa7, 0x82, 0x65, 0x31, + 0x00, 0x77, 0x6e, 0x45, 0xc1, 0x9d, 0x0b, 0x63, 0x46, 0x3d, 0x82, 0xed, 0xfc, 0x79, 0x2e, 0x94, + 0xd7, 0x33, 0xa0, 0x9d, 0xbb, 0x51, 0x68, 0xe7, 0xe2, 0x24, 0xdd, 0x11, 0x64, 0x27, 0x19, 0xb5, + 0xf9, 0x94, 0xa8, 0xfd, 0x3c, 0x81, 0xff, 0xcc, 0x67, 0x01, 0x68, 0x31, 0x6b, 0x7f, 0x23, 0xf0, + 0x8f, 0xc2, 0xe0, 0x1f, 0xbf, 0x69, 0x1f, 0xd8, 0xbf, 0x1d, 0x83, 0x7f, 0x36, 0x27, 0xda, 0xeb, + 0xa3, 0x3f, 0x7f, 0x3d, 0x0f, 0x45, 0xff, 0x5b, 0xc2, 0xe7, 0x49, 0xb7, 0xe5, 0x52, 0xdc, 0x16, + 0x5e, 0x81, 0xf3, 0xdf, 0x68, 0x05, 0x9e, 0x9f, 0x7a, 0x05, 0x3e, 0x07, 0x45, 0xfa, 0xa0, 0x3a, + 0xf8, 0x88, 0xaf, 0xa8, 0x05, 0x4a, 0x50, 0xf0, 0x51, 0x10, 0x86, 0x8b, 0x33, 0x85, 0x61, 0x0c, + 0x70, 0x5a, 0x8a, 0x03, 0x4e, 0xf7, 0xfd, 0x15, 0x91, 0x2d, 0xa2, 0x97, 0xc7, 0xe8, 0x4d, 0x5d, + 0x0b, 0xdb, 0xd1, 0xb5, 0x90, 0xad, 0xab, 0xef, 0x8d, 0xd3, 0x32, 0x76, 0x15, 0xfc, 0x36, 0x57, + 0x88, 0x03, 0x86, 0x22, 0x85, 0x63, 0x91, 0x67, 0xd6, 0xbb, 0x00, 0x7e, 0x12, 0x11, 0x50, 0xd2, + 0xb9, 0x31, 0x7d, 0x54, 0x42, 0xec, 0x44, 0x6d, 0x64, 0x68, 0x82, 0xc3, 0xab, 0xe9, 0xf2, 0x63, + 0xc6, 0xc9, 0xd5, 0xff, 0x2e, 0x84, 0xf2, 0x4b, 0xc6, 0x69, 0xcf, 0xfd, 0x04, 0xd0, 0x39, 0x63, + 0x14, 0xdf, 0x8a, 0xe2, 0x9c, 0xaf, 0x19, 0x75, 0x09, 0x98, 0x93, 0x56, 0x2e, 0x9a, 0xc3, 0x3f, + 0x33, 0x74, 0xa9, 0xc8, 0x29, 0x0d, 0xba, 0x33, 0x38, 0x32, 0x4c, 0xc3, 0x3d, 0x66, 0xdf, 0x17, + 0xd9, 0xce, 0x40, 0x90, 0x1a, 0xf4, 0x62, 0x15, 0x7e, 0x65, 0x78, 0x6a, 0xcf, 0xd2, 0x31, 0x8d, + 0xe9, 0x05, 0xa5, 0x40, 0x08, 0x4d, 0x4b, 0xc7, 0xc1, 0xcc, 0x2b, 0xbc, 0xde, 0xcc, 0x2b, 0xc6, + 0x66, 0xde, 0x19, 0x58, 0x74, 0xb0, 0xe6, 0x5a, 0x26, 0xdf, 0xc7, 0xf3, 0x37, 0x32, 0x34, 0x43, + 0xec, 0xba, 0xa4, 0x25, 0x5e, 0xae, 0xf1, 0xd7, 0x50, 0x99, 0xb9, 0x3c, 0xb1, 0xcc, 0x1c, 0x73, + 0x8a, 0x14, 0x2b, 0x33, 0xcb, 0x13, 0xcb, 0xcc, 0xa9, 0x0e, 0x91, 0x82, 0x42, 0xbb, 0x32, 0x5d, + 0xa1, 0x1d, 0xae, 0x4b, 0x57, 0x22, 0x75, 0xe9, 0xb7, 0x39, 0x59, 0x7f, 0x25, 0xc1, 0x7a, 0x62, + 0x5a, 0xf1, 0xe9, 0x7a, 0x3b, 0x76, 0xcc, 0xb4, 0x39, 0xd1, 0x67, 0xfe, 0x29, 0xd3, 0xe3, 0xc8, + 0x29, 0xd3, 0x07, 0x93, 0x05, 0xdf, 0xf8, 0x21, 0xd3, 0x1f, 0x49, 0xf0, 0xf6, 0x81, 0xad, 0xc7, + 0x2a, 0x3c, 0xbe, 0xed, 0x9f, 0x3e, 0x71, 0xdc, 0x17, 0xb5, 0x7e, 0x6e, 0x56, 0x40, 0x86, 0xc9, + 0xc9, 0x32, 0x5c, 0xc8, 0x36, 0x83, 0x97, 0x4c, 0x3f, 0x82, 0x95, 0xdd, 0x57, 0xb8, 0xd7, 0x3d, + 0x31, 0x7b, 0x33, 0x98, 0x56, 0x85, 0x7c, 0x6f, 0xa8, 0x73, 0x38, 0x95, 0x3c, 0x86, 0xab, 0xc0, + 0x7c, 0xb4, 0x0a, 0x54, 0xa1, 0x1a, 0xb4, 0xc0, 0x87, 0xf7, 0x0c, 0x19, 0x5e, 0x9d, 0x30, 0x13, + 0xe5, 0xcb, 0x0a, 0x7f, 0xe3, 0x74, 0xec, 0xb0, 0xbb, 0x13, 0x8c, 0x8e, 0x1d, 0x27, 0x9a, 0x2d, + 0xf2, 0xd1, 0x6c, 0x21, 0xff, 0x99, 0x04, 0x25, 0xd2, 0xc2, 0x37, 0xb2, 0x9f, 0x6f, 0xb5, 0xf2, + 0xc1, 0x56, 0xcb, 0xdf, 0xb1, 0xcd, 0x87, 0x77, 0x6c, 0x81, 0xe5, 0x0b, 0x94, 0x9c, 0xb4, 0x7c, + 0xd1, 0xa7, 0x63, 0xc7, 0x91, 0x2f, 0xc0, 0x32, 0xb3, 0x8d, 0xf7, 0xbc, 0x0a, 0xf9, 0x91, 0x33, + 0x10, 0x71, 0x34, 0x72, 0x06, 0xf2, 0x1f, 0x4b, 0x50, 0x6e, 0x78, 0x9e, 0xd6, 0x3b, 0x9e, 0xa1, + 0x03, 0xbe, 0x71, 0xb9, 0xb0, 0x71, 0xc9, 0x4e, 0x04, 0xe6, 0xce, 0x67, 0x98, 0xbb, 0x10, 0x31, + 0x57, 0x86, 0x8a, 0xb0, 0x25, 0xd3, 0xe0, 0x36, 0xa0, 0x8e, 0xe5, 0x78, 0x8f, 0x2c, 0xe7, 0xa5, + 0xe6, 0xe8, 0xb3, 0xed, 0xc0, 0x10, 0xcc, 0xf3, 0xcb, 0xb6, 0xf9, 0x2b, 0x0b, 0x0a, 0x7d, 0x96, + 0x2f, 0xc3, 0xa9, 0x88, 0xbe, 0xcc, 0x86, 0x1f, 0x40, 0x89, 0xe6, 0x7d, 0x5e, 0x8a, 0xdf, 0x0c, + 0x9f, 0xeb, 0x4c, 0xb5, 0x4a, 0xc8, 0xbf, 0x0b, 0xab, 0xa4, 0x3e, 0xa0, 0x74, 0x7f, 0x2a, 0x7e, + 0x2f, 0x56, 0xa7, 0x9e, 0xcf, 0x50, 0x14, 0xab, 0x51, 0xff, 0x46, 0x82, 0x05, 0x4a, 0x4f, 0xac, + 0xd9, 0xe7, 0xa0, 0xe8, 0x60, 0xdb, 0x52, 0x3d, 0xad, 0xef, 0x5f, 0x6d, 0x26, 0x84, 0x7d, 0xad, + 0xef, 0xd2, 0x9b, 0xd9, 0xe4, 0xa3, 0x6e, 0xf4, 0xb1, 0xeb, 0x89, 0xfb, 0xcd, 0x25, 0x42, 0xdb, + 0x61, 0x24, 0xe2, 0x24, 0xd7, 0xf8, 0x7d, 0x56, 0x77, 0xce, 0x2b, 0xf4, 0x19, 0x6d, 0xb1, 0xdb, + 0x76, 0xd3, 0x60, 0xef, 0xf4, 0x2e, 0x5e, 0x1d, 0x0a, 0x31, 0xb8, 0xdd, 0x7f, 0x97, 0x77, 0x01, + 0x85, 0xbd, 0xc0, 0xfd, 0x7d, 0x03, 0x16, 0xa9, 0x93, 0x44, 0x75, 0xb4, 0x9e, 0xe1, 0x06, 0x85, + 0xb3, 0xc9, 0x1a, 0x20, 0xe6, 0xe0, 0x48, 0x45, 0x34, 0xfb, 0xa8, 0x8c, 0xa9, 0x90, 0xfe, 0x4e, + 0x82, 0x53, 0x91, 0x36, 0xb8, 0xad, 0xd7, 0xa3, 0x8d, 0x64, 0x9a, 0xca, 0x1b, 0x68, 0x46, 0x96, + 0x84, 0x1b, 0x59, 0x26, 0xfd, 0x9a, 0x96, 0x83, 0x7f, 0x90, 0x00, 0x1a, 0x23, 0xef, 0x98, 0x23, + 0x83, 0xe1, 0x91, 0x91, 0xa2, 0x23, 0x43, 0xbe, 0xd9, 0x9a, 0xeb, 0xbe, 0xb4, 0x1c, 0xb1, 0xa7, + 0xf1, 0xdf, 0x29, 0x86, 0x37, 0xf2, 0x8e, 0xc5, 0x99, 0x19, 0x79, 0x46, 0x17, 0xa1, 0xc2, 0xae, + 0xd3, 0xab, 0x9a, 0xae, 0x3b, 0xd8, 0x75, 0xf9, 0xe1, 0x59, 0x99, 0x51, 0x1b, 0x8c, 0x48, 0xd8, + 0x0c, 0x8a, 0x6a, 0x7b, 0x27, 0xaa, 0x67, 0x3d, 0xc7, 0x26, 0xdf, 0x9b, 0x94, 0x05, 0x75, 0x9f, + 0x10, 0xd9, 0x29, 0x42, 0xdf, 0x70, 0x3d, 0x47, 0xb0, 0x89, 0x83, 0x1a, 0x4e, 0xa5, 0x6c, 0x64, + 0x50, 0xaa, 0x9d, 0xd1, 0x60, 0xc0, 0x5c, 0xfc, 0xfa, 0xc3, 0xfe, 0x3e, 0xef, 0x50, 0x2e, 0x2b, + 0xa6, 0x03, 0xa7, 0xf1, 0xee, 0xbe, 0x41, 0x10, 0xe6, 0x7d, 0x58, 0x0d, 0xf5, 0x81, 0x87, 0x55, + 0xa4, 0x88, 0x94, 0xa2, 0x45, 0xa4, 0xfc, 0x18, 0x10, 0xc3, 0x1d, 0xbe, 0x61, 0xbf, 0xe5, 0xd3, + 0x70, 0x2a, 0xa2, 0x88, 0xaf, 0xc4, 0xd7, 0xa0, 0xcc, 0xaf, 0x44, 0xf1, 0x40, 0x39, 0x0b, 0x05, + 0x92, 0x51, 0x7b, 0x86, 0x2e, 0x0e, 0x54, 0x97, 0x6c, 0x4b, 0x6f, 0x1a, 0xba, 0x23, 0x7f, 0x02, + 0x65, 0x85, 0xb5, 0xc3, 0x79, 0x1f, 0x41, 0x85, 0x5f, 0xa0, 0x52, 0x23, 0x37, 0x18, 0xd3, 0x6e, + 0xc8, 0x87, 0x1b, 0x51, 0xca, 0x66, 0xf8, 0x55, 0xd6, 0xa1, 0xce, 0x4a, 0x86, 0x88, 0x7a, 0xd1, + 0xd9, 0x47, 0x20, 0x6e, 0x0c, 0x4c, 0x6c, 0x25, 0x2a, 0x5f, 0x76, 0xc2, 0xaf, 0xf2, 0x79, 0x38, + 0x97, 0xda, 0x0a, 0xf7, 0x84, 0x0d, 0xd5, 0xe0, 0x83, 0x6e, 0x88, 0x93, 0x65, 0x7a, 0x62, 0x2c, + 0x85, 0x4e, 0x8c, 0xcf, 0xf8, 0x45, 0x62, 0x4e, 0x2c, 0x62, 0xb4, 0x02, 0x0c, 0xca, 0xfd, 0x7c, + 0x56, 0xb9, 0x3f, 0x1f, 0x29, 0xf7, 0xe5, 0xae, 0xef, 0x4f, 0xbe, 0x0d, 0x7b, 0x48, 0xb7, 0x8b, + 0xac, 0x6d, 0x91, 0x10, 0xe5, 0x71, 0xbd, 0x64, 0xac, 0x4a, 0x48, 0x4a, 0xbe, 0x0a, 0xe5, 0x68, + 0x6a, 0x0c, 0xe5, 0x39, 0x29, 0x91, 0xe7, 0x2a, 0xb1, 0x14, 0xf7, 0x61, 0xac, 0x02, 0xce, 0xf6, + 0x71, 0xac, 0xfe, 0xbd, 0x17, 0x49, 0x76, 0xd7, 0x52, 0x0e, 0x7b, 0x7f, 0x4d, 0x79, 0x6e, 0x8d, + 0xaf, 0x07, 0x8f, 0x5c, 0x22, 0xcf, 0x3b, 0x2d, 0xbf, 0x03, 0xa5, 0x83, 0xac, 0x9f, 0x5f, 0xcc, + 0x8b, 0x8b, 0x15, 0xb7, 0x60, 0xed, 0x91, 0x31, 0xc0, 0xee, 0x89, 0xeb, 0xe1, 0x61, 0x8b, 0x26, + 0xa5, 0x23, 0x03, 0x3b, 0x68, 0x03, 0x80, 0x6e, 0x61, 0x6c, 0xcb, 0xf0, 0x6f, 0xe5, 0x87, 0x28, + 0xf2, 0x7f, 0x4a, 0xb0, 0x12, 0x08, 0x1e, 0xd0, 0xad, 0xdb, 0x5b, 0x50, 0x24, 0xfd, 0x75, 0x3d, + 0x6d, 0x68, 0x8b, 0xf3, 0x2c, 0x9f, 0x80, 0xee, 0xc2, 0xc2, 0x91, 0x2b, 0x20, 0xa3, 0x54, 0x00, + 0x3d, 0xcd, 0x10, 0x65, 0xfe, 0xc8, 0x6d, 0xe9, 0xe8, 0x23, 0x80, 0x91, 0x8b, 0x75, 0x7e, 0x86, + 0x95, 0xcf, 0xaa, 0x16, 0x0e, 0xc2, 0x07, 0xe1, 0x44, 0x80, 0xdd, 0xc9, 0xb8, 0x07, 0x25, 0xc3, + 0xb4, 0x74, 0x4c, 0x0f, 0x27, 0x75, 0x8e, 0x2a, 0x4d, 0x10, 0x07, 0x26, 0x71, 0xe0, 0x62, 0x5d, + 0xc6, 0x7c, 0x2d, 0x14, 0xfe, 0xe5, 0x81, 0xd2, 0x86, 0x55, 0x96, 0xb4, 0x8e, 0x7c, 0xc3, 0x45, + 0xc4, 0x6e, 0x8e, 0xeb, 0x1d, 0xf5, 0x96, 0x52, 0x35, 0x78, 0x69, 0x23, 0x44, 0xe5, 0x3b, 0x70, + 0x3a, 0xb2, 0x43, 0x9a, 0x61, 0xcb, 0x22, 0x77, 0x62, 0x40, 0x49, 0x10, 0xce, 0x1c, 0x86, 0x10, + 0xd1, 0x3c, 0x09, 0x86, 0x70, 0x19, 0x0c, 0xe1, 0xca, 0x9f, 0xc3, 0xd9, 0x08, 0xa2, 0x13, 0xb1, + 0xe8, 0x5e, 0xac, 0x72, 0xbb, 0x34, 0x49, 0x6b, 0xac, 0x84, 0xfb, 0x1f, 0x09, 0xd6, 0xd2, 0x18, + 0x5e, 0x13, 0x71, 0xfc, 0x51, 0xc6, 0x45, 0xbd, 0xdb, 0xd3, 0x99, 0xf5, 0x1b, 0x41, 0x6b, 0xf7, + 0xa1, 0x9e, 0xe6, 0xcf, 0xe4, 0x28, 0xe5, 0x67, 0x19, 0xa5, 0x9f, 0xe5, 0x43, 0xc8, 0x7b, 0xc3, + 0xf3, 0x1c, 0xe3, 0x70, 0x44, 0x42, 0xfe, 0x8d, 0xa3, 0x59, 0x2d, 0x1f, 0x97, 0x61, 0xae, 0xbd, + 0x39, 0x46, 0x3c, 0xb0, 0x23, 0x15, 0x9b, 0xf9, 0x34, 0x8a, 0xcd, 0x30, 0x4c, 0xfd, 0xd6, 0x74, + 0xfa, 0x7e, 0x6b, 0x01, 0xd0, 0x9f, 0xe5, 0xa0, 0x12, 0x1d, 0x22, 0xb4, 0x0b, 0xa0, 0xf9, 0x96, + 0xf3, 0x89, 0x72, 0x71, 0xaa, 0x6e, 0x2a, 0x21, 0x41, 0xf4, 0x1e, 0xe4, 0x7b, 0xf6, 0x88, 0x8f, + 0x5a, 0xca, 0x61, 0x70, 0xd3, 0x1e, 0xb1, 0x8c, 0x42, 0xd8, 0xc8, 0x9e, 0x8a, 0x9d, 0xed, 0x67, + 0x67, 0xc9, 0x67, 0xf4, 0x3b, 0x93, 0xe1, 0xcc, 0xe8, 0x09, 0x54, 0x5e, 0x3a, 0x86, 0xa7, 0x1d, + 0x0e, 0xb0, 0x3a, 0xd0, 0x4e, 0xb0, 0xc3, 0xb3, 0xe4, 0x14, 0x89, 0xac, 0x2c, 0x04, 0x9f, 0x12, + 0x39, 0xf9, 0x0f, 0xa1, 0x20, 0x2c, 0x9a, 0xb0, 0x22, 0xec, 0xc3, 0xfa, 0x88, 0xb0, 0xa9, 0xf4, + 0xae, 0x9c, 0xa9, 0x99, 0x96, 0xea, 0x62, 0xb2, 0x8c, 0x8b, 0xdf, 0x05, 0x4c, 0x48, 0xd1, 0x6b, + 0x54, 0xba, 0x69, 0x39, 0xb8, 0xad, 0x99, 0x56, 0x97, 0x89, 0xca, 0x2f, 0xa0, 0x14, 0xea, 0xe0, + 0x04, 0x13, 0x5a, 0xb0, 0x2a, 0x8e, 0xe2, 0x5d, 0xec, 0xf1, 0xe5, 0x65, 0xaa, 0xc6, 0x57, 0xb8, + 0x5c, 0x17, 0x7b, 0xec, 0xfa, 0xc4, 0x3d, 0x38, 0xab, 0x60, 0xcb, 0xc6, 0xa6, 0x3f, 0x9e, 0x4f, + 0xad, 0xfe, 0x0c, 0x19, 0xfc, 0x2d, 0xa8, 0xa7, 0xc9, 0xb3, 0xfc, 0x70, 0xed, 0x12, 0x14, 0xc4, + 0x6f, 0x69, 0xd1, 0x12, 0xe4, 0xf7, 0x9b, 0x9d, 0xea, 0x1c, 0x79, 0x38, 0xd8, 0xe9, 0x54, 0x25, + 0x54, 0x80, 0xf9, 0x6e, 0x73, 0xbf, 0x53, 0xcd, 0x5d, 0x1b, 0x42, 0x35, 0xfe, 0x43, 0x52, 0xb4, + 0x0e, 0xa7, 0x3a, 0xca, 0x5e, 0xa7, 0xf1, 0xb8, 0xb1, 0xdf, 0xda, 0x6b, 0xab, 0x1d, 0xa5, 0xf5, + 0x71, 0x63, 0x7f, 0xb7, 0x3a, 0x87, 0x36, 0xe1, 0x7c, 0xf8, 0xc3, 0x93, 0xbd, 0xee, 0xbe, 0xba, + 0xbf, 0xa7, 0x36, 0xf7, 0xda, 0xfb, 0x8d, 0x56, 0x7b, 0x57, 0xa9, 0x4a, 0xe8, 0x3c, 0x9c, 0x0d, + 0xb3, 0x3c, 0x6c, 0xed, 0xb4, 0x94, 0xdd, 0x26, 0x79, 0x6e, 0x3c, 0xad, 0xe6, 0xae, 0xdd, 0x84, + 0x72, 0xe4, 0x77, 0x9f, 0xc4, 0xa4, 0xce, 0xde, 0x4e, 0x75, 0x0e, 0x95, 0xa1, 0x18, 0xd6, 0x53, + 0x80, 0xf9, 0xf6, 0xde, 0xce, 0x6e, 0x35, 0x77, 0xed, 0x0e, 0xac, 0xc4, 0xee, 0xf7, 0xa2, 0x55, + 0x28, 0x77, 0x1b, 0xed, 0x9d, 0x87, 0x7b, 0x9f, 0xaa, 0xca, 0x6e, 0x63, 0xe7, 0xb3, 0xea, 0x1c, + 0x5a, 0x83, 0xaa, 0x20, 0xb5, 0xf7, 0xf6, 0x19, 0x55, 0xba, 0xf6, 0x3c, 0x36, 0xc7, 0x30, 0x3a, + 0x0d, 0xab, 0x7e, 0x33, 0x6a, 0x53, 0xd9, 0x6d, 0xec, 0xef, 0x92, 0xd6, 0x23, 0x64, 0xe5, 0xa0, + 0xdd, 0x6e, 0xb5, 0x1f, 0x57, 0x25, 0xa2, 0x35, 0x20, 0xef, 0x7e, 0xda, 0x22, 0xcc, 0xb9, 0x28, + 0xf3, 0x41, 0xfb, 0x07, 0xed, 0xbd, 0x4f, 0xda, 0xd5, 0xfc, 0xf6, 0x2f, 0x56, 0xa1, 0x22, 0x0a, + 0x3d, 0xec, 0xd0, 0x5b, 0x2d, 0x1d, 0x58, 0x12, 0xbf, 0xcd, 0x4e, 0xc9, 0xd0, 0xd1, 0x5f, 0x94, + 0xd7, 0x37, 0xc7, 0x70, 0xf0, 0x7a, 0x7b, 0x0e, 0x1d, 0xd2, 0xfa, 0x37, 0x74, 0xdf, 0xfa, 0x52, + 0x6a, 0xb5, 0x99, 0xb8, 0xe2, 0x5d, 0xbf, 0x3c, 0x91, 0xcf, 0x6f, 0x03, 0x93, 0x12, 0x37, 0xfc, + 0xcb, 0x23, 0x74, 0x39, 0xad, 0x36, 0x4d, 0xf9, 0x69, 0x53, 0xfd, 0xca, 0x64, 0x46, 0xbf, 0x99, + 0xe7, 0x50, 0x8d, 0xff, 0x0a, 0x09, 0xa5, 0x40, 0xa7, 0x19, 0x3f, 0x75, 0xaa, 0x5f, 0x9b, 0x86, + 0x35, 0xdc, 0x58, 0xe2, 0xf7, 0x3a, 0x57, 0xa7, 0xf9, 0x5d, 0x43, 0x66, 0x63, 0x59, 0x3f, 0x81, + 0x60, 0x0e, 0x8c, 0x5e, 0x91, 0x46, 0xa9, 0x3f, 0x8e, 0x49, 0xb9, 0x89, 0x9f, 0xe6, 0xc0, 0xf4, + 0xdb, 0xd6, 0xf2, 0x1c, 0x3a, 0x86, 0x95, 0xd8, 0xf5, 0x04, 0x94, 0x22, 0x9e, 0x7e, 0x0f, 0xa3, + 0x7e, 0x75, 0x0a, 0xce, 0x68, 0x44, 0x84, 0xaf, 0x23, 0xa4, 0x47, 0x44, 0xca, 0x65, 0x87, 0xf4, + 0x88, 0x48, 0xbd, 0xd9, 0x40, 0x83, 0x3b, 0x72, 0x0d, 0x21, 0x2d, 0xb8, 0xd3, 0x2e, 0x3f, 0xd4, + 0x2f, 0x4f, 0xe4, 0x0b, 0x3b, 0x2d, 0x76, 0x29, 0x21, 0xcd, 0x69, 0xe9, 0x97, 0x1e, 0xea, 0x57, + 0xa7, 0xe0, 0x8c, 0x47, 0x41, 0x70, 0xc4, 0x99, 0x15, 0x05, 0x89, 0x03, 0xf9, 0xac, 0x28, 0x48, + 0x9e, 0x96, 0xf2, 0x28, 0x88, 0x1d, 0x4d, 0x5e, 0x99, 0xe2, 0x28, 0x25, 0x3b, 0x0a, 0xd2, 0x0f, + 0x5d, 0xe4, 0x39, 0xf4, 0x53, 0x09, 0x6a, 0x59, 0xc7, 0x14, 0x28, 0xa5, 0xbe, 0x9b, 0x70, 0xb2, + 0x52, 0xdf, 0x9e, 0x45, 0xc4, 0xb7, 0xe2, 0x4b, 0x40, 0xc9, 0x75, 0x0f, 0x7d, 0x27, 0x6d, 0x64, + 0x32, 0x56, 0xd7, 0xfa, 0x7b, 0xd3, 0x31, 0xfb, 0x4d, 0x76, 0xa1, 0x20, 0x0e, 0x46, 0x50, 0x4a, + 0x96, 0x8e, 0x1d, 0xcb, 0xd4, 0xe5, 0x71, 0x2c, 0xbe, 0xd2, 0xc7, 0x30, 0x4f, 0xa8, 0xe8, 0x7c, + 0x3a, 0xb7, 0x50, 0xb6, 0x91, 0xf5, 0xd9, 0x57, 0xf4, 0x0c, 0x16, 0xd9, 0x49, 0x00, 0x4a, 0x41, + 0x1e, 0x22, 0xe7, 0x15, 0xf5, 0x0b, 0xd9, 0x0c, 0xbe, 0xba, 0x2f, 0xd8, 0xbf, 0xed, 0xe0, 0x20, + 0x3f, 0x7a, 0x37, 0xfd, 0x77, 0xd0, 0xd1, 0x33, 0x85, 0xfa, 0xc5, 0x09, 0x5c, 0xe1, 0x49, 0x11, + 0xab, 0x7a, 0x2f, 0x4f, 0xdc, 0xba, 0x64, 0x4f, 0x8a, 0xf4, 0xcd, 0x11, 0x0b, 0x92, 0xe4, 0xe6, + 0x29, 0x2d, 0x48, 0x32, 0xb7, 0xac, 0x69, 0x41, 0x92, 0xbd, 0x1f, 0x93, 0xe7, 0x90, 0x07, 0xa7, + 0x52, 0xa0, 0x32, 0xf4, 0x5e, 0x56, 0x90, 0xa7, 0xe1, 0x76, 0xf5, 0xeb, 0x53, 0x72, 0x87, 0x07, + 0x9f, 0x4f, 0xfa, 0xb7, 0xb3, 0xf1, 0xa3, 0xcc, 0xc1, 0x8f, 0x4f, 0xf1, 0xed, 0x7f, 0xc9, 0xc3, + 0x32, 0x83, 0x41, 0x79, 0x05, 0xf3, 0x19, 0x40, 0x70, 0x02, 0x81, 0xde, 0x49, 0xf7, 0x49, 0xe4, + 0x94, 0xa6, 0xfe, 0xee, 0x78, 0xa6, 0x70, 0xa0, 0x85, 0xd0, 0xfc, 0xb4, 0x40, 0x4b, 0x1e, 0x5a, + 0xa4, 0x05, 0x5a, 0xca, 0x91, 0x80, 0x3c, 0x87, 0x3e, 0x86, 0xa2, 0x0f, 0x1b, 0xa3, 0x34, 0xd8, + 0x39, 0x86, 0x8b, 0xd7, 0xdf, 0x19, 0xcb, 0x13, 0xb6, 0x3a, 0x84, 0x09, 0xa7, 0x59, 0x9d, 0xc4, + 0x9e, 0xd3, 0xac, 0x4e, 0x03, 0x96, 0x03, 0x9f, 0x30, 0xe4, 0x28, 0xd3, 0x27, 0x11, 0xe0, 0x2e, + 0xd3, 0x27, 0x51, 0xf8, 0x49, 0x9e, 0x7b, 0x78, 0xe9, 0x97, 0x5f, 0x6d, 0x48, 0xff, 0xf4, 0xd5, + 0xc6, 0xdc, 0x4f, 0xbe, 0xde, 0x90, 0x7e, 0xf9, 0xf5, 0x86, 0xf4, 0x8f, 0x5f, 0x6f, 0x48, 0xff, + 0xfa, 0xf5, 0x86, 0xf4, 0xa7, 0xff, 0xb6, 0x31, 0xf7, 0xc3, 0x82, 0x90, 0x3e, 0x5c, 0xa4, 0xff, + 0x7c, 0xe7, 0x83, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0xaa, 0xb3, 0xf4, 0xf2, 0x42, 0x49, 0x00, + 0x00, } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.proto similarity index 99% rename from vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto rename to vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.proto index c2df37b804..4564de5e3c 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/api.proto +++ b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.proto @@ -637,6 +637,9 @@ message WindowsContainerSecurityContext { // exist in the container image and be resolved there by the runtime; // otherwise, the runtime MUST return error. string run_as_username = 1; + + // The contents of the GMSA credential spec to use to run this container. + string credential_spec = 2; } // WindowsContainerConfig contains platform-specific configuration for diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/constants.go b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/constants.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/constants.go rename to vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/constants.go diff --git a/vendor/k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go b/vendor/k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go index acfcc8f8ef..f9baf7a012 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go +++ b/vendor/k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go @@ -21,15 +21,17 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer" ) -// Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered. -// NOTE: If you are copying this file to start a new api group, STOP! Copy the -// extensions group instead. This Scheme is special and should appear ONLY in -// the api group, unless you really know what you're doing. -// TODO(lavalamp): make the above error impossible. -var Scheme = runtime.NewScheme() - -// Codecs provides access to encoding and decoding for the scheme -var Codecs = serializer.NewCodecFactory(Scheme) - -// ParameterCodec handles versioning of objects that are converted to query parameters. -var ParameterCodec = runtime.NewParameterCodec(Scheme) +var ( + // Scheme is the default instance of runtime.Scheme to which types in the Kubernetes API are already registered. + // NOTE: If you are copying this file to start a new api group, STOP! Copy the + // extensions group instead. This Scheme is special and should appear ONLY in + // the api group, unless you really know what you're doing. + // TODO(lavalamp): make the above error impossible. + Scheme = runtime.NewScheme() + + // Codecs provides access to encoding and decoding for the scheme + Codecs = serializer.NewCodecFactory(Scheme) + + // ParameterCodec handles versioning of objects that are converted to query parameters. + ParameterCodec = runtime.NewParameterCodec(Scheme) +) diff --git a/vendor/k8s.io/kubernetes/pkg/features/BUILD b/vendor/k8s.io/kubernetes/pkg/features/BUILD new file mode 100644 index 0000000000..37a6372a87 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/features/BUILD @@ -0,0 +1,32 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = ["kube_features.go"], + importpath = "k8s.io/kubernetes/pkg/features", + deps = [ + "//staging/src/k8s.io/apiextensions-apiserver/pkg/features:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/features:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/component-base/featuregate:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/features/OWNERS b/vendor/k8s.io/kubernetes/pkg/features/OWNERS new file mode 100644 index 0000000000..05b08249ae --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/features/OWNERS @@ -0,0 +1,4 @@ +# See the OWNERS docs at https://go.k8s.io/owners + +approvers: +- feature-approvers diff --git a/vendor/k8s.io/kubernetes/pkg/features/kube_features.go b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go new file mode 100644 index 0000000000..6e1991a033 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go @@ -0,0 +1,585 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package features + +import ( + apiextensionsfeatures "k8s.io/apiextensions-apiserver/pkg/features" + "k8s.io/apimachinery/pkg/util/runtime" + genericfeatures "k8s.io/apiserver/pkg/features" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/component-base/featuregate" +) + +const ( + // Every feature gate should add method here following this template: + // + // // owner: @username + // // alpha: v1.X + // MyFeature featuregate.Feature = "MyFeature" + + // owner: @tallclair + // beta: v1.4 + AppArmor featuregate.Feature = "AppArmor" + + // owner: @mtaufen + // alpha: v1.4 + // beta: v1.11 + DynamicKubeletConfig featuregate.Feature = "DynamicKubeletConfig" + + // owner: @pweil- + // alpha: v1.5 + // + // Default userns=host for containers that are using other host namespaces, host mounts, the pod + // contains a privileged container, or specific non-namespaced capabilities (MKNOD, SYS_MODULE, + // SYS_TIME). This should only be enabled if user namespace remapping is enabled in the docker daemon. + ExperimentalHostUserNamespaceDefaultingGate featuregate.Feature = "ExperimentalHostUserNamespaceDefaulting" + + // owner: @vishh + // alpha: v1.5 + // + // DEPRECATED - This feature is deprecated by Pod Priority and Preemption as of Kubernetes 1.13. + // Ensures guaranteed scheduling of pods marked with a special pod annotation `scheduler.alpha.kubernetes.io/critical-pod` + // and also prevents them from being evicted from a node. + // Note: This feature is not supported for `BestEffort` pods. + ExperimentalCriticalPodAnnotation featuregate.Feature = "ExperimentalCriticalPodAnnotation" + + // owner: @jiayingz + // beta: v1.10 + // + // Enables support for Device Plugins + DevicePlugins featuregate.Feature = "DevicePlugins" + + // owner: @Huang-Wei + // beta: v1.13 + // + // Changes the logic behind evicting Pods from not ready Nodes + // to take advantage of NoExecute Taints and Tolerations. + TaintBasedEvictions featuregate.Feature = "TaintBasedEvictions" + + // owner: @mikedanese + // alpha: v1.7 + // beta: v1.12 + // + // Gets a server certificate for the kubelet from the Certificate Signing + // Request API instead of generating one self signed and auto rotates the + // certificate as expiration approaches. + RotateKubeletServerCertificate featuregate.Feature = "RotateKubeletServerCertificate" + + // owner: @mikedanese + // beta: v1.8 + // + // Automatically renews the client certificate used for communicating with + // the API server as the certificate approaches expiration. + RotateKubeletClientCertificate featuregate.Feature = "RotateKubeletClientCertificate" + + // owner: @msau42 + // alpha: v1.7 + // beta: v1.10 + // ga: v1.14 + // + // A new volume type that supports local disks on a node. + PersistentLocalVolumes featuregate.Feature = "PersistentLocalVolumes" + + // owner: @jinxu + // beta: v1.10 + // + // New local storage types to support local storage capacity isolation + LocalStorageCapacityIsolation featuregate.Feature = "LocalStorageCapacityIsolation" + + // owner: @gnufied + // beta: v1.11 + // Ability to Expand persistent volumes + ExpandPersistentVolumes featuregate.Feature = "ExpandPersistentVolumes" + + // owner: @mlmhl + // beta: v1.15 + // Ability to expand persistent volumes' file system without unmounting volumes. + ExpandInUsePersistentVolumes featuregate.Feature = "ExpandInUsePersistentVolumes" + + // owner: @gnufied + // alpha: v1.14 + // Ability to expand CSI volumes + ExpandCSIVolumes featuregate.Feature = "ExpandCSIVolumes" + + // owner: @verb + // alpha: v1.10 + // + // Allows running a "debug container" in a pod namespaces to troubleshoot a running pod. + DebugContainers featuregate.Feature = "DebugContainers" + + // owner: @verb + // beta: v1.12 + // + // Allows all containers in a pod to share a process namespace. + PodShareProcessNamespace featuregate.Feature = "PodShareProcessNamespace" + + // owner: @bsalamat + // alpha: v1.8 + // beta: v1.11 + // GA: v1.14 + // + // Add priority to pods. Priority affects scheduling and preemption of pods. + PodPriority featuregate.Feature = "PodPriority" + + // owner: @k82cn + // beta: v1.12 + // + // Taint nodes based on their condition status for 'NetworkUnavailable', + // 'MemoryPressure', 'PIDPressure' and 'DiskPressure'. + TaintNodesByCondition featuregate.Feature = "TaintNodesByCondition" + + // owner: @sjenning + // alpha: v1.11 + // + // Allows resource reservations at the QoS level preventing pods at lower QoS levels from + // bursting into resources requested at higher QoS levels (memory only for now) + QOSReserved featuregate.Feature = "QOSReserved" + + // owner: @ConnorDoyle + // alpha: v1.8 + // beta: v1.10 + // + // Alternative container-level CPU affinity policies. + CPUManager featuregate.Feature = "CPUManager" + + // owner: @szuecs + // alpha: v1.12 + // + // Enable nodes to change CPUCFSQuotaPeriod + CPUCFSQuotaPeriod featuregate.Feature = "CustomCPUCFSQuotaPeriod" + + // owner: @derekwaynecarr + // beta: v1.10 + // GA: v1.14 + // + // Enable pods to consume pre-allocated huge pages of varying page sizes + HugePages featuregate.Feature = "HugePages" + + // owner: @sjenning + // beta: v1.11 + // + // Enable pods to set sysctls on a pod + Sysctls featuregate.Feature = "Sysctls" + + // owner @brendandburns + // alpha: v1.9 + // + // Enable nodes to exclude themselves from service load balancers + ServiceNodeExclusion featuregate.Feature = "ServiceNodeExclusion" + + // owner: @jsafrane + // alpha: v1.9 + // + // Enable running mount utilities in containers. + MountContainers featuregate.Feature = "MountContainers" + + // owner: @msau42 + // GA: v1.13 + // + // Extend the default scheduler to be aware of PV topology and handle PV binding + VolumeScheduling featuregate.Feature = "VolumeScheduling" + + // owner: @vladimirvivien + // GA: v1.13 + // + // Enable mount/attachment of Container Storage Interface (CSI) backed PVs + CSIPersistentVolume featuregate.Feature = "CSIPersistentVolume" + + // owner: @saad-ali + // alpha: v1.12 + // beta: v1.14 + // Enable all logic related to the CSIDriver API object in storage.k8s.io + CSIDriverRegistry featuregate.Feature = "CSIDriverRegistry" + + // owner: @verult + // alpha: v1.12 + // beta: v1.14 + // Enable all logic related to the CSINode API object in storage.k8s.io + CSINodeInfo featuregate.Feature = "CSINodeInfo" + + // owner @MrHohn + // GA: v1.14 + // + // Support configurable pod DNS parameters. + CustomPodDNS featuregate.Feature = "CustomPodDNS" + + // owner: @screeley44 + // alpha: v1.9 + // beta: v1.13 + // + // Enable Block volume support in containers. + BlockVolume featuregate.Feature = "BlockVolume" + + // owner: @pospispa + // GA: v1.11 + // + // Postpone deletion of a PV or a PVC when they are being used + StorageObjectInUseProtection featuregate.Feature = "StorageObjectInUseProtection" + + // owner: @aveshagarwal + // alpha: v1.9 + // + // Enable resource limits priority function + ResourceLimitsPriorityFunction featuregate.Feature = "ResourceLimitsPriorityFunction" + + // owner: @m1093782566 + // GA: v1.11 + // + // Implement IPVS-based in-cluster service load balancing + SupportIPVSProxyMode featuregate.Feature = "SupportIPVSProxyMode" + + // owner: @dims, @derekwaynecarr + // alpha: v1.10 + // beta: v1.14 + // + // Implement support for limiting pids in pods + SupportPodPidsLimit featuregate.Feature = "SupportPodPidsLimit" + + // owner: @feiskyer + // alpha: v1.10 + // + // Enable Hyper-V containers on Windows + HyperVContainer featuregate.Feature = "HyperVContainer" + + // owner: @k82cn + // beta: v1.12 + // + // Schedule DaemonSet Pods by default scheduler instead of DaemonSet controller + ScheduleDaemonSetPods featuregate.Feature = "ScheduleDaemonSetPods" + + // owner: @mikedanese + // beta: v1.12 + // + // Implement TokenRequest endpoint on service account resources. + TokenRequest featuregate.Feature = "TokenRequest" + + // owner: @mikedanese + // beta: v1.12 + // + // Enable ServiceAccountTokenVolumeProjection support in ProjectedVolumes. + TokenRequestProjection featuregate.Feature = "TokenRequestProjection" + + // owner: @mikedanese + // alpha: v1.13 + // + // Migrate ServiceAccount volumes to use a projected volume consisting of a + // ServiceAccountTokenVolumeProjection. This feature adds new required flags + // to the API server. + BoundServiceAccountTokenVolume featuregate.Feature = "BoundServiceAccountTokenVolume" + + // owner: @Random-Liu + // beta: v1.11 + // + // Enable container log rotation for cri container runtime + CRIContainerLogRotation featuregate.Feature = "CRIContainerLogRotation" + + // owner: @krmayankk + // beta: v1.14 + // + // Enables control over the primary group ID of containers' init processes. + RunAsGroup featuregate.Feature = "RunAsGroup" + + // owner: @saad-ali + // ga + // + // Allow mounting a subpath of a volume in a container + // Do not remove this feature gate even though it's GA + VolumeSubpath featuregate.Feature = "VolumeSubpath" + + // owner: @gnufied + // beta : v1.12 + // + // Add support for volume plugins to report node specific + // volume limits + AttachVolumeLimit featuregate.Feature = "AttachVolumeLimit" + + // owner: @ravig + // alpha: v1.11 + // + // Include volume count on node to be considered for balanced resource allocation while scheduling. + // A node which has closer cpu,memory utilization and volume count is favoured by scheduler + // while making decisions. + BalanceAttachedNodeVolumes featuregate.Feature = "BalanceAttachedNodeVolumes" + + // owner @freehan + // GA: v1.14 + // + // Allow user to specify additional conditions to be evaluated for Pod readiness. + PodReadinessGates featuregate.Feature = "PodReadinessGates" + + // owner: @kevtaylor + // beta: v1.15 + // + // Allow subpath environment variable substitution + // Only applicable if the VolumeSubpath feature is also enabled + VolumeSubpathEnvExpansion featuregate.Feature = "VolumeSubpathEnvExpansion" + + // owner: @vikaschoudhary16 + // GA: v1.13 + // + // + // Enable probe based plugin watcher utility for discovering Kubelet plugins + KubeletPluginsWatcher featuregate.Feature = "KubeletPluginsWatcher" + + // owner: @vikaschoudhary16 + // beta: v1.12 + // + // + // Enable resource quota scope selectors + ResourceQuotaScopeSelectors featuregate.Feature = "ResourceQuotaScopeSelectors" + + // owner: @vladimirvivien + // alpha: v1.11 + // beta: v1.14 + // + // Enables CSI to use raw block storage volumes + CSIBlockVolume featuregate.Feature = "CSIBlockVolume" + + // owner: @vladimirvivien + // alpha: v1.14 + // + // Enables CSI Inline volumes support for pods + CSIInlineVolume featuregate.Feature = "CSIInlineVolume" + + // owner: @tallclair + // alpha: v1.12 + // beta: v1.14 + // + // Enables RuntimeClass, for selecting between multiple runtimes to run a pod. + RuntimeClass featuregate.Feature = "RuntimeClass" + + // owner: @mtaufen + // alpha: v1.12 + // beta: v1.14 + // + // Kubelet uses the new Lease API to report node heartbeats, + // (Kube) Node Lifecycle Controller uses these heartbeats as a node health signal. + NodeLease featuregate.Feature = "NodeLease" + + // owner: @janosi + // alpha: v1.12 + // + // Enables SCTP as new protocol for Service ports, NetworkPolicy, and ContainerPort in Pod/Containers definition + SCTPSupport featuregate.Feature = "SCTPSupport" + + // owner: @xing-yang + // alpha: v1.12 + // + // Enable volume snapshot data source support. + VolumeSnapshotDataSource featuregate.Feature = "VolumeSnapshotDataSource" + + // owner: @jessfraz + // alpha: v1.12 + // + // Enables control over ProcMountType for containers. + ProcMountType featuregate.Feature = "ProcMountType" + + // owner: @janetkuo + // alpha: v1.12 + // + // Allow TTL controller to clean up Pods and Jobs after they finish. + TTLAfterFinished featuregate.Feature = "TTLAfterFinished" + + // owner: @dashpole + // alpha: v1.13 + // beta: v1.15 + // + // Enables the kubelet's pod resources grpc endpoint + KubeletPodResources featuregate.Feature = "KubeletPodResources" + + // owner: @davidz627 + // alpha: v1.14 + // + // Enables the in-tree storage to CSI Plugin migration feature. + CSIMigration featuregate.Feature = "CSIMigration" + + // owner: @davidz627 + // alpha: v1.14 + // + // Enables the GCE PD in-tree driver to GCE CSI Driver migration feature. + CSIMigrationGCE featuregate.Feature = "CSIMigrationGCE" + + // owner: @leakingtapan + // alpha: v1.14 + // + // Enables the AWS EBS in-tree driver to AWS EBS CSI Driver migration feature. + CSIMigrationAWS featuregate.Feature = "CSIMigrationAWS" + + // owner: @andyzhangx + // alpha: v1.15 + // + // Enables the Azure Disk in-tree driver to Azure Disk Driver migration feature. + CSIMigrationAzureDisk featuregate.Feature = "CSIMigrationAzureDisk" + + // owner: @andyzhangx + // alpha: v1.15 + // + // Enables the Azure File in-tree driver to Azure File Driver migration feature. + CSIMigrationAzureFile featuregate.Feature = "CSIMigrationAzureFile" + + // owner: @RobertKrawitz + // beta: v1.15 + // + // Implement support for limiting pids in nodes + SupportNodePidsLimit featuregate.Feature = "SupportNodePidsLimit" + + // owner: @wk8 + // alpha: v1.14 + // + // Enables GMSA support for Windows workloads. + WindowsGMSA featuregate.Feature = "WindowsGMSA" + + // owner: @adisky + // alpha: v1.14 + // + // Enables the OpenStack Cinder in-tree driver to OpenStack Cinder CSI Driver migration feature. + CSIMigrationOpenStack featuregate.Feature = "CSIMigrationOpenStack" + + // owner: @verult + // GA: v1.13 + // + // Enables the regional PD feature on GCE. + deprecatedGCERegionalPersistentDisk featuregate.Feature = "GCERegionalPersistentDisk" + + // owner: @MrHohn + // alpha: v1.15 + // + // Enables Finalizer Protection for Service LoadBalancers. + ServiceLoadBalancerFinalizer featuregate.Feature = "ServiceLoadBalancerFinalizer" + + // owner: @RobertKrawitz + // alpha: v1.15 + // + // Allow use of filesystems for ephemeral storage monitoring. + // Only applies if LocalStorageCapacityIsolation is set. + LocalStorageCapacityIsolationFSQuotaMonitoring featuregate.Feature = "LocalStorageCapacityIsolationFSQuotaMonitoring" + + // owner: @denkensk + // alpha: v1.15 + // + // Enables NonPreempting option for priorityClass and pod. + NonPreemptingPriority featuregate.Feature = "NonPreemptingPriority" + + // owner: @j-griffith + // alpha: v1.15 + // + // Enable support for specifying an existing PVC as a DataSource + VolumePVCDataSource featuregate.Feature = "VolumePVCDataSource" +) + +func init() { + runtime.Must(utilfeature.DefaultMutableFeatureGate.Add(defaultKubernetesFeatureGates)) +} + +// defaultKubernetesFeatureGates consists of all known Kubernetes-specific feature keys. +// To add a new feature, define a key for it above and add it here. The features will be +// available throughout Kubernetes binaries. +var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{ + AppArmor: {Default: true, PreRelease: featuregate.Beta}, + DynamicKubeletConfig: {Default: true, PreRelease: featuregate.Beta}, + ExperimentalHostUserNamespaceDefaultingGate: {Default: false, PreRelease: featuregate.Beta}, + ExperimentalCriticalPodAnnotation: {Default: false, PreRelease: featuregate.Alpha}, + DevicePlugins: {Default: true, PreRelease: featuregate.Beta}, + TaintBasedEvictions: {Default: true, PreRelease: featuregate.Beta}, + RotateKubeletServerCertificate: {Default: true, PreRelease: featuregate.Beta}, + RotateKubeletClientCertificate: {Default: true, PreRelease: featuregate.Beta}, + PersistentLocalVolumes: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.17 + LocalStorageCapacityIsolation: {Default: true, PreRelease: featuregate.Beta}, + HugePages: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.16 + Sysctls: {Default: true, PreRelease: featuregate.Beta}, + DebugContainers: {Default: false, PreRelease: featuregate.Alpha}, + PodShareProcessNamespace: {Default: true, PreRelease: featuregate.Beta}, + PodPriority: {Default: true, PreRelease: featuregate.GA}, + TaintNodesByCondition: {Default: true, PreRelease: featuregate.Beta}, + QOSReserved: {Default: false, PreRelease: featuregate.Alpha}, + ExpandPersistentVolumes: {Default: true, PreRelease: featuregate.Beta}, + ExpandInUsePersistentVolumes: {Default: true, PreRelease: featuregate.Beta}, + ExpandCSIVolumes: {Default: false, PreRelease: featuregate.Alpha}, + AttachVolumeLimit: {Default: true, PreRelease: featuregate.Beta}, + CPUManager: {Default: true, PreRelease: featuregate.Beta}, + CPUCFSQuotaPeriod: {Default: false, PreRelease: featuregate.Alpha}, + ServiceNodeExclusion: {Default: false, PreRelease: featuregate.Alpha}, + MountContainers: {Default: false, PreRelease: featuregate.Alpha}, + VolumeScheduling: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.16 + CSIPersistentVolume: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.16 + CSIDriverRegistry: {Default: true, PreRelease: featuregate.Beta}, + CSINodeInfo: {Default: true, PreRelease: featuregate.Beta}, + CustomPodDNS: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.16 + BlockVolume: {Default: true, PreRelease: featuregate.Beta}, + StorageObjectInUseProtection: {Default: true, PreRelease: featuregate.GA}, + ResourceLimitsPriorityFunction: {Default: false, PreRelease: featuregate.Alpha}, + SupportIPVSProxyMode: {Default: true, PreRelease: featuregate.GA}, + SupportPodPidsLimit: {Default: true, PreRelease: featuregate.Beta}, + SupportNodePidsLimit: {Default: true, PreRelease: featuregate.Beta}, + HyperVContainer: {Default: false, PreRelease: featuregate.Alpha}, + ScheduleDaemonSetPods: {Default: true, PreRelease: featuregate.Beta}, + TokenRequest: {Default: true, PreRelease: featuregate.Beta}, + TokenRequestProjection: {Default: true, PreRelease: featuregate.Beta}, + BoundServiceAccountTokenVolume: {Default: false, PreRelease: featuregate.Alpha}, + CRIContainerLogRotation: {Default: true, PreRelease: featuregate.Beta}, + deprecatedGCERegionalPersistentDisk: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.17 + CSIMigration: {Default: false, PreRelease: featuregate.Alpha}, + CSIMigrationGCE: {Default: false, PreRelease: featuregate.Alpha}, + CSIMigrationAWS: {Default: false, PreRelease: featuregate.Alpha}, + CSIMigrationAzureDisk: {Default: false, PreRelease: featuregate.Alpha}, + CSIMigrationAzureFile: {Default: false, PreRelease: featuregate.Alpha}, + RunAsGroup: {Default: true, PreRelease: featuregate.Beta}, + CSIMigrationOpenStack: {Default: false, PreRelease: featuregate.Alpha}, + VolumeSubpath: {Default: true, PreRelease: featuregate.GA}, + BalanceAttachedNodeVolumes: {Default: false, PreRelease: featuregate.Alpha}, + PodReadinessGates: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.16 + VolumeSubpathEnvExpansion: {Default: true, PreRelease: featuregate.Beta}, + KubeletPluginsWatcher: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.16 + ResourceQuotaScopeSelectors: {Default: true, PreRelease: featuregate.Beta}, + CSIBlockVolume: {Default: true, PreRelease: featuregate.Beta}, + CSIInlineVolume: {Default: false, PreRelease: featuregate.Alpha}, + RuntimeClass: {Default: true, PreRelease: featuregate.Beta}, + NodeLease: {Default: true, PreRelease: featuregate.Beta}, + SCTPSupport: {Default: false, PreRelease: featuregate.Alpha}, + VolumeSnapshotDataSource: {Default: false, PreRelease: featuregate.Alpha}, + ProcMountType: {Default: false, PreRelease: featuregate.Alpha}, + TTLAfterFinished: {Default: false, PreRelease: featuregate.Alpha}, + KubeletPodResources: {Default: true, PreRelease: featuregate.Beta}, + WindowsGMSA: {Default: false, PreRelease: featuregate.Alpha}, + ServiceLoadBalancerFinalizer: {Default: false, PreRelease: featuregate.Alpha}, + LocalStorageCapacityIsolationFSQuotaMonitoring: {Default: false, PreRelease: featuregate.Alpha}, + NonPreemptingPriority: {Default: false, PreRelease: featuregate.Alpha}, + VolumePVCDataSource: {Default: false, PreRelease: featuregate.Alpha}, + + // inherited features from generic apiserver, relisted here to get a conflict if it is changed + // unintentionally on either side: + genericfeatures.StreamingProxyRedirects: {Default: true, PreRelease: featuregate.Beta}, + genericfeatures.ValidateProxyRedirects: {Default: true, PreRelease: featuregate.Beta}, + genericfeatures.AdvancedAuditing: {Default: true, PreRelease: featuregate.GA}, + genericfeatures.DynamicAuditing: {Default: false, PreRelease: featuregate.Alpha}, + genericfeatures.APIResponseCompression: {Default: false, PreRelease: featuregate.Alpha}, + genericfeatures.APIListChunking: {Default: true, PreRelease: featuregate.Beta}, + genericfeatures.DryRun: {Default: true, PreRelease: featuregate.Beta}, + genericfeatures.ServerSideApply: {Default: false, PreRelease: featuregate.Alpha}, + genericfeatures.RequestManagement: {Default: false, PreRelease: featuregate.Alpha}, + + // inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed + // unintentionally on either side: + apiextensionsfeatures.CustomResourceValidation: {Default: true, PreRelease: featuregate.Beta}, + apiextensionsfeatures.CustomResourceSubresources: {Default: true, PreRelease: featuregate.Beta}, + apiextensionsfeatures.CustomResourceWebhookConversion: {Default: true, PreRelease: featuregate.Beta}, + apiextensionsfeatures.CustomResourcePublishOpenAPI: {Default: true, PreRelease: featuregate.Beta}, + apiextensionsfeatures.CustomResourceDefaulting: {Default: false, PreRelease: featuregate.Alpha}, + + // features that enable backwards compatibility but are scheduled to be removed + // ... +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/BUILD deleted file mode 100644 index 8ba330b946..0000000000 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2/BUILD +++ /dev/null @@ -1,35 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -load( - "@io_bazel_rules_go//go:def.bzl", - "go_library", -) - -go_library( - name = "go_default_library", - srcs = [ - "api.pb.go", - "constants.go", - ], - importpath = "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2", - deps = [ - "//vendor/github.com/gogo/protobuf/gogoproto:go_default_library", - "//vendor/github.com/gogo/protobuf/proto:go_default_library", - "//vendor/github.com/gogo/protobuf/sortkeys:go_default_library", - "//vendor/golang.org/x/net/context:go_default_library", - "//vendor/google.golang.org/grpc:go_default_library", - ], -) - -filegroup( - name = "package-srcs", - srcs = glob(["**"]), - tags = ["automanaged"], - visibility = ["//visibility:private"], -) - -filegroup( - name = "all-srcs", - srcs = [":package-srcs"], - tags = ["automanaged"], -) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/BUILD b/vendor/k8s.io/kubernetes/pkg/kubelet/container/BUILD index dfb9cdd259..7fa05b91df 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/BUILD @@ -19,7 +19,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/api/legacyscheme:go_default_library", - "//pkg/kubelet/apis/cri/runtime/v1alpha2:go_default_library", "//pkg/kubelet/util/format:go_default_library", "//pkg/util/hash:go_default_library", "//pkg/volume:go_default_library", @@ -34,6 +33,7 @@ go_library( "//staging/src/k8s.io/client-go/tools/reference:go_default_library", "//staging/src/k8s.io/client-go/tools/remotecommand:go_default_library", "//staging/src/k8s.io/client-go/util/flowcontrol:go_default_library", + "//staging/src/k8s.io/cri-api/pkg/apis/runtime/v1alpha2:go_default_library", "//third_party/forked/golang/expansion:go_default_library", "//vendor/k8s.io/klog:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go b/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go index ddd414894c..d4eb114a42 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go @@ -29,7 +29,7 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/record" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" + runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" "k8s.io/kubernetes/pkg/kubelet/util/format" hashutil "k8s.io/kubernetes/pkg/util/hash" "k8s.io/kubernetes/third_party/forked/golang/expansion" diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/ref.go b/vendor/k8s.io/kubernetes/pkg/kubelet/container/ref.go index f61c0fc4a3..99a1e003b3 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/ref.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/ref.go @@ -54,9 +54,8 @@ func fieldPath(pod *v1.Pod, container *v1.Container) (string, error) { if here.Name == container.Name { if here.Name == "" { return fmt.Sprintf("spec.containers[%d]", i), nil - } else { - return fmt.Sprintf("spec.containers{%s}", here.Name), nil } + return fmt.Sprintf("spec.containers{%s}", here.Name), nil } } for i := range pod.Spec.InitContainers { @@ -64,10 +63,9 @@ func fieldPath(pod *v1.Pod, container *v1.Container) (string, error) { if here.Name == container.Name { if here.Name == "" { return fmt.Sprintf("spec.initContainers[%d]", i), nil - } else { - return fmt.Sprintf("spec.initContainers{%s}", here.Name), nil } + return fmt.Sprintf("spec.initContainers{%s}", here.Name), nil } } - return "", fmt.Errorf("container %#v not found in pod %#v", container, pod) + return "", fmt.Errorf("container %q not found in pod %s/%s", container.Name, pod.Namespace, pod.Name) } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go b/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go index cebd987858..4eb7c3cbea 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go @@ -29,8 +29,8 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/remotecommand" "k8s.io/client-go/util/flowcontrol" + runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" "k8s.io/klog" - runtimeapi "k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2" "k8s.io/kubernetes/pkg/volume" ) diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/BUILD b/vendor/k8s.io/kubernetes/pkg/util/mount/BUILD index 3a61d016a8..f4e40b669f 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/BUILD @@ -5,8 +5,6 @@ go_library( srcs = [ "doc.go", "exec.go", - "exec_mount.go", - "exec_mount_unsupported.go", "fake.go", "mount.go", "mount_helper_common.go", @@ -15,8 +13,6 @@ go_library( "mount_linux.go", "mount_unsupported.go", "mount_windows.go", - "nsenter_mount.go", - "nsenter_mount_unsupported.go", ], importpath = "k8s.io/kubernetes/pkg/util/mount", visibility = ["//visibility:public"], @@ -24,43 +20,13 @@ go_library( "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/exec:go_default_library", ] + select({ - "@io_bazel_rules_go//go/platform:android": [ - "//vendor/k8s.io/utils/nsenter:go_default_library", - ], - "@io_bazel_rules_go//go/platform:darwin": [ - "//vendor/k8s.io/utils/nsenter:go_default_library", - ], - "@io_bazel_rules_go//go/platform:dragonfly": [ - "//vendor/k8s.io/utils/nsenter:go_default_library", - ], - "@io_bazel_rules_go//go/platform:freebsd": [ - "//vendor/k8s.io/utils/nsenter:go_default_library", - ], "@io_bazel_rules_go//go/platform:linux": [ - "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/golang.org/x/sys/unix:go_default_library", "//vendor/k8s.io/utils/io:go_default_library", - "//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/path:go_default_library", ], - "@io_bazel_rules_go//go/platform:nacl": [ - "//vendor/k8s.io/utils/nsenter:go_default_library", - ], - "@io_bazel_rules_go//go/platform:netbsd": [ - "//vendor/k8s.io/utils/nsenter:go_default_library", - ], - "@io_bazel_rules_go//go/platform:openbsd": [ - "//vendor/k8s.io/utils/nsenter:go_default_library", - ], - "@io_bazel_rules_go//go/platform:plan9": [ - "//vendor/k8s.io/utils/nsenter:go_default_library", - ], - "@io_bazel_rules_go//go/platform:solaris": [ - "//vendor/k8s.io/utils/nsenter:go_default_library", - ], "@io_bazel_rules_go//go/platform:windows": [ "//vendor/k8s.io/utils/keymutex:go_default_library", - "//vendor/k8s.io/utils/nsenter:go_default_library", "//vendor/k8s.io/utils/path:go_default_library", ], "//conditions:default": [], @@ -70,12 +36,10 @@ go_library( go_test( name = "go_default_test", srcs = [ - "exec_mount_test.go", "mount_helper_test.go", "mount_linux_test.go", "mount_test.go", "mount_windows_test.go", - "nsenter_mount_test.go", "safe_format_and_mount_test.go", ], embed = [":go_default_library"], @@ -84,7 +48,6 @@ go_test( ] + select({ "@io_bazel_rules_go//go/platform:linux": [ "//vendor/k8s.io/utils/exec:go_default_library", - "//vendor/k8s.io/utils/nsenter:go_default_library", ], "@io_bazel_rules_go//go/platform:windows": [ "//vendor/github.com/stretchr/testify/assert:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount.go b/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount.go deleted file mode 100644 index b30f6f0218..0000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount.go +++ /dev/null @@ -1,161 +0,0 @@ -// +build linux - -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package mount - -import ( - "fmt" - "os" - - "k8s.io/klog" -) - -// ExecMounter is a mounter that uses provided Exec interface to mount and -// unmount a filesystem. For all other calls it uses a wrapped mounter. -type execMounter struct { - wrappedMounter Interface - exec Exec -} - -func NewExecMounter(exec Exec, wrapped Interface) Interface { - return &execMounter{ - wrappedMounter: wrapped, - exec: exec, - } -} - -// execMounter implements mount.Interface -var _ Interface = &execMounter{} - -// Mount runs mount(8) using given exec interface. -func (m *execMounter) Mount(source string, target string, fstype string, options []string) error { - bind, bindOpts, bindRemountOpts := isBind(options) - - if bind { - err := m.doExecMount(source, target, fstype, bindOpts) - if err != nil { - return err - } - return m.doExecMount(source, target, fstype, bindRemountOpts) - } - - return m.doExecMount(source, target, fstype, options) -} - -// doExecMount calls exec(mount ) using given exec interface. -func (m *execMounter) doExecMount(source, target, fstype string, options []string) error { - klog.V(5).Infof("Exec Mounting %s %s %s %v", source, target, fstype, options) - mountArgs := makeMountArgs(source, target, fstype, options) - output, err := m.exec.Run("mount", mountArgs...) - klog.V(5).Infof("Exec mounted %v: %v: %s", mountArgs, err, string(output)) - if err != nil { - return fmt.Errorf("mount failed: %v\nMounting command: %s\nMounting arguments: %s %s %s %v\nOutput: %s\n", - err, "mount", source, target, fstype, options, string(output)) - } - - return err -} - -// Unmount runs umount(8) using given exec interface. -func (m *execMounter) Unmount(target string) error { - outputBytes, err := m.exec.Run("umount", target) - if err == nil { - klog.V(5).Infof("Exec unmounted %s: %s", target, string(outputBytes)) - } else { - klog.V(5).Infof("Failed to exec unmount %s: err: %q, umount output: %s", target, err, string(outputBytes)) - } - - return err -} - -// List returns a list of all mounted filesystems. -func (m *execMounter) List() ([]MountPoint, error) { - return m.wrappedMounter.List() -} - -// IsLikelyNotMountPoint determines whether a path is a mountpoint. -func (m *execMounter) IsLikelyNotMountPoint(file string) (bool, error) { - return m.wrappedMounter.IsLikelyNotMountPoint(file) -} - -// DeviceOpened checks if block device in use by calling Open with O_EXCL flag. -// Returns true if open returns errno EBUSY, and false if errno is nil. -// Returns an error if errno is any error other than EBUSY. -// Returns with error if pathname is not a device. -func (m *execMounter) DeviceOpened(pathname string) (bool, error) { - return m.wrappedMounter.DeviceOpened(pathname) -} - -// PathIsDevice uses FileInfo returned from os.Stat to check if path refers -// to a device. -func (m *execMounter) PathIsDevice(pathname string) (bool, error) { - return m.wrappedMounter.PathIsDevice(pathname) -} - -//GetDeviceNameFromMount given a mount point, find the volume id from checking /proc/mounts -func (m *execMounter) GetDeviceNameFromMount(mountPath, pluginDir string) (string, error) { - return m.wrappedMounter.GetDeviceNameFromMount(mountPath, pluginDir) -} - -func (m *execMounter) IsMountPointMatch(mp MountPoint, dir string) bool { - return m.wrappedMounter.IsMountPointMatch(mp, dir) -} - -func (m *execMounter) IsNotMountPoint(dir string) (bool, error) { - return m.wrappedMounter.IsNotMountPoint(dir) -} - -func (m *execMounter) MakeRShared(path string) error { - return m.wrappedMounter.MakeRShared(path) -} - -func (m *execMounter) GetFileType(pathname string) (FileType, error) { - return m.wrappedMounter.GetFileType(pathname) -} - -func (m *execMounter) MakeFile(pathname string) error { - return m.wrappedMounter.MakeFile(pathname) -} - -func (m *execMounter) MakeDir(pathname string) error { - return m.wrappedMounter.MakeDir(pathname) -} - -func (m *execMounter) ExistsPath(pathname string) (bool, error) { - return m.wrappedMounter.ExistsPath(pathname) -} - -func (m *execMounter) EvalHostSymlinks(pathname string) (string, error) { - return m.wrappedMounter.EvalHostSymlinks(pathname) -} - -func (m *execMounter) GetMountRefs(pathname string) ([]string, error) { - return m.wrappedMounter.GetMountRefs(pathname) -} - -func (m *execMounter) GetFSGroup(pathname string) (int64, error) { - return m.wrappedMounter.GetFSGroup(pathname) -} - -func (m *execMounter) GetSELinuxSupport(pathname string) (bool, error) { - return m.wrappedMounter.GetSELinuxSupport(pathname) -} - -func (m *execMounter) GetMode(pathname string) (os.FileMode, error) { - return m.wrappedMounter.GetMode(pathname) -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount_unsupported.go b/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount_unsupported.go deleted file mode 100644 index 698c136e01..0000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/exec_mount_unsupported.go +++ /dev/null @@ -1,108 +0,0 @@ -// +build !linux - -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package mount - -import ( - "errors" - "os" -) - -type execMounter struct{} - -// ExecMounter is a mounter that uses provided Exec interface to mount and -// unmount a filesystem. For all other calls it uses a wrapped mounter. -func NewExecMounter(exec Exec, wrapped Interface) Interface { - return &execMounter{} -} - -func (mounter *execMounter) Mount(source string, target string, fstype string, options []string) error { - return nil -} - -func (mounter *execMounter) Unmount(target string) error { - return nil -} - -func (mounter *execMounter) List() ([]MountPoint, error) { - return []MountPoint{}, nil -} - -func (mounter *execMounter) IsMountPointMatch(mp MountPoint, dir string) bool { - return (mp.Path == dir) -} - -func (mounter *execMounter) IsNotMountPoint(dir string) (bool, error) { - return isNotMountPoint(mounter, dir) -} - -func (mounter *execMounter) IsLikelyNotMountPoint(file string) (bool, error) { - return true, nil -} - -func (mounter *execMounter) GetDeviceNameFromMount(mountPath, pluginDir string) (string, error) { - return "", nil -} - -func (mounter *execMounter) DeviceOpened(pathname string) (bool, error) { - return false, nil -} - -func (mounter *execMounter) PathIsDevice(pathname string) (bool, error) { - return true, nil -} - -func (mounter *execMounter) MakeRShared(path string) error { - return nil -} - -func (mounter *execMounter) GetFileType(pathname string) (FileType, error) { - return FileType("fake"), errors.New("not implemented") -} - -func (mounter *execMounter) MakeDir(pathname string) error { - return nil -} - -func (mounter *execMounter) MakeFile(pathname string) error { - return nil -} - -func (mounter *execMounter) ExistsPath(pathname string) (bool, error) { - return true, errors.New("not implemented") -} - -func (m *execMounter) EvalHostSymlinks(pathname string) (string, error) { - return "", errors.New("not implemented") -} - -func (mounter *execMounter) GetMountRefs(pathname string) ([]string, error) { - return nil, errors.New("not implemented") -} - -func (mounter *execMounter) GetFSGroup(pathname string) (int64, error) { - return -1, errors.New("not implemented") -} - -func (mounter *execMounter) GetSELinuxSupport(pathname string) (bool, error) { - return false, errors.New("not implemented") -} - -func (mounter *execMounter) GetMode(pathname string) (os.FileMode, error) { - return 0, errors.New("not implemented") -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go b/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go index f8abc216b8..22b46d95c9 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go @@ -136,10 +136,6 @@ func (f *FakeMounter) IsMountPointMatch(mp MountPoint, dir string) bool { return mp.Path == dir } -func (f *FakeMounter) IsNotMountPoint(dir string) (bool, error) { - return isNotMountPoint(f, dir) -} - func (f *FakeMounter) IsLikelyNotMountPoint(file string) (bool, error) { f.mutex.Lock() defer f.mutex.Unlock() @@ -186,8 +182,8 @@ func (f *FakeMounter) PathIsDevice(pathname string) (bool, error) { return true, nil } -func (f *FakeMounter) GetDeviceNameFromMount(mountPath, pluginDir string) (string, error) { - return getDeviceNameFromMount(f, mountPath, pluginDir) +func (f *FakeMounter) GetDeviceNameFromMount(mountPath, pluginMountDir string) (string, error) { + return getDeviceNameFromMount(f, mountPath, pluginMountDir) } func (f *FakeMounter) MakeRShared(path string) error { diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go index b0ad41ceff..96dc68c9a0 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go @@ -29,13 +29,12 @@ type FileType string const ( // Default mount command if mounter path is not specified - defaultMountCommand = "mount" - MountsInGlobalPDPath = "mounts" - FileTypeDirectory FileType = "Directory" - FileTypeFile FileType = "File" - FileTypeSocket FileType = "Socket" - FileTypeCharDev FileType = "CharDevice" - FileTypeBlockDev FileType = "BlockDevice" + defaultMountCommand = "mount" + FileTypeDirectory FileType = "Directory" + FileTypeFile FileType = "File" + FileTypeSocket FileType = "Socket" + FileTypeCharDev FileType = "CharDevice" + FileTypeBlockDev FileType = "BlockDevice" ) type Interface interface { @@ -50,19 +49,11 @@ type Interface interface { List() ([]MountPoint, error) // IsMountPointMatch determines if the mountpoint matches the dir IsMountPointMatch(mp MountPoint, dir string) bool - // IsNotMountPoint determines if a directory is a mountpoint. - // It should return ErrNotExist when the directory does not exist. - // IsNotMountPoint is more expensive than IsLikelyNotMountPoint. - // IsNotMountPoint detects bind mounts in linux. - // IsNotMountPoint enumerates all the mountpoints using List() and - // the list of mountpoints may be large, then it uses - // IsMountPointMatch to evaluate whether the directory is a mountpoint - IsNotMountPoint(file string) (bool, error) // IsLikelyNotMountPoint uses heuristics to determine if a directory // is a mountpoint. // It should return ErrNotExist when the directory does not exist. // IsLikelyNotMountPoint does NOT properly detect all mountpoint types - // most notably linux bind mounts. + // most notably linux bind mounts and symbolic link. IsLikelyNotMountPoint(file string) (bool, error) // DeviceOpened determines if the device is in use elsewhere // on the system, i.e. still mounted. @@ -70,8 +61,8 @@ type Interface interface { // PathIsDevice determines if a path is a device. PathIsDevice(pathname string) (bool, error) // GetDeviceNameFromMount finds the device name by checking the mount path - // to get the global mount path which matches its plugin directory - GetDeviceNameFromMount(mountPath, pluginDir string) (string, error) + // to get the global mount path within its plugin directory + GetDeviceNameFromMount(mountPath, pluginMountDir string) (string, error) // MakeRShared checks that given path is on a mount with 'rshared' mount // propagation. If not, it bind-mounts the path as rshared. MakeRShared(path string) error @@ -222,9 +213,14 @@ func GetDeviceNameFromMount(mounter Interface, mountPath string) (string, int, e return device, refCount, nil } -// isNotMountPoint implements Mounter.IsNotMountPoint and is shared by mounter -// implementations. -func isNotMountPoint(mounter Interface, file string) (bool, error) { +// IsNotMountPoint determines if a directory is a mountpoint. +// It should return ErrNotExist when the directory does not exist. +// IsNotMountPoint is more expensive than IsLikelyNotMountPoint. +// IsNotMountPoint detects bind mounts in linux. +// IsNotMountPoint enumerates all the mountpoints using List() and +// the list of mountpoints may be large, then it uses +// IsMountPointMatch to evaluate whether the directory is a mountpoint +func IsNotMountPoint(mounter Interface, file string) (bool, error) { // IsLikelyNotMountPoint provides a quick check // to determine whether file IS A mountpoint notMnt, notMntErr := mounter.IsLikelyNotMountPoint(file) @@ -263,11 +259,11 @@ func isNotMountPoint(mounter Interface, file string) (bool, error) { return notMnt, nil } -// isBind detects whether a bind mount is being requested and makes the remount options to +// IsBind detects whether a bind mount is being requested and makes the remount options to // use in case of bind mount, due to the fact that bind mount doesn't respect mount options. // The list equals: // options - 'bind' + 'remount' (no duplicate) -func isBind(options []string) (bool, []string, []string) { +func IsBind(options []string) (bool, []string, []string) { // Because we have an FD opened on the subpath bind mount, the "bind" option // needs to be included, otherwise the mount target will error as busy if you // remount as readonly. diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_common.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_common.go index cff1d89588..75b128473c 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_common.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_helper_common.go @@ -55,7 +55,7 @@ func doCleanupMountPoint(mountPath string, mounter Interface, extensiveMountPoin var notMnt bool var err error if extensiveMountPointCheck { - notMnt, err = mounter.IsNotMountPoint(mountPath) + notMnt, err = IsNotMountPoint(mounter, mountPath) } else { notMnt, err = mounter.IsLikelyNotMountPoint(mountPath) } diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go index 9ffd766a51..2ca274f8c6 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go @@ -30,7 +30,6 @@ import ( "syscall" "golang.org/x/sys/unix" - "k8s.io/apimachinery/pkg/util/sets" "k8s.io/klog" utilexec "k8s.io/utils/exec" utilio "k8s.io/utils/io" @@ -81,7 +80,7 @@ func (mounter *Mounter) Mount(source string, target string, fstype string, optio // Path to mounter binary if containerized mounter is needed. Otherwise, it is set to empty. // All Linux distros are expected to be shipped with a mount utility that a support bind mounts. mounterPath := "" - bind, bindOpts, bindRemountOpts := isBind(options) + bind, bindOpts, bindRemountOpts := IsBind(options) if bind { err := mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindOpts) if err != nil { @@ -90,8 +89,13 @@ func (mounter *Mounter) Mount(source string, target string, fstype string, optio return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, bindRemountOpts) } // The list of filesystems that require containerized mounter on GCI image cluster - fsTypesNeedMounter := sets.NewString("nfs", "glusterfs", "ceph", "cifs") - if fsTypesNeedMounter.Has(fstype) { + fsTypesNeedMounter := map[string]struct{}{ + "nfs": {}, + "glusterfs": {}, + "ceph": {}, + "cifs": {}, + } + if _, ok := fsTypesNeedMounter[fstype]; ok { mounterPath = mounter.mounterPath } return mounter.doMount(mounterPath, defaultMountCommand, source, target, fstype, options) @@ -99,7 +103,7 @@ func (mounter *Mounter) Mount(source string, target string, fstype string, optio // doMount runs the mount command. mounterPath is the path to mounter binary if containerized mounter is used. func (m *Mounter) doMount(mounterPath string, mountCmd string, source string, target string, fstype string, options []string) error { - mountArgs := makeMountArgs(source, target, fstype, options) + mountArgs := MakeMountArgs(source, target, fstype, options) if len(mounterPath) > 0 { mountArgs = append([]string{mountCmd}, mountArgs...) mountCmd = mounterPath @@ -128,7 +132,7 @@ func (m *Mounter) doMount(mounterPath string, mountCmd string, source string, ta // // systemd-mount is not used because it's too new for older distros // (CentOS 7, Debian Jessie). - mountCmd, mountArgs = addSystemdScope("systemd-run", target, mountCmd, mountArgs) + mountCmd, mountArgs = AddSystemdScope("systemd-run", target, mountCmd, mountArgs) } else { // No systemd-run on the host (or we failed to check it), assume kubelet // does not run as a systemd service. @@ -172,8 +176,9 @@ func detectSystemd() bool { return true } -// makeMountArgs makes the arguments to the mount(8) command. -func makeMountArgs(source, target, fstype string, options []string) []string { +// MakeMountArgs makes the arguments to the mount(8) command. +// Implementation is shared with NsEnterMounter +func MakeMountArgs(source, target, fstype string, options []string) []string { // Build mount command as follows: // mount [-t $fstype] [-o $options] [$source] $target mountArgs := []string{} @@ -191,8 +196,9 @@ func makeMountArgs(source, target, fstype string, options []string) []string { return mountArgs } -// addSystemdScope adds "system-run --scope" to given command line -func addSystemdScope(systemdRunPath, mountName, command string, args []string) (string, []string) { +// AddSystemdScope adds "system-run --scope" to given command line +// implementation is shared with NsEnterMounter +func AddSystemdScope(systemdRunPath, mountName, command string, args []string) (string, []string) { descriptionArg := fmt.Sprintf("--description=Kubernetes transient mount for %s", mountName) systemdRunArgs := []string{descriptionArg, "--scope", "--", command} return systemdRunPath, append(systemdRunArgs, args...) @@ -211,7 +217,7 @@ func (mounter *Mounter) Unmount(target string) error { // List returns a list of all mounted filesystems. func (*Mounter) List() ([]MountPoint, error) { - return listProcMounts(procMountsPath) + return ListProcMounts(procMountsPath) } func (mounter *Mounter) IsMountPointMatch(mp MountPoint, dir string) bool { @@ -219,14 +225,11 @@ func (mounter *Mounter) IsMountPointMatch(mp MountPoint, dir string) bool { return ((mp.Path == dir) || (mp.Path == deletedDir)) } -func (mounter *Mounter) IsNotMountPoint(dir string) (bool, error) { - return isNotMountPoint(mounter, dir) -} - // IsLikelyNotMountPoint determines if a directory is not a mountpoint. // It is fast but not necessarily ALWAYS correct. If the path is in fact // a bind mount from one part of a mount to another it will not be detected. -// mkdir /tmp/a /tmp/b; mount --bin /tmp/a /tmp/b; IsLikelyNotMountPoint("/tmp/b") +// It also can not distinguish between mountpoints and symbolic links. +// mkdir /tmp/a /tmp/b; mount --bind /tmp/a /tmp/b; IsLikelyNotMountPoint("/tmp/b") // will return true. When in fact /tmp/b is a mount point. If this situation // if of interest to you, don't use this function... func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) { @@ -234,7 +237,7 @@ func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) { if err != nil { return true, err } - rootStat, err := os.Lstat(filepath.Dir(strings.TrimSuffix(file, "/"))) + rootStat, err := os.Stat(filepath.Dir(strings.TrimSuffix(file, "/"))) if err != nil { return true, err } @@ -252,7 +255,7 @@ func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) { // If open returns nil, return false with nil error. // Otherwise, return false with error func (mounter *Mounter) DeviceOpened(pathname string) (bool, error) { - return exclusiveOpenFailsOnDevice(pathname) + return ExclusiveOpenFailsOnDevice(pathname) } // PathIsDevice uses FileInfo returned from os.Stat to check if path refers @@ -263,7 +266,8 @@ func (mounter *Mounter) PathIsDevice(pathname string) (bool, error) { return isDevice, err } -func exclusiveOpenFailsOnDevice(pathname string) (bool, error) { +// ExclusiveOpenFailsOnDevice is shared with NsEnterMounter +func ExclusiveOpenFailsOnDevice(pathname string) (bool, error) { var isDevice bool finfo, err := os.Stat(pathname) if os.IsNotExist(err) { @@ -301,14 +305,19 @@ func exclusiveOpenFailsOnDevice(pathname string) (bool, error) { } //GetDeviceNameFromMount: given a mount point, find the device name from its global mount point -func (mounter *Mounter) GetDeviceNameFromMount(mountPath, pluginDir string) (string, error) { - return getDeviceNameFromMount(mounter, mountPath, pluginDir) +func (mounter *Mounter) GetDeviceNameFromMount(mountPath, pluginMountDir string) (string, error) { + return GetDeviceNameFromMountLinux(mounter, mountPath, pluginMountDir) } -// getDeviceNameFromMount find the device name from /proc/mounts in which -// the mount path reference should match the given plugin directory. In case no mount path reference +func getDeviceNameFromMount(mounter Interface, mountPath, pluginMountDir string) (string, error) { + return GetDeviceNameFromMountLinux(mounter, mountPath, pluginMountDir) +} + +// GetDeviceNameFromMountLinux find the device name from /proc/mounts in which +// the mount path reference should match the given plugin mount directory. In case no mount path reference // matches, returns the volume name taken from its given mountPath -func getDeviceNameFromMount(mounter Interface, mountPath, pluginDir string) (string, error) { +// This implementation is shared with NsEnterMounter +func GetDeviceNameFromMountLinux(mounter Interface, mountPath, pluginMountDir string) (string, error) { refs, err := mounter.GetMountRefs(mountPath) if err != nil { klog.V(4).Infof("GetMountRefs failed for mount path %q: %v", mountPath, err) @@ -318,10 +327,9 @@ func getDeviceNameFromMount(mounter Interface, mountPath, pluginDir string) (str klog.V(4).Infof("Directory %s is not mounted", mountPath) return "", fmt.Errorf("directory %s is not mounted", mountPath) } - basemountPath := path.Join(pluginDir, MountsInGlobalPDPath) for _, ref := range refs { - if strings.HasPrefix(ref, basemountPath) { - volumeID, err := filepath.Rel(basemountPath, ref) + if strings.HasPrefix(ref, pluginMountDir) { + volumeID, err := filepath.Rel(pluginMountDir, ref) if err != nil { klog.Errorf("Failed to get volume id from mount %s - %v", mountPath, err) return "", err @@ -333,7 +341,8 @@ func getDeviceNameFromMount(mounter Interface, mountPath, pluginDir string) (str return path.Base(mountPath), nil } -func listProcMounts(mountFilePath string) ([]MountPoint, error) { +// ListProcMounts is shared with NsEnterMounter +func ListProcMounts(mountFilePath string) ([]MountPoint, error) { content, err := utilio.ConsistentRead(mountFilePath, maxListTries) if err != nil { return nil, err @@ -379,7 +388,7 @@ func parseProcMounts(content []byte) ([]MountPoint, error) { } func (mounter *Mounter) MakeRShared(path string) error { - return doMakeRShared(path, procMountInfoPath) + return DoMakeRShared(path, procMountInfoPath) } func (mounter *Mounter) GetFileType(pathname string) (FileType, error) { @@ -500,7 +509,7 @@ func (mounter *SafeFormatAndMount) formatAndMount(source string, target string, return mountErr } -// GetDiskFormat uses 'blkid' to see if the given disk is unformated +// GetDiskFormat uses 'blkid' to see if the given disk is unformatted func (mounter *SafeFormatAndMount) GetDiskFormat(disk string) (string, error) { args := []string{"-p", "-s", "TYPE", "-s", "PTTYPE", "-o", "export", disk} klog.V(4).Infof("Attempting to determine if disk %q is formatted using blkid with args: (%v)", disk, args) @@ -668,11 +677,11 @@ func findMountInfo(path, mountInfoPath string) (mountInfo, error) { return *info, nil } -// doMakeRShared is common implementation of MakeRShared on Linux. It checks if +// DoMakeRShared is common implementation of MakeRShared on Linux. It checks if // path is shared and bind-mounts it as rshared if needed. mountCmd and -// mountArgs are expected to contain mount-like command, doMakeRShared will add +// mountArgs are expected to contain mount-like command, DoMakeRShared will add // '--bind ' and '--make-rshared ' to mountArgs. -func doMakeRShared(path string, mountInfoFilename string) error { +func DoMakeRShared(path string, mountInfoFilename string) error { shared, err := isShared(path, mountInfoFilename) if err != nil { return err @@ -696,8 +705,8 @@ func doMakeRShared(path string, mountInfoFilename string) error { return nil } -// getSELinuxSupport is common implementation of GetSELinuxSupport on Linux. -func getSELinuxSupport(path string, mountInfoFilename string) (bool, error) { +// GetSELinux is common implementation of GetSELinuxSupport on Linux. +func GetSELinux(path string, mountInfoFilename string) (bool, error) { info, err := findMountInfo(path, mountInfoFilename) if err != nil { return false, err @@ -731,11 +740,11 @@ func (mounter *Mounter) GetMountRefs(pathname string) ([]string, error) { if err != nil { return nil, err } - return searchMountPoints(realpath, procMountInfoPath) + return SearchMountPoints(realpath, procMountInfoPath) } func (mounter *Mounter) GetSELinuxSupport(pathname string) (bool, error) { - return getSELinuxSupport(pathname, procMountInfoPath) + return GetSELinux(pathname, procMountInfoPath) } func (mounter *Mounter) GetFSGroup(pathname string) (int64, error) { @@ -743,15 +752,16 @@ func (mounter *Mounter) GetFSGroup(pathname string) (int64, error) { if err != nil { return 0, err } - return getFSGroup(realpath) + return GetFSGroupLinux(realpath) } func (mounter *Mounter) GetMode(pathname string) (os.FileMode, error) { - return getMode(pathname) + return GetModeLinux(pathname) } -// This implementation is shared between Linux and NsEnterMounter -func getFSGroup(pathname string) (int64, error) { +// GetFSGroupLinux is shared between Linux and NsEnterMounter +// pathname must already be evaluated for symlinks +func GetFSGroupLinux(pathname string) (int64, error) { info, err := os.Stat(pathname) if err != nil { return 0, err @@ -759,8 +769,8 @@ func getFSGroup(pathname string) (int64, error) { return int64(info.Sys().(*syscall.Stat_t).Gid), nil } -// This implementation is shared between Linux and NsEnterMounter -func getMode(pathname string) (os.FileMode, error) { +// GetModeLinux is shared between Linux and NsEnterMounter +func GetModeLinux(pathname string) (os.FileMode, error) { info, err := os.Stat(pathname) if err != nil { return 0, err @@ -768,14 +778,14 @@ func getMode(pathname string) (os.FileMode, error) { return info.Mode(), nil } -// searchMountPoints finds all mount references to the source, returns a list of +// SearchMountPoints finds all mount references to the source, returns a list of // mountpoints. // This function assumes source cannot be device. // Some filesystems may share a source name, e.g. tmpfs. And for bind mounting, // it's possible to mount a non-root path of a filesystem, so we need to use // root path and major:minor to represent mount source uniquely. // This implementation is shared between Linux and NsEnterMounter -func searchMountPoints(hostSource, mountInfoPath string) ([]string, error) { +func SearchMountPoints(hostSource, mountInfoPath string) ([]string, error) { mis, err := parseMountInfo(mountInfoPath) if err != nil { return nil, err diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go index 58f1acc729..362ece518a 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go @@ -54,19 +54,15 @@ func (mounter *Mounter) IsMountPointMatch(mp MountPoint, dir string) bool { return (mp.Path == dir) } -func (mounter *Mounter) IsNotMountPoint(dir string) (bool, error) { - return isNotMountPoint(mounter, dir) -} - func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) { return true, unsupportedErr } -func (mounter *Mounter) GetDeviceNameFromMount(mountPath, pluginDir string) (string, error) { +func (mounter *Mounter) GetDeviceNameFromMount(mountPath, pluginMountDir string) (string, error) { return "", unsupportedErr } -func getDeviceNameFromMount(mounter Interface, mountPath, pluginDir string) (string, error) { +func getDeviceNameFromMount(mounter Interface, mountPath, pluginMountDir string) (string, error) { return "", unsupportedErr } diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go index 4e2efbffb1..dd79842b99 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go @@ -72,7 +72,7 @@ func (mounter *Mounter) Mount(source string, target string, fstype string, optio bindSource := source // tell it's going to mount azure disk or azure file according to options - if bind, _, _ := isBind(options); bind { + if bind, _, _ := IsBind(options); bind { // mount azure disk bindSource = normalizeWindowsPath(source) } else { @@ -173,11 +173,6 @@ func (mounter *Mounter) IsMountPointMatch(mp MountPoint, dir string) bool { return mp.Path == dir } -// IsNotMountPoint determines if a directory is a mountpoint. -func (mounter *Mounter) IsNotMountPoint(dir string) (bool, error) { - return isNotMountPoint(mounter, dir) -} - // IsLikelyNotMountPoint determines if a directory is not a mountpoint. func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) { stat, err := os.Lstat(file) @@ -201,14 +196,14 @@ func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) { } // GetDeviceNameFromMount given a mnt point, find the device -func (mounter *Mounter) GetDeviceNameFromMount(mountPath, pluginDir string) (string, error) { - return getDeviceNameFromMount(mounter, mountPath, pluginDir) +func (mounter *Mounter) GetDeviceNameFromMount(mountPath, pluginMountDir string) (string, error) { + return getDeviceNameFromMount(mounter, mountPath, pluginMountDir) } // getDeviceNameFromMount find the device(drive) name in which -// the mount path reference should match the given plugin directory. In case no mount path reference +// the mount path reference should match the given plugin mount directory. In case no mount path reference // matches, returns the volume name taken from its given mountPath -func getDeviceNameFromMount(mounter Interface, mountPath, pluginDir string) (string, error) { +func getDeviceNameFromMount(mounter Interface, mountPath, pluginMountDir string) (string, error) { refs, err := mounter.GetMountRefs(mountPath) if err != nil { klog.V(4).Infof("GetMountRefs failed for mount path %q: %v", mountPath, err) @@ -217,7 +212,7 @@ func getDeviceNameFromMount(mounter Interface, mountPath, pluginDir string) (str if len(refs) == 0 { return "", fmt.Errorf("directory %s is not mounted", mountPath) } - basemountPath := normalizeWindowsPath(path.Join(pluginDir, MountsInGlobalPDPath)) + basemountPath := normalizeWindowsPath(pluginMountDir) for _, ref := range refs { if strings.Contains(ref, basemountPath) { volumeID, err := filepath.Rel(normalizeWindowsPath(basemountPath), ref) diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount.go b/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount.go deleted file mode 100644 index a7407315c4..0000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount.go +++ /dev/null @@ -1,333 +0,0 @@ -// +build linux - -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package mount - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "k8s.io/klog" - "k8s.io/utils/nsenter" - utilpath "k8s.io/utils/path" -) - -const ( - // hostProcMountsPath is the default mount path for rootfs - hostProcMountsPath = "/rootfs/proc/1/mounts" - // hostProcMountinfoPath is the default mount info path for rootfs - hostProcMountinfoPath = "/rootfs/proc/1/mountinfo" -) - -// Currently, all docker containers receive their own mount namespaces. -// NsenterMounter works by executing nsenter to run commands in -// the host's mount namespace. -type NsenterMounter struct { - ne *nsenter.Nsenter - // rootDir is location of /var/lib/kubelet directory. - rootDir string -} - -// NewNsenterMounter creates a new mounter for kubelet that runs as a container. -func NewNsenterMounter(rootDir string, ne *nsenter.Nsenter) *NsenterMounter { - return &NsenterMounter{ - rootDir: rootDir, - ne: ne, - } -} - -// NsenterMounter implements mount.Interface -var _ = Interface(&NsenterMounter{}) - -// Mount runs mount(8) in the host's root mount namespace. Aside from this -// aspect, Mount has the same semantics as the mounter returned by mount.New() -func (n *NsenterMounter) Mount(source string, target string, fstype string, options []string) error { - bind, bindOpts, bindRemountOpts := isBind(options) - - if bind { - err := n.doNsenterMount(source, target, fstype, bindOpts) - if err != nil { - return err - } - return n.doNsenterMount(source, target, fstype, bindRemountOpts) - } - - return n.doNsenterMount(source, target, fstype, options) -} - -// doNsenterMount nsenters the host's mount namespace and performs the -// requested mount. -func (n *NsenterMounter) doNsenterMount(source, target, fstype string, options []string) error { - klog.V(5).Infof("nsenter mount %s %s %s %v", source, target, fstype, options) - cmd, args := n.makeNsenterArgs(source, target, fstype, options) - outputBytes, err := n.ne.Exec(cmd, args).CombinedOutput() - if len(outputBytes) != 0 { - klog.V(5).Infof("Output of mounting %s to %s: %v", source, target, string(outputBytes)) - } - return err -} - -// makeNsenterArgs makes a list of argument to nsenter in order to do the -// requested mount. -func (n *NsenterMounter) makeNsenterArgs(source, target, fstype string, options []string) (string, []string) { - mountCmd := n.ne.AbsHostPath("mount") - mountArgs := makeMountArgs(source, target, fstype, options) - - if systemdRunPath, hasSystemd := n.ne.SupportsSystemd(); hasSystemd { - // Complete command line: - // nsenter --mount=/rootfs/proc/1/ns/mnt -- /bin/systemd-run --description=... --scope -- /bin/mount -t - // Expected flow is: - // * nsenter breaks out of container's mount namespace and executes - // host's systemd-run. - // * systemd-run creates a transient scope (=~ cgroup) and executes its - // argument (/bin/mount) there. - // * mount does its job, forks a fuse daemon if necessary and finishes. - // (systemd-run --scope finishes at this point, returning mount's exit - // code and stdout/stderr - thats one of --scope benefits). - // * systemd keeps the fuse daemon running in the scope (i.e. in its own - // cgroup) until the fuse daemon dies (another --scope benefit). - // Kubelet container can be restarted and the fuse daemon survives. - // * When the daemon dies (e.g. during unmount) systemd removes the - // scope automatically. - mountCmd, mountArgs = addSystemdScope(systemdRunPath, target, mountCmd, mountArgs) - } else { - // Fall back to simple mount when the host has no systemd. - // Complete command line: - // nsenter --mount=/rootfs/proc/1/ns/mnt -- /bin/mount -t - // Expected flow is: - // * nsenter breaks out of container's mount namespace and executes host's /bin/mount. - // * mount does its job, forks a fuse daemon if necessary and finishes. - // * Any fuse daemon runs in cgroup of kubelet docker container, - // restart of kubelet container will kill it! - - // No code here, mountCmd and mountArgs use /bin/mount - } - - return mountCmd, mountArgs -} - -// Unmount runs umount(8) in the host's mount namespace. -func (n *NsenterMounter) Unmount(target string) error { - args := []string{target} - // No need to execute systemd-run here, it's enough that unmount is executed - // in the host's mount namespace. It will finish appropriate fuse daemon(s) - // running in any scope. - klog.V(5).Infof("nsenter unmount args: %v", args) - outputBytes, err := n.ne.Exec("umount", args).CombinedOutput() - if len(outputBytes) != 0 { - klog.V(5).Infof("Output of unmounting %s: %v", target, string(outputBytes)) - } - return err -} - -// List returns a list of all mounted filesystems in the host's mount namespace. -func (*NsenterMounter) List() ([]MountPoint, error) { - return listProcMounts(hostProcMountsPath) -} - -func (m *NsenterMounter) IsNotMountPoint(dir string) (bool, error) { - return isNotMountPoint(m, dir) -} - -func (*NsenterMounter) IsMountPointMatch(mp MountPoint, dir string) bool { - deletedDir := fmt.Sprintf("%s\\040(deleted)", dir) - return (mp.Path == dir) || (mp.Path == deletedDir) -} - -// IsLikelyNotMountPoint determines whether a path is a mountpoint by calling findmnt -// in the host's root mount namespace. -func (n *NsenterMounter) IsLikelyNotMountPoint(file string) (bool, error) { - file, err := filepath.Abs(file) - if err != nil { - return true, err - } - - // Check the directory exists - if _, err = os.Stat(file); os.IsNotExist(err) { - klog.V(5).Infof("findmnt: directory %s does not exist", file) - return true, err - } - - // Resolve any symlinks in file, kernel would do the same and use the resolved path in /proc/mounts - resolvedFile, err := n.EvalHostSymlinks(file) - if err != nil { - return true, err - } - - // Add --first-only option: since we are testing for the absence of a mountpoint, it is sufficient to get only - // the first of multiple possible mountpoints using --first-only. - // Also add fstype output to make sure that the output of target file will give the full path - // TODO: Need more refactoring for this function. Track the solution with issue #26996 - args := []string{"-o", "target,fstype", "--noheadings", "--first-only", "--target", resolvedFile} - klog.V(5).Infof("nsenter findmnt args: %v", args) - out, err := n.ne.Exec("findmnt", args).CombinedOutput() - if err != nil { - klog.V(2).Infof("Failed findmnt command for path %s: %s %v", resolvedFile, out, err) - // Different operating systems behave differently for paths which are not mount points. - // On older versions (e.g. 2.20.1) we'd get error, on newer ones (e.g. 2.26.2) we'd get "/". - // It's safer to assume that it's not a mount point. - return true, nil - } - mountTarget, err := parseFindMnt(string(out)) - if err != nil { - return false, err - } - - klog.V(5).Infof("IsLikelyNotMountPoint findmnt output for path %s: %v:", resolvedFile, mountTarget) - - if mountTarget == resolvedFile { - klog.V(5).Infof("IsLikelyNotMountPoint: %s is a mount point", resolvedFile) - return false, nil - } - klog.V(5).Infof("IsLikelyNotMountPoint: %s is not a mount point", resolvedFile) - return true, nil -} - -// parse output of "findmnt -o target,fstype" and return just the target -func parseFindMnt(out string) (string, error) { - // cut trailing newline - out = strings.TrimSuffix(out, "\n") - // cut everything after the last space - it's the filesystem type - i := strings.LastIndex(out, " ") - if i == -1 { - return "", fmt.Errorf("error parsing findmnt output, expected at least one space: %q", out) - } - return out[:i], nil -} - -// DeviceOpened checks if block device in use by calling Open with O_EXCL flag. -// Returns true if open returns errno EBUSY, and false if errno is nil. -// Returns an error if errno is any error other than EBUSY. -// Returns with error if pathname is not a device. -func (n *NsenterMounter) DeviceOpened(pathname string) (bool, error) { - return exclusiveOpenFailsOnDevice(pathname) -} - -// PathIsDevice uses FileInfo returned from os.Stat to check if path refers -// to a device. -func (n *NsenterMounter) PathIsDevice(pathname string) (bool, error) { - pathType, err := n.GetFileType(pathname) - isDevice := pathType == FileTypeCharDev || pathType == FileTypeBlockDev - return isDevice, err -} - -//GetDeviceNameFromMount given a mount point, find the volume id from checking /proc/mounts -func (n *NsenterMounter) GetDeviceNameFromMount(mountPath, pluginDir string) (string, error) { - return getDeviceNameFromMount(n, mountPath, pluginDir) -} - -func (n *NsenterMounter) MakeRShared(path string) error { - return doMakeRShared(path, hostProcMountinfoPath) -} - -func (mounter *NsenterMounter) GetFileType(pathname string) (FileType, error) { - var pathType FileType - outputBytes, err := mounter.ne.Exec("stat", []string{"-L", "--printf=%F", pathname}).CombinedOutput() - if err != nil { - if strings.Contains(string(outputBytes), "No such file") { - err = fmt.Errorf("%s does not exist", pathname) - } else { - err = fmt.Errorf("stat %s error: %v", pathname, string(outputBytes)) - } - return pathType, err - } - - switch string(outputBytes) { - case "socket": - return FileTypeSocket, nil - case "character special file": - return FileTypeCharDev, nil - case "block special file": - return FileTypeBlockDev, nil - case "directory": - return FileTypeDirectory, nil - case "regular file": - return FileTypeFile, nil - } - - return pathType, fmt.Errorf("only recognise file, directory, socket, block device and character device") -} - -func (mounter *NsenterMounter) MakeDir(pathname string) error { - args := []string{"-p", pathname} - if _, err := mounter.ne.Exec("mkdir", args).CombinedOutput(); err != nil { - return err - } - return nil -} - -func (mounter *NsenterMounter) MakeFile(pathname string) error { - args := []string{pathname} - if _, err := mounter.ne.Exec("touch", args).CombinedOutput(); err != nil { - return err - } - return nil -} - -func (mounter *NsenterMounter) ExistsPath(pathname string) (bool, error) { - // Resolve the symlinks but allow the target not to exist. EvalSymlinks - // would return an generic error when the target does not exist. - hostPath, err := mounter.ne.EvalSymlinks(pathname, false /* mustExist */) - if err != nil { - return false, err - } - kubeletpath := mounter.ne.KubeletPath(hostPath) - return utilpath.Exists(utilpath.CheckFollowSymlink, kubeletpath) -} - -func (mounter *NsenterMounter) EvalHostSymlinks(pathname string) (string, error) { - return mounter.ne.EvalSymlinks(pathname, true) -} - -func (mounter *NsenterMounter) GetMountRefs(pathname string) ([]string, error) { - pathExists, pathErr := PathExists(pathname) - if !pathExists || IsCorruptedMnt(pathErr) { - return []string{}, nil - } else if pathErr != nil { - return nil, fmt.Errorf("Error checking path %s: %v", pathname, pathErr) - } - hostpath, err := mounter.ne.EvalSymlinks(pathname, true /* mustExist */) - if err != nil { - return nil, err - } - return searchMountPoints(hostpath, hostProcMountinfoPath) -} - -func (mounter *NsenterMounter) GetFSGroup(pathname string) (int64, error) { - hostPath, err := mounter.ne.EvalSymlinks(pathname, true /* mustExist */) - if err != nil { - return -1, err - } - kubeletpath := mounter.ne.KubeletPath(hostPath) - return getFSGroup(kubeletpath) -} - -func (mounter *NsenterMounter) GetSELinuxSupport(pathname string) (bool, error) { - return getSELinuxSupport(pathname, hostProcMountsPath) -} - -func (mounter *NsenterMounter) GetMode(pathname string) (os.FileMode, error) { - hostPath, err := mounter.ne.EvalSymlinks(pathname, true /* mustExist */) - if err != nil { - return 0, err - } - kubeletpath := mounter.ne.KubeletPath(hostPath) - return getMode(kubeletpath) -} diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount_unsupported.go b/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount_unsupported.go deleted file mode 100644 index 4679b7e150..0000000000 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount_unsupported.go +++ /dev/null @@ -1,110 +0,0 @@ -// +build !linux - -/* -Copyright 2014 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package mount - -import ( - "errors" - "os" - - "k8s.io/utils/nsenter" -) - -type NsenterMounter struct{} - -func NewNsenterMounter(rootDir string, ne *nsenter.Nsenter) *NsenterMounter { - return &NsenterMounter{} -} - -var _ = Interface(&NsenterMounter{}) - -func (*NsenterMounter) Mount(source string, target string, fstype string, options []string) error { - return nil -} - -func (*NsenterMounter) Unmount(target string) error { - return nil -} - -func (*NsenterMounter) List() ([]MountPoint, error) { - return []MountPoint{}, nil -} - -func (m *NsenterMounter) IsNotMountPoint(dir string) (bool, error) { - return isNotMountPoint(m, dir) -} - -func (*NsenterMounter) IsMountPointMatch(mp MountPoint, dir string) bool { - return (mp.Path == dir) -} - -func (*NsenterMounter) IsLikelyNotMountPoint(file string) (bool, error) { - return true, nil -} - -func (*NsenterMounter) DeviceOpened(pathname string) (bool, error) { - return false, nil -} - -func (*NsenterMounter) PathIsDevice(pathname string) (bool, error) { - return true, nil -} - -func (*NsenterMounter) GetDeviceNameFromMount(mountPath, pluginDir string) (string, error) { - return "", nil -} - -func (*NsenterMounter) MakeRShared(path string) error { - return nil -} - -func (*NsenterMounter) GetFileType(_ string) (FileType, error) { - return FileType("fake"), errors.New("not implemented") -} - -func (*NsenterMounter) MakeDir(pathname string) error { - return nil -} - -func (*NsenterMounter) MakeFile(pathname string) error { - return nil -} - -func (*NsenterMounter) ExistsPath(pathname string) (bool, error) { - return true, errors.New("not implemented") -} - -func (*NsenterMounter) EvalHostSymlinks(pathname string) (string, error) { - return "", errors.New("not implemented") -} - -func (*NsenterMounter) GetMountRefs(pathname string) ([]string, error) { - return nil, errors.New("not implemented") -} - -func (*NsenterMounter) GetFSGroup(pathname string) (int64, error) { - return -1, errors.New("not implemented") -} - -func (*NsenterMounter) GetSELinuxSupport(pathname string) (bool, error) { - return false, errors.New("not implemented") -} - -func (*NsenterMounter) GetMode(pathname string) (os.FileMode, error) { - return 0, errors.New("not implemented") -} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/BUILD index dc4a16cbd6..c5a9f8dda3 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/BUILD @@ -18,6 +18,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/volume", visibility = ["//visibility:public"], deps = [ + "//pkg/features:go_default_library", "//pkg/util/mount:go_default_library", "//pkg/volume/util/fs:go_default_library", "//pkg/volume/util/recyclerclient:go_default_library", @@ -29,8 +30,11 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/listers/storage/v1beta1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", "//staging/src/k8s.io/client-go/tools/record:go_default_library", "//staging/src/k8s.io/cloud-provider:go_default_library", "//vendor/k8s.io/klog:go_default_library", @@ -86,7 +90,7 @@ filegroup( "//pkg/volume/gcepd:all-srcs", "//pkg/volume/git_repo:all-srcs", "//pkg/volume/glusterfs:all-srcs", - "//pkg/volume/host_path:all-srcs", + "//pkg/volume/hostpath:all-srcs", "//pkg/volume/iscsi:all-srcs", "//pkg/volume/local:all-srcs", "//pkg/volume/nfs:all-srcs", diff --git a/vendor/k8s.io/kubernetes/pkg/volume/plugins.go b/vendor/k8s.io/kubernetes/pkg/volume/plugins.go index c26bc9a4f2..e41fc4e52c 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/plugins.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/plugins.go @@ -29,11 +29,15 @@ import ( "k8s.io/apimachinery/pkg/types" utilerrors "k8s.io/apimachinery/pkg/util/errors" "k8s.io/apimachinery/pkg/util/validation" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/client-go/informers" clientset "k8s.io/client-go/kubernetes" storagelisters "k8s.io/client-go/listers/storage/v1beta1" + "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" cloudprovider "k8s.io/cloud-provider" "k8s.io/klog" + "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume/util/recyclerclient" "k8s.io/kubernetes/pkg/volume/util/subpath" @@ -231,7 +235,7 @@ type AttachableVolumePlugin interface { NewAttacher() (Attacher, error) NewDetacher() (Detacher, error) // CanAttach tests if provided volume spec is attachable - CanAttach(spec *Spec) bool + CanAttach(spec *Spec) (bool, error) } // DeviceMountableVolumePlugin is an extended interface of VolumePlugin and is used @@ -241,6 +245,8 @@ type DeviceMountableVolumePlugin interface { NewDeviceMounter() (DeviceMounter, error) NewDeviceUnmounter() (DeviceUnmounter, error) GetDeviceMountRefs(deviceMountPath string) ([]string, error) + // CanDeviceMount determines if device in volume.Spec is mountable + CanDeviceMount(spec *Spec) (bool, error) } // ExpandableVolumePlugin is an extended interface of VolumePlugin and is used for volumes that can be @@ -319,6 +325,15 @@ type KubeletVolumeHost interface { // SetKubeletError lets plugins set an error on the Kubelet runtime status // that will cause the Kubelet to post NotReady status with the error message provided SetKubeletError(err error) + + // GetInformerFactory returns the informer factory for CSIDriverLister + GetInformerFactory() informers.SharedInformerFactory + // CSIDriverLister returns the informer lister for the CSIDriver API Object + CSIDriverLister() storagelisters.CSIDriverLister + // CSIDriverSynced returns the informer synced for the CSIDriver API Object + CSIDriversSynced() cache.InformerSynced + // WaitForCacheSync is a helper function that waits for cache sync for CSIDriverLister + WaitForCacheSync() error } // AttachDetachVolumeHost is a AttachDetach Controller specific interface that plugins can use @@ -327,6 +342,9 @@ type AttachDetachVolumeHost interface { // CSINodeLister returns the informer lister for the CSINode API Object CSINodeLister() storagelisters.CSINodeLister + // CSIDriverLister returns the informer lister for the CSIDriver API Object + CSIDriverLister() storagelisters.CSIDriverLister + // IsAttachDetachController is an interface marker to strictly tie AttachDetachVolumeHost // to the attachDetachController IsAttachDetachController() bool @@ -434,9 +452,10 @@ type VolumePluginMgr struct { // Spec is an internal representation of a volume. All API volume types translate to Spec. type Spec struct { - Volume *v1.Volume - PersistentVolume *v1.PersistentVolume - ReadOnly bool + Volume *v1.Volume + PersistentVolume *v1.PersistentVolume + ReadOnly bool + InlineVolumeSpecForCSIMigration bool } // Name returns the name of either Volume or PersistentVolume, one of which must not be nil. @@ -629,11 +648,9 @@ func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) { return nil, fmt.Errorf("Could not find plugin because volume spec is nil") } - matchedPluginNames := []string{} matches := []VolumePlugin{} - for k, v := range pm.plugins { + for _, v := range pm.plugins { if v.CanSupport(spec) { - matchedPluginNames = append(matchedPluginNames, k) matches = append(matches, v) } } @@ -641,7 +658,6 @@ func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) { pm.refreshProbedPlugins() for _, plugin := range pm.probedPlugins { if plugin.CanSupport(spec) { - matchedPluginNames = append(matchedPluginNames, plugin.GetPluginName()) matches = append(matches, plugin) } } @@ -650,6 +666,10 @@ func (pm *VolumePluginMgr) FindPluginBySpec(spec *Spec) (VolumePlugin, error) { return nil, fmt.Errorf("no volume plugin matched") } if len(matches) > 1 { + matchedPluginNames := []string{} + for _, plugin := range matches { + matchedPluginNames = append(matchedPluginNames, plugin.GetPluginName()) + } return nil, fmt.Errorf("multiple volume plugins matched: %s", strings.Join(matchedPluginNames, ",")) } return matches[0], nil @@ -666,11 +686,9 @@ func (pm *VolumePluginMgr) IsPluginMigratableBySpec(spec *Spec) (bool, error) { return false, fmt.Errorf("could not find if plugin is migratable because volume spec is nil") } - matchedPluginNames := []string{} matches := []VolumePlugin{} - for k, v := range pm.plugins { + for _, v := range pm.plugins { if v.CanSupport(spec) { - matchedPluginNames = append(matchedPluginNames, k) matches = append(matches, v) } } @@ -680,6 +698,10 @@ func (pm *VolumePluginMgr) IsPluginMigratableBySpec(spec *Spec) (bool, error) { return false, nil } if len(matches) > 1 { + matchedPluginNames := []string{} + for _, plugin := range matches { + matchedPluginNames = append(matchedPluginNames, plugin.GetPluginName()) + } return false, fmt.Errorf("multiple volume plugins matched: %s", strings.Join(matchedPluginNames, ",")) } @@ -693,27 +715,24 @@ func (pm *VolumePluginMgr) FindPluginByName(name string) (VolumePlugin, error) { defer pm.mutex.Unlock() // Once we can get rid of legacy names we can reduce this to a map lookup. - matchedPluginNames := []string{} matches := []VolumePlugin{} - for k, v := range pm.plugins { - if v.GetPluginName() == name { - matchedPluginNames = append(matchedPluginNames, k) - matches = append(matches, v) - } + if v, found := pm.plugins[name]; found { + matches = append(matches, v) } pm.refreshProbedPlugins() - for _, plugin := range pm.probedPlugins { - if plugin.GetPluginName() == name { - matchedPluginNames = append(matchedPluginNames, plugin.GetPluginName()) - matches = append(matches, plugin) - } + if plugin, found := pm.probedPlugins[name]; found { + matches = append(matches, plugin) } if len(matches) == 0 { return nil, fmt.Errorf("no volume plugin matched") } if len(matches) > 1 { + matchedPluginNames := []string{} + for _, plugin := range matches { + matchedPluginNames = append(matchedPluginNames, plugin.GetPluginName()) + } return nil, fmt.Errorf("multiple volume plugins matched: %s", strings.Join(matchedPluginNames, ",")) } return matches[0], nil @@ -824,7 +843,7 @@ func (pm *VolumePluginMgr) FindProvisionablePluginByName(name string) (Provision return nil, fmt.Errorf("no provisionable volume plugin matched") } -// FindDeletablePluginBySppec fetches a persistent volume plugin by spec. If +// FindDeletablePluginBySpec fetches a persistent volume plugin by spec. If // no plugin is found, returns error. func (pm *VolumePluginMgr) FindDeletablePluginBySpec(spec *Spec) (DeletableVolumePlugin, error) { volumePlugin, err := pm.FindPluginBySpec(spec) @@ -873,7 +892,9 @@ func (pm *VolumePluginMgr) FindAttachablePluginBySpec(spec *Spec) (AttachableVol return nil, err } if attachableVolumePlugin, ok := volumePlugin.(AttachableVolumePlugin); ok { - if attachableVolumePlugin.CanAttach(spec) { + if canAttach, err := attachableVolumePlugin.CanAttach(spec); err != nil { + return nil, err + } else if canAttach { return attachableVolumePlugin, nil } } @@ -902,7 +923,11 @@ func (pm *VolumePluginMgr) FindDeviceMountablePluginBySpec(spec *Spec) (DeviceMo return nil, err } if deviceMountableVolumePlugin, ok := volumePlugin.(DeviceMountableVolumePlugin); ok { - return deviceMountableVolumePlugin, nil + if canMount, err := deviceMountableVolumePlugin.CanDeviceMount(spec); err != nil { + return nil, err + } else if canMount { + return deviceMountableVolumePlugin, nil + } } return nil, nil } @@ -1004,6 +1029,17 @@ func (pm *VolumePluginMgr) FindNodeExpandablePluginByName(name string) (NodeExpa return nil, nil } +func (pm *VolumePluginMgr) Run(stopCh <-chan struct{}) { + kletHost, ok := pm.Host.(KubeletVolumeHost) + if ok { + // start informer for CSIDriver + if utilfeature.DefaultFeatureGate.Enabled(features.CSIDriverRegistry) { + informerFactory := kletHost.GetInformerFactory() + informerFactory.Start(stopCh) + } + } +} + // NewPersistentVolumeRecyclerPodTemplate creates a template for a recycler // pod. By default, a recycler pod simply runs "rm -rf" on a volume and tests // for emptiness. Most attributes of the template will be correct for most diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/fs/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/util/fs/BUILD index 38602bac3e..504175781f 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/fs/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/fs/BUILD @@ -14,6 +14,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", ], "@io_bazel_rules_go//go/platform:darwin": [ + "//pkg/volume/util/quota:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/golang.org/x/sys/unix:go_default_library", ], @@ -24,6 +25,7 @@ go_library( "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", ], "@io_bazel_rules_go//go/platform:linux": [ + "//pkg/volume/util/quota:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//vendor/golang.org/x/sys/unix:go_default_library", ], diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/fs/fs.go b/vendor/k8s.io/kubernetes/pkg/volume/util/fs/fs.go index a80a167eea..6118a0bac7 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/fs/fs.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/fs/fs.go @@ -27,6 +27,7 @@ import ( "golang.org/x/sys/unix" "k8s.io/apimachinery/pkg/api/resource" + "k8s.io/kubernetes/pkg/volume/util/quota" ) // FSInfo linux returns (available bytes, byte capacity, byte usage, total inodes, inodes free, inode usage, error) @@ -56,6 +57,15 @@ func FsInfo(path string) (int64, int64, int64, int64, int64, int64, error) { // DiskUsage gets disk usage of specified path. func DiskUsage(path string) (*resource.Quantity, error) { + // First check whether the quota system knows about this directory + // A nil quantity with no error means that the path does not support quotas + // and we should use other mechanisms. + data, err := quota.GetConsumption(path) + if data != nil { + return data, nil + } else if err != nil { + return nil, fmt.Errorf("unable to retrieve disk consumption via quota for %s: %v", path, err) + } // Uses the same niceness level as cadvisor.fs does when running du // Uses -B 1 to always scale to a blocksize of 1 byte out, err := exec.Command("nice", "-n", "19", "du", "-s", "-B", "1", path).CombinedOutput() @@ -76,6 +86,15 @@ func Find(path string) (int64, error) { if path == "" { return 0, fmt.Errorf("invalid directory") } + // First check whether the quota system knows about this directory + // A nil quantity with no error means that the path does not support quotas + // and we should use other mechanisms. + inodes, err := quota.GetInodes(path) + if inodes != nil { + return inodes.Value(), nil + } else if err != nil { + return 0, fmt.Errorf("unable to retrieve inode consumption via quota for %s: %v", path, err) + } var counter byteCounter var stderr bytes.Buffer findCmd := exec.Command("find", path, "-xdev", "-printf", ".") diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/quota/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/BUILD new file mode 100644 index 0000000000..278469809e --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/BUILD @@ -0,0 +1,61 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "project.go", + "quota.go", + "quota_linux.go", + "quota_unsupported.go", + ], + importpath = "k8s.io/kubernetes/pkg/volume/util/quota", + visibility = ["//visibility:public"], + deps = [ + "//pkg/features:go_default_library", + "//pkg/util/mount:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + ] + select({ + "@io_bazel_rules_go//go/platform:linux": [ + "//pkg/volume/util/quota/common:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/uuid:go_default_library", + "//vendor/golang.org/x/sys/unix:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + ], + "//conditions:default": [], + }), +) + +go_test( + name = "go_default_test", + srcs = ["quota_linux_test.go"], + embed = [":go_default_library"], + deps = select({ + "@io_bazel_rules_go//go/platform:linux": [ + "//pkg/features:go_default_library", + "//pkg/util/mount:go_default_library", + "//pkg/volume/util/quota/common:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/component-base/featuregate/testing:go_default_library", + ], + "//conditions:default": [], + }), +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/volume/util/quota/common:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/BUILD new file mode 100644 index 0000000000..9261c0cf01 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/BUILD @@ -0,0 +1,31 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "quota_linux_common.go", + "quota_linux_common_impl.go", + ], + importpath = "k8s.io/kubernetes/pkg/volume/util/quota/common", + visibility = ["//visibility:public"], + deps = select({ + "@io_bazel_rules_go//go/platform:linux": [ + "//vendor/k8s.io/klog:go_default_library", + ], + "//conditions:default": [], + }), +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/quota_linux_common.go b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/quota_linux_common.go new file mode 100644 index 0000000000..f73e7c7b8b --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/quota_linux_common.go @@ -0,0 +1,105 @@ +// +build linux + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "regexp" +) + +// QuotaID is generic quota identifier. +// Data type based on quotactl(2). +type QuotaID int32 + +const ( + // UnknownQuotaID -- cannot determine whether a quota is in force + UnknownQuotaID QuotaID = -1 + // BadQuotaID -- Invalid quota + BadQuotaID QuotaID = 0 +) + +const ( + acct = iota + enforcing = iota +) + +// QuotaType -- type of quota to be applied +type QuotaType int + +const ( + // FSQuotaAccounting for quotas for accounting only + FSQuotaAccounting QuotaType = 1 << iota + // FSQuotaEnforcing for quotas for enforcement + FSQuotaEnforcing QuotaType = 1 << iota +) + +// FirstQuota is the quota ID we start with. +// XXXXXXX Need a better way of doing this... +var FirstQuota QuotaID = 1048577 + +// MountsFile is the location of the system mount data +var MountsFile = "/proc/self/mounts" + +// MountParseRegexp parses out /proc/sys/self/mounts +var MountParseRegexp = regexp.MustCompilePOSIX("^([^ ]*)[ \t]*([^ ]*)[ \t]*([^ ]*)") // Ignore options etc. + +// LinuxVolumeQuotaProvider returns an appropriate quota applier +// object if we can support quotas on this device +type LinuxVolumeQuotaProvider interface { + // GetQuotaApplier retrieves an object that can apply + // quotas (or nil if this provider cannot support quotas + // on the device) + GetQuotaApplier(mountpoint string, backingDev string) LinuxVolumeQuotaApplier +} + +// LinuxVolumeQuotaApplier is a generic interface to any quota +// mechanism supported by Linux +type LinuxVolumeQuotaApplier interface { + // GetQuotaOnDir gets the quota ID (if any) that applies to + // this directory + GetQuotaOnDir(path string) (QuotaID, error) + + // SetQuotaOnDir applies the specified quota ID to a directory. + // Negative value for bytes means that a non-enforcing quota + // should be applied (perhaps by setting a quota too large to + // be hit) + SetQuotaOnDir(path string, id QuotaID, bytes int64) error + + // QuotaIDIsInUse determines whether the quota ID is in use. + // Implementations should not check /etc/project or /etc/projid, + // only whether their underlying mechanism already has the ID in + // use. + // Return value of false with no error means that the ID is not + // in use; true means that it is already in use. An error + // return means that any quota ID will fail. + QuotaIDIsInUse(id QuotaID) (bool, error) + + // GetConsumption returns the consumption (in bytes) of the + // directory, determined by the implementation's quota-based + // mechanism. If it is unable to do so using that mechanism, + // it should return an error and allow higher layers to + // enumerate the directory. + GetConsumption(path string, id QuotaID) (int64, error) + + // GetInodes returns the number of inodes used by the + // directory, determined by the implementation's quota-based + // mechanism. If it is unable to do so using that mechanism, + // it should return an error and allow higher layers to + // enumerate the directory. + GetInodes(path string, id QuotaID) (int64, error) +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/quota_linux_common_impl.go b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/quota_linux_common_impl.go new file mode 100644 index 0000000000..7f17b10baa --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/common/quota_linux_common_impl.go @@ -0,0 +1,286 @@ +// +build linux + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package common + +import ( + "bufio" + "fmt" + "io/ioutil" + "os" + "os/exec" + "regexp" + "strconv" + "strings" + "sync" + "syscall" + + "k8s.io/klog" +) + +var quotaCmd string +var quotaCmdInitialized bool +var quotaCmdLock sync.RWMutex + +// If we later get a filesystem that uses project quota semantics other than +// XFS, we'll need to change this. +// Higher levels don't need to know what's inside +type linuxFilesystemType struct { + name string + typeMagic int64 // Filesystem magic number, per statfs(2) + maxQuota int64 + allowEmptyOutput bool // Accept empty output from "quota" command +} + +const ( + bitsPerWord = 32 << (^uint(0) >> 63) // either 32 or 64 +) + +var ( + linuxSupportedFilesystems = []linuxFilesystemType{ + { + name: "XFS", + typeMagic: 0x58465342, + maxQuota: 1<<(bitsPerWord-1) - 1, + allowEmptyOutput: true, // XFS filesystems report nothing if a quota is not present + }, { + name: "ext4fs", + typeMagic: 0xef53, + maxQuota: (1<<(bitsPerWord-1) - 1) & (1<<58 - 1), + allowEmptyOutput: false, // ext4 filesystems always report something even if a quota is not present + }, + } +) + +// VolumeProvider supplies a quota applier to the generic code. +type VolumeProvider struct { +} + +var quotaCmds = []string{"/sbin/xfs_quota", + "/usr/sbin/xfs_quota", + "/bin/xfs_quota"} + +var quotaParseRegexp = regexp.MustCompilePOSIX("^[^ \t]*[ \t]*([0-9]+)") + +var lsattrCmd = "/usr/bin/lsattr" +var lsattrParseRegexp = regexp.MustCompilePOSIX("^ *([0-9]+) [^ ]+ (.*)$") + +// GetQuotaApplier -- does this backing device support quotas that +// can be applied to directories? +func (*VolumeProvider) GetQuotaApplier(mountpoint string, backingDev string) LinuxVolumeQuotaApplier { + for _, fsType := range linuxSupportedFilesystems { + if isFilesystemOfType(mountpoint, backingDev, fsType.typeMagic) { + return linuxVolumeQuotaApplier{mountpoint: mountpoint, + maxQuota: fsType.maxQuota, + allowEmptyOutput: fsType.allowEmptyOutput, + } + } + } + return nil +} + +type linuxVolumeQuotaApplier struct { + mountpoint string + maxQuota int64 + allowEmptyOutput bool +} + +func getXFSQuotaCmd() (string, error) { + quotaCmdLock.Lock() + defer quotaCmdLock.Unlock() + if quotaCmdInitialized { + return quotaCmd, nil + } + for _, program := range quotaCmds { + fileinfo, err := os.Stat(program) + if err == nil && ((fileinfo.Mode().Perm() & (1 << 6)) != 0) { + klog.V(3).Infof("Found xfs_quota program %s", program) + quotaCmd = program + quotaCmdInitialized = true + return quotaCmd, nil + } + } + quotaCmdInitialized = true + return "", fmt.Errorf("No xfs_quota program found") +} + +func doRunXFSQuotaCommand(mountpoint string, mountsFile, command string) (string, error) { + quotaCmd, err := getXFSQuotaCmd() + if err != nil { + return "", err + } + // We're using numeric project IDs directly; no need to scan + // /etc/projects or /etc/projid + klog.V(4).Infof("runXFSQuotaCommand %s -t %s -P/dev/null -D/dev/null -x -f %s -c %s", quotaCmd, mountsFile, mountpoint, command) + cmd := exec.Command(quotaCmd, "-t", mountsFile, "-P/dev/null", "-D/dev/null", "-x", "-f", mountpoint, "-c", command) + + data, err := cmd.Output() + if err != nil { + return "", err + } + klog.V(4).Infof("runXFSQuotaCommand output %q", string(data)) + return string(data), nil +} + +// Extract the mountpoint we care about into a temporary mounts file so that xfs_quota does +// not attempt to scan every mount on the filesystem, which could hang if e. g. +// a stuck NFS mount is present. +// See https://bugzilla.redhat.com/show_bug.cgi?id=237120 for an example +// of the problem that could be caused if this were to happen. +func runXFSQuotaCommand(mountpoint string, command string) (string, error) { + tmpMounts, err := ioutil.TempFile("", "mounts") + if err != nil { + return "", fmt.Errorf("Cannot create temporary mount file: %v", err) + } + tmpMountsFileName := tmpMounts.Name() + defer tmpMounts.Close() + defer os.Remove(tmpMountsFileName) + + mounts, err := os.Open(MountsFile) + if err != nil { + return "", fmt.Errorf("Cannot open mounts file %s: %v", MountsFile, err) + } + defer mounts.Close() + + scanner := bufio.NewScanner(mounts) + for scanner.Scan() { + match := MountParseRegexp.FindStringSubmatch(scanner.Text()) + if match != nil { + mount := match[2] + if mount == mountpoint { + if _, err := tmpMounts.WriteString(fmt.Sprintf("%s\n", scanner.Text())); err != nil { + return "", fmt.Errorf("Cannot write temporary mounts file: %v", err) + } + if err := tmpMounts.Sync(); err != nil { + return "", fmt.Errorf("Cannot sync temporary mounts file: %v", err) + } + return doRunXFSQuotaCommand(mountpoint, tmpMountsFileName, command) + } + } + } + return "", fmt.Errorf("Cannot run xfs_quota: cannot find mount point %s in %s", mountpoint, MountsFile) +} + +// SupportsQuotas determines whether the filesystem supports quotas. +func SupportsQuotas(mountpoint string, qType QuotaType) (bool, error) { + data, err := runXFSQuotaCommand(mountpoint, "state -p") + if err != nil { + return false, err + } + if qType == FSQuotaEnforcing { + return strings.Contains(data, "Enforcement: ON"), nil + } + return strings.Contains(data, "Accounting: ON"), nil +} + +func isFilesystemOfType(mountpoint string, backingDev string, typeMagic int64) bool { + var buf syscall.Statfs_t + err := syscall.Statfs(mountpoint, &buf) + if err != nil { + klog.Warningf("Warning: Unable to statfs %s: %v", mountpoint, err) + return false + } + if int64(buf.Type) != typeMagic { + return false + } + if answer, _ := SupportsQuotas(mountpoint, FSQuotaAccounting); answer { + return true + } + return false +} + +// GetQuotaOnDir retrieves the quota ID (if any) associated with the specified directory +// If we can't make system calls, all we can say is that we don't know whether +// it has a quota, and higher levels have to make the call. +func (v linuxVolumeQuotaApplier) GetQuotaOnDir(path string) (QuotaID, error) { + cmd := exec.Command(lsattrCmd, "-pd", path) + data, err := cmd.Output() + if err != nil { + return BadQuotaID, fmt.Errorf("cannot run lsattr: %v", err) + } + match := lsattrParseRegexp.FindStringSubmatch(string(data)) + if match == nil { + return BadQuotaID, fmt.Errorf("Unable to parse lsattr -pd %s output %s", path, string(data)) + } + if match[2] != path { + return BadQuotaID, fmt.Errorf("Mismatch between supplied and returned path (%s != %s)", path, match[2]) + } + projid, err := strconv.ParseInt(match[1], 10, 32) + if err != nil { + return BadQuotaID, fmt.Errorf("Unable to parse project ID from %s (%v)", match[1], err) + } + return QuotaID(projid), nil +} + +// SetQuotaOnDir applies a quota to the specified directory under the specified mountpoint. +func (v linuxVolumeQuotaApplier) SetQuotaOnDir(path string, id QuotaID, bytes int64) error { + if bytes < 0 || bytes > v.maxQuota { + bytes = v.maxQuota + } + _, err := runXFSQuotaCommand(v.mountpoint, fmt.Sprintf("limit -p bhard=%v bsoft=%v %v", bytes, bytes, id)) + if err != nil { + return err + } + + _, err = runXFSQuotaCommand(v.mountpoint, fmt.Sprintf("project -s -p %s %v", path, id)) + return err +} + +func getQuantity(mountpoint string, id QuotaID, xfsQuotaArg string, multiplier int64, allowEmptyOutput bool) (int64, error) { + data, err := runXFSQuotaCommand(mountpoint, fmt.Sprintf("quota -p -N -n -v %s %v", xfsQuotaArg, id)) + if err != nil { + return 0, fmt.Errorf("Unable to run xfs_quota: %v", err) + } + if data == "" && allowEmptyOutput { + return 0, nil + } + match := quotaParseRegexp.FindStringSubmatch(data) + if match == nil { + return 0, fmt.Errorf("Unable to parse quota output '%s'", data) + } + size, err := strconv.ParseInt(match[1], 10, 64) + if err != nil { + return 0, fmt.Errorf("Unable to parse data size '%s' from '%s': %v", match[1], data, err) + } + klog.V(4).Infof("getQuantity %s %d %s %d => %d %v", mountpoint, id, xfsQuotaArg, multiplier, size, err) + return size * multiplier, nil +} + +// GetConsumption returns the consumption in bytes if available via quotas +func (v linuxVolumeQuotaApplier) GetConsumption(_ string, id QuotaID) (int64, error) { + return getQuantity(v.mountpoint, id, "-b", 1024, v.allowEmptyOutput) +} + +// GetInodes returns the inodes in use if available via quotas +func (v linuxVolumeQuotaApplier) GetInodes(_ string, id QuotaID) (int64, error) { + return getQuantity(v.mountpoint, id, "-i", 1, v.allowEmptyOutput) +} + +// QuotaIDIsInUse checks whether the specified quota ID is in use on the specified +// filesystem +func (v linuxVolumeQuotaApplier) QuotaIDIsInUse(id QuotaID) (bool, error) { + bytes, err := v.GetConsumption(v.mountpoint, id) + if err != nil { + return false, err + } + if bytes > 0 { + return true, nil + } + inodes, err := v.GetInodes(v.mountpoint, id) + return inodes > 0, err +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/quota/project.go b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/project.go new file mode 100644 index 0000000000..b3aa1b244f --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/project.go @@ -0,0 +1,357 @@ +// +build linux + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package quota + +import ( + "bufio" + "fmt" + "io/ioutil" + "os" + "path/filepath" + "regexp" + "strconv" + "sync" + + "golang.org/x/sys/unix" + "k8s.io/kubernetes/pkg/volume/util/quota/common" +) + +var projectsFile = "/etc/projects" +var projidFile = "/etc/projid" + +var projectsParseRegexp = regexp.MustCompilePOSIX("^([[:digit:]]+):(.*)$") +var projidParseRegexp = regexp.MustCompilePOSIX("^([^#][^:]*):([[:digit:]]+)$") + +var quotaIDLock sync.RWMutex + +const maxUnusedQuotasToSearch = 128 // Don't go into an infinite loop searching for an unused quota + +type projectType struct { + isValid bool // False if we need to remove this line + id common.QuotaID + data string // Project name (projid) or directory (projects) + line string +} + +type projectsList struct { + projects []projectType + projid []projectType +} + +func projFilesAreOK() error { + if sf, err := os.Lstat(projectsFile); err != nil || sf.Mode().IsRegular() { + if sf, err := os.Lstat(projidFile); err != nil || sf.Mode().IsRegular() { + return nil + } + return fmt.Errorf("%s exists but is not a plain file, cannot continue", projidFile) + } + return fmt.Errorf("%s exists but is not a plain file, cannot continue", projectsFile) +} + +func lockFile(file *os.File) error { + return unix.Flock(int(file.Fd()), unix.LOCK_EX) +} + +func unlockFile(file *os.File) error { + return unix.Flock(int(file.Fd()), unix.LOCK_UN) +} + +// openAndLockProjectFiles opens /etc/projects and /etc/projid locked. +// Creates them if they don't exist +func openAndLockProjectFiles() (*os.File, *os.File, error) { + // Make sure neither project-related file is a symlink! + if err := projFilesAreOK(); err != nil { + return nil, nil, fmt.Errorf("system project files failed verification: %v", err) + } + // We don't actually modify the original files; we create temporaries and + // move them over the originals + fProjects, err := os.OpenFile(projectsFile, os.O_RDONLY|os.O_CREATE, 0644) + if err != nil { + err = fmt.Errorf("unable to open %s: %v", projectsFile, err) + return nil, nil, err + } + fProjid, err := os.OpenFile(projidFile, os.O_RDONLY|os.O_CREATE, 0644) + if err == nil { + // Check once more, to ensure nothing got changed out from under us + if err := projFilesAreOK(); err == nil { + err = lockFile(fProjects) + if err == nil { + err = lockFile(fProjid) + if err == nil { + return fProjects, fProjid, nil + } + // Nothing useful we can do if we get an error here + err = fmt.Errorf("unable to lock %s: %v", projidFile, err) + unlockFile(fProjects) + } else { + err = fmt.Errorf("unable to lock %s: %v", projectsFile, err) + } + } else { + err = fmt.Errorf("system project files failed re-verification: %v", err) + } + fProjid.Close() + } else { + err = fmt.Errorf("unable to open %s: %v", projidFile, err) + } + fProjects.Close() + return nil, nil, err +} + +func closeProjectFiles(fProjects *os.File, fProjid *os.File) error { + // Nothing useful we can do if either of these fail, + // but we have to close (and thereby unlock) the files anyway. + var err error + var err1 error + if fProjid != nil { + err = fProjid.Close() + } + if fProjects != nil { + err1 = fProjects.Close() + } + if err == nil { + return err1 + } + return err +} + +func parseProject(l string) projectType { + if match := projectsParseRegexp.FindStringSubmatch(l); match != nil { + i, err := strconv.Atoi(match[1]) + if err == nil { + return projectType{true, common.QuotaID(i), match[2], l} + } + } + return projectType{true, common.BadQuotaID, "", l} +} + +func parseProjid(l string) projectType { + if match := projidParseRegexp.FindStringSubmatch(l); match != nil { + i, err := strconv.Atoi(match[2]) + if err == nil { + return projectType{true, common.QuotaID(i), match[1], l} + } + } + return projectType{true, common.BadQuotaID, "", l} +} + +func parseProjFile(f *os.File, parser func(l string) projectType) []projectType { + var answer []projectType + scanner := bufio.NewScanner(f) + for scanner.Scan() { + answer = append(answer, parser(scanner.Text())) + } + return answer +} + +func readProjectFiles(projects *os.File, projid *os.File) projectsList { + return projectsList{parseProjFile(projects, parseProject), parseProjFile(projid, parseProjid)} +} + +func findAvailableQuota(path string, idMap map[common.QuotaID]bool) (common.QuotaID, error) { + unusedQuotasSearched := 0 + for id := common.FirstQuota; id == id; id++ { + if _, ok := idMap[id]; !ok { + isInUse, err := getApplier(path).QuotaIDIsInUse(id) + if err != nil { + return common.BadQuotaID, err + } else if !isInUse { + return id, nil + } + unusedQuotasSearched++ + if unusedQuotasSearched > maxUnusedQuotasToSearch { + break + } + } + } + return common.BadQuotaID, fmt.Errorf("Cannot find available quota ID") +} + +func addDirToProject(path string, id common.QuotaID, list *projectsList) (common.QuotaID, bool, error) { + idMap := make(map[common.QuotaID]bool) + for _, project := range list.projects { + if project.data == path { + if id != project.id { + return common.BadQuotaID, false, fmt.Errorf("Attempt to reassign project ID for %s", path) + } + // Trying to reassign a directory to the project it's + // already in. Maybe this should be an error, but for + // now treat it as an idempotent operation + return id, false, nil + } + idMap[project.id] = true + } + var needToAddProjid = true + for _, projid := range list.projid { + idMap[projid.id] = true + if projid.id == id && id != common.BadQuotaID { + needToAddProjid = false + } + } + var err error + if id == common.BadQuotaID { + id, err = findAvailableQuota(path, idMap) + if err != nil { + return common.BadQuotaID, false, err + } + needToAddProjid = true + } + if needToAddProjid { + name := fmt.Sprintf("volume%v", id) + line := fmt.Sprintf("%s:%v", name, id) + list.projid = append(list.projid, projectType{true, id, name, line}) + } + line := fmt.Sprintf("%v:%s", id, path) + list.projects = append(list.projects, projectType{true, id, path, line}) + return id, needToAddProjid, nil +} + +func removeDirFromProject(path string, id common.QuotaID, list *projectsList) (bool, error) { + if id == common.BadQuotaID { + return false, fmt.Errorf("Attempt to remove invalid quota ID from %s", path) + } + foundAt := -1 + countByID := make(map[common.QuotaID]int) + for i, project := range list.projects { + if project.data == path { + if id != project.id { + return false, fmt.Errorf("Attempting to remove quota ID %v from path %s, but expecting ID %v", id, path, project.id) + } else if foundAt != -1 { + return false, fmt.Errorf("Found multiple quota IDs for path %s", path) + } + // Faster and easier than deleting an element + list.projects[i].isValid = false + foundAt = i + } + countByID[project.id]++ + } + if foundAt == -1 { + return false, fmt.Errorf("Cannot find quota associated with path %s", path) + } + if countByID[id] <= 1 { + // Removing the last entry means that we're no longer using + // the quota ID, so remove that as well + for i, projid := range list.projid { + if projid.id == id { + list.projid[i].isValid = false + } + } + return true, nil + } + return false, nil +} + +func writeProjectFile(base *os.File, projects []projectType) (string, error) { + oname := base.Name() + stat, err := base.Stat() + if err != nil { + return "", err + } + mode := stat.Mode() & os.ModePerm + f, err := ioutil.TempFile(filepath.Dir(oname), filepath.Base(oname)) + if err != nil { + return "", err + } + filename := f.Name() + if err := os.Chmod(filename, mode); err != nil { + return "", err + } + for _, proj := range projects { + if proj.isValid { + if _, err := f.WriteString(fmt.Sprintf("%s\n", proj.line)); err != nil { + f.Close() + os.Remove(filename) + return "", err + } + } + } + if err := f.Close(); err != nil { + os.Remove(filename) + return "", err + } + return filename, nil +} + +func writeProjectFiles(fProjects *os.File, fProjid *os.File, writeProjid bool, list projectsList) error { + tmpProjects, err := writeProjectFile(fProjects, list.projects) + if err == nil { + // Ensure that both files are written before we try to rename either. + if writeProjid { + tmpProjid, err := writeProjectFile(fProjid, list.projid) + if err == nil { + err = os.Rename(tmpProjid, fProjid.Name()) + if err != nil { + os.Remove(tmpProjid) + } + } + } + if err == nil { + err = os.Rename(tmpProjects, fProjects.Name()) + if err == nil { + return nil + } + // We're in a bit of trouble here; at this + // point we've successfully renamed tmpProjid + // to the real thing, but renaming tmpProject + // to the real file failed. There's not much we + // can do in this position. Anything we could do + // to try to undo it would itself be likely to fail. + } + os.Remove(tmpProjects) + } + return fmt.Errorf("Unable to write project files: %v", err) +} + +func createProjectID(path string, ID common.QuotaID) (common.QuotaID, error) { + quotaIDLock.Lock() + defer quotaIDLock.Unlock() + fProjects, fProjid, err := openAndLockProjectFiles() + if err == nil { + defer closeProjectFiles(fProjects, fProjid) + list := readProjectFiles(fProjects, fProjid) + writeProjid := true + ID, writeProjid, err = addDirToProject(path, ID, &list) + if err == nil && ID != common.BadQuotaID { + if err = writeProjectFiles(fProjects, fProjid, writeProjid, list); err == nil { + return ID, nil + } + } + } + return common.BadQuotaID, fmt.Errorf("createProjectID %s %v failed %v", path, ID, err) +} + +func removeProjectID(path string, ID common.QuotaID) error { + if ID == common.BadQuotaID { + return fmt.Errorf("attempting to remove invalid quota ID %v", ID) + } + quotaIDLock.Lock() + defer quotaIDLock.Unlock() + fProjects, fProjid, err := openAndLockProjectFiles() + if err == nil { + defer closeProjectFiles(fProjects, fProjid) + list := readProjectFiles(fProjects, fProjid) + writeProjid := true + writeProjid, err = removeDirFromProject(path, ID, &list) + if err == nil { + if err = writeProjectFiles(fProjects, fProjid, writeProjid, list); err == nil { + return nil + } + } + } + return fmt.Errorf("removeProjectID %s %v failed %v", path, ID, err) +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota.go b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota.go new file mode 100644 index 0000000000..1e578ff5ba --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota.go @@ -0,0 +1,48 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package quota + +import ( + "k8s.io/apimachinery/pkg/api/resource" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/kubernetes/pkg/features" + "k8s.io/kubernetes/pkg/util/mount" +) + +// Interface -- quota interface +type Interface interface { + // Does the path provided support quotas, and if so, what types + SupportsQuotas(m mount.Interface, path string) (bool, error) + // Assign a quota (picked by the quota mechanism) to a path, + // and return it. + AssignQuota(m mount.Interface, path string, poduid string, bytes *resource.Quantity) error + + // Get the quota-based storage consumption for the path + GetConsumption(path string) (*resource.Quantity, error) + + // Get the quota-based inode consumption for the path + GetInodes(path string) (*resource.Quantity, error) + + // Remove the quota from a path + // Implementations may assume that any data covered by the + // quota has already been removed. + ClearQuota(m mount.Interface, path string, poduid string) error +} + +func enabledQuotasForMonitoring() bool { + return utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolationFSQuotaMonitoring) +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota_linux.go b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota_linux.go new file mode 100644 index 0000000000..fdf2f00a2c --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota_linux.go @@ -0,0 +1,440 @@ +// +build linux + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package quota + +import ( + "bufio" + "fmt" + "os" + "path/filepath" + "sync" + + "k8s.io/apimachinery/pkg/api/resource" + "k8s.io/apimachinery/pkg/util/uuid" + "k8s.io/klog" + "k8s.io/kubernetes/pkg/util/mount" + "k8s.io/kubernetes/pkg/volume/util/quota/common" +) + +// Pod -> ID +var podQuotaMap = make(map[string]common.QuotaID) + +// Dir -> ID (for convenience) +var dirQuotaMap = make(map[string]common.QuotaID) + +// ID -> pod +var quotaPodMap = make(map[common.QuotaID]string) + +// Directory -> pod +var dirPodMap = make(map[string]string) + +// Backing device -> applier +// This is *not* cleaned up; its size will be bounded. +var devApplierMap = make(map[string]common.LinuxVolumeQuotaApplier) + +// Directory -> applier +var dirApplierMap = make(map[string]common.LinuxVolumeQuotaApplier) +var dirApplierLock sync.RWMutex + +// Pod -> refcount +var podDirCountMap = make(map[string]int) + +// ID -> size +var quotaSizeMap = make(map[common.QuotaID]int64) +var quotaLock sync.RWMutex + +var supportsQuotasMap = make(map[string]bool) +var supportsQuotasLock sync.RWMutex + +// Directory -> backingDev +var backingDevMap = make(map[string]string) +var backingDevLock sync.RWMutex + +var mountpointMap = make(map[string]string) +var mountpointLock sync.RWMutex + +var providers = []common.LinuxVolumeQuotaProvider{ + &common.VolumeProvider{}, +} + +// Separate the innards for ease of testing +func detectBackingDevInternal(mountpoint string, mounts string) (string, error) { + file, err := os.Open(mounts) + if err != nil { + return "", err + } + defer file.Close() + scanner := bufio.NewScanner(file) + for scanner.Scan() { + match := common.MountParseRegexp.FindStringSubmatch(scanner.Text()) + if match != nil { + device := match[1] + mount := match[2] + if mount == mountpoint { + return device, nil + } + } + } + return "", fmt.Errorf("couldn't find backing device for %s", mountpoint) +} + +// detectBackingDev assumes that the mount point provided is valid +func detectBackingDev(_ mount.Interface, mountpoint string) (string, error) { + return detectBackingDevInternal(mountpoint, common.MountsFile) +} + +func clearBackingDev(path string) { + backingDevLock.Lock() + defer backingDevLock.Unlock() + delete(backingDevMap, path) +} + +// Assumes that the path has been fully canonicalized +// Breaking this up helps with testing +func detectMountpointInternal(m mount.Interface, path string) (string, error) { + for path != "" && path != "/" { + // per pkg/util/mount/mount_linux this detects all but + // a bind mount from one part of a mount to another. + // For our purposes that's fine; we simply want the "true" + // mount point + // + // IsNotMountPoint proved much more troublesome; it actually + // scans the mounts, and when a lot of mount/unmount + // activity takes place, it is not able to get a consistent + // view of /proc/self/mounts, causing it to time out and + // report incorrectly. + isNotMount, err := m.IsLikelyNotMountPoint(path) + if err != nil { + return "/", err + } + if !isNotMount { + return path, nil + } + path = filepath.Dir(path) + } + return "/", nil +} + +func detectMountpoint(m mount.Interface, path string) (string, error) { + xpath, err := filepath.Abs(path) + if err != nil { + return "/", err + } + xpath, err = filepath.EvalSymlinks(xpath) + if err != nil { + return "/", err + } + if xpath, err = detectMountpointInternal(m, xpath); err == nil { + return xpath, nil + } + return "/", err +} + +func clearMountpoint(path string) { + mountpointLock.Lock() + defer mountpointLock.Unlock() + delete(mountpointMap, path) +} + +// getFSInfo Returns mountpoint and backing device +// getFSInfo should cache the mountpoint and backing device for the +// path. +func getFSInfo(m mount.Interface, path string) (string, string, error) { + mountpointLock.Lock() + defer mountpointLock.Unlock() + + backingDevLock.Lock() + defer backingDevLock.Unlock() + + var err error + + mountpoint, okMountpoint := mountpointMap[path] + if !okMountpoint { + mountpoint, err = detectMountpoint(m, path) + if err != nil { + return "", "", fmt.Errorf("Cannot determine mountpoint for %s: %v", path, err) + } + } + + backingDev, okBackingDev := backingDevMap[path] + if !okBackingDev { + backingDev, err = detectBackingDev(m, mountpoint) + if err != nil { + return "", "", fmt.Errorf("Cannot determine backing device for %s: %v", path, err) + } + } + mountpointMap[path] = mountpoint + backingDevMap[path] = backingDev + return mountpoint, backingDev, nil +} + +func clearFSInfo(path string) { + clearMountpoint(path) + clearBackingDev(path) +} + +func getApplier(path string) common.LinuxVolumeQuotaApplier { + dirApplierLock.Lock() + defer dirApplierLock.Unlock() + return dirApplierMap[path] +} + +func setApplier(path string, applier common.LinuxVolumeQuotaApplier) { + dirApplierLock.Lock() + defer dirApplierLock.Unlock() + dirApplierMap[path] = applier +} + +func clearApplier(path string) { + dirApplierLock.Lock() + defer dirApplierLock.Unlock() + delete(dirApplierMap, path) +} + +func setQuotaOnDir(path string, id common.QuotaID, bytes int64) error { + return getApplier(path).SetQuotaOnDir(path, id, bytes) +} + +func getQuotaOnDir(m mount.Interface, path string) (common.QuotaID, error) { + _, _, err := getFSInfo(m, path) + if err != nil { + return common.BadQuotaID, err + } + return getApplier(path).GetQuotaOnDir(path) +} + +func clearQuotaOnDir(m mount.Interface, path string) error { + // Since we may be called without path being in the map, + // we explicitly have to check in this case. + klog.V(4).Infof("clearQuotaOnDir %s", path) + supportsQuotas, err := SupportsQuotas(m, path) + if !supportsQuotas { + return nil + } + projid, err := getQuotaOnDir(m, path) + if err == nil && projid != common.BadQuotaID { + // This means that we have a quota on the directory but + // we can't clear it. That's not good. + err = setQuotaOnDir(path, projid, 0) + if err != nil { + klog.V(3).Infof("Attempt to clear quota failed: %v", err) + } + // Even if clearing the quota failed, we still need to + // try to remove the project ID, or that may be left dangling. + err1 := removeProjectID(path, projid) + if err1 != nil { + klog.V(3).Infof("Attempt to remove quota ID from system files failed: %v", err1) + } + clearFSInfo(path) + if err != nil { + return err + } + return err1 + } + // If we couldn't get a quota, that's fine -- there may + // never have been one, and we have no way to know otherwise + klog.V(3).Infof("clearQuotaOnDir fails %v", err) + return nil +} + +// SupportsQuotas -- Does the path support quotas +// Cache the applier for paths that support quotas. For paths that don't, +// don't cache the result because nothing will clean it up. +// However, do cache the device->applier map; the number of devices +// is bounded. +func SupportsQuotas(m mount.Interface, path string) (bool, error) { + if !enabledQuotasForMonitoring() { + klog.V(3).Info("SupportsQuotas called, but quotas disabled") + return false, nil + } + supportsQuotasLock.Lock() + defer supportsQuotasLock.Unlock() + if supportsQuotas, ok := supportsQuotasMap[path]; ok { + return supportsQuotas, nil + } + mount, dev, err := getFSInfo(m, path) + if err != nil { + return false, err + } + // Do we know about this device? + applier, ok := devApplierMap[mount] + if !ok { + for _, provider := range providers { + if applier = provider.GetQuotaApplier(mount, dev); applier != nil { + devApplierMap[mount] = applier + break + } + } + } + if applier != nil { + supportsQuotasMap[path] = true + setApplier(path, applier) + return true, nil + } + delete(backingDevMap, path) + delete(mountpointMap, path) + return false, nil +} + +// AssignQuota -- assign a quota to the specified directory. +// AssignQuota chooses the quota ID based on the pod UID and path. +// If the pod UID is identical to another one known, it may (but presently +// doesn't) choose the same quota ID as other volumes in the pod. +func AssignQuota(m mount.Interface, path string, poduid string, bytes *resource.Quantity) error { + if bytes == nil { + return fmt.Errorf("Attempting to assign null quota to %s", path) + } + ibytes := bytes.Value() + if ok, err := SupportsQuotas(m, path); !ok { + return fmt.Errorf("Quotas not supported on %s: %v", path, err) + } + quotaLock.Lock() + defer quotaLock.Unlock() + // Current policy is to set individual quotas on each volumes. + // If we decide later that we want to assign one quota for all + // volumes in a pod, we can simply remove this line of code. + // If and when we decide permanently that we're going to adop + // one quota per volume, we can rip all of the pod code out. + poduid = string(uuid.NewUUID()) + if pod, ok := dirPodMap[path]; ok && pod != poduid { + return fmt.Errorf("Requesting quota on existing directory %s but different pod %s %s", path, pod, poduid) + } + oid, ok := podQuotaMap[poduid] + if ok { + if quotaSizeMap[oid] != ibytes { + return fmt.Errorf("Requesting quota of different size: old %v new %v", quotaSizeMap[oid], bytes) + } + } else { + oid = common.BadQuotaID + } + id, err := createProjectID(path, oid) + if err == nil { + if oid != common.BadQuotaID && oid != id { + return fmt.Errorf("Attempt to reassign quota %v to %v", oid, id) + } + // When enforcing quotas are enabled, we'll condition this + // on their being disabled also. + if ibytes > 0 { + ibytes = -1 + } + if err = setQuotaOnDir(path, id, ibytes); err == nil { + quotaPodMap[id] = poduid + quotaSizeMap[id] = ibytes + podQuotaMap[poduid] = id + dirQuotaMap[path] = id + dirPodMap[path] = poduid + podDirCountMap[poduid]++ + klog.V(4).Infof("Assigning quota ID %d (%d) to %s", id, ibytes, path) + return nil + } + removeProjectID(path, id) + } + return fmt.Errorf("Assign quota FAILED %v", err) +} + +// GetConsumption -- retrieve the consumption (in bytes) of the directory +func GetConsumption(path string) (*resource.Quantity, error) { + // Note that we actually need to hold the lock at least through + // running the quota command, so it can't get recycled behind our back + quotaLock.Lock() + defer quotaLock.Unlock() + applier := getApplier(path) + // No applier means directory is not under quota management + if applier == nil { + return nil, nil + } + ibytes, err := applier.GetConsumption(path, dirQuotaMap[path]) + if err != nil { + return nil, err + } + return resource.NewQuantity(ibytes, resource.DecimalSI), nil +} + +// GetInodes -- retrieve the number of inodes in use under the directory +func GetInodes(path string) (*resource.Quantity, error) { + // Note that we actually need to hold the lock at least through + // running the quota command, so it can't get recycled behind our back + quotaLock.Lock() + defer quotaLock.Unlock() + applier := getApplier(path) + // No applier means directory is not under quota management + if applier == nil { + return nil, nil + } + inodes, err := applier.GetInodes(path, dirQuotaMap[path]) + if err != nil { + return nil, err + } + return resource.NewQuantity(inodes, resource.DecimalSI), nil +} + +// ClearQuota -- remove the quota assigned to a directory +func ClearQuota(m mount.Interface, path string) error { + klog.V(3).Infof("ClearQuota %s", path) + if !enabledQuotasForMonitoring() { + return fmt.Errorf("ClearQuota called, but quotas disabled") + } + quotaLock.Lock() + defer quotaLock.Unlock() + poduid, ok := dirPodMap[path] + if !ok { + // Nothing in the map either means that there was no + // quota to begin with or that we're clearing a + // stale directory, so if we find a quota, just remove it. + // The process of clearing the quota requires that an applier + // be found, which needs to be cleaned up. + defer delete(supportsQuotasMap, path) + defer clearApplier(path) + return clearQuotaOnDir(m, path) + } + _, ok = podQuotaMap[poduid] + if !ok { + return fmt.Errorf("ClearQuota: No quota available for %s", path) + } + var err error + projid, err := getQuotaOnDir(m, path) + if projid != dirQuotaMap[path] { + return fmt.Errorf("Expected quota ID %v on dir %s does not match actual %v", dirQuotaMap[path], path, projid) + } + count, ok := podDirCountMap[poduid] + if count <= 1 || !ok { + err = clearQuotaOnDir(m, path) + // This error should be noted; we still need to clean up + // and otherwise handle in the same way. + if err != nil { + klog.V(3).Infof("Unable to clear quota %v %s: %v", dirQuotaMap[path], path, err) + } + delete(quotaSizeMap, podQuotaMap[poduid]) + delete(quotaPodMap, podQuotaMap[poduid]) + delete(podDirCountMap, poduid) + delete(podQuotaMap, poduid) + } else { + err = removeProjectID(path, projid) + podDirCountMap[poduid]-- + klog.V(4).Infof("Not clearing quota for pod %s; still %v dirs outstanding", poduid, podDirCountMap[poduid]) + } + delete(dirPodMap, path) + delete(dirQuotaMap, path) + delete(supportsQuotasMap, path) + clearApplier(path) + if err != nil { + return fmt.Errorf("Unable to clear quota for %s: %v", path, err) + } + return nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota_unsupported.go b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota_unsupported.go new file mode 100644 index 0000000000..16cbfaffd1 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/quota/quota_unsupported.go @@ -0,0 +1,55 @@ +// +build !linux + +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package quota + +import ( + "errors" + "k8s.io/apimachinery/pkg/api/resource" + "k8s.io/kubernetes/pkg/util/mount" +) + +// Dummy quota implementation for systems that do not implement support +// for volume quotas + +var errNotImplemented = errors.New("not implemented") + +// SupportsQuotas -- dummy implementation +func SupportsQuotas(_ mount.Interface, _ string) (bool, error) { + return false, errNotImplemented +} + +// AssignQuota -- dummy implementation +func AssignQuota(_ mount.Interface, _ string, _ string, _ *resource.Quantity) error { + return errNotImplemented +} + +// GetConsumption -- dummy implementation +func GetConsumption(_ string) (*resource.Quantity, error) { + return nil, errNotImplemented +} + +// GetInodes -- dummy implementation +func GetInodes(_ string) (*resource.Quantity, error) { + return nil, errNotImplemented +} + +// ClearQuota -- dummy implementation +func ClearQuota(_ mount.Interface, _ string) error { + return errNotImplemented +} diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/recyclerclient/recycler_client.go b/vendor/k8s.io/kubernetes/pkg/volume/util/recyclerclient/recycler_client.go index c7a8f147f8..0011c1cf49 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/recyclerclient/recycler_client.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/recyclerclient/recycler_client.go @@ -29,6 +29,7 @@ import ( "k8s.io/klog" ) +// RecycleEventRecorder is a func that defines how to record RecycleEvent. type RecycleEventRecorder func(eventtype, message string) // RecycleVolumeByWatchingPodUntilCompletion is intended for use with volume @@ -127,9 +128,8 @@ func waitForPod(pod *v1.Pod, recyclerClient recyclerClient, podCh <-chan watch.E if pod.Status.Phase == v1.PodFailed { if pod.Status.Message != "" { return fmt.Errorf(pod.Status.Message) - } else { - return fmt.Errorf("pod failed, pod.Status.Message unknown.") } + return fmt.Errorf("pod failed, pod.Status.Message unknown") } case watch.Deleted: @@ -238,9 +238,8 @@ func (c *realRecyclerClient) WatchPod(name, namespace string, stopChannel chan s case eventEvent, ok := <-eventWatch.ResultChan(): if !ok { return - } else { - eventCh <- eventEvent } + eventCh <- eventEvent } } }() @@ -256,9 +255,8 @@ func (c *realRecyclerClient) WatchPod(name, namespace string, stopChannel chan s case podEvent, ok := <-podWatch.ResultChan(): if !ok { return - } else { - eventCh <- podEvent } + eventCh <- podEvent } } }() diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/BUILD b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/BUILD index ebbbd4d138..a5b54c47de 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/BUILD +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/BUILD @@ -74,6 +74,7 @@ go_test( deps = select({ "@io_bazel_rules_go//go/platform:linux": [ "//pkg/util/mount:go_default_library", + "//pkg/volume/util/nsenter:go_default_library", "//vendor/golang.org/x/sys/unix:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/nsenter:go_default_library", diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go index 977f7d2da4..109a58a94c 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/subpath/subpath_linux.go @@ -101,7 +101,7 @@ func safeOpenSubPath(mounter mount.Interface, subpath Subpath) (int, error) { func prepareSubpathTarget(mounter mount.Interface, subpath Subpath) (bool, string, error) { // Early check for already bind-mounted subpath. bindPathTarget := getSubpathBindTarget(subpath) - notMount, err := mounter.IsNotMountPoint(bindPathTarget) + notMount, err := mount.IsNotMountPoint(mounter, bindPathTarget) if err != nil { if !os.IsNotExist(err) { return false, "", fmt.Errorf("error checking path %s for mount: %s", bindPathTarget, err) @@ -398,7 +398,7 @@ func doSafeMakeDir(pathname string, base string, perm os.FileMode) error { return fmt.Errorf("cannot create directory %s: %s", currentPath, err) } // Dive into the created directory - childFD, err := syscall.Openat(parentFD, dir, nofollowFlags, 0) + childFD, err = syscall.Openat(parentFD, dir, nofollowFlags, 0) if err != nil { return fmt.Errorf("cannot open %s: %s", currentPath, err) } diff --git a/vendor/k8s.io/kubernetes/pkg/volume/volume.go b/vendor/k8s.io/kubernetes/pkg/volume/volume.go index f597ba1662..bfc4b31d65 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/volume.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/volume.go @@ -101,6 +101,13 @@ type Attributes struct { SupportsSELinux bool } +// MounterArgs provides more easily extensible arguments to Mounter +type MounterArgs struct { + FsGroup *int64 + DesiredSize *resource.Quantity + PodUID string +} + // Mounter interface provides methods to set up/mount the volume. type Mounter interface { // Uses Interface to provide the path for Docker binds. @@ -122,14 +129,14 @@ type Mounter interface { // content should be owned by 'fsGroup' so that it can be // accessed by the pod. This may be called more than once, so // implementations must be idempotent. - SetUp(fsGroup *int64) error + SetUp(mounterArgs MounterArgs) error // SetUpAt prepares and mounts/unpacks the volume to the // specified directory path, which may or may not exist yet. // The mount point and its content should be owned by // 'fsGroup' so that it can be accessed by the pod. This may // be called more than once, so implementations must be // idempotent. - SetUpAt(dir string, fsGroup *int64) error + SetUpAt(dir string, mounterArgs MounterArgs) error // GetAttributes returns the attributes of the mounter. // This function is called after SetUp()/SetUpAt(). GetAttributes() Attributes diff --git a/vendor/modules.txt b/vendor/modules.txt index 8647762a4b..2a1fb2c971 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,4 +1,4 @@ -# cloud.google.com/go v0.34.0 +# cloud.google.com/go v0.38.0 cloud.google.com/go/compute/metadata # github.com/Azure/go-autorest v11.1.2+incompatible github.com/Azure/go-autorest/autorest @@ -47,13 +47,13 @@ github.com/ghodss/yaml github.com/go-logr/logr # github.com/go-logr/zapr v0.1.1 github.com/go-logr/zapr -# github.com/go-openapi/jsonpointer v0.19.2 +# github.com/go-openapi/jsonpointer v0.19.0 github.com/go-openapi/jsonpointer -# github.com/go-openapi/jsonreference v0.19.2 +# github.com/go-openapi/jsonreference v0.19.0 github.com/go-openapi/jsonreference -# github.com/go-openapi/spec v0.19.2 +# github.com/go-openapi/spec v0.17.2 github.com/go-openapi/spec -# github.com/go-openapi/swag v0.19.2 +# github.com/go-openapi/swag v0.19.0 github.com/go-openapi/swag # github.com/gogo/protobuf v1.1.1 github.com/gogo/protobuf/proto @@ -72,7 +72,7 @@ github.com/golang/protobuf/ptypes/timestamp github.com/gomarkdown/markdown/ast github.com/gomarkdown/markdown/html github.com/gomarkdown/markdown/parser -# github.com/google/btree v0.0.0-20160524151835-7d79101e329e +# github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c github.com/google/btree # github.com/google/go-cmp v0.3.0 github.com/google/go-cmp/cmp @@ -88,7 +88,7 @@ github.com/google/uuid github.com/googleapis/gnostic/OpenAPIv2 github.com/googleapis/gnostic/compiler github.com/googleapis/gnostic/extensions -# github.com/gophercloud/gophercloud v0.1.0 +# github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8 github.com/gophercloud/gophercloud github.com/gophercloud/gophercloud/openstack github.com/gophercloud/gophercloud/openstack/identity/v2/tokens @@ -119,7 +119,7 @@ github.com/konsorten/go-windows-terminal-sequences # github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 github.com/kylelemons/godebug/pretty github.com/kylelemons/godebug/diff -# github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63 +# github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 github.com/mailru/easyjson/jlexer github.com/mailru/easyjson/jwriter github.com/mailru/easyjson/buffer @@ -234,7 +234,7 @@ go.uber.org/zap/zapcore go.uber.org/zap/internal/bufferpool go.uber.org/zap/internal/color go.uber.org/zap/internal/exit -# golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 +# golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 golang.org/x/crypto/ssh/terminal # golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 golang.org/x/net/context @@ -280,11 +280,10 @@ golang.org/x/text/internal/language golang.org/x/text/internal/language/compact golang.org/x/text/internal/tag golang.org/x/text/width -# golang.org/x/time v0.0.0-20161028155119-f51c12702a4d +# golang.org/x/time v0.0.0-20181108054448-85acf8d2951c golang.org/x/time/rate -# golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59 +# golang.org/x/tools v0.0.0-20190328211700-ab21143f2384 golang.org/x/tools/imports -golang.org/x/tools/internal/imports golang.org/x/tools/go/ast/astutil golang.org/x/tools/go/packages golang.org/x/tools/internal/gopathwalk @@ -330,7 +329,7 @@ google.golang.org/appengine/internal/base google.golang.org/appengine/internal/datastore google.golang.org/appengine/internal/log google.golang.org/appengine/internal/remote_api -# google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 +# google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7 google.golang.org/genproto/googleapis/rpc/status # google.golang.org/grpc v1.19.1 google.golang.org/grpc @@ -376,7 +375,7 @@ gopkg.in/inf.v0 gopkg.in/tomb.v1 # gopkg.in/yaml.v2 v2.2.2 gopkg.in/yaml.v2 -# k8s.io/api v0.0.0 => k8s.io/api v0.0.0-20190703205437-39734b2a72fe +# k8s.io/api v0.0.0 => k8s.io/api v0.0.0-20190718183219-b59d8169aab5 k8s.io/api/core/v1 k8s.io/api/networking/v1beta1 k8s.io/api/apps/v1 @@ -414,13 +413,14 @@ k8s.io/api/settings/v1alpha1 k8s.io/api/storage/v1 k8s.io/api/storage/v1alpha1 k8s.io/api/storage/v1beta1 -# k8s.io/apiextensions-apiserver v0.0.0-20190626210203-fdc73e13f9a6 +# k8s.io/apiextensions-apiserver v0.0.0 => k8s.io/apiextensions-apiserver v0.0.0-20190620085550-3a2f62f126c9 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1beta1 k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1 k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/scheme k8s.io/apiextensions-apiserver/pkg/apis/apiextensions -# k8s.io/apimachinery v0.0.0 => k8s.io/apimachinery v0.0.0-20190703205208-4cfb76a8bf76 +k8s.io/apiextensions-apiserver/pkg/features +# k8s.io/apimachinery v0.0.0 => k8s.io/apimachinery v0.0.0-20190711103026-7bf792636534 k8s.io/apimachinery/pkg/api/errors k8s.io/apimachinery/pkg/apis/meta/v1 k8s.io/apimachinery/pkg/util/wait @@ -473,9 +473,11 @@ k8s.io/apimachinery/pkg/api/validation k8s.io/apimachinery/pkg/apis/meta/v1/validation k8s.io/apimachinery/third_party/forked/golang/netutil k8s.io/apimachinery/pkg/api/equality -# k8s.io/apiserver v0.0.0-20190625052034-8c075cba2f8c +# k8s.io/apiserver v0.0.0 => k8s.io/apiserver v0.0.0-20190718184206-a1aa83af71a7 k8s.io/apiserver/pkg/server/healthz -# k8s.io/cli-runtime v0.0.0-20190711111425-61e036b70227 +k8s.io/apiserver/pkg/util/feature +k8s.io/apiserver/pkg/features +# k8s.io/cli-runtime v0.0.0 => k8s.io/cli-runtime v0.0.0-20190620085659-429467d76d0e k8s.io/cli-runtime/pkg/genericclioptions k8s.io/cli-runtime/pkg/printers k8s.io/cli-runtime/pkg/resource @@ -488,7 +490,7 @@ k8s.io/cli-runtime/pkg/kustomize/k8sdeps/configmapandsecret k8s.io/cli-runtime/pkg/kustomize/k8sdeps/transformer/hash k8s.io/cli-runtime/pkg/kustomize/k8sdeps/transformer/patch k8s.io/cli-runtime/pkg/kustomize/k8sdeps/kv -# k8s.io/client-go v12.0.0+incompatible +# k8s.io/client-go v12.0.0+incompatible => k8s.io/client-go v0.0.0-20190718183610-8e956561bbf5 k8s.io/client-go/kubernetes k8s.io/client-go/tools/clientcmd k8s.io/client-go/plugin/pkg/client/auth @@ -690,9 +692,9 @@ k8s.io/client-go/listers/storage/v1alpha1 k8s.io/client-go/listers/storage/v1beta1 k8s.io/client-go/transport/spdy k8s.io/client-go/util/exec -# k8s.io/cloud-provider v0.0.0-20190711113108-0d51509e0ef5 +# k8s.io/cloud-provider v0.0.0 => k8s.io/cloud-provider v0.0.0-20190620090041-1a7e1f6630cd k8s.io/cloud-provider -# k8s.io/code-generator v0.0.0-20190620073620-d55040311883 +# k8s.io/code-generator v0.0.0 => k8s.io/code-generator v0.0.0-20190612205613-18da4a14b22b k8s.io/code-generator k8s.io/code-generator/cmd/client-gen k8s.io/code-generator/cmd/conversion-gen @@ -725,8 +727,11 @@ k8s.io/code-generator/cmd/client-gen/generators/util k8s.io/code-generator/cmd/client-gen/path k8s.io/code-generator/pkg/namer k8s.io/code-generator/third_party/forked/golang/reflect -# k8s.io/component-base v0.0.0-20190626045757-ca439aa083f5 +# k8s.io/component-base v0.0.0 => k8s.io/component-base v0.0.0-20190620085131-4cd66be69262 k8s.io/component-base/logs +k8s.io/component-base/featuregate +# k8s.io/cri-api v0.0.0 => k8s.io/cri-api v0.0.0-20190531030430-6117653b35f1 +k8s.io/cri-api/pkg/apis/runtime/v1alpha2 # k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af k8s.io/gengo/args k8s.io/gengo/examples/deepcopy-gen/generators @@ -740,25 +745,27 @@ k8s.io/gengo/parser k8s.io/gengo/examples/set-gen/sets # k8s.io/klog v0.3.3 k8s.io/klog -# k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 +# k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 => k8s.io/kube-openapi v0.0.0-20190228160746-b3a7cee44a30 k8s.io/kube-openapi/pkg/util/proto k8s.io/kube-openapi/pkg/common -# k8s.io/kubernetes v0.0.0 => k8s.io/kubernetes v1.14.3 +# k8s.io/kubernetes v1.15.1 => k8s.io/kubernetes v1.15.1 k8s.io/kubernetes/pkg/util/filesystem k8s.io/kubernetes/pkg/util/sysctl k8s.io/kubernetes/pkg/kubelet/util/sliceutils k8s.io/kubernetes/pkg/api/v1/pod k8s.io/kubernetes/pkg/kubelet/container k8s.io/kubernetes/pkg/api/legacyscheme -k8s.io/kubernetes/pkg/kubelet/apis/cri/runtime/v1alpha2 k8s.io/kubernetes/pkg/kubelet/util/format k8s.io/kubernetes/pkg/util/hash k8s.io/kubernetes/pkg/volume k8s.io/kubernetes/third_party/forked/golang/expansion +k8s.io/kubernetes/pkg/features k8s.io/kubernetes/pkg/util/mount k8s.io/kubernetes/pkg/volume/util/fs k8s.io/kubernetes/pkg/volume/util/recyclerclient k8s.io/kubernetes/pkg/volume/util/subpath +k8s.io/kubernetes/pkg/volume/util/quota +k8s.io/kubernetes/pkg/volume/util/quota/common # k8s.io/utils v0.0.0-20190607212802-c55fbcfc754a k8s.io/utils/buffer k8s.io/utils/trace @@ -767,8 +774,8 @@ k8s.io/utils/pointer k8s.io/utils/exec k8s.io/utils/io k8s.io/utils/keymutex -k8s.io/utils/nsenter k8s.io/utils/path +k8s.io/utils/nsenter # sigs.k8s.io/controller-runtime v0.1.10 sigs.k8s.io/controller-runtime/pkg/envtest sigs.k8s.io/controller-runtime/pkg/client/config