From 7a675ccd9203173ed2eca117d5075a7a1e5b09c1 Mon Sep 17 00:00:00 2001 From: Antonio Murdaca Date: Mon, 13 Nov 2017 11:33:25 +0100 Subject: [PATCH] vendor: bump to Kube 1.9/master Signed-off-by: Antonio Murdaca --- contrib/test/integration/build/kubernetes.yml | 3 +- contrib/test/integration/golang.yml | 7 +- contrib/test/integration/main.yml | 6 + vendor.conf | 12 +- vendor/github.com/buger/goterm/README.md | 119 - vendor/github.com/buger/goterm/box.go | 122 - vendor/github.com/buger/goterm/plot.go | 328 -- vendor/github.com/buger/goterm/table.go | 34 - vendor/github.com/buger/goterm/terminal.go | 258 -- .../buger/goterm/terminal_nosysioctl.go | 12 - .../buger/goterm/terminal_sysioctl.go | 36 - .../pkg/sysregistries/system_registries.go | 86 - .../emicklei/go-restful-swagger12/LICENSE | 22 - .../emicklei/go-restful-swagger12/README.md | 83 - .../api_declaration_list.go | 64 - .../emicklei/go-restful-swagger12/config.go | 46 - .../go-restful-swagger12/model_builder.go | 467 --- .../go-restful-swagger12/model_list.go | 86 - .../model_property_ext.go | 81 - .../model_property_list.go | 87 - .../go-restful-swagger12/ordered_route_map.go | 36 - .../emicklei/go-restful-swagger12/swagger.go | 185 -- .../go-restful-swagger12/swagger_builder.go | 21 - .../swagger_webservice.go | 443 --- vendor/github.com/fatih/camelcase/LICENSE.md | 20 - vendor/github.com/fatih/camelcase/README.md | 58 - .../github.com/fatih/camelcase/camelcase.go | 90 - vendor/github.com/ulule/deepcopier/LICENSE | 22 - vendor/github.com/ulule/deepcopier/README.md | 129 - .../github.com/ulule/deepcopier/deepcopier.go | 350 -- .../x/crypto/ssh/terminal/terminal.go | 892 ----- .../golang.org/x/crypto/ssh/terminal/util.go | 128 - .../x/crypto/ssh/terminal/util_bsd.go | 12 - .../x/crypto/ssh/terminal/util_linux.go | 11 - .../x/crypto/ssh/terminal/util_plan9.go | 58 - .../x/crypto/ssh/terminal/util_windows.go | 174 - .../v1alpha1/generated.pb.go | 149 +- .../v1alpha1/generated.proto | 3 + .../admissionregistration/v1alpha1/types.go | 6 +- .../v1alpha1/types_swagger_doc_generated.go | 1 + vendor/k8s.io/api/apps/v1/doc.go | 20 + vendor/k8s.io/api/apps/v1/generated.pb.go | 1558 +++++++++ vendor/k8s.io/api/apps/v1/generated.proto | 181 ++ vendor/k8s.io/api/apps/v1/register.go | 52 + vendor/k8s.io/api/apps/v1/types.go | 201 ++ .../apps/v1/types_swagger_doc_generated.go | 100 + .../api/apps/v1/zz_generated.deepcopy.go | 240 ++ .../k8s.io/api/apps/v1beta2/generated.proto | 2 +- vendor/k8s.io/api/apps/v1beta2/types.go | 8 +- .../v1beta2/types_swagger_doc_generated.go | 2 +- .../api/authorization/v1/generated.proto | 3 +- vendor/k8s.io/api/authorization/v1/types.go | 3 +- .../v1/types_swagger_doc_generated.go | 2 +- .../api/authorization/v1beta1/generated.proto | 3 +- .../k8s.io/api/authorization/v1beta1/types.go | 3 +- .../v1beta1/types_swagger_doc_generated.go | 2 +- vendor/k8s.io/api/autoscaling/v1/types.go | 2 +- .../k8s.io/api/autoscaling/v2beta1/types.go | 2 +- vendor/k8s.io/api/batch/v1/generated.proto | 2 +- vendor/k8s.io/api/batch/v1/types.go | 2 +- .../batch/v1/types_swagger_doc_generated.go | 2 +- vendor/k8s.io/api/core/v1/generated.pb.go | 2874 +++++++++++------ vendor/k8s.io/api/core/v1/generated.proto | 123 +- vendor/k8s.io/api/core/v1/types.go | 109 +- .../core/v1/types_swagger_doc_generated.go | 58 +- .../api/core/v1/zz_generated.deepcopy.go | 77 +- .../api/extensions/v1beta1/generated.pb.go | 484 +-- .../api/extensions/v1beta1/generated.proto | 6 +- vendor/k8s.io/api/extensions/v1beta1/types.go | 8 +- .../v1beta1/types_swagger_doc_generated.go | 6 +- .../v1beta1/zz_generated.deepcopy.go | 9 + vendor/k8s.io/api/rbac/v1/generated.pb.go | 96 +- .../k8s.io/api/rbac/v1beta1/generated.proto | 3 +- vendor/k8s.io/api/rbac/v1beta1/types.go | 3 +- .../v1beta1/types_swagger_doc_generated.go | 2 +- .../k8s.io/apiextensions-apiserver/README.md | 4 +- .../pkg/api/resource/generated.proto | 1 + .../apimachinery/pkg/api/resource/quantity.go | 3 +- .../pkg/api/resource/zz_generated.deepcopy.go | 44 + .../pkg/apis/meta/internalversion/register.go | 3 - .../pkg/apis/meta/v1/conversion.go | 1 - .../pkg/apis/meta/v1/micro_time.go | 8 +- .../apimachinery/pkg/apis/meta/v1/time.go | 8 +- .../apis/meta/v1/unstructured/unstructured.go | 24 +- .../pkg/apis/meta/v1alpha1/types.go | 2 +- .../pkg/conversion/queryparams/convert.go | 9 +- .../pkg/conversion/unstructured/converter.go | 58 +- .../apimachinery/pkg/labels/selector.go | 2 +- .../apimachinery/pkg/runtime/interfaces.go | 7 - .../k8s.io/apimachinery/pkg/runtime/scheme.go | 26 +- .../serializer/versioning/versioning.go | 22 +- .../k8s.io/apimachinery/pkg/util/diff/diff.go | 11 +- .../pkg/util/httpstream/spdy/roundtripper.go | 2 +- .../k8s.io/apimachinery/pkg/util/net/http.go | 26 +- .../k8s.io/apimachinery/pkg/util/rand/rand.go | 95 - .../apimachinery/pkg/util/runtime/runtime.go | 4 +- .../pkg/util/strategicpatch/patch.go | 14 +- .../pkg/util/validation/field/errors.go | 7 +- .../apiserver/pkg/features/kube_features.go | 3 +- .../pkg/util/feature/feature_gate.go | 141 +- vendor/k8s.io/client-go/README.md | 51 +- .../client-go/discovery/discovery_client.go | 44 - .../k8s.io/client-go/kubernetes/clientset.go | 20 +- vendor/k8s.io/client-go/kubernetes/doc.go | 2 - .../k8s.io/client-go/kubernetes/scheme/doc.go | 2 - .../client-go/kubernetes/scheme/register.go | 2 + .../admissionregistration/v1alpha1/doc.go | 2 - .../kubernetes/typed/apps/v1/apps_client.go | 88 + .../kubernetes/typed/apps/v1/daemonset.go | 172 + .../client-go/kubernetes/typed/apps/v1/doc.go | 18 + .../typed/apps/v1/generated_expansion.go | 19 + .../kubernetes/typed/apps/v1beta1/doc.go | 2 - .../kubernetes/typed/apps/v1beta2/doc.go | 2 - .../kubernetes/typed/authentication/v1/doc.go | 2 - .../typed/authentication/v1beta1/doc.go | 2 - .../kubernetes/typed/authorization/v1/doc.go | 2 - .../typed/authorization/v1beta1/doc.go | 2 - .../kubernetes/typed/autoscaling/v1/doc.go | 2 - .../typed/autoscaling/v2beta1/doc.go | 2 - .../kubernetes/typed/batch/v1/doc.go | 2 - .../kubernetes/typed/batch/v1beta1/doc.go | 2 - .../kubernetes/typed/batch/v2alpha1/doc.go | 2 - .../typed/certificates/v1beta1/doc.go | 2 - .../client-go/kubernetes/typed/core/v1/doc.go | 2 - .../typed/extensions/v1beta1/doc.go | 2 - .../kubernetes/typed/networking/v1/doc.go | 2 - .../kubernetes/typed/policy/v1beta1/doc.go | 2 - .../client-go/kubernetes/typed/rbac/v1/doc.go | 2 - .../kubernetes/typed/rbac/v1alpha1/doc.go | 2 - .../kubernetes/typed/rbac/v1beta1/doc.go | 2 - .../typed/scheduling/v1alpha1/doc.go | 2 - .../kubernetes/typed/settings/v1alpha1/doc.go | 2 - .../kubernetes/typed/storage/v1/doc.go | 2 - .../kubernetes/typed/storage/v1beta1/doc.go | 2 - vendor/k8s.io/client-go/pkg/version/base.go | 6 +- vendor/k8s.io/client-go/rest/config.go | 40 + vendor/k8s.io/client-go/rest/request.go | 21 +- vendor/k8s.io/client-go/rest/url_utils.go | 11 +- .../client-go/tools/cache/delta_fifo.go | 4 + vendor/k8s.io/client-go/tools/cache/fifo.go | 2 +- .../k8s.io/client-go/tools/cache/listwatch.go | 17 +- .../tools/cache/mutation_detector.go | 16 +- .../client-go/tools/cache/shared_informer.go | 39 +- .../tools/cache/thread_safe_store.go | 10 +- .../client-go/util/buffer/ring_growing.go | 72 + vendor/k8s.io/client-go/util/cert/io.go | 10 +- vendor/k8s.io/kubernetes/README.md | 2 +- .../pkg/api/annotation_key_constants.go | 6 - .../kubernetes/pkg/api/helper/helpers.go | 5 + .../kubernetes/pkg/api/install/install.go | 3 +- .../kubernetes/pkg/api/legacyscheme/scheme.go | 46 + vendor/k8s.io/kubernetes/pkg/api/register.go | 25 - vendor/k8s.io/kubernetes/pkg/api/types.go | 85 +- .../kubernetes/pkg/api/util/group_version.go | 48 - .../kubernetes/pkg/api/v1/conversion.go | 20 + .../k8s.io/kubernetes/pkg/api/v1/defaults.go | 23 +- .../k8s.io/kubernetes/pkg/api/v1/generate.go | 65 - .../kubernetes/pkg/api/v1/helper/helpers.go | 8 +- .../pkg/api/v1/zz_generated.conversion.go | 88 +- .../pkg/api/v1/zz_generated.defaults.go | 4 +- .../kubernetes/pkg/api/validation/events.go | 12 +- .../pkg/api/validation/validation.go | 44 +- .../pkg/api/zz_generated.deepcopy.go | 77 +- .../pkg/apis/extensions/register.go | 2 +- .../kubernetes/pkg/apis/extensions/types.go | 4 +- .../kubernetes/pkg/cloudprovider/README.md | 4 +- .../kubernetes/pkg/cloudprovider/cloud.go | 1 + .../pkg/controller/client_builder.go | 3 +- .../pkg/controller/controller_utils.go | 44 +- .../kubernetes/pkg/features/kube_features.go | 9 +- .../apis/cri/v1alpha1/runtime/api.pb.go | 1558 +++++++-- .../apis/cri/v1alpha1/runtime/api.proto | 52 +- .../pkg/kubelet/container/helpers.go | 2 +- .../kubernetes/pkg/kubelet/container/ref.go | 4 +- .../pkg/kubelet/container/runtime.go | 5 +- .../network/hostport/hostport_manager.go | 5 - .../network/hostport/hostport_syncer.go | 2 +- .../pkg/kubelet/server/streaming/server.go | 50 +- .../kubernetes/pkg/proxy/iptables/proxier.go | 71 +- .../proxy/{iptables => metrics}/metrics.go | 8 +- .../kubernetes/pkg/proxy/util/conntrack.go | 30 +- .../kubernetes/pkg/proxy/util/endpoints.go | 51 + .../k8s.io/kubernetes/pkg/proxy/util/port.go | 5 +- .../pkg/security/apparmor/helpers.go | 7 +- .../pkg/security/apparmor/validate.go | 2 +- .../kubernetes/pkg/util/dbus/fake_dbus.go | 6 + .../kubernetes/pkg/util/iptables/iptables.go | 90 +- .../k8s.io/kubernetes/pkg/util/mount/fake.go | 24 +- .../k8s.io/kubernetes/pkg/util/mount/mount.go | 91 +- .../kubernetes/pkg/util/mount/mount_linux.go | 170 +- .../pkg/util/mount/mount_unsupported.go | 30 + .../pkg/util/mount/mount_windows.go | 147 +- .../pkg/util/mount/nsenter_mount.go | 184 +- .../util/mount/nsenter_mount_unsupported.go | 20 + .../kubernetes/pkg/util/nsenter/nsenter.go | 124 + .../pkg/util/nsenter/nsenter_unsupported.go | 50 + .../kubernetes/pkg/util/taints/taints.go | 43 +- .../kubernetes/pkg/util/version/version.go | 39 +- .../k8s.io/kubernetes/pkg/volume/plugins.go | 4 +- vendor/k8s.io/kubernetes/pkg/volume/util.go | 64 +- .../kubernetes/pkg/volume/util/metrics.go | 5 +- .../k8s.io/kubernetes/pkg/volume/util/util.go | 8 +- 202 files changed, 8543 insertions(+), 7270 deletions(-) delete mode 100644 vendor/github.com/buger/goterm/README.md delete mode 100644 vendor/github.com/buger/goterm/box.go delete mode 100644 vendor/github.com/buger/goterm/plot.go delete mode 100644 vendor/github.com/buger/goterm/table.go delete mode 100644 vendor/github.com/buger/goterm/terminal.go delete mode 100644 vendor/github.com/buger/goterm/terminal_nosysioctl.go delete mode 100644 vendor/github.com/buger/goterm/terminal_sysioctl.go delete mode 100644 vendor/github.com/containers/image/pkg/sysregistries/system_registries.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/LICENSE delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/README.md delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/api_declaration_list.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/config.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/model_builder.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/model_list.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/model_property_ext.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/model_property_list.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/ordered_route_map.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/swagger.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/swagger_builder.go delete mode 100644 vendor/github.com/emicklei/go-restful-swagger12/swagger_webservice.go delete mode 100644 vendor/github.com/fatih/camelcase/LICENSE.md delete mode 100644 vendor/github.com/fatih/camelcase/README.md delete mode 100644 vendor/github.com/fatih/camelcase/camelcase.go delete mode 100644 vendor/github.com/ulule/deepcopier/LICENSE delete mode 100644 vendor/github.com/ulule/deepcopier/README.md delete mode 100644 vendor/github.com/ulule/deepcopier/deepcopier.go delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/terminal.go delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util.go delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_linux.go delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go delete mode 100644 vendor/golang.org/x/crypto/ssh/terminal/util_windows.go create mode 100644 vendor/k8s.io/api/apps/v1/doc.go create mode 100644 vendor/k8s.io/api/apps/v1/generated.pb.go create mode 100644 vendor/k8s.io/api/apps/v1/generated.proto create mode 100644 vendor/k8s.io/api/apps/v1/register.go create mode 100644 vendor/k8s.io/api/apps/v1/types.go create mode 100644 vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go create mode 100644 vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go create mode 100644 vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/util/rand/rand.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go create mode 100644 vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go create mode 100644 vendor/k8s.io/client-go/util/buffer/ring_growing.go create mode 100644 vendor/k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/api/util/group_version.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/api/v1/generate.go rename vendor/k8s.io/kubernetes/pkg/proxy/{iptables => metrics}/metrics.go (80%) create mode 100644 vendor/k8s.io/kubernetes/pkg/proxy/util/endpoints.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/nsenter/nsenter.go create mode 100644 vendor/k8s.io/kubernetes/pkg/util/nsenter/nsenter_unsupported.go diff --git a/contrib/test/integration/build/kubernetes.yml b/contrib/test/integration/build/kubernetes.yml index f0b929a7..69c671c9 100644 --- a/contrib/test/integration/build/kubernetes.yml +++ b/contrib/test/integration/build/kubernetes.yml @@ -4,7 +4,8 @@ git: repo: "https://github.com/runcom/kubernetes.git" dest: "{{ ansible_env.GOPATH }}/src/k8s.io/kubernetes" - version: "cri-o-patched-1.8" + # based on kube v1.9.0-alpha.2, update as needed + version: "cri-o-patched-1.9" force: "{{ force_clone | default(False) | bool}}" - name: install etcd diff --git a/contrib/test/integration/golang.yml b/contrib/test/integration/golang.yml index 63e55697..a824fb8e 100644 --- a/contrib/test/integration/golang.yml +++ b/contrib/test/integration/golang.yml @@ -1,9 +1,14 @@ --- +- name: ensure Golang dir is empty first + file: + path: /usr/local/go + state: absent + - name: fetch Golang unarchive: remote_src: yes - src: https://storage.googleapis.com/golang/go1.8.4.linux-amd64.tar.gz + src: "https://storage.googleapis.com/golang/go{{ version }}.linux-amd64.tar.gz" dest: /usr/local - name: link go toolchain diff --git a/contrib/test/integration/main.yml b/contrib/test/integration/main.yml index 19dd5b3e..1e96b313 100644 --- a/contrib/test/integration/main.yml +++ b/contrib/test/integration/main.yml @@ -10,6 +10,8 @@ - name: install Golang tools include: golang.yml + vars: + version: "1.8.4" - name: clone build and install bats include: "build/bats.yml" @@ -54,6 +56,10 @@ tags: - e2e tasks: + - name: install Golang tools + include: golang.yml + vars: + version: "1.9.2" - name: clone build and install kubernetes include: "build/kubernetes.yml" vars: diff --git a/vendor.conf b/vendor.conf index 13cda0d4..ef983012 100644 --- a/vendor.conf +++ b/vendor.conf @@ -1,11 +1,11 @@ -k8s.io/kubernetes v1.8.1 https://github.com/kubernetes/kubernetes -k8s.io/client-go release-5.0 https://github.com/kubernetes/client-go -k8s.io/apimachinery release-1.8 https://github.com/kubernetes/apimachinery -k8s.io/apiserver release-1.8 https://github.com/kubernetes/apiserver +k8s.io/kubernetes v1.9.0-alpha.2 https://github.com/kubernetes/kubernetes +k8s.io/client-go master https://github.com/kubernetes/client-go +k8s.io/apimachinery master https://github.com/kubernetes/apimachinery +k8s.io/apiserver master https://github.com/kubernetes/apiserver k8s.io/utils 4fe312863be2155a7b68acd2aff1c9221b24e68c https://github.com/kubernetes/utils -k8s.io/api release-1.8 https://github.com/kubernetes/api +k8s.io/api master https://github.com/kubernetes/api k8s.io/kube-openapi abfc5fbe1cf87ee697db107fdfd24c32fe4397a8 https://github.com/kubernetes/kube-openapi -k8s.io/apiextensions-apiserver release-1.8 https://github.com/kubernetes/apiextensions-apiserver +k8s.io/apiextensions-apiserver master https://github.com/kubernetes/apiextensions-apiserver # github.com/googleapis/gnostic 0c5108395e2debce0d731cf0287ddf7242066aba github.com/gregjones/httpcache 787624de3eb7bd915c329cba748687a3b22666a6 diff --git a/vendor/github.com/buger/goterm/README.md b/vendor/github.com/buger/goterm/README.md deleted file mode 100644 index 536b7b88..00000000 --- a/vendor/github.com/buger/goterm/README.md +++ /dev/null @@ -1,119 +0,0 @@ -## Description - -This library provides basic building blocks for building advanced console UIs. - -Initially created for [Gor](http://github.com/buger/gor). - -Full API documentation: http://godoc.org/github.com/buger/goterm - -## Basic usage - -Full screen console app, printing current time: - -```go -import ( - tm "github.com/buger/goterm" - "time" -) - -func main() { - tm.Clear() // Clear current screen - - for { - // By moving cursor to top-left position we ensure that console output - // will be overwritten each time, instead of adding new. - tm.MoveCursor(1,1) - - tm.Println("Current Time:", time.Now().Format(time.RFC1123)) - - tm.Flush() // Call it every time at the end of rendering - - time.Sleep(time.Second) - } -} -``` - -This can be seen in [examples/time_example.go](examples/time_example.go). To -run it yourself, go into your `$GOPATH/src/github.com/buger/goterm` directory -and run `go run ./examples/time_example.go` - - -Print red bold message on white background: - -```go -tm.Println(tm.Background(tm.Color(tm.Bold("Important header"), tm.RED), tm.WHITE)) -``` - - -Create box and move it to center of the screen: - -```go -tm.Clear() - -// Create Box with 30% width of current screen, and height of 20 lines -box := tm.NewBox(30|tm.PCT, 20, 0) - -// Add some content to the box -// Note that you can add ANY content, even tables -fmt.Fprint(box, "Some box content") - -// Move Box to approx center of the screen -tm.Print(tm.MoveTo(box.String(), 40|tm.PCT, 40|tm.PCT)) - -tm.Flush() -``` - -This can be found in [examples/box_example.go](examples/box_example.go). - -Draw table: - -```go -// Based on http://golang.org/pkg/text/tabwriter -totals := tm.NewTable(0, 10, 5, ' ', 0) -fmt.Fprintf(totals, "Time\tStarted\tActive\tFinished\n") -fmt.Fprintf(totals, "%s\t%d\t%d\t%d\n", "All", started, started-finished, finished) -tm.Println(totals) -tm.Flush() -``` - -This can be found in [examples/table_example.go](examples/table_example.go). - -## Line charts - -Chart example: - -![screen shot 2013-07-09 at 5 05 37 pm](https://f.cloud.github.com/assets/14009/767676/e3dd35aa-e887-11e2-9cd2-f6451eb26adc.png) - - -```go - import ( - tm "github.com/buger/goterm" - ) - - chart := tm.NewLineChart(100, 20) - - data := new(tm.DataTable) - data.addColumn("Time") - data.addColumn("Sin(x)") - data.addColumn("Cos(x+1)") - - for i := 0.1; i < 10; i += 0.1 { - data.addRow(i, math.Sin(i), math.Cos(i+1)) - } - - tm.Println(chart.Draw(data)) -``` - -This can be found in [examples/chart_example.go](examples/chart_example.go). - -Drawing 2 separate graphs in different scales. Each graph have its own Y axe. - -```go -chart.Flags = tm.DRAW_INDEPENDENT -``` - -Drawing graph with relative scale (Grapwh draw starting from min value instead of zero) - -```go -chart.Flags = tm.DRAW_RELATIVE -``` diff --git a/vendor/github.com/buger/goterm/box.go b/vendor/github.com/buger/goterm/box.go deleted file mode 100644 index 7df929d7..00000000 --- a/vendor/github.com/buger/goterm/box.go +++ /dev/null @@ -1,122 +0,0 @@ -package goterm - -import ( - "bytes" - "strings" -) - -const DEFAULT_BORDER = "- │ ┌ ┐ └ ┘" - -// Box allows you to create independent parts of screen, with its own buffer and borders. -// Can be used for creating modal windows -// -// Generates boxes likes this: -// ┌--------┐ -// │hello │ -// │world │ -// │ │ -// └--------┘ -// -type Box struct { - Buf *bytes.Buffer - - Width int - Height int - - // To get even padding: PaddingX ~= PaddingY*4 - PaddingX int - PaddingY int - - // Should contain 6 border pieces separated by spaces - // - // Example border: - // "- │ ┌ ┐ └ ┘" - Border string - - Flags int // Not used now -} - -// Create new Box. -// Width and height can be relative: -// -// // Create box with 50% with of current screen and 10 lines height -// box := tm.NewBox(50|tm.PCT, 10, 0) -// -func NewBox(width, height int, flags int) *Box { - width, height = GetXY(width, height) - - box := new(Box) - box.Buf = new(bytes.Buffer) - box.Width = width - box.Height = height - box.Border = DEFAULT_BORDER - box.PaddingX = 1 - box.PaddingY = 0 - box.Flags = flags - - return box -} - -func (b *Box) Write(p []byte) (int, error) { - return b.Buf.Write(p) -} - -// Render Box -func (b *Box) String() (out string) { - borders := strings.Split(b.Border, " ") - lines := strings.Split(b.Buf.String(), "\n") - - // Border + padding - prefix := borders[1] + strings.Repeat(" ", b.PaddingX) - suffix := strings.Repeat(" ", b.PaddingX) + borders[1] - - offset := b.PaddingY + 1 // 1 is border width - - // Content width without borders and padding - contentWidth := b.Width - (b.PaddingX+1)*2 - - for y := 0; y < b.Height; y++ { - var line string - - switch { - // Draw borders for first line - case y == 0: - line = borders[2] + strings.Repeat(borders[0], b.Width-2) + borders[3] - - // Draw borders for last line - case y == (b.Height - 1): - line = borders[4] + strings.Repeat(borders[0], b.Width-2) + borders[5] - - // Draw top and bottom padding - case y <= b.PaddingY || y >= (b.Height-b.PaddingY): - line = borders[1] + strings.Repeat(" ", b.Width-2) + borders[1] - - // Render content - default: - if len(lines) > y-offset { - line = lines[y-offset] - } else { - line = "" - } - - if len(line) > contentWidth-1 { - // If line is too large limit it - line = line[0:contentWidth] - } else { - // If line is too small enlarge it by adding spaces - line = line + strings.Repeat(" ", contentWidth-len(line)) - } - - line = prefix + line + suffix - } - - // Don't add newline for last element - if y != b.Height-1 { - line = line + "\n" - } - - out += line - } - - return out -} diff --git a/vendor/github.com/buger/goterm/plot.go b/vendor/github.com/buger/goterm/plot.go deleted file mode 100644 index 77b9fb09..00000000 --- a/vendor/github.com/buger/goterm/plot.go +++ /dev/null @@ -1,328 +0,0 @@ -package goterm - -import ( - "fmt" - "math" - "strings" -) - -const ( - AXIS_LEFT = iota - AXIS_RIGHT -) - -const ( - DRAW_INDEPENDENT = 1 << iota - DRAW_RELATIVE -) - -type DataTable struct { - columns []string - - rows [][]float64 -} - -func (d *DataTable) AddColumn(name string) { - d.columns = append(d.columns, name) -} - -func (d *DataTable) AddRow(elms ...float64) { - d.rows = append(d.rows, elms) -} - -type Chart interface { - Draw(data DataTable, flags int) string -} - -type LineChart struct { - Buf []string - chartBuf []string - - data *DataTable - - Width int - Height int - - chartHeight int - chartWidth int - - paddingX int - - paddingY int - - Flags int -} - -func genBuf(size int) []string { - buf := make([]string, size) - - for i := 0; i < size; i++ { - buf[i] = " " - } - - return buf -} - -// Format float -func ff(num interface{}) string { - return fmt.Sprintf("%.1f", num) -} - -func NewLineChart(width, height int) *LineChart { - chart := new(LineChart) - chart.Width = width - chart.Height = height - chart.Buf = genBuf(width * height) - - // axis lines + axies text - chart.paddingY = 2 - - return chart -} - -func (c *LineChart) DrawAxes(maxX, minX, maxY, minY float64, index int) { - side := AXIS_LEFT - - if c.Flags&DRAW_INDEPENDENT != 0 { - if index%2 == 0 { - side = AXIS_RIGHT - } - - c.DrawLine(c.paddingX-1, 1, c.Width-c.paddingX, 1, "-") - } else { - c.DrawLine(c.paddingX-1, 1, c.Width-1, 1, "-") - } - - if side == AXIS_LEFT { - c.DrawLine(c.paddingX-1, 1, c.paddingX-1, c.Height-1, "│") - } else { - c.DrawLine(c.Width-c.paddingX, 1, c.Width-c.paddingX, c.Height-1, "│") - } - - left := 0 - if side == AXIS_RIGHT { - left = c.Width - c.paddingX + 1 - } - - if c.Flags&DRAW_RELATIVE != 0 { - c.writeText(ff(minY), left, 1) - } else { - if minY > 0 { - c.writeText("0", left, 1) - } else { - c.writeText(ff(minY), left, 1) - } - } - - c.writeText(ff(maxY), left, c.Height-1) - - c.writeText(ff(minX), c.paddingX, 0) - - x_col := c.data.columns[0] - c.writeText(c.data.columns[0], c.Width/2-len(x_col)/2, 1) - - if c.Flags&DRAW_INDEPENDENT != 0 || len(c.data.columns) < 3 { - col := c.data.columns[index] - - for idx, char := range strings.Split(col, "") { - start_from := c.Height/2 + len(col)/2 - idx - - if side == AXIS_LEFT { - c.writeText(char, c.paddingX-1, start_from) - } else { - c.writeText(char, c.Width-c.paddingX, start_from) - } - } - } - - if c.Flags&DRAW_INDEPENDENT != 0 { - c.writeText(ff(maxX), c.Width-c.paddingX-len(ff(maxX)), 0) - } else { - c.writeText(ff(maxX), c.Width-len(ff(maxX)), 0) - } -} - -func (c *LineChart) writeText(text string, x, y int) { - coord := y*c.Width + x - - for idx, char := range strings.Split(text, "") { - c.Buf[coord+idx] = char - } -} - -func (c *LineChart) Draw(data *DataTable) (out string) { - var scaleY, scaleX float64 - - c.data = data - - if c.Flags&DRAW_INDEPENDENT != 0 && len(data.columns) > 3 { - fmt.Println("Error: Can't use DRAW_INDEPENDENT for more then 2 graphs") - return "" - } - - charts := len(data.columns) - 1 - - prevPoint := [2]int{-1, -1} - - maxX, minX, maxY, minY := getBoundaryValues(data, -1) - - c.paddingX = int(math.Max(float64(len(ff(minY))), float64(len(ff(maxY))))) + 1 - - c.chartHeight = c.Height - c.paddingY - - if c.Flags&DRAW_INDEPENDENT != 0 { - c.chartWidth = c.Width - 2*c.paddingX - } else { - c.chartWidth = c.Width - c.paddingX - 1 - } - - scaleX = float64(c.chartWidth) / (maxX - minX) - - if c.Flags&DRAW_RELATIVE != 0 || minY < 0 { - scaleY = float64(c.chartHeight) / (maxY - minY) - } else { - scaleY = float64(c.chartHeight) / maxY - } - - for i := 1; i < charts+1; i++ { - if c.Flags&DRAW_INDEPENDENT != 0 { - maxX, minX, maxY, minY = getBoundaryValues(data, i) - - scaleX = float64(c.chartWidth-1) / (maxX - minX) - scaleY = float64(c.chartHeight) / maxY - - if c.Flags&DRAW_RELATIVE != 0 || minY < 0 { - scaleY = float64(c.chartHeight) / (maxY - minY) - } - } - - symbol := Color("•", i) - - c_data := getChartData(data, i) - - for _, point := range c_data { - x := int((point[0]-minX)*scaleX) + c.paddingX - y := int((point[1])*scaleY) + c.paddingY - - if c.Flags&DRAW_RELATIVE != 0 || minY < 0 { - y = int((point[1]-minY)*scaleY) + c.paddingY - } - - if prevPoint[0] == -1 { - prevPoint[0] = x - prevPoint[1] = y - } - - if prevPoint[0] <= x { - c.DrawLine(prevPoint[0], prevPoint[1], x, y, symbol) - } - - prevPoint[0] = x - prevPoint[1] = y - } - - c.DrawAxes(maxX, minX, maxY, minY, i) - } - - for row := c.Height - 1; row >= 0; row-- { - out += strings.Join(c.Buf[row*c.Width:(row+1)*c.Width], "") + "\n" - } - - return -} - -func (c *LineChart) DrawLine(x0, y0, x1, y1 int, symbol string) { - drawLine(x0, y0, x1, y1, func(x, y int) { - coord := y*c.Width + x - - if coord > 0 && coord < len(c.Buf) { - c.Buf[coord] = symbol - } - }) -} - -func getBoundaryValues(data *DataTable, index int) (maxX, minX, maxY, minY float64) { - maxX = data.rows[0][0] - minX = data.rows[0][0] - maxY = data.rows[0][1] - minY = data.rows[0][1] - - for _, r := range data.rows { - maxX = math.Max(maxX, r[0]) - minX = math.Min(minX, r[0]) - - for idx, c := range r { - if idx > 0 { - if index == -1 || index == idx { - maxY = math.Max(maxY, c) - minY = math.Min(minY, c) - } - } - } - } - - if maxY > 0 { - maxY = maxY * 1.1 - } else { - maxY = maxY * 0.9 - } - - if minY > 0 { - minY = minY * 0.9 - } else { - minY = minY * 1.1 - } - - return -} - -// DataTable can contain data for multiple graphs, we need to extract only 1 -func getChartData(data *DataTable, index int) (out [][]float64) { - for _, r := range data.rows { - out = append(out, []float64{r[0], r[index]}) - } - - return -} - -// Algorithm for drawing line between two points -// -// http://en.wikipedia.org/wiki/Bresenham's_line_algorithm -func drawLine(x0, y0, x1, y1 int, plot func(int, int)) { - dx := x1 - x0 - if dx < 0 { - dx = -dx - } - dy := y1 - y0 - if dy < 0 { - dy = -dy - } - var sx, sy int - if x0 < x1 { - sx = 1 - } else { - sx = -1 - } - if y0 < y1 { - sy = 1 - } else { - sy = -1 - } - err := dx - dy - - for { - plot(x0, y0) - if x0 == x1 && y0 == y1 { - break - } - e2 := 2 * err - if e2 > -dy { - err -= dy - x0 += sx - } - if e2 < dx { - err += dx - y0 += sy - } - } -} diff --git a/vendor/github.com/buger/goterm/table.go b/vendor/github.com/buger/goterm/table.go deleted file mode 100644 index d8dae55c..00000000 --- a/vendor/github.com/buger/goterm/table.go +++ /dev/null @@ -1,34 +0,0 @@ -package goterm - -import ( - "bytes" - "text/tabwriter" -) - -// Tabwriter with own buffer: -// -// totals := tm.NewTable(0, 10, 5, ' ', 0) -// fmt.Fprintf(totals, "Time\tStarted\tActive\tFinished\n") -// fmt.Fprintf(totals, "%s\t%d\t%d\t%d\n", "All", started, started-finished, finished) -// tm.Println(totals) -// -// Based on http://golang.org/pkg/text/tabwriter -type Table struct { - tabwriter.Writer - - Buf *bytes.Buffer -} - -// Same as here http://golang.org/pkg/text/tabwriter/#Writer.Init -func NewTable(minwidth, tabwidth, padding int, padchar byte, flags uint) *Table { - tbl := new(Table) - tbl.Buf = new(bytes.Buffer) - tbl.Init(tbl.Buf, minwidth, tabwidth, padding, padchar, flags) - - return tbl -} - -func (t *Table) String() string { - t.Flush() - return t.Buf.String() -} diff --git a/vendor/github.com/buger/goterm/terminal.go b/vendor/github.com/buger/goterm/terminal.go deleted file mode 100644 index 6b45c78b..00000000 --- a/vendor/github.com/buger/goterm/terminal.go +++ /dev/null @@ -1,258 +0,0 @@ -// Provides basic bulding blocks for advanced console UI -// -// Coordinate system: -// -// 1/1---X----> -// | -// Y -// | -// v -// -// Documentation for ANSI codes: http://en.wikipedia.org/wiki/ANSI_escape_code#Colors -// -// Inspired by: http://www.darkcoding.net/software/pretty-command-line-console-output-on-unix-in-python-and-go-lang/ -package goterm - -import ( - "bufio" - "bytes" - "fmt" - "os" - "strings" -) - -// Reset all custom styles -const RESET = "\033[0m" - -// Reset to default color -const RESET_COLOR = "\033[32m" - -// Return curor to start of line and clean it -const RESET_LINE = "\r\033[K" - -// List of possible colors -const ( - BLACK = iota - RED - GREEN - YELLOW - BLUE - MAGENTA - CYAN - WHITE -) - -var Output *bufio.Writer = bufio.NewWriter(os.Stdout) - -func getColor(code int) string { - return fmt.Sprintf("\033[3%dm", code) -} - -func getBgColor(code int) string { - return fmt.Sprintf("\033[4%dm", code) -} - -// Set percent flag: num | PCT -// -// Check percent flag: num & PCT -// -// Reset percent flag: num & 0xFF -const shift = uint(^uint(0)>>63) << 4 -const PCT = 0x8000 << shift - -type winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -// Global screen buffer -// Its not recommented write to buffer dirrectly, use package Print,Printf,Println fucntions instead. -var Screen *bytes.Buffer = new(bytes.Buffer) - -// Get relative or absolute coorditantes -// To get relative, set PCT flag to number: -// -// // Get 10% of total width to `x` and 20 to y -// x, y = tm.GetXY(10|tm.PCT, 20) -// -func GetXY(x int, y int) (int, int) { - if y == -1 { - y = CurrentHeight() + 1 - } - - if x&PCT != 0 { - x = int((x & 0xFF) * Width() / 100) - } - - if y&PCT != 0 { - y = int((y & 0xFF) * Height() / 100) - } - - return x, y -} - -type sf func(int, string) string - -// Apply given transformation func for each line in string -func applyTransform(str string, transform sf) (out string) { - out = "" - - for idx, line := range strings.Split(str, "\n") { - out += transform(idx, line) - } - - return -} - -// Clear screen -func Clear() { - Output.WriteString("\033[2J") -} - -// Move cursor to given position -func MoveCursor(x int, y int) { - fmt.Fprintf(Screen, "\033[%d;%dH", x, y) -} - -// Move cursor up relative the current position -func MoveCursorUp(bias int) { - fmt.Fprintf(Screen, "\033[%dA", bias) -} - -// Move cursor down relative the current position -func MoveCursorDown(bias int) { - fmt.Fprintf(Screen, "\033[%dB", bias) -} - -// Move cursor forward relative the current position -func MoveCursorForward(bias int) { - fmt.Fprintf(Screen, "\033[%dC", bias) -} - -// Move cursor backward relative the current position -func MoveCursorBackward(bias int) { - fmt.Fprintf(Screen, "\033[%dD", bias) -} - -// Move string to possition -func MoveTo(str string, x int, y int) (out string) { - x, y = GetXY(x, y) - - return applyTransform(str, func(idx int, line string) string { - return fmt.Sprintf("\033[%d;%dH%s", y+idx, x, line) - }) -} - -// Return carrier to start of line -func ResetLine(str string) (out string) { - return applyTransform(str, func(idx int, line string) string { - return fmt.Sprintf(RESET_LINE, line) - }) -} - -// Make bold -func Bold(str string) string { - return applyTransform(str, func(idx int, line string) string { - return fmt.Sprintf("\033[1m%s\033[0m", line) - }) -} - -// Apply given color to string: -// -// tm.Color("RED STRING", tm.RED) -// -func Color(str string, color int) string { - return applyTransform(str, func(idx int, line string) string { - return fmt.Sprintf("%s%s%s", getColor(color), line, RESET) - }) -} - -func Highlight(str, substr string, color int) string { - hiSubstr := Color(substr, color) - return strings.Replace(str, substr, hiSubstr, -1) -} - -func HighlightRegion(str string, from, to, color int) string { - return str[:from] + Color(str[from:to], color) + str[to:] -} - -// Change background color of string: -// -// tm.Background("string", tm.RED) -// -func Background(str string, color int) string { - return applyTransform(str, func(idx int, line string) string { - return fmt.Sprintf("%s%s%s", getBgColor(color), line, RESET) - }) -} - -// Get console width -func Width() int { - ws, err := getWinsize() - - if err != nil { - return -1 - } - - return int(ws.Col) -} - -// Get console height -func Height() int { - ws, err := getWinsize() - if err != nil { - return -1 - } - return int(ws.Row) -} - -// Get current height. Line count in Screen buffer. -func CurrentHeight() int { - return strings.Count(Screen.String(), "\n") -} - -// Flush buffer and ensure that it will not overflow screen -func Flush() { - for idx, str := range strings.Split(Screen.String(), "\n") { - if idx > Height() { - return - } - - Output.WriteString(str + "\n") - } - - Output.Flush() - Screen.Reset() -} - -func Print(a ...interface{}) (n int, err error) { - return fmt.Fprint(Screen, a...) -} - -func Println(a ...interface{}) (n int, err error) { - return fmt.Fprintln(Screen, a...) -} - -func Printf(format string, a ...interface{}) (n int, err error) { - return fmt.Fprintf(Screen, format, a...) -} - -func Context(data string, idx, max int) string { - var start, end int - - if len(data[:idx]) < (max / 2) { - start = 0 - } else { - start = idx - max/2 - } - - if len(data)-idx < (max / 2) { - end = len(data) - 1 - } else { - end = idx + max/2 - } - - return data[start:end] -} diff --git a/vendor/github.com/buger/goterm/terminal_nosysioctl.go b/vendor/github.com/buger/goterm/terminal_nosysioctl.go deleted file mode 100644 index 69061500..00000000 --- a/vendor/github.com/buger/goterm/terminal_nosysioctl.go +++ /dev/null @@ -1,12 +0,0 @@ -// +build windows plan9 solaris - -package goterm - -func getWinsize() (*winsize, error) { - ws := new(winsize) - - ws.Col = 80 - ws.Row = 24 - - return ws, nil -} diff --git a/vendor/github.com/buger/goterm/terminal_sysioctl.go b/vendor/github.com/buger/goterm/terminal_sysioctl.go deleted file mode 100644 index e98430fb..00000000 --- a/vendor/github.com/buger/goterm/terminal_sysioctl.go +++ /dev/null @@ -1,36 +0,0 @@ -// +build !windows,!plan9,!solaris - -package goterm - -import ( - "fmt" - "os" - "runtime" - "syscall" - "unsafe" -) - -func getWinsize() (*winsize, error) { - ws := new(winsize) - - var _TIOCGWINSZ int64 - - switch runtime.GOOS { - case "linux": - _TIOCGWINSZ = 0x5413 - case "darwin": - _TIOCGWINSZ = 1074295912 - } - - r1, _, errno := syscall.Syscall(syscall.SYS_IOCTL, - uintptr(syscall.Stdin), - uintptr(_TIOCGWINSZ), - uintptr(unsafe.Pointer(ws)), - ) - - if int(r1) == -1 { - fmt.Println("Error:", os.NewSyscallError("GetWinsize", errno)) - return nil, os.NewSyscallError("GetWinsize", errno) - } - return ws, nil -} diff --git a/vendor/github.com/containers/image/pkg/sysregistries/system_registries.go b/vendor/github.com/containers/image/pkg/sysregistries/system_registries.go deleted file mode 100644 index e5564a2a..00000000 --- a/vendor/github.com/containers/image/pkg/sysregistries/system_registries.go +++ /dev/null @@ -1,86 +0,0 @@ -package sysregistries - -import ( - "github.com/BurntSushi/toml" - "github.com/containers/image/types" - "io/ioutil" - "path/filepath" -) - -// systemRegistriesConfPath is the path to the system-wide registry configuration file -// and is used to add/subtract potential registries for obtaining images. -// You can override this at build time with -// -ldflags '-X github.com/containers/image/sysregistries.systemRegistriesConfPath=$your_path' -var systemRegistriesConfPath = builtinRegistriesConfPath - -// builtinRegistriesConfPath is the path to registry configuration file -// DO NOT change this, instead see systemRegistriesConfPath above. -const builtinRegistriesConfPath = "/etc/containers/registries.conf" - -type registries struct { - Registries []string `toml:"registries"` -} - -type tomlConfig struct { - Registries struct { - Search registries `toml:"search"` - Insecure registries `toml:"insecure"` - Block registries `toml:"block"` - } `toml:"registries"` -} - -// Reads the global registry file from the filesystem. Returns -// a byte array -func readRegistryConf(ctx *types.SystemContext) ([]byte, error) { - dirPath := systemRegistriesConfPath - if ctx != nil { - if ctx.SystemRegistriesConfPath != "" { - dirPath = ctx.SystemRegistriesConfPath - } else if ctx.RootForImplicitAbsolutePaths != "" { - dirPath = filepath.Join(ctx.RootForImplicitAbsolutePaths, systemRegistriesConfPath) - } - } - configBytes, err := ioutil.ReadFile(dirPath) - return configBytes, err -} - -// For mocking in unittests -var readConf = readRegistryConf - -// Loads the registry configuration file from the filesystem and -// then unmarshals it. Returns the unmarshalled object. -func loadRegistryConf(ctx *types.SystemContext) (*tomlConfig, error) { - config := &tomlConfig{} - - configBytes, err := readConf(ctx) - if err != nil { - return nil, err - } - - err = toml.Unmarshal(configBytes, &config) - return config, err -} - -// GetRegistries returns an array of strings that contain the names -// of the registries as defined in the system-wide -// registries file. it returns an empty array if none are -// defined -func GetRegistries(ctx *types.SystemContext) ([]string, error) { - config, err := loadRegistryConf(ctx) - if err != nil { - return nil, err - } - return config.Registries.Search.Registries, nil -} - -// GetInsecureRegistries returns an array of strings that contain the names -// of the insecure registries as defined in the system-wide -// registries file. it returns an empty array if none are -// defined -func GetInsecureRegistries(ctx *types.SystemContext) ([]string, error) { - config, err := loadRegistryConf(ctx) - if err != nil { - return nil, err - } - return config.Registries.Insecure.Registries, nil -} diff --git a/vendor/github.com/emicklei/go-restful-swagger12/LICENSE b/vendor/github.com/emicklei/go-restful-swagger12/LICENSE deleted file mode 100644 index aeab5b44..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2017 Ernest Micklei - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/emicklei/go-restful-swagger12/README.md b/vendor/github.com/emicklei/go-restful-swagger12/README.md deleted file mode 100644 index 037b9b09..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/README.md +++ /dev/null @@ -1,83 +0,0 @@ -# go-restful-swagger12 - -[![Build Status](https://travis-ci.org/emicklei/go-restful-swagger12.png)](https://travis-ci.org/emicklei/go-restful-swagger12) -[![GoDoc](https://godoc.org/github.com/emicklei/go-restful-swagger12?status.svg)](https://godoc.org/github.com/emicklei/go-restful-swagger12) - -How to use Swagger UI with go-restful -= - -Get the Swagger UI sources (version 1.2 only) - - git clone https://github.com/wordnik/swagger-ui.git - -The project contains a "dist" folder. -Its contents has all the Swagger UI files you need. - -The `index.html` has an `url` set to `http://petstore.swagger.wordnik.com/api/api-docs`. -You need to change that to match your WebService JSON endpoint e.g. `http://localhost:8080/apidocs.json` - -Now, you can install the Swagger WebService for serving the Swagger specification in JSON. - - config := swagger.Config{ - WebServices: restful.RegisteredWebServices(), - ApiPath: "/apidocs.json", - SwaggerPath: "/apidocs/", - SwaggerFilePath: "/Users/emicklei/Projects/swagger-ui/dist"} - swagger.InstallSwaggerService(config) - - -Documenting Structs --- - -Currently there are 2 ways to document your structs in the go-restful Swagger. - -###### By using struct tags -- Use tag "description" to annotate a struct field with a description to show in the UI -- Use tag "modelDescription" to annotate the struct itself with a description to show in the UI. The tag can be added in an field of the struct and in case that there are multiple definition, they will be appended with an empty line. - -###### By using the SwaggerDoc method -Here is an example with an `Address` struct and the documentation for each of the fields. The `""` is a special entry for **documenting the struct itself**. - - type Address struct { - Country string `json:"country,omitempty"` - PostCode int `json:"postcode,omitempty"` - } - - func (Address) SwaggerDoc() map[string]string { - return map[string]string{ - "": "Address doc", - "country": "Country doc", - "postcode": "PostCode doc", - } - } - -This example will generate a JSON like this - - { - "Address": { - "id": "Address", - "description": "Address doc", - "properties": { - "country": { - "type": "string", - "description": "Country doc" - }, - "postcode": { - "type": "integer", - "format": "int32", - "description": "PostCode doc" - } - } - } - } - -**Very Important Notes:** -- `SwaggerDoc()` is using a **NON-Pointer** receiver (e.g. func (Address) and not func (*Address)) -- The returned map should use as key the name of the field as defined in the JSON parameter (e.g. `"postcode"` and not `"PostCode"`) - -Notes --- -- The Nickname of an Operation is automatically set by finding the name of the function. You can override it using RouteBuilder.Operation(..) -- The WebServices field of swagger.Config can be used to control which service you want to expose and document ; you can have multiple configs and therefore multiple endpoints. - -© 2017, ernestmicklei.com. MIT License. Contributions welcome. \ No newline at end of file diff --git a/vendor/github.com/emicklei/go-restful-swagger12/api_declaration_list.go b/vendor/github.com/emicklei/go-restful-swagger12/api_declaration_list.go deleted file mode 100644 index 9f4c3690..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/api_declaration_list.go +++ /dev/null @@ -1,64 +0,0 @@ -package swagger - -// Copyright 2015 Ernest Micklei. All rights reserved. -// Use of this source code is governed by a license -// that can be found in the LICENSE file. - -import ( - "bytes" - "encoding/json" -) - -// ApiDeclarationList maintains an ordered list of ApiDeclaration. -type ApiDeclarationList struct { - List []ApiDeclaration -} - -// At returns the ApiDeclaration by its path unless absent, then ok is false -func (l *ApiDeclarationList) At(path string) (a ApiDeclaration, ok bool) { - for _, each := range l.List { - if each.ResourcePath == path { - return each, true - } - } - return a, false -} - -// Put adds or replaces a ApiDeclaration with this name -func (l *ApiDeclarationList) Put(path string, a ApiDeclaration) { - // maybe replace existing - for i, each := range l.List { - if each.ResourcePath == path { - // replace - l.List[i] = a - return - } - } - // add - l.List = append(l.List, a) -} - -// Do enumerates all the properties, each with its assigned name -func (l *ApiDeclarationList) Do(block func(path string, decl ApiDeclaration)) { - for _, each := range l.List { - block(each.ResourcePath, each) - } -} - -// MarshalJSON writes the ModelPropertyList as if it was a map[string]ModelProperty -func (l ApiDeclarationList) MarshalJSON() ([]byte, error) { - var buf bytes.Buffer - encoder := json.NewEncoder(&buf) - buf.WriteString("{\n") - for i, each := range l.List { - buf.WriteString("\"") - buf.WriteString(each.ResourcePath) - buf.WriteString("\": ") - encoder.Encode(each) - if i < len(l.List)-1 { - buf.WriteString(",\n") - } - } - buf.WriteString("}") - return buf.Bytes(), nil -} diff --git a/vendor/github.com/emicklei/go-restful-swagger12/config.go b/vendor/github.com/emicklei/go-restful-swagger12/config.go deleted file mode 100644 index 18f8e57d..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/config.go +++ /dev/null @@ -1,46 +0,0 @@ -package swagger - -import ( - "net/http" - "reflect" - - "github.com/emicklei/go-restful" -) - -// PostBuildDeclarationMapFunc can be used to modify the api declaration map. -type PostBuildDeclarationMapFunc func(apiDeclarationMap *ApiDeclarationList) - -// MapSchemaFormatFunc can be used to modify typeName at definition time. -type MapSchemaFormatFunc func(typeName string) string - -// MapModelTypeNameFunc can be used to return the desired typeName for a given -// type. It will return false if the default name should be used. -type MapModelTypeNameFunc func(t reflect.Type) (string, bool) - -type Config struct { - // url where the services are available, e.g. http://localhost:8080 - // if left empty then the basePath of Swagger is taken from the actual request - WebServicesUrl string - // path where the JSON api is avaiable , e.g. /apidocs - ApiPath string - // [optional] path where the swagger UI will be served, e.g. /swagger - SwaggerPath string - // [optional] location of folder containing Swagger HTML5 application index.html - SwaggerFilePath string - // api listing is constructed from this list of restful WebServices. - WebServices []*restful.WebService - // will serve all static content (scripts,pages,images) - StaticHandler http.Handler - // [optional] on default CORS (Cross-Origin-Resource-Sharing) is enabled. - DisableCORS bool - // Top-level API version. Is reflected in the resource listing. - ApiVersion string - // If set then call this handler after building the complete ApiDeclaration Map - PostBuildHandler PostBuildDeclarationMapFunc - // Swagger global info struct - Info Info - // [optional] If set, model builder should call this handler to get addition typename-to-swagger-format-field conversion. - SchemaFormatHandler MapSchemaFormatFunc - // [optional] If set, model builder should call this handler to retrieve the name for a given type. - ModelTypeNameHandler MapModelTypeNameFunc -} diff --git a/vendor/github.com/emicklei/go-restful-swagger12/model_builder.go b/vendor/github.com/emicklei/go-restful-swagger12/model_builder.go deleted file mode 100644 index d40786f2..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/model_builder.go +++ /dev/null @@ -1,467 +0,0 @@ -package swagger - -import ( - "encoding/json" - "reflect" - "strings" -) - -// ModelBuildable is used for extending Structs that need more control over -// how the Model appears in the Swagger api declaration. -type ModelBuildable interface { - PostBuildModel(m *Model) *Model -} - -type modelBuilder struct { - Models *ModelList - Config *Config -} - -type documentable interface { - SwaggerDoc() map[string]string -} - -// Check if this structure has a method with signature func () SwaggerDoc() map[string]string -// If it exists, retrive the documentation and overwrite all struct tag descriptions -func getDocFromMethodSwaggerDoc2(model reflect.Type) map[string]string { - if docable, ok := reflect.New(model).Elem().Interface().(documentable); ok { - return docable.SwaggerDoc() - } - return make(map[string]string) -} - -// addModelFrom creates and adds a Model to the builder and detects and calls -// the post build hook for customizations -func (b modelBuilder) addModelFrom(sample interface{}) { - if modelOrNil := b.addModel(reflect.TypeOf(sample), ""); modelOrNil != nil { - // allow customizations - if buildable, ok := sample.(ModelBuildable); ok { - modelOrNil = buildable.PostBuildModel(modelOrNil) - b.Models.Put(modelOrNil.Id, *modelOrNil) - } - } -} - -func (b modelBuilder) addModel(st reflect.Type, nameOverride string) *Model { - // Turn pointers into simpler types so further checks are - // correct. - if st.Kind() == reflect.Ptr { - st = st.Elem() - } - - modelName := b.keyFrom(st) - if nameOverride != "" { - modelName = nameOverride - } - // no models needed for primitive types - if b.isPrimitiveType(modelName) { - return nil - } - // golang encoding/json packages says array and slice values encode as - // JSON arrays, except that []byte encodes as a base64-encoded string. - // If we see a []byte here, treat it at as a primitive type (string) - // and deal with it in buildArrayTypeProperty. - if (st.Kind() == reflect.Slice || st.Kind() == reflect.Array) && - st.Elem().Kind() == reflect.Uint8 { - return nil - } - // see if we already have visited this model - if _, ok := b.Models.At(modelName); ok { - return nil - } - sm := Model{ - Id: modelName, - Required: []string{}, - Properties: ModelPropertyList{}} - - // reference the model before further initializing (enables recursive structs) - b.Models.Put(modelName, sm) - - // check for slice or array - if st.Kind() == reflect.Slice || st.Kind() == reflect.Array { - b.addModel(st.Elem(), "") - return &sm - } - // check for structure or primitive type - if st.Kind() != reflect.Struct { - return &sm - } - - fullDoc := getDocFromMethodSwaggerDoc2(st) - modelDescriptions := []string{} - - for i := 0; i < st.NumField(); i++ { - field := st.Field(i) - jsonName, modelDescription, prop := b.buildProperty(field, &sm, modelName) - if len(modelDescription) > 0 { - modelDescriptions = append(modelDescriptions, modelDescription) - } - - // add if not omitted - if len(jsonName) != 0 { - // update description - if fieldDoc, ok := fullDoc[jsonName]; ok { - prop.Description = fieldDoc - } - // update Required - if b.isPropertyRequired(field) { - sm.Required = append(sm.Required, jsonName) - } - sm.Properties.Put(jsonName, prop) - } - } - - // We always overwrite documentation if SwaggerDoc method exists - // "" is special for documenting the struct itself - if modelDoc, ok := fullDoc[""]; ok { - sm.Description = modelDoc - } else if len(modelDescriptions) != 0 { - sm.Description = strings.Join(modelDescriptions, "\n") - } - - // update model builder with completed model - b.Models.Put(modelName, sm) - - return &sm -} - -func (b modelBuilder) isPropertyRequired(field reflect.StructField) bool { - required := true - if jsonTag := field.Tag.Get("json"); jsonTag != "" { - s := strings.Split(jsonTag, ",") - if len(s) > 1 && s[1] == "omitempty" { - return false - } - } - return required -} - -func (b modelBuilder) buildProperty(field reflect.StructField, model *Model, modelName string) (jsonName, modelDescription string, prop ModelProperty) { - jsonName = b.jsonNameOfField(field) - if len(jsonName) == 0 { - // empty name signals skip property - return "", "", prop - } - - if field.Name == "XMLName" && field.Type.String() == "xml.Name" { - // property is metadata for the xml.Name attribute, can be skipped - return "", "", prop - } - - if tag := field.Tag.Get("modelDescription"); tag != "" { - modelDescription = tag - } - - prop.setPropertyMetadata(field) - if prop.Type != nil { - return jsonName, modelDescription, prop - } - fieldType := field.Type - - // check if type is doing its own marshalling - marshalerType := reflect.TypeOf((*json.Marshaler)(nil)).Elem() - if fieldType.Implements(marshalerType) { - var pType = "string" - if prop.Type == nil { - prop.Type = &pType - } - if prop.Format == "" { - prop.Format = b.jsonSchemaFormat(b.keyFrom(fieldType)) - } - return jsonName, modelDescription, prop - } - - // check if annotation says it is a string - if jsonTag := field.Tag.Get("json"); jsonTag != "" { - s := strings.Split(jsonTag, ",") - if len(s) > 1 && s[1] == "string" { - stringt := "string" - prop.Type = &stringt - return jsonName, modelDescription, prop - } - } - - fieldKind := fieldType.Kind() - switch { - case fieldKind == reflect.Struct: - jsonName, prop := b.buildStructTypeProperty(field, jsonName, model) - return jsonName, modelDescription, prop - case fieldKind == reflect.Slice || fieldKind == reflect.Array: - jsonName, prop := b.buildArrayTypeProperty(field, jsonName, modelName) - return jsonName, modelDescription, prop - case fieldKind == reflect.Ptr: - jsonName, prop := b.buildPointerTypeProperty(field, jsonName, modelName) - return jsonName, modelDescription, prop - case fieldKind == reflect.String: - stringt := "string" - prop.Type = &stringt - return jsonName, modelDescription, prop - case fieldKind == reflect.Map: - // if it's a map, it's unstructured, and swagger 1.2 can't handle it - objectType := "object" - prop.Type = &objectType - return jsonName, modelDescription, prop - } - - fieldTypeName := b.keyFrom(fieldType) - if b.isPrimitiveType(fieldTypeName) { - mapped := b.jsonSchemaType(fieldTypeName) - prop.Type = &mapped - prop.Format = b.jsonSchemaFormat(fieldTypeName) - return jsonName, modelDescription, prop - } - modelType := b.keyFrom(fieldType) - prop.Ref = &modelType - - if fieldType.Name() == "" { // override type of anonymous structs - nestedTypeName := modelName + "." + jsonName - prop.Ref = &nestedTypeName - b.addModel(fieldType, nestedTypeName) - } - return jsonName, modelDescription, prop -} - -func hasNamedJSONTag(field reflect.StructField) bool { - parts := strings.Split(field.Tag.Get("json"), ",") - if len(parts) == 0 { - return false - } - for _, s := range parts[1:] { - if s == "inline" { - return false - } - } - return len(parts[0]) > 0 -} - -func (b modelBuilder) buildStructTypeProperty(field reflect.StructField, jsonName string, model *Model) (nameJson string, prop ModelProperty) { - prop.setPropertyMetadata(field) - // Check for type override in tag - if prop.Type != nil { - return jsonName, prop - } - fieldType := field.Type - // check for anonymous - if len(fieldType.Name()) == 0 { - // anonymous - anonType := model.Id + "." + jsonName - b.addModel(fieldType, anonType) - prop.Ref = &anonType - return jsonName, prop - } - - if field.Name == fieldType.Name() && field.Anonymous && !hasNamedJSONTag(field) { - // embedded struct - sub := modelBuilder{new(ModelList), b.Config} - sub.addModel(fieldType, "") - subKey := sub.keyFrom(fieldType) - // merge properties from sub - subModel, _ := sub.Models.At(subKey) - subModel.Properties.Do(func(k string, v ModelProperty) { - model.Properties.Put(k, v) - // if subModel says this property is required then include it - required := false - for _, each := range subModel.Required { - if k == each { - required = true - break - } - } - if required { - model.Required = append(model.Required, k) - } - }) - // add all new referenced models - sub.Models.Do(func(key string, sub Model) { - if key != subKey { - if _, ok := b.Models.At(key); !ok { - b.Models.Put(key, sub) - } - } - }) - // empty name signals skip property - return "", prop - } - // simple struct - b.addModel(fieldType, "") - var pType = b.keyFrom(fieldType) - prop.Ref = &pType - return jsonName, prop -} - -func (b modelBuilder) buildArrayTypeProperty(field reflect.StructField, jsonName, modelName string) (nameJson string, prop ModelProperty) { - // check for type override in tags - prop.setPropertyMetadata(field) - if prop.Type != nil { - return jsonName, prop - } - fieldType := field.Type - if fieldType.Elem().Kind() == reflect.Uint8 { - stringt := "string" - prop.Type = &stringt - return jsonName, prop - } - var pType = "array" - prop.Type = &pType - isPrimitive := b.isPrimitiveType(fieldType.Elem().Name()) - elemTypeName := b.getElementTypeName(modelName, jsonName, fieldType.Elem()) - prop.Items = new(Item) - if isPrimitive { - mapped := b.jsonSchemaType(elemTypeName) - prop.Items.Type = &mapped - } else { - prop.Items.Ref = &elemTypeName - } - // add|overwrite model for element type - if fieldType.Elem().Kind() == reflect.Ptr { - fieldType = fieldType.Elem() - } - if !isPrimitive { - b.addModel(fieldType.Elem(), elemTypeName) - } - return jsonName, prop -} - -func (b modelBuilder) buildPointerTypeProperty(field reflect.StructField, jsonName, modelName string) (nameJson string, prop ModelProperty) { - prop.setPropertyMetadata(field) - // Check for type override in tags - if prop.Type != nil { - return jsonName, prop - } - fieldType := field.Type - - // override type of pointer to list-likes - if fieldType.Elem().Kind() == reflect.Slice || fieldType.Elem().Kind() == reflect.Array { - var pType = "array" - prop.Type = &pType - isPrimitive := b.isPrimitiveType(fieldType.Elem().Elem().Name()) - elemName := b.getElementTypeName(modelName, jsonName, fieldType.Elem().Elem()) - if isPrimitive { - primName := b.jsonSchemaType(elemName) - prop.Items = &Item{Ref: &primName} - } else { - prop.Items = &Item{Ref: &elemName} - } - if !isPrimitive { - // add|overwrite model for element type - b.addModel(fieldType.Elem().Elem(), elemName) - } - } else { - // non-array, pointer type - fieldTypeName := b.keyFrom(fieldType.Elem()) - var pType = b.jsonSchemaType(fieldTypeName) // no star, include pkg path - if b.isPrimitiveType(fieldTypeName) { - prop.Type = &pType - prop.Format = b.jsonSchemaFormat(fieldTypeName) - return jsonName, prop - } - prop.Ref = &pType - elemName := "" - if fieldType.Elem().Name() == "" { - elemName = modelName + "." + jsonName - prop.Ref = &elemName - } - b.addModel(fieldType.Elem(), elemName) - } - return jsonName, prop -} - -func (b modelBuilder) getElementTypeName(modelName, jsonName string, t reflect.Type) string { - if t.Kind() == reflect.Ptr { - t = t.Elem() - } - if t.Name() == "" { - return modelName + "." + jsonName - } - return b.keyFrom(t) -} - -func (b modelBuilder) keyFrom(st reflect.Type) string { - key := st.String() - if b.Config != nil && b.Config.ModelTypeNameHandler != nil { - if name, ok := b.Config.ModelTypeNameHandler(st); ok { - key = name - } - } - if len(st.Name()) == 0 { // unnamed type - // Swagger UI has special meaning for [ - key = strings.Replace(key, "[]", "||", -1) - } - return key -} - -// see also https://golang.org/ref/spec#Numeric_types -func (b modelBuilder) isPrimitiveType(modelName string) bool { - if len(modelName) == 0 { - return false - } - return strings.Contains("uint uint8 uint16 uint32 uint64 int int8 int16 int32 int64 float32 float64 bool string byte rune time.Time", modelName) -} - -// jsonNameOfField returns the name of the field as it should appear in JSON format -// An empty string indicates that this field is not part of the JSON representation -func (b modelBuilder) jsonNameOfField(field reflect.StructField) string { - if jsonTag := field.Tag.Get("json"); jsonTag != "" { - s := strings.Split(jsonTag, ",") - if s[0] == "-" { - // empty name signals skip property - return "" - } else if s[0] != "" { - return s[0] - } - } - return field.Name -} - -// see also http://json-schema.org/latest/json-schema-core.html#anchor8 -func (b modelBuilder) jsonSchemaType(modelName string) string { - schemaMap := map[string]string{ - "uint": "integer", - "uint8": "integer", - "uint16": "integer", - "uint32": "integer", - "uint64": "integer", - - "int": "integer", - "int8": "integer", - "int16": "integer", - "int32": "integer", - "int64": "integer", - - "byte": "integer", - "float64": "number", - "float32": "number", - "bool": "boolean", - "time.Time": "string", - } - mapped, ok := schemaMap[modelName] - if !ok { - return modelName // use as is (custom or struct) - } - return mapped -} - -func (b modelBuilder) jsonSchemaFormat(modelName string) string { - if b.Config != nil && b.Config.SchemaFormatHandler != nil { - if mapped := b.Config.SchemaFormatHandler(modelName); mapped != "" { - return mapped - } - } - schemaMap := map[string]string{ - "int": "int32", - "int32": "int32", - "int64": "int64", - "byte": "byte", - "uint": "integer", - "uint8": "byte", - "float64": "double", - "float32": "float", - "time.Time": "date-time", - "*time.Time": "date-time", - } - mapped, ok := schemaMap[modelName] - if !ok { - return "" // no format - } - return mapped -} diff --git a/vendor/github.com/emicklei/go-restful-swagger12/model_list.go b/vendor/github.com/emicklei/go-restful-swagger12/model_list.go deleted file mode 100644 index 9bb6cb67..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/model_list.go +++ /dev/null @@ -1,86 +0,0 @@ -package swagger - -// Copyright 2015 Ernest Micklei. All rights reserved. -// Use of this source code is governed by a license -// that can be found in the LICENSE file. - -import ( - "bytes" - "encoding/json" -) - -// NamedModel associates a name with a Model (not using its Id) -type NamedModel struct { - Name string - Model Model -} - -// ModelList encapsulates a list of NamedModel (association) -type ModelList struct { - List []NamedModel -} - -// Put adds or replaces a Model by its name -func (l *ModelList) Put(name string, model Model) { - for i, each := range l.List { - if each.Name == name { - // replace - l.List[i] = NamedModel{name, model} - return - } - } - // add - l.List = append(l.List, NamedModel{name, model}) -} - -// At returns a Model by its name, ok is false if absent -func (l *ModelList) At(name string) (m Model, ok bool) { - for _, each := range l.List { - if each.Name == name { - return each.Model, true - } - } - return m, false -} - -// Do enumerates all the models, each with its assigned name -func (l *ModelList) Do(block func(name string, value Model)) { - for _, each := range l.List { - block(each.Name, each.Model) - } -} - -// MarshalJSON writes the ModelList as if it was a map[string]Model -func (l ModelList) MarshalJSON() ([]byte, error) { - var buf bytes.Buffer - encoder := json.NewEncoder(&buf) - buf.WriteString("{\n") - for i, each := range l.List { - buf.WriteString("\"") - buf.WriteString(each.Name) - buf.WriteString("\": ") - encoder.Encode(each.Model) - if i < len(l.List)-1 { - buf.WriteString(",\n") - } - } - buf.WriteString("}") - return buf.Bytes(), nil -} - -// UnmarshalJSON reads back a ModelList. This is an expensive operation. -func (l *ModelList) UnmarshalJSON(data []byte) error { - raw := map[string]interface{}{} - json.NewDecoder(bytes.NewReader(data)).Decode(&raw) - for k, v := range raw { - // produces JSON bytes for each value - data, err := json.Marshal(v) - if err != nil { - return err - } - var m Model - json.NewDecoder(bytes.NewReader(data)).Decode(&m) - l.Put(k, m) - } - return nil -} diff --git a/vendor/github.com/emicklei/go-restful-swagger12/model_property_ext.go b/vendor/github.com/emicklei/go-restful-swagger12/model_property_ext.go deleted file mode 100644 index a433b6b7..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/model_property_ext.go +++ /dev/null @@ -1,81 +0,0 @@ -package swagger - -import ( - "reflect" - "strings" -) - -func (prop *ModelProperty) setDescription(field reflect.StructField) { - if tag := field.Tag.Get("description"); tag != "" { - prop.Description = tag - } -} - -func (prop *ModelProperty) setDefaultValue(field reflect.StructField) { - if tag := field.Tag.Get("default"); tag != "" { - prop.DefaultValue = Special(tag) - } -} - -func (prop *ModelProperty) setEnumValues(field reflect.StructField) { - // We use | to separate the enum values. This value is chosen - // since its unlikely to be useful in actual enumeration values. - if tag := field.Tag.Get("enum"); tag != "" { - prop.Enum = strings.Split(tag, "|") - } -} - -func (prop *ModelProperty) setMaximum(field reflect.StructField) { - if tag := field.Tag.Get("maximum"); tag != "" { - prop.Maximum = tag - } -} - -func (prop *ModelProperty) setType(field reflect.StructField) { - if tag := field.Tag.Get("type"); tag != "" { - // Check if the first two characters of the type tag are - // intended to emulate slice/array behaviour. - // - // If type is intended to be a slice/array then add the - // overriden type to the array item instead of the main property - if len(tag) > 2 && tag[0:2] == "[]" { - pType := "array" - prop.Type = &pType - prop.Items = new(Item) - - iType := tag[2:] - prop.Items.Type = &iType - return - } - - prop.Type = &tag - } -} - -func (prop *ModelProperty) setMinimum(field reflect.StructField) { - if tag := field.Tag.Get("minimum"); tag != "" { - prop.Minimum = tag - } -} - -func (prop *ModelProperty) setUniqueItems(field reflect.StructField) { - tag := field.Tag.Get("unique") - switch tag { - case "true": - v := true - prop.UniqueItems = &v - case "false": - v := false - prop.UniqueItems = &v - } -} - -func (prop *ModelProperty) setPropertyMetadata(field reflect.StructField) { - prop.setDescription(field) - prop.setEnumValues(field) - prop.setMinimum(field) - prop.setMaximum(field) - prop.setUniqueItems(field) - prop.setDefaultValue(field) - prop.setType(field) -} diff --git a/vendor/github.com/emicklei/go-restful-swagger12/model_property_list.go b/vendor/github.com/emicklei/go-restful-swagger12/model_property_list.go deleted file mode 100644 index 3babb194..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/model_property_list.go +++ /dev/null @@ -1,87 +0,0 @@ -package swagger - -// Copyright 2015 Ernest Micklei. All rights reserved. -// Use of this source code is governed by a license -// that can be found in the LICENSE file. - -import ( - "bytes" - "encoding/json" -) - -// NamedModelProperty associates a name to a ModelProperty -type NamedModelProperty struct { - Name string - Property ModelProperty -} - -// ModelPropertyList encapsulates a list of NamedModelProperty (association) -type ModelPropertyList struct { - List []NamedModelProperty -} - -// At returns the ModelPropety by its name unless absent, then ok is false -func (l *ModelPropertyList) At(name string) (p ModelProperty, ok bool) { - for _, each := range l.List { - if each.Name == name { - return each.Property, true - } - } - return p, false -} - -// Put adds or replaces a ModelProperty with this name -func (l *ModelPropertyList) Put(name string, prop ModelProperty) { - // maybe replace existing - for i, each := range l.List { - if each.Name == name { - // replace - l.List[i] = NamedModelProperty{Name: name, Property: prop} - return - } - } - // add - l.List = append(l.List, NamedModelProperty{Name: name, Property: prop}) -} - -// Do enumerates all the properties, each with its assigned name -func (l *ModelPropertyList) Do(block func(name string, value ModelProperty)) { - for _, each := range l.List { - block(each.Name, each.Property) - } -} - -// MarshalJSON writes the ModelPropertyList as if it was a map[string]ModelProperty -func (l ModelPropertyList) MarshalJSON() ([]byte, error) { - var buf bytes.Buffer - encoder := json.NewEncoder(&buf) - buf.WriteString("{\n") - for i, each := range l.List { - buf.WriteString("\"") - buf.WriteString(each.Name) - buf.WriteString("\": ") - encoder.Encode(each.Property) - if i < len(l.List)-1 { - buf.WriteString(",\n") - } - } - buf.WriteString("}") - return buf.Bytes(), nil -} - -// UnmarshalJSON reads back a ModelPropertyList. This is an expensive operation. -func (l *ModelPropertyList) UnmarshalJSON(data []byte) error { - raw := map[string]interface{}{} - json.NewDecoder(bytes.NewReader(data)).Decode(&raw) - for k, v := range raw { - // produces JSON bytes for each value - data, err := json.Marshal(v) - if err != nil { - return err - } - var m ModelProperty - json.NewDecoder(bytes.NewReader(data)).Decode(&m) - l.Put(k, m) - } - return nil -} diff --git a/vendor/github.com/emicklei/go-restful-swagger12/ordered_route_map.go b/vendor/github.com/emicklei/go-restful-swagger12/ordered_route_map.go deleted file mode 100644 index b33ccfbe..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/ordered_route_map.go +++ /dev/null @@ -1,36 +0,0 @@ -package swagger - -// Copyright 2015 Ernest Micklei. All rights reserved. -// Use of this source code is governed by a license -// that can be found in the LICENSE file. - -import "github.com/emicklei/go-restful" - -type orderedRouteMap struct { - elements map[string][]restful.Route - keys []string -} - -func newOrderedRouteMap() *orderedRouteMap { - return &orderedRouteMap{ - elements: map[string][]restful.Route{}, - keys: []string{}, - } -} - -func (o *orderedRouteMap) Add(key string, route restful.Route) { - routes, ok := o.elements[key] - if ok { - routes = append(routes, route) - o.elements[key] = routes - return - } - o.elements[key] = []restful.Route{route} - o.keys = append(o.keys, key) -} - -func (o *orderedRouteMap) Do(block func(key string, routes []restful.Route)) { - for _, k := range o.keys { - block(k, o.elements[k]) - } -} diff --git a/vendor/github.com/emicklei/go-restful-swagger12/swagger.go b/vendor/github.com/emicklei/go-restful-swagger12/swagger.go deleted file mode 100644 index 9c40833e..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/swagger.go +++ /dev/null @@ -1,185 +0,0 @@ -// Package swagger implements the structures of the Swagger -// https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md -package swagger - -const swaggerVersion = "1.2" - -// 4.3.3 Data Type Fields -type DataTypeFields struct { - Type *string `json:"type,omitempty"` // if Ref not used - Ref *string `json:"$ref,omitempty"` // if Type not used - Format string `json:"format,omitempty"` - DefaultValue Special `json:"defaultValue,omitempty"` - Enum []string `json:"enum,omitempty"` - Minimum string `json:"minimum,omitempty"` - Maximum string `json:"maximum,omitempty"` - Items *Item `json:"items,omitempty"` - UniqueItems *bool `json:"uniqueItems,omitempty"` -} - -type Special string - -// 4.3.4 Items Object -type Item struct { - Type *string `json:"type,omitempty"` - Ref *string `json:"$ref,omitempty"` - Format string `json:"format,omitempty"` -} - -// 5.1 Resource Listing -type ResourceListing struct { - SwaggerVersion string `json:"swaggerVersion"` // e.g 1.2 - Apis []Resource `json:"apis"` - ApiVersion string `json:"apiVersion"` - Info Info `json:"info"` - Authorizations []Authorization `json:"authorizations,omitempty"` -} - -// 5.1.2 Resource Object -type Resource struct { - Path string `json:"path"` // relative or absolute, must start with / - Description string `json:"description"` -} - -// 5.1.3 Info Object -type Info struct { - Title string `json:"title"` - Description string `json:"description"` - TermsOfServiceUrl string `json:"termsOfServiceUrl,omitempty"` - Contact string `json:"contact,omitempty"` - License string `json:"license,omitempty"` - LicenseUrl string `json:"licenseUrl,omitempty"` -} - -// 5.1.5 -type Authorization struct { - Type string `json:"type"` - PassAs string `json:"passAs"` - Keyname string `json:"keyname"` - Scopes []Scope `json:"scopes"` - GrantTypes []GrantType `json:"grandTypes"` -} - -// 5.1.6, 5.2.11 -type Scope struct { - // Required. The name of the scope. - Scope string `json:"scope"` - // Recommended. A short description of the scope. - Description string `json:"description"` -} - -// 5.1.7 -type GrantType struct { - Implicit Implicit `json:"implicit"` - AuthorizationCode AuthorizationCode `json:"authorization_code"` -} - -// 5.1.8 Implicit Object -type Implicit struct { - // Required. The login endpoint definition. - loginEndpoint LoginEndpoint `json:"loginEndpoint"` - // An optional alternative name to standard "access_token" OAuth2 parameter. - TokenName string `json:"tokenName"` -} - -// 5.1.9 Authorization Code Object -type AuthorizationCode struct { - TokenRequestEndpoint TokenRequestEndpoint `json:"tokenRequestEndpoint"` - TokenEndpoint TokenEndpoint `json:"tokenEndpoint"` -} - -// 5.1.10 Login Endpoint Object -type LoginEndpoint struct { - // Required. The URL of the authorization endpoint for the implicit grant flow. The value SHOULD be in a URL format. - Url string `json:"url"` -} - -// 5.1.11 Token Request Endpoint Object -type TokenRequestEndpoint struct { - // Required. The URL of the authorization endpoint for the authentication code grant flow. The value SHOULD be in a URL format. - Url string `json:"url"` - // An optional alternative name to standard "client_id" OAuth2 parameter. - ClientIdName string `json:"clientIdName"` - // An optional alternative name to the standard "client_secret" OAuth2 parameter. - ClientSecretName string `json:"clientSecretName"` -} - -// 5.1.12 Token Endpoint Object -type TokenEndpoint struct { - // Required. The URL of the token endpoint for the authentication code grant flow. The value SHOULD be in a URL format. - Url string `json:"url"` - // An optional alternative name to standard "access_token" OAuth2 parameter. - TokenName string `json:"tokenName"` -} - -// 5.2 API Declaration -type ApiDeclaration struct { - SwaggerVersion string `json:"swaggerVersion"` - ApiVersion string `json:"apiVersion"` - BasePath string `json:"basePath"` - ResourcePath string `json:"resourcePath"` // must start with / - Info Info `json:"info"` - Apis []Api `json:"apis,omitempty"` - Models ModelList `json:"models,omitempty"` - Produces []string `json:"produces,omitempty"` - Consumes []string `json:"consumes,omitempty"` - Authorizations []Authorization `json:"authorizations,omitempty"` -} - -// 5.2.2 API Object -type Api struct { - Path string `json:"path"` // relative or absolute, must start with / - Description string `json:"description"` - Operations []Operation `json:"operations,omitempty"` -} - -// 5.2.3 Operation Object -type Operation struct { - DataTypeFields - Method string `json:"method"` - Summary string `json:"summary,omitempty"` - Notes string `json:"notes,omitempty"` - Nickname string `json:"nickname"` - Authorizations []Authorization `json:"authorizations,omitempty"` - Parameters []Parameter `json:"parameters"` - ResponseMessages []ResponseMessage `json:"responseMessages,omitempty"` // optional - Produces []string `json:"produces,omitempty"` - Consumes []string `json:"consumes,omitempty"` - Deprecated string `json:"deprecated,omitempty"` -} - -// 5.2.4 Parameter Object -type Parameter struct { - DataTypeFields - ParamType string `json:"paramType"` // path,query,body,header,form - Name string `json:"name"` - Description string `json:"description"` - Required bool `json:"required"` - AllowMultiple bool `json:"allowMultiple"` -} - -// 5.2.5 Response Message Object -type ResponseMessage struct { - Code int `json:"code"` - Message string `json:"message"` - ResponseModel string `json:"responseModel,omitempty"` -} - -// 5.2.6, 5.2.7 Models Object -type Model struct { - Id string `json:"id"` - Description string `json:"description,omitempty"` - Required []string `json:"required,omitempty"` - Properties ModelPropertyList `json:"properties"` - SubTypes []string `json:"subTypes,omitempty"` - Discriminator string `json:"discriminator,omitempty"` -} - -// 5.2.8 Properties Object -type ModelProperty struct { - DataTypeFields - Description string `json:"description,omitempty"` -} - -// 5.2.10 -type Authorizations map[string]Authorization diff --git a/vendor/github.com/emicklei/go-restful-swagger12/swagger_builder.go b/vendor/github.com/emicklei/go-restful-swagger12/swagger_builder.go deleted file mode 100644 index 05a3c7e7..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/swagger_builder.go +++ /dev/null @@ -1,21 +0,0 @@ -package swagger - -type SwaggerBuilder struct { - SwaggerService -} - -func NewSwaggerBuilder(config Config) *SwaggerBuilder { - return &SwaggerBuilder{*newSwaggerService(config)} -} - -func (sb SwaggerBuilder) ProduceListing() ResourceListing { - return sb.SwaggerService.produceListing() -} - -func (sb SwaggerBuilder) ProduceAllDeclarations() map[string]ApiDeclaration { - return sb.SwaggerService.produceAllDeclarations() -} - -func (sb SwaggerBuilder) ProduceDeclarations(route string) (*ApiDeclaration, bool) { - return sb.SwaggerService.produceDeclarations(route) -} diff --git a/vendor/github.com/emicklei/go-restful-swagger12/swagger_webservice.go b/vendor/github.com/emicklei/go-restful-swagger12/swagger_webservice.go deleted file mode 100644 index d9062312..00000000 --- a/vendor/github.com/emicklei/go-restful-swagger12/swagger_webservice.go +++ /dev/null @@ -1,443 +0,0 @@ -package swagger - -import ( - "fmt" - - "github.com/emicklei/go-restful" - // "github.com/emicklei/hopwatch" - "net/http" - "reflect" - "sort" - "strings" - - "github.com/emicklei/go-restful/log" -) - -type SwaggerService struct { - config Config - apiDeclarationMap *ApiDeclarationList -} - -func newSwaggerService(config Config) *SwaggerService { - sws := &SwaggerService{ - config: config, - apiDeclarationMap: new(ApiDeclarationList)} - - // Build all ApiDeclarations - for _, each := range config.WebServices { - rootPath := each.RootPath() - // skip the api service itself - if rootPath != config.ApiPath { - if rootPath == "" || rootPath == "/" { - // use routes - for _, route := range each.Routes() { - entry := staticPathFromRoute(route) - _, exists := sws.apiDeclarationMap.At(entry) - if !exists { - sws.apiDeclarationMap.Put(entry, sws.composeDeclaration(each, entry)) - } - } - } else { // use root path - sws.apiDeclarationMap.Put(each.RootPath(), sws.composeDeclaration(each, each.RootPath())) - } - } - } - - // if specified then call the PostBuilderHandler - if config.PostBuildHandler != nil { - config.PostBuildHandler(sws.apiDeclarationMap) - } - return sws -} - -// LogInfo is the function that is called when this package needs to log. It defaults to log.Printf -var LogInfo = func(format string, v ...interface{}) { - // use the restful package-wide logger - log.Printf(format, v...) -} - -// InstallSwaggerService add the WebService that provides the API documentation of all services -// conform the Swagger documentation specifcation. (https://github.com/wordnik/swagger-core/wiki). -func InstallSwaggerService(aSwaggerConfig Config) { - RegisterSwaggerService(aSwaggerConfig, restful.DefaultContainer) -} - -// RegisterSwaggerService add the WebService that provides the API documentation of all services -// conform the Swagger documentation specifcation. (https://github.com/wordnik/swagger-core/wiki). -func RegisterSwaggerService(config Config, wsContainer *restful.Container) { - sws := newSwaggerService(config) - ws := new(restful.WebService) - ws.Path(config.ApiPath) - ws.Produces(restful.MIME_JSON) - if config.DisableCORS { - ws.Filter(enableCORS) - } - ws.Route(ws.GET("/").To(sws.getListing)) - ws.Route(ws.GET("/{a}").To(sws.getDeclarations)) - ws.Route(ws.GET("/{a}/{b}").To(sws.getDeclarations)) - ws.Route(ws.GET("/{a}/{b}/{c}").To(sws.getDeclarations)) - ws.Route(ws.GET("/{a}/{b}/{c}/{d}").To(sws.getDeclarations)) - ws.Route(ws.GET("/{a}/{b}/{c}/{d}/{e}").To(sws.getDeclarations)) - ws.Route(ws.GET("/{a}/{b}/{c}/{d}/{e}/{f}").To(sws.getDeclarations)) - ws.Route(ws.GET("/{a}/{b}/{c}/{d}/{e}/{f}/{g}").To(sws.getDeclarations)) - LogInfo("[restful/swagger] listing is available at %v%v", config.WebServicesUrl, config.ApiPath) - wsContainer.Add(ws) - - // Check paths for UI serving - if config.StaticHandler == nil && config.SwaggerFilePath != "" && config.SwaggerPath != "" { - swaggerPathSlash := config.SwaggerPath - // path must end with slash / - if "/" != config.SwaggerPath[len(config.SwaggerPath)-1:] { - LogInfo("[restful/swagger] use corrected SwaggerPath ; must end with slash (/)") - swaggerPathSlash += "/" - } - - LogInfo("[restful/swagger] %v%v is mapped to folder %v", config.WebServicesUrl, swaggerPathSlash, config.SwaggerFilePath) - wsContainer.Handle(swaggerPathSlash, http.StripPrefix(swaggerPathSlash, http.FileServer(http.Dir(config.SwaggerFilePath)))) - - //if we define a custom static handler use it - } else if config.StaticHandler != nil && config.SwaggerPath != "" { - swaggerPathSlash := config.SwaggerPath - // path must end with slash / - if "/" != config.SwaggerPath[len(config.SwaggerPath)-1:] { - LogInfo("[restful/swagger] use corrected SwaggerFilePath ; must end with slash (/)") - swaggerPathSlash += "/" - - } - LogInfo("[restful/swagger] %v%v is mapped to custom Handler %T", config.WebServicesUrl, swaggerPathSlash, config.StaticHandler) - wsContainer.Handle(swaggerPathSlash, config.StaticHandler) - - } else { - LogInfo("[restful/swagger] Swagger(File)Path is empty ; no UI is served") - } -} - -func staticPathFromRoute(r restful.Route) string { - static := r.Path - bracket := strings.Index(static, "{") - if bracket <= 1 { // result cannot be empty - return static - } - if bracket != -1 { - static = r.Path[:bracket] - } - if strings.HasSuffix(static, "/") { - return static[:len(static)-1] - } else { - return static - } -} - -func enableCORS(req *restful.Request, resp *restful.Response, chain *restful.FilterChain) { - if origin := req.HeaderParameter(restful.HEADER_Origin); origin != "" { - // prevent duplicate header - if len(resp.Header().Get(restful.HEADER_AccessControlAllowOrigin)) == 0 { - resp.AddHeader(restful.HEADER_AccessControlAllowOrigin, origin) - } - } - chain.ProcessFilter(req, resp) -} - -func (sws SwaggerService) getListing(req *restful.Request, resp *restful.Response) { - listing := sws.produceListing() - resp.WriteAsJson(listing) -} - -func (sws SwaggerService) produceListing() ResourceListing { - listing := ResourceListing{SwaggerVersion: swaggerVersion, ApiVersion: sws.config.ApiVersion, Info: sws.config.Info} - sws.apiDeclarationMap.Do(func(k string, v ApiDeclaration) { - ref := Resource{Path: k} - if len(v.Apis) > 0 { // use description of first (could still be empty) - ref.Description = v.Apis[0].Description - } - listing.Apis = append(listing.Apis, ref) - }) - return listing -} - -func (sws SwaggerService) getDeclarations(req *restful.Request, resp *restful.Response) { - decl, ok := sws.produceDeclarations(composeRootPath(req)) - if !ok { - resp.WriteErrorString(http.StatusNotFound, "ApiDeclaration not found") - return - } - // unless WebServicesUrl is given - if len(sws.config.WebServicesUrl) == 0 { - // update base path from the actual request - // TODO how to detect https? assume http for now - var host string - // X-Forwarded-Host or Host or Request.Host - hostvalues, ok := req.Request.Header["X-Forwarded-Host"] // apache specific? - if !ok || len(hostvalues) == 0 { - forwarded, ok := req.Request.Header["Host"] // without reverse-proxy - if !ok || len(forwarded) == 0 { - // fallback to Host field - host = req.Request.Host - } else { - host = forwarded[0] - } - } else { - host = hostvalues[0] - } - // inspect Referer for the scheme (http vs https) - scheme := "http" - if referer := req.Request.Header["Referer"]; len(referer) > 0 { - if strings.HasPrefix(referer[0], "https") { - scheme = "https" - } - } - decl.BasePath = fmt.Sprintf("%s://%s", scheme, host) - } - resp.WriteAsJson(decl) -} - -func (sws SwaggerService) produceAllDeclarations() map[string]ApiDeclaration { - decls := map[string]ApiDeclaration{} - sws.apiDeclarationMap.Do(func(k string, v ApiDeclaration) { - decls[k] = v - }) - return decls -} - -func (sws SwaggerService) produceDeclarations(route string) (*ApiDeclaration, bool) { - decl, ok := sws.apiDeclarationMap.At(route) - if !ok { - return nil, false - } - decl.BasePath = sws.config.WebServicesUrl - return &decl, true -} - -// composeDeclaration uses all routes and parameters to create a ApiDeclaration -func (sws SwaggerService) composeDeclaration(ws *restful.WebService, pathPrefix string) ApiDeclaration { - decl := ApiDeclaration{ - SwaggerVersion: swaggerVersion, - BasePath: sws.config.WebServicesUrl, - ResourcePath: pathPrefix, - Models: ModelList{}, - ApiVersion: ws.Version()} - - // collect any path parameters - rootParams := []Parameter{} - for _, param := range ws.PathParameters() { - rootParams = append(rootParams, asSwaggerParameter(param.Data())) - } - // aggregate by path - pathToRoutes := newOrderedRouteMap() - for _, other := range ws.Routes() { - if strings.HasPrefix(other.Path, pathPrefix) { - if len(pathPrefix) > 1 && len(other.Path) > len(pathPrefix) && other.Path[len(pathPrefix)] != '/' { - continue - } - pathToRoutes.Add(other.Path, other) - } - } - pathToRoutes.Do(func(path string, routes []restful.Route) { - api := Api{Path: strings.TrimSuffix(withoutWildcard(path), "/"), Description: ws.Documentation()} - voidString := "void" - for _, route := range routes { - operation := Operation{ - Method: route.Method, - Summary: route.Doc, - Notes: route.Notes, - // Type gets overwritten if there is a write sample - DataTypeFields: DataTypeFields{Type: &voidString}, - Parameters: []Parameter{}, - Nickname: route.Operation, - ResponseMessages: composeResponseMessages(route, &decl, &sws.config)} - - operation.Consumes = route.Consumes - operation.Produces = route.Produces - - // share root params if any - for _, swparam := range rootParams { - operation.Parameters = append(operation.Parameters, swparam) - } - // route specific params - for _, param := range route.ParameterDocs { - operation.Parameters = append(operation.Parameters, asSwaggerParameter(param.Data())) - } - - sws.addModelsFromRouteTo(&operation, route, &decl) - api.Operations = append(api.Operations, operation) - } - decl.Apis = append(decl.Apis, api) - }) - return decl -} - -func withoutWildcard(path string) string { - if strings.HasSuffix(path, ":*}") { - return path[0:len(path)-3] + "}" - } - return path -} - -// composeResponseMessages takes the ResponseErrors (if any) and creates ResponseMessages from them. -func composeResponseMessages(route restful.Route, decl *ApiDeclaration, config *Config) (messages []ResponseMessage) { - if route.ResponseErrors == nil { - return messages - } - // sort by code - codes := sort.IntSlice{} - for code := range route.ResponseErrors { - codes = append(codes, code) - } - codes.Sort() - for _, code := range codes { - each := route.ResponseErrors[code] - message := ResponseMessage{ - Code: code, - Message: each.Message, - } - if each.Model != nil { - st := reflect.TypeOf(each.Model) - isCollection, st := detectCollectionType(st) - // collection cannot be in responsemodel - if !isCollection { - modelName := modelBuilder{}.keyFrom(st) - modelBuilder{Models: &decl.Models, Config: config}.addModel(st, "") - message.ResponseModel = modelName - } - } - messages = append(messages, message) - } - return -} - -// addModelsFromRoute takes any read or write sample from the Route and creates a Swagger model from it. -func (sws SwaggerService) addModelsFromRouteTo(operation *Operation, route restful.Route, decl *ApiDeclaration) { - if route.ReadSample != nil { - sws.addModelFromSampleTo(operation, false, route.ReadSample, &decl.Models) - } - if route.WriteSample != nil { - sws.addModelFromSampleTo(operation, true, route.WriteSample, &decl.Models) - } -} - -func detectCollectionType(st reflect.Type) (bool, reflect.Type) { - isCollection := false - if st.Kind() == reflect.Slice || st.Kind() == reflect.Array { - st = st.Elem() - isCollection = true - } else { - if st.Kind() == reflect.Ptr { - if st.Elem().Kind() == reflect.Slice || st.Elem().Kind() == reflect.Array { - st = st.Elem().Elem() - isCollection = true - } - } - } - return isCollection, st -} - -// addModelFromSample creates and adds (or overwrites) a Model from a sample resource -func (sws SwaggerService) addModelFromSampleTo(operation *Operation, isResponse bool, sample interface{}, models *ModelList) { - mb := modelBuilder{Models: models, Config: &sws.config} - if isResponse { - sampleType, items := asDataType(sample, &sws.config) - operation.Type = sampleType - operation.Items = items - } - mb.addModelFrom(sample) -} - -func asSwaggerParameter(param restful.ParameterData) Parameter { - return Parameter{ - DataTypeFields: DataTypeFields{ - Type: ¶m.DataType, - Format: asFormat(param.DataType, param.DataFormat), - DefaultValue: Special(param.DefaultValue), - }, - Name: param.Name, - Description: param.Description, - ParamType: asParamType(param.Kind), - - Required: param.Required} -} - -// Between 1..7 path parameters is supported -func composeRootPath(req *restful.Request) string { - path := "/" + req.PathParameter("a") - b := req.PathParameter("b") - if b == "" { - return path - } - path = path + "/" + b - c := req.PathParameter("c") - if c == "" { - return path - } - path = path + "/" + c - d := req.PathParameter("d") - if d == "" { - return path - } - path = path + "/" + d - e := req.PathParameter("e") - if e == "" { - return path - } - path = path + "/" + e - f := req.PathParameter("f") - if f == "" { - return path - } - path = path + "/" + f - g := req.PathParameter("g") - if g == "" { - return path - } - return path + "/" + g -} - -func asFormat(dataType string, dataFormat string) string { - if dataFormat != "" { - return dataFormat - } - return "" // TODO -} - -func asParamType(kind int) string { - switch { - case kind == restful.PathParameterKind: - return "path" - case kind == restful.QueryParameterKind: - return "query" - case kind == restful.BodyParameterKind: - return "body" - case kind == restful.HeaderParameterKind: - return "header" - case kind == restful.FormParameterKind: - return "form" - } - return "" -} - -func asDataType(any interface{}, config *Config) (*string, *Item) { - // If it's not a collection, return the suggested model name - st := reflect.TypeOf(any) - isCollection, st := detectCollectionType(st) - modelName := modelBuilder{}.keyFrom(st) - // if it's not a collection we are done - if !isCollection { - return &modelName, nil - } - - // XXX: This is not very elegant - // We create an Item object referring to the given model - models := ModelList{} - mb := modelBuilder{Models: &models, Config: config} - mb.addModelFrom(any) - - elemTypeName := mb.getElementTypeName(modelName, "", st) - item := new(Item) - if mb.isPrimitiveType(elemTypeName) { - mapped := mb.jsonSchemaType(elemTypeName) - item.Type = &mapped - } else { - item.Ref = &elemTypeName - } - tmp := "array" - return &tmp, item -} diff --git a/vendor/github.com/fatih/camelcase/LICENSE.md b/vendor/github.com/fatih/camelcase/LICENSE.md deleted file mode 100644 index aa4a536c..00000000 --- a/vendor/github.com/fatih/camelcase/LICENSE.md +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Fatih Arslan - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/fatih/camelcase/README.md b/vendor/github.com/fatih/camelcase/README.md deleted file mode 100644 index 105a6ae3..00000000 --- a/vendor/github.com/fatih/camelcase/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# CamelCase [![GoDoc](http://img.shields.io/badge/go-documentation-blue.svg?style=flat-square)](http://godoc.org/github.com/fatih/camelcase) [![Build Status](http://img.shields.io/travis/fatih/camelcase.svg?style=flat-square)](https://travis-ci.org/fatih/camelcase) - -CamelCase is a Golang (Go) package to split the words of a camelcase type -string into a slice of words. It can be used to convert a camelcase word (lower -or upper case) into any type of word. - -## Splitting rules: - -1. If string is not valid UTF-8, return it without splitting as - single item array. -2. Assign all unicode characters into one of 4 sets: lower case - letters, upper case letters, numbers, and all other characters. -3. Iterate through characters of string, introducing splits - between adjacent characters that belong to different sets. -4. Iterate through array of split strings, and if a given string - is upper case: - * if subsequent string is lower case: - * move last character of upper case string to beginning of - lower case string - -## Install - -```bash -go get github.com/fatih/camelcase -``` - -## Usage and examples - -```go -splitted := camelcase.Split("GolangPackage") - -fmt.Println(splitted[0], splitted[1]) // prints: "Golang", "Package" -``` - -Both lower camel case and upper camel case are supported. For more info please -check: [http://en.wikipedia.org/wiki/CamelCase](http://en.wikipedia.org/wiki/CamelCase) - -Below are some example cases: - -``` -"" => [] -"lowercase" => ["lowercase"] -"Class" => ["Class"] -"MyClass" => ["My", "Class"] -"MyC" => ["My", "C"] -"HTML" => ["HTML"] -"PDFLoader" => ["PDF", "Loader"] -"AString" => ["A", "String"] -"SimpleXMLParser" => ["Simple", "XML", "Parser"] -"vimRPCPlugin" => ["vim", "RPC", "Plugin"] -"GL11Version" => ["GL", "11", "Version"] -"99Bottles" => ["99", "Bottles"] -"May5" => ["May", "5"] -"BFG9000" => ["BFG", "9000"] -"BöseÜberraschung" => ["Böse", "Überraschung"] -"Two spaces" => ["Two", " ", "spaces"] -"BadUTF8\xe2\xe2\xa1" => ["BadUTF8\xe2\xe2\xa1"] -``` diff --git a/vendor/github.com/fatih/camelcase/camelcase.go b/vendor/github.com/fatih/camelcase/camelcase.go deleted file mode 100644 index 02160c9a..00000000 --- a/vendor/github.com/fatih/camelcase/camelcase.go +++ /dev/null @@ -1,90 +0,0 @@ -// Package camelcase is a micro package to split the words of a camelcase type -// string into a slice of words. -package camelcase - -import ( - "unicode" - "unicode/utf8" -) - -// Split splits the camelcase word and returns a list of words. It also -// supports digits. Both lower camel case and upper camel case are supported. -// For more info please check: http://en.wikipedia.org/wiki/CamelCase -// -// Examples -// -// "" => [""] -// "lowercase" => ["lowercase"] -// "Class" => ["Class"] -// "MyClass" => ["My", "Class"] -// "MyC" => ["My", "C"] -// "HTML" => ["HTML"] -// "PDFLoader" => ["PDF", "Loader"] -// "AString" => ["A", "String"] -// "SimpleXMLParser" => ["Simple", "XML", "Parser"] -// "vimRPCPlugin" => ["vim", "RPC", "Plugin"] -// "GL11Version" => ["GL", "11", "Version"] -// "99Bottles" => ["99", "Bottles"] -// "May5" => ["May", "5"] -// "BFG9000" => ["BFG", "9000"] -// "BöseÜberraschung" => ["Böse", "Überraschung"] -// "Two spaces" => ["Two", " ", "spaces"] -// "BadUTF8\xe2\xe2\xa1" => ["BadUTF8\xe2\xe2\xa1"] -// -// Splitting rules -// -// 1) If string is not valid UTF-8, return it without splitting as -// single item array. -// 2) Assign all unicode characters into one of 4 sets: lower case -// letters, upper case letters, numbers, and all other characters. -// 3) Iterate through characters of string, introducing splits -// between adjacent characters that belong to different sets. -// 4) Iterate through array of split strings, and if a given string -// is upper case: -// if subsequent string is lower case: -// move last character of upper case string to beginning of -// lower case string -func Split(src string) (entries []string) { - // don't split invalid utf8 - if !utf8.ValidString(src) { - return []string{src} - } - entries = []string{} - var runes [][]rune - lastClass := 0 - class := 0 - // split into fields based on class of unicode character - for _, r := range src { - switch true { - case unicode.IsLower(r): - class = 1 - case unicode.IsUpper(r): - class = 2 - case unicode.IsDigit(r): - class = 3 - default: - class = 4 - } - if class == lastClass { - runes[len(runes)-1] = append(runes[len(runes)-1], r) - } else { - runes = append(runes, []rune{r}) - } - lastClass = class - } - // handle upper case -> lower case sequences, e.g. - // "PDFL", "oader" -> "PDF", "Loader" - for i := 0; i < len(runes)-1; i++ { - if unicode.IsUpper(runes[i][0]) && unicode.IsLower(runes[i+1][0]) { - runes[i+1] = append([]rune{runes[i][len(runes[i])-1]}, runes[i+1]...) - runes[i] = runes[i][:len(runes[i])-1] - } - } - // construct []string from results - for _, s := range runes { - if len(s) > 0 { - entries = append(entries, string(s)) - } - } - return -} diff --git a/vendor/github.com/ulule/deepcopier/LICENSE b/vendor/github.com/ulule/deepcopier/LICENSE deleted file mode 100644 index d5c4ea02..00000000 --- a/vendor/github.com/ulule/deepcopier/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Ulule - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/vendor/github.com/ulule/deepcopier/README.md b/vendor/github.com/ulule/deepcopier/README.md deleted file mode 100644 index 25aafae8..00000000 --- a/vendor/github.com/ulule/deepcopier/README.md +++ /dev/null @@ -1,129 +0,0 @@ -# Deepcopier - -[![Build Status](https://secure.travis-ci.org/ulule/deepcopier.png?branch=master)](http://travis-ci.org/ulule/deepcopier) - -This package is meant to make copying of structs to/from others structs a bit easier. - -## Installation - -```bash -go get -u github.com/ulule/deepcopier -``` - -## Usage - -```golang -// Deep copy instance1 into instance2 -Copy(instance1).To(instance2) - -// Deep copy instance1 into instance2 and passes the following context (which -// is basically a map[string]interface{}) as first argument -// to methods of instance2 that defined the struct tag "context". -Copy(instance1).WithContext(map[string]interface{}{"foo": "bar"}).To(instance2) - -// Deep copy instance2 into instance1 -Copy(instance1).From(instance2) - -// Deep copy instance2 into instance1 and passes the following context (which -// is basically a map[string]interface{}) as first argument -// to methods of instance1 that defined the struct tag "context". -Copy(instance1).WithContext(map[string]interface{}{"foo": "bar"}).From(instance2) -``` - -Available options for `deepcopier` struct tag: - -| Option | Description | -| --------- | -------------------------------------------------------------------- | -| `field` | Field or method name in source instance | -| `skip` | Ignores the field | -| `context` | Takes a `map[string]interface{}` as first argument (for methods) | -| `force` | Set the value of a `sql.Null*` field (instead of copying the struct) | - -**Options example:** - -```golang -type Source struct { - Name string - SkipMe string - SQLNullStringToSQLNullString sql.NullString - SQLNullStringToString sql.NullString - -} - -func (Source) MethodThatTakesContext(c map[string]interface{}) string { - return "whatever" -} - -type Destination struct { - FieldWithAnotherNameInSource string `deepcopier:"field:Name"` - SkipMe string `deepcopier:"skip"` - MethodThatTakesContext string `deepcopier:"context"` - SQLNullStringToSQLNullString sql.NullString - SQLNullStringToString string `deepcopier:"force"` -} - -``` - -Example: - -```golang -package main - -import ( - "fmt" - - "github.com/ulule/deepcopier" -) - -// Model -type User struct { - // Basic string field - Name string - // Deepcopier supports https://golang.org/pkg/database/sql/driver/#Valuer - Email sql.NullString -} - -func (u *User) MethodThatTakesContext(ctx map[string]interface{}) string { - // do whatever you want - return "hello from this method" -} - -// Resource -type UserResource struct { - DisplayName string `deepcopier:"field:Name"` - SkipMe string `deepcopier:"skip"` - MethodThatTakesContext string `deepcopier:"context"` - Email string `deepcopier:"force"` - -} - -func main() { - user := &User{ - Name: "gilles", - Email: sql.NullString{ - Valid: true, - String: "gilles@example.com", - }, - } - - resource := &UserResource{} - - deepcopier.Copy(user).To(resource) - - fmt.Println(resource.DisplayName) - fmt.Println(resource.Email) -} -``` - -Looking for more information about the usage? - -We wrote [an introduction article](https://github.com/ulule/deepcopier/blob/master/examples/rest-usage/README.rst). -Have a look and feel free to give us your feedback. - -## Contributing - -* Ping us on twitter [@oibafsellig](https://twitter.com/oibafsellig), [@thoas](https://twitter.com/thoas) -* Fork the [project](https://github.com/ulule/deepcopier) -* Help us improving and fixing [issues](https://github.com/ulule/deepcopier/issues) - -Don't hesitate ;) diff --git a/vendor/github.com/ulule/deepcopier/deepcopier.go b/vendor/github.com/ulule/deepcopier/deepcopier.go deleted file mode 100644 index 8cccb5b7..00000000 --- a/vendor/github.com/ulule/deepcopier/deepcopier.go +++ /dev/null @@ -1,350 +0,0 @@ -package deepcopier - -import ( - "database/sql/driver" - "fmt" - "reflect" - "strings" -) - -const ( - // TagName is the deepcopier struct tag name. - TagName = "deepcopier" - // FieldOptionName is the from field option name for struct tag. - FieldOptionName = "field" - // ContextOptionName is the context option name for struct tag. - ContextOptionName = "context" - // SkipOptionName is the skip option name for struct tag. - SkipOptionName = "skip" - // ForceOptionName is the skip option name for struct tag. - ForceOptionName = "force" -) - -type ( - // TagOptions is a map that contains extracted struct tag options. - TagOptions map[string]string - - // Options are copier options. - Options struct { - // Context given to WithContext() method. - Context map[string]interface{} - // Reversed reverses struct tag checkings. - Reversed bool - } -) - -// DeepCopier deep copies a struct to/from a struct. -type DeepCopier struct { - dst interface{} - src interface{} - ctx map[string]interface{} -} - -// Copy sets source or destination. -func Copy(src interface{}) *DeepCopier { - return &DeepCopier{src: src} -} - -// WithContext injects the given context into the builder instance. -func (dc *DeepCopier) WithContext(ctx map[string]interface{}) *DeepCopier { - dc.ctx = ctx - return dc -} - -// To sets the destination. -func (dc *DeepCopier) To(dst interface{}) error { - dc.dst = dst - return process(dc.dst, dc.src, Options{Context: dc.ctx}) -} - -// From sets the given the source as destination and destination as source. -func (dc *DeepCopier) From(src interface{}) error { - dc.dst = dc.src - dc.src = src - return process(dc.dst, dc.src, Options{Context: dc.ctx, Reversed: true}) -} - -// process handles copy. -func process(dst interface{}, src interface{}, args ...Options) error { - var ( - options = Options{} - srcValue = reflect.Indirect(reflect.ValueOf(src)) - dstValue = reflect.Indirect(reflect.ValueOf(dst)) - srcFieldNames = getFieldNames(src) - srcMethodNames = getMethodNames(src) - ) - - if len(args) > 0 { - options = args[0] - } - - if !dstValue.CanAddr() { - return fmt.Errorf("destination %+v is unaddressable", dstValue.Interface()) - } - - for _, f := range srcFieldNames { - var ( - srcFieldValue = srcValue.FieldByName(f) - srcFieldType, srcFieldFound = srcValue.Type().FieldByName(f) - srcFieldName = srcFieldType.Name - dstFieldName = srcFieldName - tagOptions TagOptions - ) - - if !srcFieldFound { - continue - } - - if options.Reversed { - tagOptions = getTagOptions(srcFieldType.Tag.Get(TagName)) - if v, ok := tagOptions[FieldOptionName]; ok && v != "" { - dstFieldName = v - } - } else { - if name, opts := getRelatedField(dst, srcFieldName); name != "" { - dstFieldName, tagOptions = name, opts - } - } - - if _, ok := tagOptions[SkipOptionName]; ok { - continue - } - - var ( - dstFieldType, dstFieldFound = dstValue.Type().FieldByName(dstFieldName) - dstFieldValue = dstValue.FieldByName(dstFieldName) - ) - - if !dstFieldFound { - continue - } - - // Force option for empty interfaces and nullable types - _, force := tagOptions[ForceOptionName] - - // Valuer -> ptr - if isNullableType(srcFieldType.Type) && dstFieldValue.Kind() == reflect.Ptr && force { - v, _ := srcFieldValue.Interface().(driver.Valuer).Value() - if v == nil { - continue - } - - valueType := reflect.TypeOf(v) - - ptr := reflect.New(valueType) - ptr.Elem().Set(reflect.ValueOf(v)) - - if valueType.AssignableTo(dstFieldType.Type.Elem()) { - dstFieldValue.Set(ptr) - } - - continue - } - - // Valuer -> value - if isNullableType(srcFieldType.Type) { - if force { - v, _ := srcFieldValue.Interface().(driver.Valuer).Value() - if v == nil { - continue - } - - rv := reflect.ValueOf(v) - if rv.Type().AssignableTo(dstFieldType.Type) { - dstFieldValue.Set(rv) - } - } - - continue - } - - if dstFieldValue.Kind() == reflect.Interface { - if force { - dstFieldValue.Set(srcFieldValue) - } - continue - } - - // Ptr -> Value - if srcFieldType.Type.Kind() == reflect.Ptr && !srcFieldValue.IsNil() && dstFieldType.Type.Kind() != reflect.Ptr { - indirect := reflect.Indirect(srcFieldValue) - - if indirect.Type().AssignableTo(dstFieldType.Type) { - dstFieldValue.Set(indirect) - continue - } - } - - // Other types - if srcFieldType.Type.AssignableTo(dstFieldType.Type) { - dstFieldValue.Set(srcFieldValue) - } - } - - for _, m := range srcMethodNames { - name, opts := getRelatedField(dst, m) - if name == "" { - continue - } - - if _, ok := opts[SkipOptionName]; ok { - continue - } - - method := reflect.ValueOf(src).MethodByName(m) - if !method.IsValid() { - return fmt.Errorf("method %s is invalid", m) - } - - var ( - dstFieldType, _ = dstValue.Type().FieldByName(name) - dstFieldValue = dstValue.FieldByName(name) - _, withContext = opts[ContextOptionName] - _, force = opts[ForceOptionName] - ) - - args := []reflect.Value{} - if withContext { - args = []reflect.Value{reflect.ValueOf(options.Context)} - } - - var ( - result = method.Call(args)[0] - resultInterface = result.Interface() - resultValue = reflect.ValueOf(resultInterface) - resultType = resultValue.Type() - ) - - // Value -> Ptr - if dstFieldValue.Kind() == reflect.Ptr && force { - ptr := reflect.New(resultType) - ptr.Elem().Set(resultValue) - - if ptr.Type().AssignableTo(dstFieldType.Type) { - dstFieldValue.Set(ptr) - } - - continue - } - - // Ptr -> value - if resultValue.Kind() == reflect.Ptr && force { - if resultValue.Elem().Type().AssignableTo(dstFieldType.Type) { - dstFieldValue.Set(resultValue.Elem()) - } - - continue - } - - if resultType.AssignableTo(dstFieldType.Type) && result.IsValid() { - dstFieldValue.Set(result) - } - } - - return nil -} - -// getTagOptions parses deepcopier tag field and returns options. -func getTagOptions(value string) TagOptions { - options := TagOptions{} - - for _, opt := range strings.Split(value, ";") { - o := strings.Split(opt, ":") - - // deepcopier:"keyword; without; value;" - if len(o) == 1 { - options[o[0]] = "" - } - - // deepcopier:"key:value; anotherkey:anothervalue" - if len(o) == 2 { - options[strings.TrimSpace(o[0])] = strings.TrimSpace(o[1]) - } - } - - return options -} - -// getRelatedField returns first matching field. -func getRelatedField(instance interface{}, name string) (string, TagOptions) { - var ( - value = reflect.Indirect(reflect.ValueOf(instance)) - fieldName string - tagOptions TagOptions - ) - - for i := 0; i < value.NumField(); i++ { - var ( - vField = value.Field(i) - tField = value.Type().Field(i) - tagOptions = getTagOptions(tField.Tag.Get(TagName)) - ) - - if tField.Type.Kind() == reflect.Struct && tField.Anonymous { - if n, o := getRelatedField(vField.Interface(), name); n != "" { - return n, o - } - } - - if v, ok := tagOptions[FieldOptionName]; ok && v == name { - return tField.Name, tagOptions - } - - if tField.Name == name { - return tField.Name, tagOptions - } - } - - return fieldName, tagOptions -} - -// getMethodNames returns instance's method names. -func getMethodNames(instance interface{}) []string { - var methods []string - - t := reflect.TypeOf(instance) - for i := 0; i < t.NumMethod(); i++ { - methods = append(methods, t.Method(i).Name) - } - - return methods -} - -// getFieldNames returns instance's field names. -func getFieldNames(instance interface{}) []string { - var ( - fields []string - v = reflect.Indirect(reflect.ValueOf(instance)) - t = v.Type() - ) - - if t.Kind() != reflect.Struct { - return nil - } - - for i := 0; i < v.NumField(); i++ { - var ( - vField = v.Field(i) - tField = v.Type().Field(i) - ) - - // Is exportable? - if tField.PkgPath != "" { - continue - } - - if tField.Type.Kind() == reflect.Struct && tField.Anonymous { - fields = append(fields, getFieldNames(vField.Interface())...) - continue - } - - fields = append(fields, tField.Name) - } - - return fields -} - -// isNullableType returns true if the given type is a nullable one. -func isNullableType(t reflect.Type) bool { - return t.ConvertibleTo(reflect.TypeOf((*driver.Valuer)(nil)).Elem()) -} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go b/vendor/golang.org/x/crypto/ssh/terminal/terminal.go deleted file mode 100644 index 741eeb13..00000000 --- a/vendor/golang.org/x/crypto/ssh/terminal/terminal.go +++ /dev/null @@ -1,892 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package terminal - -import ( - "bytes" - "io" - "sync" - "unicode/utf8" -) - -// EscapeCodes contains escape sequences that can be written to the terminal in -// order to achieve different styles of text. -type EscapeCodes struct { - // Foreground colors - Black, Red, Green, Yellow, Blue, Magenta, Cyan, White []byte - - // Reset all attributes - Reset []byte -} - -var vt100EscapeCodes = EscapeCodes{ - Black: []byte{keyEscape, '[', '3', '0', 'm'}, - Red: []byte{keyEscape, '[', '3', '1', 'm'}, - Green: []byte{keyEscape, '[', '3', '2', 'm'}, - Yellow: []byte{keyEscape, '[', '3', '3', 'm'}, - Blue: []byte{keyEscape, '[', '3', '4', 'm'}, - Magenta: []byte{keyEscape, '[', '3', '5', 'm'}, - Cyan: []byte{keyEscape, '[', '3', '6', 'm'}, - White: []byte{keyEscape, '[', '3', '7', 'm'}, - - Reset: []byte{keyEscape, '[', '0', 'm'}, -} - -// Terminal contains the state for running a VT100 terminal that is capable of -// reading lines of input. -type Terminal struct { - // AutoCompleteCallback, if non-null, is called for each keypress with - // the full input line and the current position of the cursor (in - // bytes, as an index into |line|). If it returns ok=false, the key - // press is processed normally. Otherwise it returns a replacement line - // and the new cursor position. - AutoCompleteCallback func(line string, pos int, key rune) (newLine string, newPos int, ok bool) - - // Escape contains a pointer to the escape codes for this terminal. - // It's always a valid pointer, although the escape codes themselves - // may be empty if the terminal doesn't support them. - Escape *EscapeCodes - - // lock protects the terminal and the state in this object from - // concurrent processing of a key press and a Write() call. - lock sync.Mutex - - c io.ReadWriter - prompt []rune - - // line is the current line being entered. - line []rune - // pos is the logical position of the cursor in line - pos int - // echo is true if local echo is enabled - echo bool - // pasteActive is true iff there is a bracketed paste operation in - // progress. - pasteActive bool - - // cursorX contains the current X value of the cursor where the left - // edge is 0. cursorY contains the row number where the first row of - // the current line is 0. - cursorX, cursorY int - // maxLine is the greatest value of cursorY so far. - maxLine int - - termWidth, termHeight int - - // outBuf contains the terminal data to be sent. - outBuf []byte - // remainder contains the remainder of any partial key sequences after - // a read. It aliases into inBuf. - remainder []byte - inBuf [256]byte - - // history contains previously entered commands so that they can be - // accessed with the up and down keys. - history stRingBuffer - // historyIndex stores the currently accessed history entry, where zero - // means the immediately previous entry. - historyIndex int - // When navigating up and down the history it's possible to return to - // the incomplete, initial line. That value is stored in - // historyPending. - historyPending string -} - -// NewTerminal runs a VT100 terminal on the given ReadWriter. If the ReadWriter is -// a local terminal, that terminal must first have been put into raw mode. -// prompt is a string that is written at the start of each input line (i.e. -// "> "). -func NewTerminal(c io.ReadWriter, prompt string) *Terminal { - return &Terminal{ - Escape: &vt100EscapeCodes, - c: c, - prompt: []rune(prompt), - termWidth: 80, - termHeight: 24, - echo: true, - historyIndex: -1, - } -} - -const ( - keyCtrlD = 4 - keyCtrlU = 21 - keyEnter = '\r' - keyEscape = 27 - keyBackspace = 127 - keyUnknown = 0xd800 /* UTF-16 surrogate area */ + iota - keyUp - keyDown - keyLeft - keyRight - keyAltLeft - keyAltRight - keyHome - keyEnd - keyDeleteWord - keyDeleteLine - keyClearScreen - keyPasteStart - keyPasteEnd -) - -var pasteStart = []byte{keyEscape, '[', '2', '0', '0', '~'} -var pasteEnd = []byte{keyEscape, '[', '2', '0', '1', '~'} - -// bytesToKey tries to parse a key sequence from b. If successful, it returns -// the key and the remainder of the input. Otherwise it returns utf8.RuneError. -func bytesToKey(b []byte, pasteActive bool) (rune, []byte) { - if len(b) == 0 { - return utf8.RuneError, nil - } - - if !pasteActive { - switch b[0] { - case 1: // ^A - return keyHome, b[1:] - case 5: // ^E - return keyEnd, b[1:] - case 8: // ^H - return keyBackspace, b[1:] - case 11: // ^K - return keyDeleteLine, b[1:] - case 12: // ^L - return keyClearScreen, b[1:] - case 23: // ^W - return keyDeleteWord, b[1:] - } - } - - if b[0] != keyEscape { - if !utf8.FullRune(b) { - return utf8.RuneError, b - } - r, l := utf8.DecodeRune(b) - return r, b[l:] - } - - if !pasteActive && len(b) >= 3 && b[0] == keyEscape && b[1] == '[' { - switch b[2] { - case 'A': - return keyUp, b[3:] - case 'B': - return keyDown, b[3:] - case 'C': - return keyRight, b[3:] - case 'D': - return keyLeft, b[3:] - case 'H': - return keyHome, b[3:] - case 'F': - return keyEnd, b[3:] - } - } - - if !pasteActive && len(b) >= 6 && b[0] == keyEscape && b[1] == '[' && b[2] == '1' && b[3] == ';' && b[4] == '3' { - switch b[5] { - case 'C': - return keyAltRight, b[6:] - case 'D': - return keyAltLeft, b[6:] - } - } - - if !pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteStart) { - return keyPasteStart, b[6:] - } - - if pasteActive && len(b) >= 6 && bytes.Equal(b[:6], pasteEnd) { - return keyPasteEnd, b[6:] - } - - // If we get here then we have a key that we don't recognise, or a - // partial sequence. It's not clear how one should find the end of a - // sequence without knowing them all, but it seems that [a-zA-Z~] only - // appears at the end of a sequence. - for i, c := range b[0:] { - if c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '~' { - return keyUnknown, b[i+1:] - } - } - - return utf8.RuneError, b -} - -// queue appends data to the end of t.outBuf -func (t *Terminal) queue(data []rune) { - t.outBuf = append(t.outBuf, []byte(string(data))...) -} - -var eraseUnderCursor = []rune{' ', keyEscape, '[', 'D'} -var space = []rune{' '} - -func isPrintable(key rune) bool { - isInSurrogateArea := key >= 0xd800 && key <= 0xdbff - return key >= 32 && !isInSurrogateArea -} - -// moveCursorToPos appends data to t.outBuf which will move the cursor to the -// given, logical position in the text. -func (t *Terminal) moveCursorToPos(pos int) { - if !t.echo { - return - } - - x := visualLength(t.prompt) + pos - y := x / t.termWidth - x = x % t.termWidth - - up := 0 - if y < t.cursorY { - up = t.cursorY - y - } - - down := 0 - if y > t.cursorY { - down = y - t.cursorY - } - - left := 0 - if x < t.cursorX { - left = t.cursorX - x - } - - right := 0 - if x > t.cursorX { - right = x - t.cursorX - } - - t.cursorX = x - t.cursorY = y - t.move(up, down, left, right) -} - -func (t *Terminal) move(up, down, left, right int) { - 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() { - op := []rune{keyEscape, '[', 'K'} - t.queue(op) -} - -const maxLineLength = 4096 - -func (t *Terminal) setLine(newLine []rune, newPos int) { - if t.echo { - t.moveCursorToPos(0) - t.writeLine(newLine) - for i := len(newLine); i < len(t.line); i++ { - t.writeLine(space) - } - t.moveCursorToPos(newPos) - } - t.line = newLine - t.pos = newPos -} - -func (t *Terminal) advanceCursor(places int) { - t.cursorX += places - t.cursorY += t.cursorX / t.termWidth - if t.cursorY > t.maxLine { - t.maxLine = t.cursorY - } - t.cursorX = t.cursorX % t.termWidth - - if places > 0 && t.cursorX == 0 { - // Normally terminals will advance the current position - // when writing a character. But that doesn't happen - // for the last character in a line. However, when - // writing a character (except a new line) that causes - // a line wrap, the position will be advanced two - // places. - // - // So, if we are stopping at the end of a line, we - // need to write a newline so that our cursor can be - // advanced to the next line. - t.outBuf = append(t.outBuf, '\n') - } -} - -func (t *Terminal) eraseNPreviousChars(n int) { - if n == 0 { - return - } - - if t.pos < n { - n = t.pos - } - t.pos -= n - t.moveCursorToPos(t.pos) - - copy(t.line[t.pos:], t.line[n+t.pos:]) - t.line = t.line[:len(t.line)-n] - if t.echo { - t.writeLine(t.line[t.pos:]) - for i := 0; i < n; i++ { - t.queue(space) - } - t.advanceCursor(n) - t.moveCursorToPos(t.pos) - } -} - -// countToLeftWord returns then number of characters from the cursor to the -// start of the previous word. -func (t *Terminal) countToLeftWord() int { - if t.pos == 0 { - return 0 - } - - pos := t.pos - 1 - for pos > 0 { - if t.line[pos] != ' ' { - break - } - pos-- - } - for pos > 0 { - if t.line[pos] == ' ' { - pos++ - break - } - pos-- - } - - return t.pos - pos -} - -// countToRightWord returns then number of characters from the cursor to the -// start of the next word. -func (t *Terminal) countToRightWord() int { - pos := t.pos - for pos < len(t.line) { - if t.line[pos] == ' ' { - break - } - pos++ - } - for pos < len(t.line) { - if t.line[pos] != ' ' { - break - } - pos++ - } - return pos - t.pos -} - -// visualLength returns the number of visible glyphs in s. -func visualLength(runes []rune) int { - inEscapeSeq := false - length := 0 - - for _, r := range runes { - switch { - case inEscapeSeq: - if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') { - inEscapeSeq = false - } - case r == '\x1b': - inEscapeSeq = true - default: - length++ - } - } - - return length -} - -// handleKey processes the given key and, optionally, returns a line of text -// that the user has entered. -func (t *Terminal) handleKey(key rune) (line string, ok bool) { - if t.pasteActive && key != keyEnter { - t.addKeyToLine(key) - return - } - - switch key { - case keyBackspace: - if t.pos == 0 { - return - } - t.eraseNPreviousChars(1) - case keyAltLeft: - // move left by a word. - t.pos -= t.countToLeftWord() - t.moveCursorToPos(t.pos) - case keyAltRight: - // move right by a word. - t.pos += t.countToRightWord() - t.moveCursorToPos(t.pos) - case keyLeft: - if t.pos == 0 { - return - } - t.pos-- - t.moveCursorToPos(t.pos) - case keyRight: - if t.pos == len(t.line) { - return - } - t.pos++ - t.moveCursorToPos(t.pos) - case keyHome: - if t.pos == 0 { - return - } - t.pos = 0 - t.moveCursorToPos(t.pos) - case keyEnd: - if t.pos == len(t.line) { - return - } - t.pos = len(t.line) - t.moveCursorToPos(t.pos) - case keyUp: - entry, ok := t.history.NthPreviousEntry(t.historyIndex + 1) - if !ok { - return "", false - } - if t.historyIndex == -1 { - t.historyPending = string(t.line) - } - t.historyIndex++ - runes := []rune(entry) - t.setLine(runes, len(runes)) - case keyDown: - switch t.historyIndex { - case -1: - return - case 0: - runes := []rune(t.historyPending) - t.setLine(runes, len(runes)) - t.historyIndex-- - default: - entry, ok := t.history.NthPreviousEntry(t.historyIndex - 1) - if ok { - t.historyIndex-- - runes := []rune(entry) - t.setLine(runes, len(runes)) - } - } - case keyEnter: - t.moveCursorToPos(len(t.line)) - t.queue([]rune("\r\n")) - line = string(t.line) - ok = true - t.line = t.line[:0] - t.pos = 0 - t.cursorX = 0 - t.cursorY = 0 - t.maxLine = 0 - case keyDeleteWord: - // Delete zero or more spaces and then one or more characters. - t.eraseNPreviousChars(t.countToLeftWord()) - case keyDeleteLine: - // Delete everything from the current cursor position to the - // end of line. - for i := t.pos; i < len(t.line); i++ { - t.queue(space) - t.advanceCursor(1) - } - t.line = t.line[:t.pos] - t.moveCursorToPos(t.pos) - case keyCtrlD: - // Erase the character under the current position. - // The EOF case when the line is empty is handled in - // readLine(). - if t.pos < len(t.line) { - t.pos++ - t.eraseNPreviousChars(1) - } - case keyCtrlU: - t.eraseNPreviousChars(t.pos) - case keyClearScreen: - // Erases the screen and moves the cursor to the home position. - t.queue([]rune("\x1b[2J\x1b[H")) - t.queue(t.prompt) - t.cursorX, t.cursorY = 0, 0 - t.advanceCursor(visualLength(t.prompt)) - t.setLine(t.line, t.pos) - default: - if t.AutoCompleteCallback != nil { - prefix := string(t.line[:t.pos]) - suffix := string(t.line[t.pos:]) - - t.lock.Unlock() - newLine, newPos, completeOk := t.AutoCompleteCallback(prefix+suffix, len(prefix), key) - t.lock.Lock() - - if completeOk { - t.setLine([]rune(newLine), utf8.RuneCount([]byte(newLine)[:newPos])) - return - } - } - if !isPrintable(key) { - return - } - if len(t.line) == maxLineLength { - return - } - t.addKeyToLine(key) - } - return -} - -// addKeyToLine inserts the given key at the current position in the current -// line. -func (t *Terminal) addKeyToLine(key rune) { - if len(t.line) == cap(t.line) { - newLine := make([]rune, len(t.line), 2*(1+len(t.line))) - copy(newLine, t.line) - t.line = newLine - } - t.line = t.line[:len(t.line)+1] - copy(t.line[t.pos+1:], t.line[t.pos:]) - t.line[t.pos] = key - if t.echo { - t.writeLine(t.line[t.pos:]) - } - t.pos++ - t.moveCursorToPos(t.pos) -} - -func (t *Terminal) writeLine(line []rune) { - for len(line) != 0 { - remainingOnLine := t.termWidth - t.cursorX - todo := len(line) - if todo > remainingOnLine { - todo = remainingOnLine - } - t.queue(line[:todo]) - t.advanceCursor(visualLength(line[:todo])) - line = line[todo:] - } -} - -func (t *Terminal) Write(buf []byte) (n int, err error) { - t.lock.Lock() - defer t.lock.Unlock() - - if t.cursorX == 0 && t.cursorY == 0 { - // This is the easy case: there's nothing on the screen that we - // have to move out of the way. - return t.c.Write(buf) - } - - // We have a prompt and possibly user input on the screen. We - // have to clear it first. - t.move(0 /* up */, 0 /* down */, t.cursorX /* left */, 0 /* right */) - t.cursorX = 0 - t.clearLineToRight() - - for t.cursorY > 0 { - t.move(1 /* up */, 0, 0, 0) - t.cursorY-- - t.clearLineToRight() - } - - if _, err = t.c.Write(t.outBuf); err != nil { - return - } - t.outBuf = t.outBuf[:0] - - if n, err = t.c.Write(buf); err != nil { - return - } - - t.writeLine(t.prompt) - if t.echo { - t.writeLine(t.line) - } - - t.moveCursorToPos(t.pos) - - if _, err = t.c.Write(t.outBuf); err != nil { - return - } - t.outBuf = t.outBuf[:0] - return -} - -// ReadPassword temporarily changes the prompt and reads a password, without -// echo, from the terminal. -func (t *Terminal) ReadPassword(prompt string) (line string, err error) { - t.lock.Lock() - defer t.lock.Unlock() - - oldPrompt := t.prompt - t.prompt = []rune(prompt) - t.echo = false - - line, err = t.readLine() - - t.prompt = oldPrompt - t.echo = true - - return -} - -// ReadLine returns a line of input from the terminal. -func (t *Terminal) ReadLine() (line string, err error) { - t.lock.Lock() - defer t.lock.Unlock() - - return t.readLine() -} - -func (t *Terminal) readLine() (line string, err error) { - // t.lock must be held at this point - - if t.cursorX == 0 && t.cursorY == 0 { - t.writeLine(t.prompt) - t.c.Write(t.outBuf) - t.outBuf = t.outBuf[:0] - } - - lineIsPasted := t.pasteActive - - for { - rest := t.remainder - lineOk := false - for !lineOk { - var key rune - key, rest = bytesToKey(rest, t.pasteActive) - if key == utf8.RuneError { - break - } - if !t.pasteActive { - if key == keyCtrlD { - if len(t.line) == 0 { - return "", io.EOF - } - } - if key == keyPasteStart { - t.pasteActive = true - if len(t.line) == 0 { - lineIsPasted = true - } - continue - } - } else if key == keyPasteEnd { - t.pasteActive = false - continue - } - if !t.pasteActive { - lineIsPasted = false - } - line, lineOk = t.handleKey(key) - } - if len(rest) > 0 { - n := copy(t.inBuf[:], rest) - t.remainder = t.inBuf[:n] - } else { - t.remainder = nil - } - t.c.Write(t.outBuf) - t.outBuf = t.outBuf[:0] - if lineOk { - if t.echo { - t.historyIndex = -1 - t.history.Add(line) - } - if lineIsPasted { - err = ErrPasteIndicator - } - return - } - - // t.remainder is a slice at the beginning of t.inBuf - // containing a partial key sequence - readBuf := t.inBuf[len(t.remainder):] - var n int - - t.lock.Unlock() - n, err = t.c.Read(readBuf) - t.lock.Lock() - - if err != nil { - return - } - - t.remainder = t.inBuf[:n+len(t.remainder)] - } - - panic("unreachable") // for Go 1.0. -} - -// SetPrompt sets the prompt to be used when reading subsequent lines. -func (t *Terminal) SetPrompt(prompt string) { - t.lock.Lock() - defer t.lock.Unlock() - - t.prompt = []rune(prompt) -} - -func (t *Terminal) clearAndRepaintLinePlusNPrevious(numPrevLines int) { - // Move cursor to column zero at the start of the line. - t.move(t.cursorY, 0, t.cursorX, 0) - t.cursorX, t.cursorY = 0, 0 - t.clearLineToRight() - for t.cursorY < numPrevLines { - // Move down a line - t.move(0, 1, 0, 0) - t.cursorY++ - t.clearLineToRight() - } - // Move back to beginning. - t.move(t.cursorY, 0, 0, 0) - t.cursorX, t.cursorY = 0, 0 - - t.queue(t.prompt) - t.advanceCursor(visualLength(t.prompt)) - t.writeLine(t.line) - t.moveCursorToPos(t.pos) -} - -func (t *Terminal) SetSize(width, height int) error { - t.lock.Lock() - defer t.lock.Unlock() - - if width == 0 { - width = 1 - } - - oldWidth := t.termWidth - t.termWidth, t.termHeight = width, height - - switch { - case width == oldWidth: - // If the width didn't change then nothing else needs to be - // done. - return nil - case len(t.line) == 0 && t.cursorX == 0 && t.cursorY == 0: - // If there is nothing on current line and no prompt printed, - // just do nothing - return nil - case width < oldWidth: - // Some terminals (e.g. xterm) will truncate lines that were - // too long when shinking. Others, (e.g. gnome-terminal) will - // attempt to wrap them. For the former, repainting t.maxLine - // works great, but that behaviour goes badly wrong in the case - // of the latter because they have doubled every full line. - - // We assume that we are working on a terminal that wraps lines - // and adjust the cursor position based on every previous line - // wrapping and turning into two. This causes the prompt on - // xterms to move upwards, which isn't great, but it avoids a - // huge mess with gnome-terminal. - if t.cursorX >= t.termWidth { - t.cursorX = t.termWidth - 1 - } - t.cursorY *= 2 - t.clearAndRepaintLinePlusNPrevious(t.maxLine * 2) - case width > oldWidth: - // If the terminal expands then our position calculations will - // be wrong in the future because we think the cursor is - // |t.pos| chars into the string, but there will be a gap at - // the end of any wrapped line. - // - // But the position will actually be correct until we move, so - // we can move back to the beginning and repaint everything. - t.clearAndRepaintLinePlusNPrevious(t.maxLine) - } - - _, err := t.c.Write(t.outBuf) - t.outBuf = t.outBuf[:0] - return err -} - -type pasteIndicatorError struct{} - -func (pasteIndicatorError) Error() string { - return "terminal: ErrPasteIndicator not correctly handled" -} - -// ErrPasteIndicator may be returned from ReadLine as the error, in addition -// to valid line data. It indicates that bracketed paste mode is enabled and -// that the returned line consists only of pasted data. Programs may wish to -// interpret pasted data more literally than typed data. -var ErrPasteIndicator = pasteIndicatorError{} - -// SetBracketedPasteMode requests that the terminal bracket paste operations -// with markers. Not all terminals support this but, if it is supported, then -// enabling this mode will stop any autocomplete callback from running due to -// pastes. Additionally, any lines that are completely pasted will be returned -// from ReadLine with the error set to ErrPasteIndicator. -func (t *Terminal) SetBracketedPasteMode(on bool) { - if on { - io.WriteString(t.c, "\x1b[?2004h") - } else { - io.WriteString(t.c, "\x1b[?2004l") - } -} - -// stRingBuffer is a ring buffer of strings. -type stRingBuffer struct { - // entries contains max elements. - entries []string - max int - // head contains the index of the element most recently added to the ring. - head int - // size contains the number of elements in the ring. - size int -} - -func (s *stRingBuffer) Add(a string) { - if s.entries == nil { - const defaultNumEntries = 100 - s.entries = make([]string, defaultNumEntries) - s.max = defaultNumEntries - } - - s.head = (s.head + 1) % s.max - s.entries[s.head] = a - if s.size < s.max { - s.size++ - } -} - -// NthPreviousEntry returns the value passed to the nth previous call to Add. -// If n is zero then the immediately prior value is returned, if one, then the -// next most recent, and so on. If such an element doesn't exist then ok is -// false. -func (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) { - if n >= s.size { - return "", false - } - index := s.head - n - if index < 0 { - index += s.max - } - return s.entries[index], true -} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util.go b/vendor/golang.org/x/crypto/ssh/terminal/util.go deleted file mode 100644 index 598e3df7..00000000 --- a/vendor/golang.org/x/crypto/ssh/terminal/util.go +++ /dev/null @@ -1,128 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin dragonfly freebsd linux,!appengine netbsd openbsd - -// Package terminal provides support functions for dealing with terminals, as -// commonly found on UNIX systems. -// -// Putting a terminal into raw mode is the most common requirement: -// -// oldState, err := terminal.MakeRaw(0) -// if err != nil { -// panic(err) -// } -// defer terminal.Restore(0, oldState) -package terminal // import "golang.org/x/crypto/ssh/terminal" - -import ( - "io" - "syscall" - "unsafe" -) - -// State contains the state of a terminal. -type State struct { - termios syscall.Termios -} - -// IsTerminal returns true if the given file descriptor is a terminal. -func IsTerminal(fd int) bool { - var termios syscall.Termios - _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&termios)), 0, 0, 0) - return err == 0 -} - -// MakeRaw put the terminal connected to the given file descriptor into raw -// mode and returns the previous state of the terminal so that it can be -// restored. -func MakeRaw(fd int) (*State, error) { - var oldState State - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { - return nil, err - } - - newState := oldState.termios - newState.Iflag &^= syscall.ISTRIP | syscall.INLCR | syscall.ICRNL | syscall.IGNCR | syscall.IXON | syscall.IXOFF - newState.Lflag &^= syscall.ECHO | syscall.ICANON | syscall.ISIG - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { - return nil, err - } - - return &oldState, nil -} - -// GetState returns the current state of a terminal which may be useful to -// restore the terminal after a signal. -func GetState(fd int) (*State, error) { - var oldState State - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState.termios)), 0, 0, 0); err != 0 { - return nil, err - } - - return &oldState, nil -} - -// Restore restores the terminal connected to the given file descriptor to a -// previous state. -func Restore(fd int, state *State) error { - _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&state.termios)), 0, 0, 0) - return err -} - -// GetSize returns the dimensions of the given terminal. -func GetSize(fd int) (width, height int, err error) { - var dimensions [4]uint16 - - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(syscall.TIOCGWINSZ), uintptr(unsafe.Pointer(&dimensions)), 0, 0, 0); err != 0 { - return -1, -1, err - } - return int(dimensions[1]), int(dimensions[0]), nil -} - -// ReadPassword reads a line of input from a terminal without local echo. This -// is commonly used for inputting passwords and other sensitive data. The slice -// returned does not include the \n. -func ReadPassword(fd int) ([]byte, error) { - var oldState syscall.Termios - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlReadTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0); err != 0 { - return nil, err - } - - newState := oldState - newState.Lflag &^= syscall.ECHO - newState.Lflag |= syscall.ICANON | syscall.ISIG - newState.Iflag |= syscall.ICRNL - if _, _, err := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&newState)), 0, 0, 0); err != 0 { - return nil, err - } - - defer func() { - syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), ioctlWriteTermios, uintptr(unsafe.Pointer(&oldState)), 0, 0, 0) - }() - - var buf [16]byte - var ret []byte - for { - n, err := syscall.Read(fd, buf[:]) - if err != nil { - return nil, err - } - if n == 0 { - if len(ret) == 0 { - return nil, io.EOF - } - break - } - if buf[n-1] == '\n' { - n-- - } - ret = append(ret, buf[:n]...) - if n < len(buf) { - break - } - } - - return ret, nil -} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go b/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go deleted file mode 100644 index 9c1ffd14..00000000 --- a/vendor/golang.org/x/crypto/ssh/terminal/util_bsd.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build darwin dragonfly freebsd netbsd openbsd - -package terminal - -import "syscall" - -const ioctlReadTermios = syscall.TIOCGETA -const ioctlWriteTermios = syscall.TIOCSETA diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go b/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go deleted file mode 100644 index 5883b22d..00000000 --- a/vendor/golang.org/x/crypto/ssh/terminal/util_linux.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2013 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package terminal - -// These constants are declared here, rather than importing -// them from the syscall package as some syscall packages, even -// on linux, for example gccgo, do not declare them. -const ioctlReadTermios = 0x5401 // syscall.TCGETS -const ioctlWriteTermios = 0x5402 // syscall.TCSETS diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go b/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go deleted file mode 100644 index 799f049f..00000000 --- a/vendor/golang.org/x/crypto/ssh/terminal/util_plan9.go +++ /dev/null @@ -1,58 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package terminal provides support functions for dealing with terminals, as -// commonly found on UNIX systems. -// -// Putting a terminal into raw mode is the most common requirement: -// -// oldState, err := terminal.MakeRaw(0) -// if err != nil { -// panic(err) -// } -// defer terminal.Restore(0, oldState) -package terminal - -import ( - "fmt" - "runtime" -) - -type State struct{} - -// IsTerminal returns true if the given file descriptor is a terminal. -func IsTerminal(fd int) bool { - return false -} - -// MakeRaw put the terminal connected to the given file descriptor into raw -// mode and returns the previous state of the terminal so that it can be -// restored. -func MakeRaw(fd int) (*State, error) { - return nil, fmt.Errorf("terminal: MakeRaw not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) -} - -// GetState returns the current state of a terminal which may be useful to -// restore the terminal after a signal. -func GetState(fd int) (*State, error) { - return nil, fmt.Errorf("terminal: GetState not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) -} - -// Restore restores the terminal connected to the given file descriptor to a -// previous state. -func Restore(fd int, state *State) error { - return fmt.Errorf("terminal: Restore not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) -} - -// GetSize returns the dimensions of the given terminal. -func GetSize(fd int) (width, height int, err error) { - return 0, 0, fmt.Errorf("terminal: GetSize not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) -} - -// ReadPassword reads a line of input from a terminal without local echo. This -// is commonly used for inputting passwords and other sensitive data. The slice -// returned does not include the \n. -func ReadPassword(fd int) ([]byte, error) { - return nil, fmt.Errorf("terminal: ReadPassword not implemented on %s/%s", runtime.GOOS, runtime.GOARCH) -} diff --git a/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go b/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go deleted file mode 100644 index ae9fa9ec..00000000 --- a/vendor/golang.org/x/crypto/ssh/terminal/util_windows.go +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright 2011 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build windows - -// Package terminal provides support functions for dealing with terminals, as -// commonly found on UNIX systems. -// -// Putting a terminal into raw mode is the most common requirement: -// -// oldState, err := terminal.MakeRaw(0) -// if err != nil { -// panic(err) -// } -// defer terminal.Restore(0, oldState) -package terminal - -import ( - "io" - "syscall" - "unsafe" -) - -const ( - enableLineInput = 2 - enableEchoInput = 4 - enableProcessedInput = 1 - enableWindowInput = 8 - enableMouseInput = 16 - enableInsertMode = 32 - enableQuickEditMode = 64 - enableExtendedFlags = 128 - enableAutoPosition = 256 - enableProcessedOutput = 1 - enableWrapAtEolOutput = 2 -) - -var kernel32 = syscall.NewLazyDLL("kernel32.dll") - -var ( - procGetConsoleMode = kernel32.NewProc("GetConsoleMode") - procSetConsoleMode = kernel32.NewProc("SetConsoleMode") - procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") -) - -type ( - short int16 - word uint16 - - coord struct { - x short - y short - } - smallRect struct { - left short - top short - right short - bottom short - } - consoleScreenBufferInfo struct { - size coord - cursorPosition coord - attributes word - window smallRect - maximumWindowSize coord - } -) - -type State struct { - mode uint32 -} - -// IsTerminal returns true if the given file descriptor is a terminal. -func IsTerminal(fd int) bool { - var st uint32 - r, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) - return r != 0 && e == 0 -} - -// MakeRaw put the terminal connected to the given file descriptor into raw -// mode and returns the previous state of the terminal so that it can be -// restored. -func MakeRaw(fd int) (*State, error) { - var st uint32 - _, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) - if e != 0 { - return nil, error(e) - } - raw := st &^ (enableEchoInput | enableProcessedInput | enableLineInput | enableProcessedOutput) - _, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(raw), 0) - if e != 0 { - return nil, error(e) - } - return &State{st}, nil -} - -// GetState returns the current state of a terminal which may be useful to -// restore the terminal after a signal. -func GetState(fd int) (*State, error) { - var st uint32 - _, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) - if e != 0 { - return nil, error(e) - } - return &State{st}, nil -} - -// Restore restores the terminal connected to the given file descriptor to a -// previous state. -func Restore(fd int, state *State) error { - _, _, err := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(state.mode), 0) - return err -} - -// GetSize returns the dimensions of the given terminal. -func GetSize(fd int) (width, height int, err error) { - var info consoleScreenBufferInfo - _, _, e := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&info)), 0) - if e != 0 { - return 0, 0, error(e) - } - return int(info.size.x), int(info.size.y), nil -} - -// ReadPassword reads a line of input from a terminal without local echo. This -// is commonly used for inputting passwords and other sensitive data. The slice -// returned does not include the \n. -func ReadPassword(fd int) ([]byte, error) { - var st uint32 - _, _, e := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(fd), uintptr(unsafe.Pointer(&st)), 0) - if e != 0 { - return nil, error(e) - } - old := st - - st &^= (enableEchoInput) - st |= (enableProcessedInput | enableLineInput | enableProcessedOutput) - _, _, e = syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(st), 0) - if e != 0 { - return nil, error(e) - } - - defer func() { - syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(fd), uintptr(old), 0) - }() - - var buf [16]byte - var ret []byte - for { - n, err := syscall.Read(syscall.Handle(fd), buf[:]) - if err != nil { - return nil, err - } - if n == 0 { - if len(ret) == 0 { - return nil, io.EOF - } - break - } - if buf[n-1] == '\n' { - n-- - } - if n > 0 && buf[n-1] == '\r' { - n-- - } - ret = append(ret, buf[:n]...) - if n < len(buf) { - break - } - } - - return ret, nil -} diff --git a/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.pb.go b/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.pb.go index 6a1977f8..4c66de14 100644 --- a/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.pb.go +++ b/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.pb.go @@ -151,6 +151,10 @@ func (m *AdmissionHookClientConfig) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintGenerated(dAtA, i, uint64(len(m.CABundle))) i += copy(dAtA[i:], m.CABundle) } + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.URLPath))) + i += copy(dAtA[i:], m.URLPath) return i, nil } @@ -554,6 +558,8 @@ func (m *AdmissionHookClientConfig) Size() (n int) { l = len(m.CABundle) n += 1 + l + sovGenerated(uint64(l)) } + l = len(m.URLPath) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -715,6 +721,7 @@ func (this *AdmissionHookClientConfig) String() string { s := strings.Join([]string{`&AdmissionHookClientConfig{`, `Service:` + strings.Replace(strings.Replace(this.Service.String(), "ServiceReference", "ServiceReference", 1), `&`, ``, 1) + `,`, `CABundle:` + valueToStringGenerated(this.CABundle) + `,`, + `URLPath:` + fmt.Sprintf("%v", this.URLPath) + `,`, `}`, }, "") return s @@ -919,6 +926,35 @@ func (m *AdmissionHookClientConfig) Unmarshal(dAtA []byte) error { m.CABundle = []byte{} } iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field URLPath", 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.URLPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -2128,60 +2164,61 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 871 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcd, 0x8b, 0x23, 0x45, - 0x14, 0x4f, 0x65, 0x32, 0x6c, 0x52, 0x49, 0xd8, 0xdd, 0x42, 0x97, 0x38, 0x48, 0x77, 0xe8, 0xc3, - 0x12, 0x11, 0xbb, 0x9d, 0x51, 0x16, 0x41, 0x44, 0xa7, 0xc7, 0xaf, 0x81, 0xfd, 0x18, 0xcb, 0x45, - 0x41, 0x3c, 0x58, 0xe9, 0xbc, 0x24, 0x65, 0xfa, 0x8b, 0xaa, 0xea, 0xe0, 0x78, 0x10, 0x2f, 0xde, - 0x05, 0x2f, 0x5e, 0xbd, 0x79, 0xf1, 0xff, 0x98, 0xe3, 0x1e, 0xf7, 0x14, 0x9c, 0x16, 0xbc, 0x08, - 0xfe, 0x01, 0x73, 0x92, 0xfe, 0x4a, 0x3a, 0x9b, 0x84, 0x4d, 0x5c, 0x98, 0x5b, 0xea, 0xf7, 0xea, - 0xf7, 0xde, 0xef, 0xfd, 0xf2, 0x5e, 0x35, 0xa6, 0x93, 0x77, 0xa4, 0xc9, 0x03, 0x6b, 0x12, 0xf5, - 0x41, 0xf8, 0xa0, 0x40, 0x5a, 0x53, 0xf0, 0x07, 0x81, 0xb0, 0xf2, 0x00, 0x0b, 0xb9, 0xc5, 0x06, - 0x1e, 0x97, 0x92, 0x07, 0xbe, 0x80, 0x11, 0x97, 0x4a, 0x30, 0xc5, 0x03, 0xdf, 0x9a, 0x1e, 0x32, - 0x37, 0x1c, 0xb3, 0x43, 0x6b, 0x04, 0x3e, 0x08, 0xa6, 0x60, 0x60, 0x86, 0x22, 0x50, 0x01, 0x79, - 0x2d, 0xa3, 0x9a, 0x2c, 0xe4, 0xe6, 0x5a, 0xaa, 0x59, 0x50, 0x0f, 0xde, 0x18, 0x71, 0x35, 0x8e, - 0xfa, 0xa6, 0x13, 0x78, 0xd6, 0x28, 0x18, 0x05, 0x56, 0x9a, 0xa1, 0x1f, 0x0d, 0xd3, 0x53, 0x7a, - 0x48, 0x7f, 0x65, 0x99, 0x0f, 0xde, 0x5e, 0x88, 0xf2, 0x98, 0x33, 0xe6, 0x3e, 0x88, 0x73, 0x2b, - 0x9c, 0x8c, 0x12, 0x40, 0x5a, 0x1e, 0x28, 0x66, 0x4d, 0x57, 0xf4, 0x1c, 0x58, 0x9b, 0x58, 0x22, - 0xf2, 0x15, 0xf7, 0x60, 0x85, 0x70, 0xef, 0x79, 0x04, 0xe9, 0x8c, 0xc1, 0x63, 0x2b, 0xbc, 0xb7, - 0x36, 0xf1, 0x22, 0xc5, 0x5d, 0x8b, 0xfb, 0x4a, 0x2a, 0xf1, 0x2c, 0xc9, 0xf8, 0x03, 0xe1, 0x57, - 0x8e, 0x0b, 0x97, 0x3e, 0x0d, 0x82, 0xc9, 0x89, 0xcb, 0xc1, 0x57, 0x27, 0x81, 0x3f, 0xe4, 0x23, - 0x32, 0xc4, 0x37, 0x24, 0x88, 0x29, 0x77, 0xa0, 0x83, 0xba, 0xa8, 0xd7, 0x3c, 0x7a, 0xd7, 0xdc, - 0xda, 0x5d, 0xf3, 0xf3, 0x8c, 0x49, 0x61, 0x08, 0x02, 0x7c, 0x07, 0xec, 0x9b, 0x17, 0x33, 0xbd, - 0x12, 0xcf, 0xf4, 0x1b, 0x45, 0xa4, 0x48, 0x4e, 0x7a, 0xb8, 0xee, 0x30, 0x3b, 0xf2, 0x07, 0x2e, - 0x74, 0xaa, 0x5d, 0xd4, 0x6b, 0xd9, 0xad, 0x78, 0xa6, 0xd7, 0x4f, 0x8e, 0x33, 0x8c, 0xce, 0xa3, - 0xc6, 0x3f, 0x55, 0xfc, 0xf2, 0x47, 0xdf, 0x29, 0x10, 0x3e, 0x73, 0x97, 0x74, 0x93, 0x2e, 0xae, - 0xf9, 0xcc, 0xcb, 0x84, 0x36, 0xec, 0x56, 0x5e, 0xab, 0xf6, 0x90, 0x79, 0x40, 0xd3, 0x08, 0xf9, - 0x01, 0xb7, 0x9c, 0x52, 0x77, 0x69, 0xa5, 0xe6, 0xd1, 0x87, 0x3b, 0xb4, 0xb4, 0xd1, 0x29, 0xfb, - 0xa5, 0xbc, 0x5e, 0xab, 0x8c, 0xd2, 0xa5, 0x7a, 0xa4, 0x8f, 0xf7, 0x45, 0xe4, 0x82, 0xec, 0xec, - 0x75, 0xf7, 0x7a, 0xcd, 0xa3, 0xf7, 0x76, 0x28, 0x4c, 0x23, 0x17, 0xbe, 0xe4, 0x6a, 0xfc, 0x28, - 0x84, 0x2c, 0x24, 0xed, 0x76, 0x5e, 0x71, 0x3f, 0x89, 0x49, 0x9a, 0xa5, 0x26, 0xf7, 0x71, 0x7b, - 0xc8, 0xb8, 0x1b, 0x09, 0x38, 0x0b, 0x5c, 0xee, 0x9c, 0x77, 0x6a, 0xa9, 0x1d, 0x77, 0xe3, 0x99, - 0xde, 0xfe, 0xb8, 0x1c, 0xb8, 0x9a, 0xe9, 0xb7, 0x97, 0x80, 0xc7, 0xe7, 0x21, 0xd0, 0x65, 0xb2, - 0xf1, 0x5b, 0x15, 0x1b, 0x6b, 0xdd, 0xce, 0x3a, 0x8a, 0x32, 0x2d, 0xe4, 0x1b, 0x5c, 0x4f, 0xa6, - 0x7f, 0xc0, 0x14, 0xcb, 0xe7, 0xe4, 0xcd, 0x52, 0x6f, 0xf3, 0x61, 0x34, 0xc3, 0xc9, 0x28, 0x01, - 0xa4, 0x99, 0xdc, 0x36, 0xa7, 0x87, 0xe6, 0xa3, 0xfe, 0xb7, 0xe0, 0xa8, 0x07, 0xa0, 0x98, 0x4d, - 0xf2, 0x76, 0xf0, 0x02, 0xa3, 0xf3, 0xac, 0xe4, 0x57, 0x84, 0xef, 0xc0, 0x3a, 0x21, 0xb2, 0x53, - 0x4d, 0xcd, 0xfc, 0x60, 0x07, 0x33, 0xd7, 0x76, 0x64, 0x6b, 0xb9, 0x80, 0x3b, 0x6b, 0xc3, 0x92, - 0x6e, 0xa8, 0x6f, 0x5c, 0x21, 0x7c, 0xf7, 0xf9, 0x1e, 0xdd, 0xe7, 0x52, 0x91, 0xaf, 0x57, 0x7c, - 0x32, 0xb7, 0xf3, 0x29, 0x61, 0xa7, 0x2e, 0xdd, 0xca, 0x45, 0xd6, 0x0b, 0xa4, 0xe4, 0x91, 0xc0, - 0xfb, 0x5c, 0x81, 0x57, 0x38, 0xf2, 0xe0, 0x45, 0x1d, 0x59, 0xd2, 0xbf, 0x18, 0xb7, 0xd3, 0xa4, - 0x06, 0xcd, 0x4a, 0x19, 0x3f, 0x21, 0xdc, 0x3c, 0xf5, 0xb9, 0xe2, 0xcc, 0xe5, 0xdf, 0x83, 0xd8, - 0x62, 0x09, 0x1f, 0x17, 0x4b, 0x90, 0xa9, 0xb4, 0x76, 0x5c, 0x82, 0xf5, 0x63, 0x6f, 0xfc, 0x8b, - 0x70, 0xa7, 0xa4, 0xe3, 0xba, 0xc7, 0x33, 0xc4, 0x2d, 0xbe, 0xa8, 0x5e, 0xf4, 0x76, 0x6f, 0x87, - 0xde, 0x4a, 0xe2, 0x17, 0x6f, 0x49, 0x09, 0x94, 0x74, 0xa9, 0x82, 0xf1, 0x37, 0xc2, 0xaf, 0x6e, - 0x6a, 0xf8, 0x1a, 0x66, 0x6d, 0xbc, 0x3c, 0x6b, 0x27, 0xff, 0xaf, 0xd3, 0x6d, 0x26, 0xec, 0x17, - 0x84, 0x6b, 0xc9, 0x5f, 0x4d, 0x5e, 0xc7, 0x0d, 0x16, 0xf2, 0x4f, 0x44, 0x10, 0x85, 0xb2, 0x83, - 0xba, 0x7b, 0xbd, 0x86, 0xdd, 0x8e, 0x67, 0x7a, 0xe3, 0xf8, 0xec, 0x34, 0x03, 0xe9, 0x22, 0x4e, - 0x0e, 0x71, 0x93, 0x85, 0xfc, 0x0b, 0x10, 0x89, 0x8e, 0x4c, 0x65, 0xc3, 0xbe, 0x19, 0xcf, 0xf4, - 0xe6, 0xf1, 0xd9, 0x69, 0x01, 0xd3, 0xf2, 0x9d, 0x24, 0xbf, 0x00, 0x19, 0x44, 0xc2, 0xc9, 0x5f, - 0xe8, 0x3c, 0x3f, 0x2d, 0x40, 0xba, 0x88, 0x1b, 0xbf, 0x23, 0x4c, 0x56, 0xdf, 0x64, 0xf2, 0x3e, - 0xc6, 0xc1, 0xfc, 0x94, 0x8b, 0xd4, 0xd3, 0xa9, 0x99, 0xa3, 0x57, 0x33, 0xbd, 0x3d, 0x3f, 0xa5, - 0x6f, 0x6e, 0x89, 0x42, 0x3e, 0xc3, 0xb5, 0x64, 0xa0, 0xf3, 0x4f, 0xd3, 0xce, 0xcb, 0x31, 0x5f, - 0xb8, 0xe4, 0x44, 0xd3, 0x54, 0x06, 0xe0, 0x5b, 0xcf, 0x7e, 0x89, 0x89, 0x85, 0x1b, 0xc9, 0x32, - 0xca, 0x90, 0x39, 0xc5, 0xae, 0xde, 0xce, 0xa9, 0x8d, 0x87, 0x45, 0x80, 0x2e, 0xee, 0xcc, 0xf7, - 0xba, 0xba, 0x69, 0xaf, 0x6d, 0xf3, 0xe2, 0x52, 0xab, 0x3c, 0xb9, 0xd4, 0x2a, 0x4f, 0x2f, 0xb5, - 0xca, 0x8f, 0xb1, 0x86, 0x2e, 0x62, 0x0d, 0x3d, 0x89, 0x35, 0xf4, 0x34, 0xd6, 0xd0, 0x9f, 0xb1, - 0x86, 0x7e, 0xfe, 0x4b, 0xab, 0x7c, 0x55, 0x2f, 0xf4, 0xfe, 0x17, 0x00, 0x00, 0xff, 0xff, 0xe7, - 0xb5, 0x5f, 0xd5, 0xfb, 0x09, 0x00, 0x00, + // 893 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x55, 0xcf, 0x8b, 0x23, 0x45, + 0x14, 0x4e, 0x65, 0x32, 0x4c, 0x52, 0x49, 0xd8, 0xdd, 0x42, 0x97, 0x38, 0x48, 0x27, 0xf4, 0x61, + 0xc9, 0x22, 0x76, 0x3b, 0xa3, 0x2c, 0x82, 0x88, 0x4e, 0x8f, 0xbf, 0x06, 0x66, 0x77, 0xc7, 0x72, + 0x55, 0x10, 0x0f, 0x56, 0x3a, 0x2f, 0x49, 0x99, 0xfe, 0x45, 0x55, 0x75, 0x70, 0x3c, 0x88, 0x17, + 0xef, 0x82, 0x17, 0xaf, 0xde, 0xfc, 0x53, 0xe6, 0xb8, 0xc7, 0x39, 0x05, 0xa7, 0x05, 0x2f, 0x82, + 0x7f, 0xc0, 0x9c, 0xa4, 0x7f, 0xa5, 0x3b, 0x9b, 0x84, 0x9d, 0x28, 0xec, 0x2d, 0xf5, 0xbd, 0xfa, + 0xde, 0xfb, 0xde, 0x97, 0xf7, 0xaa, 0x31, 0x9d, 0xbe, 0x2d, 0x0d, 0xee, 0x9b, 0xd3, 0x70, 0x00, + 0xc2, 0x03, 0x05, 0xd2, 0x9c, 0x81, 0x37, 0xf4, 0x85, 0x99, 0x05, 0x58, 0xc0, 0x4d, 0x36, 0x74, + 0xb9, 0x94, 0xdc, 0xf7, 0x04, 0x8c, 0xb9, 0x54, 0x82, 0x29, 0xee, 0x7b, 0xe6, 0xec, 0x80, 0x39, + 0xc1, 0x84, 0x1d, 0x98, 0x63, 0xf0, 0x40, 0x30, 0x05, 0x43, 0x23, 0x10, 0xbe, 0xf2, 0xc9, 0xfd, + 0x94, 0x6a, 0xb0, 0x80, 0x1b, 0x6b, 0xa9, 0x46, 0x4e, 0xdd, 0x7f, 0x7d, 0xcc, 0xd5, 0x24, 0x1c, + 0x18, 0xb6, 0xef, 0x9a, 0x63, 0x7f, 0xec, 0x9b, 0x49, 0x86, 0x41, 0x38, 0x4a, 0x4e, 0xc9, 0x21, + 0xf9, 0x95, 0x66, 0xde, 0x7f, 0xab, 0x10, 0xe5, 0x32, 0x7b, 0xc2, 0x3d, 0x10, 0xe7, 0x66, 0x30, + 0x1d, 0xc7, 0x80, 0x34, 0x5d, 0x50, 0xcc, 0x9c, 0xad, 0xe8, 0xd9, 0x37, 0x37, 0xb1, 0x44, 0xe8, + 0x29, 0xee, 0xc2, 0x0a, 0xe1, 0xc1, 0xf3, 0x08, 0xd2, 0x9e, 0x80, 0xcb, 0x56, 0x78, 0x6f, 0x6e, + 0xe2, 0x85, 0x8a, 0x3b, 0x26, 0xf7, 0x94, 0x54, 0xe2, 0x59, 0x92, 0x7e, 0x89, 0xf0, 0x2b, 0x47, + 0xb9, 0x4b, 0x9f, 0xf8, 0xfe, 0xf4, 0xd8, 0xe1, 0xe0, 0xa9, 0x63, 0xdf, 0x1b, 0xf1, 0x31, 0x19, + 0xe1, 0x3d, 0x09, 0x62, 0xc6, 0x6d, 0xe8, 0xa0, 0x1e, 0xea, 0x37, 0x0f, 0xdf, 0x31, 0x6e, 0xec, + 0xae, 0xf1, 0x59, 0xca, 0xa4, 0x30, 0x02, 0x01, 0x9e, 0x0d, 0xd6, 0xad, 0x8b, 0x79, 0xb7, 0x12, + 0xcd, 0xbb, 0x7b, 0x79, 0x24, 0x4f, 0x4e, 0xfa, 0xb8, 0x6e, 0x33, 0x2b, 0xf4, 0x86, 0x0e, 0x74, + 0xaa, 0x3d, 0xd4, 0x6f, 0x59, 0xad, 0x68, 0xde, 0xad, 0x1f, 0x1f, 0xa5, 0x18, 0x5d, 0x44, 0xc9, + 0x7d, 0xbc, 0x17, 0x0a, 0xe7, 0x8c, 0xa9, 0x49, 0x67, 0xa7, 0x87, 0xfa, 0x8d, 0x22, 0xe9, 0xe7, + 0xf4, 0x34, 0x86, 0x69, 0x1e, 0xd7, 0xff, 0xae, 0xe2, 0x97, 0x3f, 0xfc, 0x4e, 0x81, 0xf0, 0x98, + 0xb3, 0xd4, 0x22, 0xe9, 0xe1, 0x9a, 0xc7, 0xdc, 0xb4, 0xa7, 0x86, 0xd5, 0xca, 0x32, 0xd4, 0x1e, + 0x31, 0x17, 0x68, 0x12, 0x21, 0x3f, 0xe0, 0x96, 0x5d, 0x32, 0x22, 0x11, 0xd5, 0x3c, 0xfc, 0x60, + 0x8b, 0xee, 0x37, 0x9a, 0x6a, 0xbd, 0x94, 0xd5, 0x6b, 0x95, 0x51, 0xba, 0x54, 0x8f, 0x0c, 0xf0, + 0xae, 0x08, 0x1d, 0x90, 0x9d, 0x9d, 0xde, 0x4e, 0xbf, 0x79, 0xf8, 0xee, 0x16, 0x85, 0x69, 0xe8, + 0xc0, 0x97, 0x5c, 0x4d, 0x1e, 0x07, 0x90, 0x86, 0xa4, 0xd5, 0xce, 0x2a, 0xee, 0xc6, 0x31, 0x49, + 0xd3, 0xd4, 0xe4, 0x14, 0xb7, 0x47, 0x8c, 0x3b, 0xa1, 0x80, 0x33, 0xdf, 0xe1, 0xf6, 0x79, 0xa7, + 0x96, 0xd8, 0x71, 0x2f, 0x9a, 0x77, 0xdb, 0x1f, 0x95, 0x03, 0xd7, 0xf3, 0xee, 0x9d, 0x25, 0xe0, + 0xc9, 0x79, 0x00, 0x74, 0x99, 0xac, 0xff, 0x56, 0xc5, 0xfa, 0x5a, 0xb7, 0xd3, 0x8e, 0xc2, 0x54, + 0x0b, 0xf9, 0x06, 0xd7, 0xe3, 0x45, 0x19, 0x32, 0xc5, 0xb2, 0x91, 0x7a, 0xa3, 0xd4, 0xdb, 0x62, + 0x6e, 0x8d, 0x60, 0x3a, 0x8e, 0x01, 0x69, 0xc4, 0xb7, 0x8d, 0xd9, 0x81, 0xf1, 0x78, 0xf0, 0x2d, + 0xd8, 0xea, 0x21, 0x28, 0x66, 0x91, 0xac, 0x1d, 0x5c, 0x60, 0x74, 0x91, 0x95, 0xfc, 0x8a, 0xf0, + 0x5d, 0x58, 0x27, 0x44, 0x76, 0xaa, 0x89, 0x99, 0xef, 0x6f, 0x61, 0xe6, 0xda, 0x8e, 0x2c, 0x2d, + 0x13, 0x70, 0x77, 0x6d, 0x58, 0xd2, 0x0d, 0xf5, 0xf5, 0x6b, 0x84, 0xef, 0x3d, 0xdf, 0xa3, 0x53, + 0x2e, 0x15, 0xf9, 0x7a, 0xc5, 0x27, 0xe3, 0x66, 0x3e, 0xc5, 0xec, 0xc4, 0xa5, 0xdb, 0x99, 0xc8, + 0x7a, 0x8e, 0x94, 0x3c, 0x12, 0x78, 0x97, 0x2b, 0x70, 0x73, 0x47, 0x1e, 0xfe, 0x5f, 0x47, 0x96, + 0xf4, 0x17, 0xe3, 0x76, 0x12, 0xd7, 0xa0, 0x69, 0x29, 0xfd, 0x27, 0x84, 0x9b, 0x27, 0x1e, 0x57, + 0x9c, 0x39, 0xfc, 0x7b, 0x10, 0x37, 0x58, 0xc2, 0x27, 0xf9, 0x12, 0xa4, 0x2a, 0xcd, 0x2d, 0x97, + 0x60, 0xfd, 0xd8, 0xeb, 0xff, 0x20, 0xdc, 0x29, 0xe9, 0x78, 0xd1, 0xe3, 0x19, 0xe0, 0x16, 0x2f, + 0xaa, 0xe7, 0xbd, 0x3d, 0xd8, 0xa2, 0xb7, 0x92, 0xf8, 0xe2, 0x2d, 0x29, 0x81, 0x92, 0x2e, 0x55, + 0xd0, 0xff, 0x42, 0xf8, 0xd5, 0x4d, 0x0d, 0xbf, 0x80, 0x59, 0x9b, 0x2c, 0xcf, 0xda, 0xf1, 0x7f, + 0xeb, 0xf4, 0x26, 0x13, 0xf6, 0x0b, 0xc2, 0xb5, 0xf8, 0xaf, 0x26, 0xaf, 0xe1, 0x06, 0x0b, 0xf8, + 0xc7, 0xc2, 0x0f, 0x03, 0xd9, 0x41, 0xbd, 0x9d, 0x7e, 0xc3, 0x6a, 0x47, 0xf3, 0x6e, 0xe3, 0xe8, + 0xec, 0x24, 0x05, 0x69, 0x11, 0x27, 0x07, 0xb8, 0xc9, 0x02, 0xfe, 0x05, 0x88, 0x58, 0x47, 0xaa, + 0xb2, 0x61, 0xdd, 0x8a, 0xe6, 0xdd, 0xe6, 0xd1, 0xd9, 0x49, 0x0e, 0xd3, 0xf2, 0x9d, 0x38, 0xbf, + 0x00, 0xe9, 0x87, 0xc2, 0xce, 0x5e, 0xe8, 0x2c, 0x3f, 0xcd, 0x41, 0x5a, 0xc4, 0xf5, 0xdf, 0x11, + 0x26, 0xab, 0x6f, 0x32, 0x79, 0x0f, 0x63, 0x7f, 0x71, 0xca, 0x44, 0x76, 0x93, 0xa9, 0x59, 0xa0, + 0xd7, 0xf3, 0x6e, 0x7b, 0x71, 0x4a, 0xde, 0xdc, 0x12, 0x85, 0x7c, 0x8a, 0x6b, 0xf1, 0x40, 0x67, + 0x9f, 0xa6, 0xad, 0x97, 0x63, 0xb1, 0x70, 0xf1, 0x89, 0x26, 0xa9, 0x74, 0xc0, 0xb7, 0x9f, 0xfd, + 0x68, 0x13, 0x13, 0x37, 0xe2, 0x65, 0x94, 0x01, 0xb3, 0xf3, 0x5d, 0xbd, 0x93, 0x51, 0x1b, 0x8f, + 0xf2, 0x00, 0x2d, 0xee, 0x2c, 0xf6, 0xba, 0xba, 0x69, 0xaf, 0x2d, 0xe3, 0xe2, 0x4a, 0xab, 0x3c, + 0xbd, 0xd2, 0x2a, 0x97, 0x57, 0x5a, 0xe5, 0xc7, 0x48, 0x43, 0x17, 0x91, 0x86, 0x9e, 0x46, 0x1a, + 0xba, 0x8c, 0x34, 0xf4, 0x47, 0xa4, 0xa1, 0x9f, 0xff, 0xd4, 0x2a, 0x5f, 0xd5, 0x73, 0xbd, 0xff, + 0x06, 0x00, 0x00, 0xff, 0xff, 0x01, 0xf7, 0xd5, 0xa0, 0x26, 0x0a, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto b/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto index 3efec3bc..b431b318 100644 --- a/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto +++ b/vendor/k8s.io/api/admissionregistration/v1alpha1/generated.proto @@ -38,6 +38,9 @@ message AdmissionHookClientConfig { // Required optional ServiceReference service = 1; + // URLPath is an optional field that specifies the URL path to use when posting the AdmissionReview object. + optional string urlPath = 3; + // CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate. // Required optional bytes caBundle = 2; diff --git a/vendor/k8s.io/api/admissionregistration/v1alpha1/types.go b/vendor/k8s.io/api/admissionregistration/v1alpha1/types.go index d4827e59..84f47b62 100644 --- a/vendor/k8s.io/api/admissionregistration/v1alpha1/types.go +++ b/vendor/k8s.io/api/admissionregistration/v1alpha1/types.go @@ -108,7 +108,7 @@ type Rule struct { type FailurePolicyType string const ( - // Ignore means the initilizer is removed from the initializers list of an + // Ignore means the initializer is removed from the initializers list of an // object if the initializer is timed out. Ignore FailurePolicyType = "Ignore" // For 1.7, only "Ignore" is allowed. "Fail" will be allowed when the @@ -203,6 +203,10 @@ type AdmissionHookClientConfig struct { // ports open, port 443 will be used if it is open, otherwise it is an error. // Required Service ServiceReference `json:"service" protobuf:"bytes,1,opt,name=service"` + + // URLPath is an optional field that specifies the URL path to use when posting the AdmissionReview object. + URLPath string `json:"urlPath" protobuf:"bytes,3,opt,name=urlPath"` + // CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate. // Required CABundle []byte `json:"caBundle" protobuf:"bytes,2,opt,name=caBundle"` diff --git a/vendor/k8s.io/api/admissionregistration/v1alpha1/types_swagger_doc_generated.go b/vendor/k8s.io/api/admissionregistration/v1alpha1/types_swagger_doc_generated.go index 0b30ecc8..77a8a519 100644 --- a/vendor/k8s.io/api/admissionregistration/v1alpha1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/admissionregistration/v1alpha1/types_swagger_doc_generated.go @@ -30,6 +30,7 @@ package v1alpha1 var map_AdmissionHookClientConfig = map[string]string{ "": "AdmissionHookClientConfig contains the information to make a TLS connection with the webhook", "service": "Service is a reference to the service for this webhook. If there is only one port open for the service, that port will be used. If there are multiple ports open, port 443 will be used if it is open, otherwise it is an error. Required", + "urlPath": "URLPath is an optional field that specifies the URL path to use when posting the AdmissionReview object.", "caBundle": "CABundle is a PEM encoded CA bundle which will be used to validate webhook's server certificate. Required", } diff --git a/vendor/k8s.io/api/apps/v1/doc.go b/vendor/k8s.io/api/apps/v1/doc.go new file mode 100644 index 00000000..62eb80ce --- /dev/null +++ b/vendor/k8s.io/api/apps/v1/doc.go @@ -0,0 +1,20 @@ +/* +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. +*/ + +// +k8s:deepcopy-gen=package,register +// +k8s:openapi-gen=true + +package v1 // import "k8s.io/api/apps/v1" diff --git a/vendor/k8s.io/api/apps/v1/generated.pb.go b/vendor/k8s.io/api/apps/v1/generated.pb.go new file mode 100644 index 00000000..f32e878f --- /dev/null +++ b/vendor/k8s.io/api/apps/v1/generated.pb.go @@ -0,0 +1,1558 @@ +/* +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. +*/ + +// Code generated by protoc-gen-gogo. +// source: k8s.io/kubernetes/vendor/k8s.io/api/apps/v1/generated.proto +// DO NOT EDIT! + +/* + Package v1 is a generated protocol buffer package. + + It is generated from these files: + k8s.io/kubernetes/vendor/k8s.io/api/apps/v1/generated.proto + + It has these top-level messages: + DaemonSet + DaemonSetList + DaemonSetSpec + DaemonSetStatus + DaemonSetUpdateStrategy + RollingUpdateDaemonSet +*/ +package v1 + +import proto "github.com/gogo/protobuf/proto" +import fmt "fmt" +import math "math" + +import k8s_io_apimachinery_pkg_apis_meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + +import k8s_io_apimachinery_pkg_util_intstr "k8s.io/apimachinery/pkg/util/intstr" + +import strings "strings" +import reflect "reflect" + +import io "io" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion2 // please upgrade the proto package + +func (m *DaemonSet) Reset() { *m = DaemonSet{} } +func (*DaemonSet) ProtoMessage() {} +func (*DaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{0} } + +func (m *DaemonSetList) Reset() { *m = DaemonSetList{} } +func (*DaemonSetList) ProtoMessage() {} +func (*DaemonSetList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{1} } + +func (m *DaemonSetSpec) Reset() { *m = DaemonSetSpec{} } +func (*DaemonSetSpec) ProtoMessage() {} +func (*DaemonSetSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{2} } + +func (m *DaemonSetStatus) Reset() { *m = DaemonSetStatus{} } +func (*DaemonSetStatus) ProtoMessage() {} +func (*DaemonSetStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{3} } + +func (m *DaemonSetUpdateStrategy) Reset() { *m = DaemonSetUpdateStrategy{} } +func (*DaemonSetUpdateStrategy) ProtoMessage() {} +func (*DaemonSetUpdateStrategy) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{4} } + +func (m *RollingUpdateDaemonSet) Reset() { *m = RollingUpdateDaemonSet{} } +func (*RollingUpdateDaemonSet) ProtoMessage() {} +func (*RollingUpdateDaemonSet) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{5} } + +func init() { + proto.RegisterType((*DaemonSet)(nil), "k8s.io.api.apps.v1.DaemonSet") + proto.RegisterType((*DaemonSetList)(nil), "k8s.io.api.apps.v1.DaemonSetList") + proto.RegisterType((*DaemonSetSpec)(nil), "k8s.io.api.apps.v1.DaemonSetSpec") + proto.RegisterType((*DaemonSetStatus)(nil), "k8s.io.api.apps.v1.DaemonSetStatus") + proto.RegisterType((*DaemonSetUpdateStrategy)(nil), "k8s.io.api.apps.v1.DaemonSetUpdateStrategy") + proto.RegisterType((*RollingUpdateDaemonSet)(nil), "k8s.io.api.apps.v1.RollingUpdateDaemonSet") +} +func (m *DaemonSet) 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 *DaemonSet) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n1, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n1 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n2, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n2 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n3, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n3 + return i, nil +} + +func (m *DaemonSetList) 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 *DaemonSetList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n4, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n4 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + 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 +} + +func (m *DaemonSetSpec) 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 *DaemonSetSpec) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.Selector != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) + n5, err := m.Selector.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n5 + } + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) + n6, err := m.Template.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n6 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdateStrategy.Size())) + n7, err := m.UpdateStrategy.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n7 + dAtA[i] = 0x20 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.MinReadySeconds)) + if m.RevisionHistoryLimit != nil { + dAtA[i] = 0x30 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.RevisionHistoryLimit)) + } + return i, nil +} + +func (m *DaemonSetStatus) 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 *DaemonSetStatus) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0x8 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.CurrentNumberScheduled)) + dAtA[i] = 0x10 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberMisscheduled)) + dAtA[i] = 0x18 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.DesiredNumberScheduled)) + dAtA[i] = 0x20 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberReady)) + dAtA[i] = 0x28 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObservedGeneration)) + dAtA[i] = 0x30 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.UpdatedNumberScheduled)) + dAtA[i] = 0x38 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberAvailable)) + dAtA[i] = 0x40 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.NumberUnavailable)) + if m.CollisionCount != nil { + dAtA[i] = 0x48 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(*m.CollisionCount)) + } + return i, nil +} + +func (m *DaemonSetUpdateStrategy) 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 *DaemonSetUpdateStrategy) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Type))) + i += copy(dAtA[i:], m.Type) + if m.RollingUpdate != nil { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.RollingUpdate.Size())) + n8, err := m.RollingUpdate.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n8 + } + return i, nil +} + +func (m *RollingUpdateDaemonSet) 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 *RollingUpdateDaemonSet) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if m.MaxUnavailable != nil { + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.MaxUnavailable.Size())) + n9, err := m.MaxUnavailable.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + } + return i, nil +} + +func encodeFixed64Generated(dAtA []byte, offset int, v uint64) int { + dAtA[offset] = uint8(v) + dAtA[offset+1] = uint8(v >> 8) + dAtA[offset+2] = uint8(v >> 16) + dAtA[offset+3] = uint8(v >> 24) + dAtA[offset+4] = uint8(v >> 32) + dAtA[offset+5] = uint8(v >> 40) + dAtA[offset+6] = uint8(v >> 48) + dAtA[offset+7] = uint8(v >> 56) + return offset + 8 +} +func encodeFixed32Generated(dAtA []byte, offset int, v uint32) int { + dAtA[offset] = uint8(v) + dAtA[offset+1] = uint8(v >> 8) + dAtA[offset+2] = uint8(v >> 16) + dAtA[offset+3] = uint8(v >> 24) + return offset + 4 +} +func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return offset + 1 +} +func (m *DaemonSet) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Spec.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.Status.Size() + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *DaemonSetList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + +func (m *DaemonSetSpec) Size() (n int) { + var l int + _ = l + if m.Selector != nil { + l = m.Selector.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + l = m.Template.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = m.UpdateStrategy.Size() + n += 1 + l + sovGenerated(uint64(l)) + n += 1 + sovGenerated(uint64(m.MinReadySeconds)) + if m.RevisionHistoryLimit != nil { + n += 1 + sovGenerated(uint64(*m.RevisionHistoryLimit)) + } + return n +} + +func (m *DaemonSetStatus) Size() (n int) { + var l int + _ = l + n += 1 + sovGenerated(uint64(m.CurrentNumberScheduled)) + n += 1 + sovGenerated(uint64(m.NumberMisscheduled)) + n += 1 + sovGenerated(uint64(m.DesiredNumberScheduled)) + n += 1 + sovGenerated(uint64(m.NumberReady)) + n += 1 + sovGenerated(uint64(m.ObservedGeneration)) + n += 1 + sovGenerated(uint64(m.UpdatedNumberScheduled)) + n += 1 + sovGenerated(uint64(m.NumberAvailable)) + n += 1 + sovGenerated(uint64(m.NumberUnavailable)) + if m.CollisionCount != nil { + n += 1 + sovGenerated(uint64(*m.CollisionCount)) + } + return n +} + +func (m *DaemonSetUpdateStrategy) Size() (n int) { + var l int + _ = l + l = len(m.Type) + n += 1 + l + sovGenerated(uint64(l)) + if m.RollingUpdate != nil { + l = m.RollingUpdate.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func (m *RollingUpdateDaemonSet) Size() (n int) { + var l int + _ = l + if m.MaxUnavailable != nil { + l = m.MaxUnavailable.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + return n +} + +func sovGenerated(x uint64) (n int) { + for { + n++ + x >>= 7 + if x == 0 { + break + } + } + return n +} +func sozGenerated(x uint64) (n int) { + return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (this *DaemonSet) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonSet{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `Spec:` + strings.Replace(strings.Replace(this.Spec.String(), "DaemonSetSpec", "DaemonSetSpec", 1), `&`, ``, 1) + `,`, + `Status:` + strings.Replace(strings.Replace(this.Status.String(), "DaemonSetStatus", "DaemonSetStatus", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonSetList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonSetList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DaemonSet", "DaemonSet", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonSetSpec) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonSetSpec{`, + `Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`, + `Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`, + `UpdateStrategy:` + strings.Replace(strings.Replace(this.UpdateStrategy.String(), "DaemonSetUpdateStrategy", "DaemonSetUpdateStrategy", 1), `&`, ``, 1) + `,`, + `MinReadySeconds:` + fmt.Sprintf("%v", this.MinReadySeconds) + `,`, + `RevisionHistoryLimit:` + valueToStringGenerated(this.RevisionHistoryLimit) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonSetStatus) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonSetStatus{`, + `CurrentNumberScheduled:` + fmt.Sprintf("%v", this.CurrentNumberScheduled) + `,`, + `NumberMisscheduled:` + fmt.Sprintf("%v", this.NumberMisscheduled) + `,`, + `DesiredNumberScheduled:` + fmt.Sprintf("%v", this.DesiredNumberScheduled) + `,`, + `NumberReady:` + fmt.Sprintf("%v", this.NumberReady) + `,`, + `ObservedGeneration:` + fmt.Sprintf("%v", this.ObservedGeneration) + `,`, + `UpdatedNumberScheduled:` + fmt.Sprintf("%v", this.UpdatedNumberScheduled) + `,`, + `NumberAvailable:` + fmt.Sprintf("%v", this.NumberAvailable) + `,`, + `NumberUnavailable:` + fmt.Sprintf("%v", this.NumberUnavailable) + `,`, + `CollisionCount:` + valueToStringGenerated(this.CollisionCount) + `,`, + `}`, + }, "") + return s +} +func (this *DaemonSetUpdateStrategy) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DaemonSetUpdateStrategy{`, + `Type:` + fmt.Sprintf("%v", this.Type) + `,`, + `RollingUpdate:` + strings.Replace(fmt.Sprintf("%v", this.RollingUpdate), "RollingUpdateDaemonSet", "RollingUpdateDaemonSet", 1) + `,`, + `}`, + }, "") + return s +} +func (this *RollingUpdateDaemonSet) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RollingUpdateDaemonSet{`, + `MaxUnavailable:` + strings.Replace(fmt.Sprintf("%v", this.MaxUnavailable), "IntOrString", "k8s_io_apimachinery_pkg_util_intstr.IntOrString", 1) + `,`, + `}`, + }, "") + return s +} +func valueToStringGenerated(v interface{}) string { + rv := reflect.ValueOf(v) + if rv.IsNil() { + return "nil" + } + pv := reflect.Indirect(rv).Interface() + return fmt.Sprintf("*%v", pv) +} +func (m *DaemonSet) 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: DaemonSet: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DaemonSet: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + 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 err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Spec", 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 err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Status", 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 err := m.Status.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DaemonSetList) 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: DaemonSetList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DaemonSetList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", 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 err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", 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.Items = append(m.Items, DaemonSet{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DaemonSetSpec) 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: DaemonSetSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DaemonSetSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Selector", 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.Selector == nil { + m.Selector = &k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector{} + } + if err := m.Selector.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Template", 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 err := m.Template.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdateStrategy", 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 err := m.UpdateStrategy.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field MinReadySeconds", wireType) + } + m.MinReadySeconds = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.MinReadySeconds |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field RevisionHistoryLimit", 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.RevisionHistoryLimit = &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 (m *DaemonSetStatus) 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: DaemonSetStatus: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DaemonSetStatus: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CurrentNumberScheduled", wireType) + } + m.CurrentNumberScheduled = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.CurrentNumberScheduled |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumberMisscheduled", wireType) + } + m.NumberMisscheduled = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumberMisscheduled |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field DesiredNumberScheduled", wireType) + } + m.DesiredNumberScheduled = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.DesiredNumberScheduled |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumberReady", wireType) + } + m.NumberReady = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumberReady |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ObservedGeneration", wireType) + } + m.ObservedGeneration = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ObservedGeneration |= (int64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field UpdatedNumberScheduled", wireType) + } + m.UpdatedNumberScheduled = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.UpdatedNumberScheduled |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumberAvailable", wireType) + } + m.NumberAvailable = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumberAvailable |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field NumberUnavailable", wireType) + } + m.NumberUnavailable = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.NumberUnavailable |= (int32(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field CollisionCount", 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.CollisionCount = &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 (m *DaemonSetUpdateStrategy) 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: DaemonSetUpdateStrategy: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DaemonSetUpdateStrategy: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", 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.Type = DaemonSetUpdateStrategyType(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RollingUpdate", 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.RollingUpdate == nil { + m.RollingUpdate = &RollingUpdateDaemonSet{} + } + if err := m.RollingUpdate.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *RollingUpdateDaemonSet) 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: RollingUpdateDaemonSet: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RollingUpdateDaemonSet: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxUnavailable", 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.MaxUnavailable == nil { + m.MaxUnavailable = &k8s_io_apimachinery_pkg_util_intstr.IntOrString{} + } + if err := m.MaxUnavailable.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + 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 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + return iNdEx, nil + case 1: + iNdEx += 8 + return iNdEx, nil + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + iNdEx += length + if length < 0 { + return 0, ErrInvalidLengthGenerated + } + return iNdEx, nil + case 3: + for { + var innerWire uint64 + var start int = iNdEx + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowGenerated + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + innerWire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + innerWireType := int(innerWire & 0x7) + if innerWireType == 4 { + break + } + next, err := skipGenerated(dAtA[start:]) + if err != nil { + return 0, err + } + iNdEx = start + next + } + return iNdEx, nil + case 4: + return iNdEx, nil + case 5: + iNdEx += 4 + return iNdEx, nil + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + } + panic("unreachable") +} + +var ( + ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") +) + +func init() { + proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/api/apps/v1/generated.proto", fileDescriptorGenerated) +} + +var fileDescriptorGenerated = []byte{ + // 928 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x95, 0xcf, 0x73, 0xdb, 0x44, + 0x14, 0xc7, 0xad, 0x38, 0x0e, 0xce, 0xa6, 0x71, 0xc8, 0xd2, 0x49, 0x45, 0x18, 0xe4, 0x60, 0x2e, + 0x86, 0x0e, 0x12, 0x6e, 0x81, 0x61, 0xe0, 0xc0, 0x54, 0xe9, 0x4c, 0x29, 0x24, 0x0e, 0xac, 0x1b, + 0x0e, 0x0c, 0xcc, 0xb0, 0x96, 0x1e, 0xce, 0x62, 0xfd, 0x1a, 0xed, 0xca, 0x83, 0x6f, 0x9c, 0x38, + 0xf3, 0xa7, 0xc0, 0x5f, 0xd0, 0x6b, 0x8e, 0x3d, 0xf6, 0xe4, 0x21, 0xe6, 0xbf, 0xe0, 0x02, 0xb3, + 0xab, 0x8d, 0x6d, 0xd9, 0x72, 0x9a, 0x9b, 0xf7, 0xbd, 0xef, 0xf7, 0xb3, 0x6f, 0xdf, 0x3e, 0xaf, + 0xd0, 0xe7, 0xc3, 0x4f, 0xb9, 0xcd, 0x62, 0x67, 0x98, 0xf5, 0x21, 0x8d, 0x40, 0x00, 0x77, 0x46, + 0x10, 0xf9, 0x71, 0xea, 0xe8, 0x04, 0x4d, 0x98, 0x43, 0x93, 0x84, 0x3b, 0xa3, 0x8e, 0x33, 0x80, + 0x08, 0x52, 0x2a, 0xc0, 0xb7, 0x93, 0x34, 0x16, 0x31, 0xc6, 0xb9, 0xc6, 0xa6, 0x09, 0xb3, 0xa5, + 0xc6, 0x1e, 0x75, 0x0e, 0x3f, 0x18, 0x30, 0x71, 0x91, 0xf5, 0x6d, 0x2f, 0x0e, 0x9d, 0x41, 0x3c, + 0x88, 0x1d, 0x25, 0xed, 0x67, 0x3f, 0xab, 0x95, 0x5a, 0xa8, 0x5f, 0x39, 0xe2, 0xb0, 0xb5, 0xb0, + 0x8d, 0x17, 0xa7, 0x50, 0xb2, 0xcd, 0xe1, 0x7b, 0x0b, 0x9a, 0x24, 0x0e, 0x98, 0x37, 0x76, 0x46, + 0x9d, 0x3e, 0x08, 0xba, 0x2a, 0xfd, 0x68, 0x2e, 0x0d, 0xa9, 0x77, 0xc1, 0x22, 0x48, 0xc7, 0x4e, + 0x32, 0x1c, 0xc8, 0x00, 0x77, 0x42, 0x10, 0xb4, 0x6c, 0x03, 0x67, 0x9d, 0x2b, 0xcd, 0x22, 0xc1, + 0x42, 0x58, 0x31, 0x7c, 0xf2, 0x2a, 0x03, 0xf7, 0x2e, 0x20, 0xa4, 0x2b, 0xbe, 0x87, 0xeb, 0x7c, + 0x99, 0x60, 0x81, 0xc3, 0x22, 0xc1, 0x45, 0xba, 0x6c, 0x6a, 0xfd, 0x67, 0xa0, 0xed, 0xc7, 0x14, + 0xc2, 0x38, 0xea, 0x81, 0xc0, 0x3f, 0xa1, 0xba, 0x3c, 0x86, 0x4f, 0x05, 0x35, 0x8d, 0x23, 0xa3, + 0xbd, 0xf3, 0xe0, 0x43, 0x7b, 0x7e, 0x0d, 0x33, 0xaa, 0x9d, 0x0c, 0x07, 0x32, 0xc0, 0x6d, 0xa9, + 0xb6, 0x47, 0x1d, 0xfb, 0xac, 0xff, 0x0b, 0x78, 0xe2, 0x14, 0x04, 0x75, 0xf1, 0xe5, 0xa4, 0x59, + 0x99, 0x4e, 0x9a, 0x68, 0x1e, 0x23, 0x33, 0x2a, 0x3e, 0x46, 0x9b, 0x3c, 0x01, 0xcf, 0xdc, 0x50, + 0xf4, 0x77, 0xec, 0xd5, 0x4b, 0xb6, 0x67, 0xe5, 0xf4, 0x12, 0xf0, 0xdc, 0x3b, 0x1a, 0xb7, 0x29, + 0x57, 0x44, 0x99, 0xf1, 0xd7, 0x68, 0x8b, 0x0b, 0x2a, 0x32, 0x6e, 0x56, 0x15, 0xe6, 0xdd, 0x9b, + 0x31, 0x4a, 0xea, 0x36, 0x34, 0x68, 0x2b, 0x5f, 0x13, 0x8d, 0x68, 0xfd, 0x65, 0xa0, 0xdd, 0x99, + 0xf6, 0x84, 0x71, 0x81, 0x7f, 0x58, 0xe9, 0x82, 0x7d, 0xbb, 0x2e, 0x48, 0xb7, 0xea, 0xc1, 0xeb, + 0x7a, 0xaf, 0xfa, 0x75, 0x64, 0xa1, 0x03, 0x2e, 0xaa, 0x31, 0x01, 0x21, 0x37, 0x37, 0x8e, 0xaa, + 0xed, 0x9d, 0x07, 0x6f, 0xdf, 0x58, 0xbb, 0xbb, 0xab, 0x49, 0xb5, 0xa7, 0xd2, 0x43, 0x72, 0x6b, + 0xeb, 0x79, 0x75, 0xa1, 0x66, 0xd9, 0x18, 0xfc, 0x23, 0xaa, 0x73, 0x08, 0xc0, 0x13, 0x71, 0xaa, + 0x6b, 0x7e, 0x78, 0xcb, 0x9a, 0x69, 0x1f, 0x82, 0x9e, 0xb6, 0xba, 0x77, 0x64, 0xd1, 0xd7, 0x2b, + 0x32, 0x43, 0xe2, 0x6f, 0x51, 0x5d, 0x40, 0x98, 0x04, 0x54, 0x80, 0xbe, 0xba, 0x42, 0xcf, 0xe5, + 0x9f, 0x4b, 0xc2, 0xbe, 0x89, 0xfd, 0x67, 0x5a, 0xa6, 0x2e, 0x6f, 0xd6, 0x87, 0xeb, 0x28, 0x99, + 0x61, 0xf0, 0x10, 0x35, 0xb2, 0xc4, 0x97, 0x4a, 0x21, 0x07, 0x72, 0x30, 0xd6, 0x97, 0x79, 0xff, + 0xc6, 0x86, 0x9c, 0x17, 0x2c, 0xee, 0x81, 0xde, 0xa0, 0x51, 0x8c, 0x93, 0x25, 0x34, 0x7e, 0x84, + 0xf6, 0x42, 0x16, 0x11, 0xa0, 0xfe, 0xb8, 0x07, 0x5e, 0x1c, 0xf9, 0xdc, 0xdc, 0x3c, 0x32, 0xda, + 0x35, 0xf7, 0x9e, 0x06, 0xec, 0x9d, 0x16, 0xd3, 0x64, 0x59, 0x8f, 0x4f, 0xd0, 0xdd, 0x14, 0x46, + 0x8c, 0xb3, 0x38, 0xfa, 0x92, 0x71, 0x11, 0xa7, 0xe3, 0x13, 0x16, 0x32, 0x61, 0x6e, 0x29, 0x8e, + 0x39, 0x9d, 0x34, 0xef, 0x92, 0x92, 0x3c, 0x29, 0x75, 0xb5, 0xfe, 0xac, 0xa1, 0xbd, 0xa5, 0x09, + 0xc5, 0xdf, 0xa1, 0x03, 0x2f, 0x4b, 0x53, 0x88, 0x44, 0x37, 0x0b, 0xfb, 0x90, 0xf6, 0xbc, 0x0b, + 0xf0, 0xb3, 0x00, 0x7c, 0x75, 0xa3, 0x35, 0xd7, 0xd2, 0xb5, 0x1e, 0x1c, 0x97, 0xaa, 0xc8, 0x1a, + 0x37, 0xfe, 0x0a, 0xe1, 0x48, 0x85, 0x4e, 0x19, 0xe7, 0x33, 0xe6, 0x86, 0x62, 0x1e, 0x6a, 0x26, + 0xee, 0xae, 0x28, 0x48, 0x89, 0x4b, 0xd6, 0xe8, 0x03, 0x67, 0x29, 0xf8, 0xcb, 0x35, 0x56, 0x8b, + 0x35, 0x3e, 0x2e, 0x55, 0x91, 0x35, 0x6e, 0xfc, 0x31, 0xda, 0xc9, 0x77, 0x53, 0x3d, 0xd7, 0x97, + 0xf3, 0x86, 0x86, 0xed, 0x74, 0xe7, 0x29, 0xb2, 0xa8, 0x93, 0x47, 0x8b, 0xfb, 0x1c, 0xd2, 0x11, + 0xf8, 0x4f, 0xf2, 0x97, 0x8d, 0xc5, 0x91, 0x59, 0x3b, 0x32, 0xda, 0xd5, 0xf9, 0xd1, 0xce, 0x56, + 0x14, 0xa4, 0xc4, 0x25, 0x8f, 0x96, 0x4f, 0xcd, 0xca, 0xd1, 0xb6, 0x8a, 0x47, 0x3b, 0x2f, 0x55, + 0x91, 0x35, 0x6e, 0x39, 0x7b, 0x79, 0xc9, 0x8f, 0x46, 0x94, 0x05, 0xb4, 0x1f, 0x80, 0xf9, 0x5a, + 0x71, 0xf6, 0xba, 0xc5, 0x34, 0x59, 0xd6, 0xe3, 0x27, 0x68, 0x3f, 0x0f, 0x9d, 0x47, 0x74, 0x06, + 0xa9, 0x2b, 0xc8, 0x9b, 0x1a, 0xb2, 0xdf, 0x5d, 0x16, 0x90, 0x55, 0x0f, 0xfe, 0x0c, 0x35, 0xbc, + 0x38, 0x08, 0xd4, 0x3c, 0x1e, 0xc7, 0x59, 0x24, 0xcc, 0x6d, 0x45, 0xc1, 0xf2, 0x3f, 0x74, 0x5c, + 0xc8, 0x90, 0x25, 0x65, 0xeb, 0xb9, 0x81, 0xee, 0xad, 0xf9, 0x1f, 0xe2, 0x2f, 0xd0, 0xa6, 0x18, + 0x27, 0xa0, 0x06, 0x75, 0xdb, 0xbd, 0x7f, 0xfd, 0x66, 0x3f, 0x1b, 0x27, 0xf0, 0xef, 0xa4, 0xf9, + 0xd6, 0x1a, 0x9b, 0x4c, 0x13, 0x65, 0xc4, 0x1e, 0xda, 0x4d, 0xe5, 0x76, 0xd1, 0x20, 0x97, 0xe8, + 0x57, 0xe6, 0xfd, 0xb2, 0xc7, 0x80, 0x2c, 0x0a, 0xe7, 0x4f, 0xe5, 0xfe, 0x74, 0xd2, 0xdc, 0x2d, + 0xe4, 0x48, 0x91, 0xd9, 0xfa, 0xdd, 0x40, 0x07, 0xe5, 0x66, 0x1c, 0xa0, 0x46, 0x48, 0x7f, 0x5d, + 0x6c, 0xef, 0xab, 0xbe, 0x7f, 0xf2, 0xab, 0x6a, 0xe7, 0x5f, 0x55, 0xfb, 0x69, 0x24, 0xce, 0xd2, + 0x9e, 0x48, 0x59, 0x34, 0xc8, 0x5b, 0x79, 0x5a, 0x60, 0x91, 0x25, 0xb6, 0xdb, 0xbe, 0xbc, 0xb2, + 0x2a, 0x2f, 0xae, 0xac, 0xca, 0xcb, 0x2b, 0xab, 0xf2, 0xdb, 0xd4, 0x32, 0x2e, 0xa7, 0x96, 0xf1, + 0x62, 0x6a, 0x19, 0x2f, 0xa7, 0x96, 0xf1, 0xf7, 0xd4, 0x32, 0xfe, 0xf8, 0xc7, 0xaa, 0x7c, 0xbf, + 0x31, 0xea, 0xfc, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x89, 0x78, 0x09, 0x33, 0x43, 0x09, 0x00, 0x00, +} diff --git a/vendor/k8s.io/api/apps/v1/generated.proto b/vendor/k8s.io/api/apps/v1/generated.proto new file mode 100644 index 00000000..8fa54afd --- /dev/null +++ b/vendor/k8s.io/api/apps/v1/generated.proto @@ -0,0 +1,181 @@ +/* +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. +*/ + + +// This file was autogenerated by go-to-protobuf. Do not edit it manually! + +syntax = 'proto2'; + +package k8s.io.api.apps.v1; + +import "k8s.io/api/core/v1/generated.proto"; +import "k8s.io/api/policy/v1beta1/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"; +import "k8s.io/apimachinery/pkg/util/intstr/generated.proto"; + +// Package-wide variables from generator "generated". +option go_package = "v1"; + +// DaemonSet represents the configuration of a daemon set. +message DaemonSet { + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // The desired behavior of this daemon set. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + optional DaemonSetSpec spec = 2; + + // The current status of this daemon set. This data may be + // out of date by some window of time. + // Populated by the system. + // Read-only. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + optional DaemonSetStatus status = 3; +} + +// DaemonSetList is a collection of daemon sets. +message DaemonSetList { + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // A list of daemon sets. + repeated DaemonSet items = 2; +} + +// DaemonSetSpec is the specification of a daemon set. +message DaemonSetSpec { + // A label query over pods that are managed by the daemon set. + // Must match in order to be controlled. + // If empty, defaulted to labels on Pod template. + // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.LabelSelector selector = 1; + + // An object that describes the pod that will be created. + // The DaemonSet will create exactly one copy of this pod on every node + // that matches the template's node selector (or on every node if no node + // selector is specified). + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template + optional k8s.io.api.core.v1.PodTemplateSpec template = 2; + + // An update strategy to replace existing DaemonSet pods with new pods. + // +optional + optional DaemonSetUpdateStrategy updateStrategy = 3; + + // The minimum number of seconds for which a newly created DaemonSet pod should + // be ready without any of its container crashing, for it to be considered + // available. Defaults to 0 (pod will be considered available as soon as it + // is ready). + // +optional + optional int32 minReadySeconds = 4; + + // The number of old history to retain to allow rollback. + // This is a pointer to distinguish between explicit zero and not specified. + // Defaults to 10. + // +optional + optional int32 revisionHistoryLimit = 6; +} + +// DaemonSetStatus represents the current status of a daemon set. +message DaemonSetStatus { + // The number of nodes that are running at least 1 + // daemon pod and are supposed to run the daemon pod. + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ + optional int32 currentNumberScheduled = 1; + + // The number of nodes that are running the daemon pod, but are + // not supposed to run the daemon pod. + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ + optional int32 numberMisscheduled = 2; + + // The total number of nodes that should be running the daemon + // pod (including nodes correctly running the daemon pod). + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ + optional int32 desiredNumberScheduled = 3; + + // The number of nodes that should be running the daemon pod and have one + // or more of the daemon pod running and ready. + optional int32 numberReady = 4; + + // The most recent generation observed by the daemon set controller. + // +optional + optional int64 observedGeneration = 5; + + // The total number of nodes that are running updated daemon pod + // +optional + optional int32 updatedNumberScheduled = 6; + + // The number of nodes that should be running the + // daemon pod and have one or more of the daemon pod running and + // available (ready for at least spec.minReadySeconds) + // +optional + optional int32 numberAvailable = 7; + + // The number of nodes that should be running the + // daemon pod and have none of the daemon pod running and available + // (ready for at least spec.minReadySeconds) + // +optional + optional int32 numberUnavailable = 8; + + // Count of hash collisions for the DaemonSet. The DaemonSet controller + // uses this field as a collision avoidance mechanism when it needs to + // create the name for the newest ControllerRevision. + // +optional + optional int32 collisionCount = 9; +} + +// DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet. +message DaemonSetUpdateStrategy { + // Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate. + // +optional + optional string type = 1; + + // Rolling update config params. Present only if type = "RollingUpdate". + // --- + // TODO: Update this to follow our convention for oneOf, whatever we decide it + // to be. Same as Deployment `strategy.rollingUpdate`. + // See https://github.com/kubernetes/kubernetes/issues/35345 + // +optional + optional RollingUpdateDaemonSet rollingUpdate = 2; +} + +// Spec to control the desired behavior of daemon set rolling update. +message RollingUpdateDaemonSet { + // The maximum number of DaemonSet pods that can be unavailable during the + // update. Value can be an absolute number (ex: 5) or a percentage of total + // number of DaemonSet pods at the start of the update (ex: 10%). Absolute + // number is calculated from percentage by rounding up. + // This cannot be 0. + // Default value is 1. + // Example: when this is set to 30%, at most 30% of the total number of nodes + // that should be running the daemon pod (i.e. status.desiredNumberScheduled) + // can have their pods stopped for an update at any given + // time. The update starts by stopping at most 30% of those DaemonSet pods + // and then brings up new DaemonSet pods in their place. Once the new pods + // are available, it then proceeds onto other DaemonSet pods, thus ensuring + // that at least 70% of original number of DaemonSet pods are available at + // all times during the update. + // +optional + optional k8s.io.apimachinery.pkg.util.intstr.IntOrString maxUnavailable = 1; +} diff --git a/vendor/k8s.io/api/apps/v1/register.go b/vendor/k8s.io/api/apps/v1/register.go new file mode 100644 index 00000000..586b53ef --- /dev/null +++ b/vendor/k8s.io/api/apps/v1/register.go @@ -0,0 +1,52 @@ +/* +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 v1 + +import ( + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +// GroupName is the group name use in this package +const GroupName = "apps" + +// SchemeGroupVersion is group version used to register these objects +var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1"} + +// Resource takes an unqualified resource and returns a Group qualified GroupResource +func Resource(resource string) schema.GroupResource { + return SchemeGroupVersion.WithResource(resource).GroupResource() +} + +var ( + // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. + // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. + SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) + localSchemeBuilder = &SchemeBuilder + AddToScheme = localSchemeBuilder.AddToScheme +) + +// Adds the list of known types to api.Scheme. +func addKnownTypes(scheme *runtime.Scheme) error { + scheme.AddKnownTypes(SchemeGroupVersion, + &DaemonSet{}, + &DaemonSetList{}, + ) + metav1.AddToGroupVersion(scheme, SchemeGroupVersion) + return nil +} diff --git a/vendor/k8s.io/api/apps/v1/types.go b/vendor/k8s.io/api/apps/v1/types.go new file mode 100644 index 00000000..dc589e65 --- /dev/null +++ b/vendor/k8s.io/api/apps/v1/types.go @@ -0,0 +1,201 @@ +/* +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 v1 + +import ( + "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" +) + +const ( + ControllerRevisionHashLabelKey = "controller-revision-hash" + DeprecatedTemplateGeneration = "deprecated.daemonset.template.generation" +) + +// DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet. +type DaemonSetUpdateStrategy struct { + // Type of daemon set update. Can be "RollingUpdate" or "OnDelete". Default is RollingUpdate. + // +optional + Type DaemonSetUpdateStrategyType `json:"type,omitempty" protobuf:"bytes,1,opt,name=type"` + + // Rolling update config params. Present only if type = "RollingUpdate". + //--- + // TODO: Update this to follow our convention for oneOf, whatever we decide it + // to be. Same as Deployment `strategy.rollingUpdate`. + // See https://github.com/kubernetes/kubernetes/issues/35345 + // +optional + RollingUpdate *RollingUpdateDaemonSet `json:"rollingUpdate,omitempty" protobuf:"bytes,2,opt,name=rollingUpdate"` +} + +type DaemonSetUpdateStrategyType string + +const ( + // Replace the old daemons by new ones using rolling update i.e replace them on each node one after the other. + RollingUpdateDaemonSetStrategyType DaemonSetUpdateStrategyType = "RollingUpdate" + + // Replace the old daemons only when it's killed + OnDeleteDaemonSetStrategyType DaemonSetUpdateStrategyType = "OnDelete" +) + +// Spec to control the desired behavior of daemon set rolling update. +type RollingUpdateDaemonSet struct { + // The maximum number of DaemonSet pods that can be unavailable during the + // update. Value can be an absolute number (ex: 5) or a percentage of total + // number of DaemonSet pods at the start of the update (ex: 10%). Absolute + // number is calculated from percentage by rounding up. + // This cannot be 0. + // Default value is 1. + // Example: when this is set to 30%, at most 30% of the total number of nodes + // that should be running the daemon pod (i.e. status.desiredNumberScheduled) + // can have their pods stopped for an update at any given + // time. The update starts by stopping at most 30% of those DaemonSet pods + // and then brings up new DaemonSet pods in their place. Once the new pods + // are available, it then proceeds onto other DaemonSet pods, thus ensuring + // that at least 70% of original number of DaemonSet pods are available at + // all times during the update. + // +optional + MaxUnavailable *intstr.IntOrString `json:"maxUnavailable,omitempty" protobuf:"bytes,1,opt,name=maxUnavailable"` +} + +// DaemonSetSpec is the specification of a daemon set. +type DaemonSetSpec struct { + // A label query over pods that are managed by the daemon set. + // Must match in order to be controlled. + // If empty, defaulted to labels on Pod template. + // More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors + // +optional + Selector *metav1.LabelSelector `json:"selector,omitempty" protobuf:"bytes,1,opt,name=selector"` + + // An object that describes the pod that will be created. + // The DaemonSet will create exactly one copy of this pod on every node + // that matches the template's node selector (or on every node if no node + // selector is specified). + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template + Template v1.PodTemplateSpec `json:"template" protobuf:"bytes,2,opt,name=template"` + + // An update strategy to replace existing DaemonSet pods with new pods. + // +optional + UpdateStrategy DaemonSetUpdateStrategy `json:"updateStrategy,omitempty" protobuf:"bytes,3,opt,name=updateStrategy"` + + // The minimum number of seconds for which a newly created DaemonSet pod should + // be ready without any of its container crashing, for it to be considered + // available. Defaults to 0 (pod will be considered available as soon as it + // is ready). + // +optional + MinReadySeconds int32 `json:"minReadySeconds,omitempty" protobuf:"varint,4,opt,name=minReadySeconds"` + + // The number of old history to retain to allow rollback. + // This is a pointer to distinguish between explicit zero and not specified. + // Defaults to 10. + // +optional + RevisionHistoryLimit *int32 `json:"revisionHistoryLimit,omitempty" protobuf:"varint,6,opt,name=revisionHistoryLimit"` +} + +// DaemonSetStatus represents the current status of a daemon set. +type DaemonSetStatus struct { + // The number of nodes that are running at least 1 + // daemon pod and are supposed to run the daemon pod. + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ + CurrentNumberScheduled int32 `json:"currentNumberScheduled" protobuf:"varint,1,opt,name=currentNumberScheduled"` + + // The number of nodes that are running the daemon pod, but are + // not supposed to run the daemon pod. + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ + NumberMisscheduled int32 `json:"numberMisscheduled" protobuf:"varint,2,opt,name=numberMisscheduled"` + + // The total number of nodes that should be running the daemon + // pod (including nodes correctly running the daemon pod). + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/ + DesiredNumberScheduled int32 `json:"desiredNumberScheduled" protobuf:"varint,3,opt,name=desiredNumberScheduled"` + + // The number of nodes that should be running the daemon pod and have one + // or more of the daemon pod running and ready. + NumberReady int32 `json:"numberReady" protobuf:"varint,4,opt,name=numberReady"` + + // The most recent generation observed by the daemon set controller. + // +optional + ObservedGeneration int64 `json:"observedGeneration,omitempty" protobuf:"varint,5,opt,name=observedGeneration"` + + // The total number of nodes that are running updated daemon pod + // +optional + UpdatedNumberScheduled int32 `json:"updatedNumberScheduled,omitempty" protobuf:"varint,6,opt,name=updatedNumberScheduled"` + + // The number of nodes that should be running the + // daemon pod and have one or more of the daemon pod running and + // available (ready for at least spec.minReadySeconds) + // +optional + NumberAvailable int32 `json:"numberAvailable,omitempty" protobuf:"varint,7,opt,name=numberAvailable"` + + // The number of nodes that should be running the + // daemon pod and have none of the daemon pod running and available + // (ready for at least spec.minReadySeconds) + // +optional + NumberUnavailable int32 `json:"numberUnavailable,omitempty" protobuf:"varint,8,opt,name=numberUnavailable"` + + // Count of hash collisions for the DaemonSet. The DaemonSet controller + // uses this field as a collision avoidance mechanism when it needs to + // create the name for the newest ControllerRevision. + // +optional + CollisionCount *int32 `json:"collisionCount,omitempty" protobuf:"varint,9,opt,name=collisionCount"` +} + +// +genclient +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DaemonSet represents the configuration of a daemon set. +type DaemonSet struct { + metav1.TypeMeta `json:",inline"` + // Standard object's metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // The desired behavior of this daemon set. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + Spec DaemonSetSpec `json:"spec,omitempty" protobuf:"bytes,2,opt,name=spec"` + + // The current status of this daemon set. This data may be + // out of date by some window of time. + // Populated by the system. + // Read-only. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status + // +optional + Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"` +} + +const ( + // DefaultDaemonSetUniqueLabelKey is the default label key that is added + // to existing DaemonSet pods to distinguish between old and new + // DaemonSet pods during DaemonSet template updates. + DefaultDaemonSetUniqueLabelKey = ControllerRevisionHashLabelKey +) + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DaemonSetList is a collection of daemon sets. +type DaemonSetList struct { + metav1.TypeMeta `json:",inline"` + // Standard list metadata. + // More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // A list of daemon sets. + Items []DaemonSet `json:"items" protobuf:"bytes,2,rep,name=items"` +} diff --git a/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go new file mode 100644 index 00000000..4cc96dc4 --- /dev/null +++ b/vendor/k8s.io/api/apps/v1/types_swagger_doc_generated.go @@ -0,0 +1,100 @@ +/* +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 v1 + +// This file contains a collection of methods that can be used from go-restful to +// generate Swagger API documentation for its models. Please read this PR for more +// information on the implementation: https://github.com/emicklei/go-restful/pull/215 +// +// TODOs are ignored from the parser (e.g. TODO(andronat):... || TODO:...) if and only if +// they are on one line! For multiple line or blocks that you want to ignore use ---. +// Any context after a --- is ignored. +// +// Those methods can be generated by using hack/update-generated-swagger-docs.sh + +// AUTO-GENERATED FUNCTIONS START HERE +var map_DaemonSet = map[string]string{ + "": "DaemonSet represents the configuration of a daemon set.", + "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "spec": "The desired behavior of this daemon set. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", + "status": "The current status of this daemon set. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", +} + +func (DaemonSet) SwaggerDoc() map[string]string { + return map_DaemonSet +} + +var map_DaemonSetList = map[string]string{ + "": "DaemonSetList is a collection of daemon sets.", + "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", + "items": "A list of daemon sets.", +} + +func (DaemonSetList) SwaggerDoc() map[string]string { + return map_DaemonSetList +} + +var map_DaemonSetSpec = map[string]string{ + "": "DaemonSetSpec is the specification of a daemon set.", + "selector": "A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", + "template": "An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template's node selector (or on every node if no node selector is specified). More info: https://kubernetes.io/docs/concepts/workloads/controllers/replicationcontroller#pod-template", + "updateStrategy": "An update strategy to replace existing DaemonSet pods with new pods.", + "minReadySeconds": "The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).", + "revisionHistoryLimit": "The number of old history to retain to allow rollback. This is a pointer to distinguish between explicit zero and not specified. Defaults to 10.", +} + +func (DaemonSetSpec) SwaggerDoc() map[string]string { + return map_DaemonSetSpec +} + +var map_DaemonSetStatus = map[string]string{ + "": "DaemonSetStatus represents the current status of a daemon set.", + "currentNumberScheduled": "The number of nodes that are running at least 1 daemon pod and are supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + "numberMisscheduled": "The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + "desiredNumberScheduled": "The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). More info: https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/", + "numberReady": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready.", + "observedGeneration": "The most recent generation observed by the daemon set controller.", + "updatedNumberScheduled": "The total number of nodes that are running updated daemon pod", + "numberAvailable": "The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds)", + "numberUnavailable": "The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds)", + "collisionCount": "Count of hash collisions for the DaemonSet. The DaemonSet controller uses this field as a collision avoidance mechanism when it needs to create the name for the newest ControllerRevision.", +} + +func (DaemonSetStatus) SwaggerDoc() map[string]string { + return map_DaemonSetStatus +} + +var map_DaemonSetUpdateStrategy = map[string]string{ + "": "DaemonSetUpdateStrategy is a struct used to control the update strategy for a DaemonSet.", + "type": "Type of daemon set update. Can be \"RollingUpdate\" or \"OnDelete\". Default is RollingUpdate.", + "rollingUpdate": "Rolling update config params. Present only if type = \"RollingUpdate\".", +} + +func (DaemonSetUpdateStrategy) SwaggerDoc() map[string]string { + return map_DaemonSetUpdateStrategy +} + +var map_RollingUpdateDaemonSet = map[string]string{ + "": "Spec to control the desired behavior of daemon set rolling update.", + "maxUnavailable": "The maximum number of DaemonSet pods that can be unavailable during the update. Value can be an absolute number (ex: 5) or a percentage of total number of DaemonSet pods at the start of the update (ex: 10%). Absolute number is calculated from percentage by rounding up. This cannot be 0. Default value is 1. Example: when this is set to 30%, at most 30% of the total number of nodes that should be running the daemon pod (i.e. status.desiredNumberScheduled) can have their pods stopped for an update at any given time. The update starts by stopping at most 30% of those DaemonSet pods and then brings up new DaemonSet pods in their place. Once the new pods are available, it then proceeds onto other DaemonSet pods, thus ensuring that at least 70% of original number of DaemonSet pods are available at all times during the update.", +} + +func (RollingUpdateDaemonSet) SwaggerDoc() map[string]string { + return map_RollingUpdateDaemonSet +} + +// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go b/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go new file mode 100644 index 00000000..72d654a5 --- /dev/null +++ b/vendor/k8s.io/api/apps/v1/zz_generated.deepcopy.go @@ -0,0 +1,240 @@ +// +build !ignore_autogenerated + +/* +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. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package v1 + +import ( + meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + conversion "k8s.io/apimachinery/pkg/conversion" + runtime "k8s.io/apimachinery/pkg/runtime" + intstr "k8s.io/apimachinery/pkg/util/intstr" + reflect "reflect" +) + +func init() { + SchemeBuilder.Register(RegisterDeepCopies) +} + +// RegisterDeepCopies adds deep-copy functions to the given scheme. Public +// to allow building arbitrary schemes. +// +// Deprecated: deepcopy registration will go away when static deepcopy is fully implemented. +func RegisterDeepCopies(scheme *runtime.Scheme) error { + return scheme.AddGeneratedDeepCopyFuncs( + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*DaemonSet).DeepCopyInto(out.(*DaemonSet)) + return nil + }, InType: reflect.TypeOf(&DaemonSet{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*DaemonSetList).DeepCopyInto(out.(*DaemonSetList)) + return nil + }, InType: reflect.TypeOf(&DaemonSetList{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*DaemonSetSpec).DeepCopyInto(out.(*DaemonSetSpec)) + return nil + }, InType: reflect.TypeOf(&DaemonSetSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*DaemonSetStatus).DeepCopyInto(out.(*DaemonSetStatus)) + return nil + }, InType: reflect.TypeOf(&DaemonSetStatus{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*DaemonSetUpdateStrategy).DeepCopyInto(out.(*DaemonSetUpdateStrategy)) + return nil + }, InType: reflect.TypeOf(&DaemonSetUpdateStrategy{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*RollingUpdateDaemonSet).DeepCopyInto(out.(*RollingUpdateDaemonSet)) + return nil + }, InType: reflect.TypeOf(&RollingUpdateDaemonSet{})}, + ) +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DaemonSet) DeepCopyInto(out *DaemonSet) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + in.Spec.DeepCopyInto(&out.Spec) + in.Status.DeepCopyInto(&out.Status) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DaemonSet. +func (in *DaemonSet) DeepCopy() *DaemonSet { + if in == nil { + return nil + } + out := new(DaemonSet) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DaemonSet) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DaemonSetList) DeepCopyInto(out *DaemonSetList) { + *out = *in + out.TypeMeta = in.TypeMeta + out.ListMeta = in.ListMeta + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DaemonSet, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DaemonSetList. +func (in *DaemonSetList) DeepCopy() *DaemonSetList { + if in == nil { + return nil + } + out := new(DaemonSetList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DaemonSetList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } else { + return nil + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DaemonSetSpec) DeepCopyInto(out *DaemonSetSpec) { + *out = *in + if in.Selector != nil { + in, out := &in.Selector, &out.Selector + if *in == nil { + *out = nil + } else { + *out = new(meta_v1.LabelSelector) + (*in).DeepCopyInto(*out) + } + } + in.Template.DeepCopyInto(&out.Template) + in.UpdateStrategy.DeepCopyInto(&out.UpdateStrategy) + if in.RevisionHistoryLimit != nil { + in, out := &in.RevisionHistoryLimit, &out.RevisionHistoryLimit + if *in == nil { + *out = nil + } else { + *out = new(int32) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DaemonSetSpec. +func (in *DaemonSetSpec) DeepCopy() *DaemonSetSpec { + if in == nil { + return nil + } + out := new(DaemonSetSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DaemonSetStatus) DeepCopyInto(out *DaemonSetStatus) { + *out = *in + if in.CollisionCount != nil { + in, out := &in.CollisionCount, &out.CollisionCount + if *in == nil { + *out = nil + } else { + *out = new(int32) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DaemonSetStatus. +func (in *DaemonSetStatus) DeepCopy() *DaemonSetStatus { + if in == nil { + return nil + } + out := new(DaemonSetStatus) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DaemonSetUpdateStrategy) DeepCopyInto(out *DaemonSetUpdateStrategy) { + *out = *in + if in.RollingUpdate != nil { + in, out := &in.RollingUpdate, &out.RollingUpdate + if *in == nil { + *out = nil + } else { + *out = new(RollingUpdateDaemonSet) + (*in).DeepCopyInto(*out) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DaemonSetUpdateStrategy. +func (in *DaemonSetUpdateStrategy) DeepCopy() *DaemonSetUpdateStrategy { + if in == nil { + return nil + } + out := new(DaemonSetUpdateStrategy) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RollingUpdateDaemonSet) DeepCopyInto(out *RollingUpdateDaemonSet) { + *out = *in + if in.MaxUnavailable != nil { + in, out := &in.MaxUnavailable, &out.MaxUnavailable + if *in == nil { + *out = nil + } else { + *out = new(intstr.IntOrString) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RollingUpdateDaemonSet. +func (in *RollingUpdateDaemonSet) DeepCopy() *RollingUpdateDaemonSet { + if in == nil { + return nil + } + out := new(RollingUpdateDaemonSet) + in.DeepCopyInto(out) + return out +} diff --git a/vendor/k8s.io/api/apps/v1beta2/generated.proto b/vendor/k8s.io/api/apps/v1beta2/generated.proto index 2638462c..dcfd9c46 100644 --- a/vendor/k8s.io/api/apps/v1beta2/generated.proto +++ b/vendor/k8s.io/api/apps/v1beta2/generated.proto @@ -336,7 +336,7 @@ message DeploymentStrategy { optional RollingUpdateDeployment rollingUpdate = 2; } -// ReplicaSet represents the configuration of a ReplicaSet. +// ReplicaSet ensures that a specified number of pod replicas are running at any given time. message ReplicaSet { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. diff --git a/vendor/k8s.io/api/apps/v1beta2/types.go b/vendor/k8s.io/api/apps/v1beta2/types.go index 92519158..fa5676e1 100644 --- a/vendor/k8s.io/api/apps/v1beta2/types.go +++ b/vendor/k8s.io/api/apps/v1beta2/types.go @@ -629,12 +629,6 @@ type DaemonSet struct { } const ( - // DEPRECATED: DefaultDaemonSetUniqueLabelKey is used instead. - // DaemonSetTemplateGenerationKey is the key of the labels that is added - // to daemon set pods to distinguish between old and new pod templates - // during DaemonSet template update. - DaemonSetTemplateGenerationKey string = "pod-template-generation" - // DefaultDaemonSetUniqueLabelKey is the default label key that is added // to existing DaemonSet pods to distinguish between old and new // DaemonSet pods during DaemonSet template updates. @@ -658,7 +652,7 @@ type DaemonSetList struct { // +genclient // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// ReplicaSet represents the configuration of a ReplicaSet. +// ReplicaSet ensures that a specified number of pod replicas are running at any given time. type ReplicaSet struct { metav1.TypeMeta `json:",inline"` diff --git a/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go b/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go index 65730c71..35ae28ca 100644 --- a/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/apps/v1beta2/types_swagger_doc_generated.go @@ -187,7 +187,7 @@ func (DeploymentStrategy) SwaggerDoc() map[string]string { } var map_ReplicaSet = map[string]string{ - "": "ReplicaSet represents the configuration of a ReplicaSet.", + "": "ReplicaSet ensures that a specified number of pod replicas are running at any given time.", "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", diff --git a/vendor/k8s.io/api/authorization/v1/generated.proto b/vendor/k8s.io/api/authorization/v1/generated.proto index aec81e58..e3ce0274 100644 --- a/vendor/k8s.io/api/authorization/v1/generated.proto +++ b/vendor/k8s.io/api/authorization/v1/generated.proto @@ -121,7 +121,8 @@ message ResourceRule { // +optional repeated string apiGroups = 2; - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. "*" means all. + // Resources is a list of resources this rule applies to. "*" means all in the specified apiGroups. + // "*/foo" represents the subresource 'foo' for all resources in the specified apiGroups. // +optional repeated string resources = 3; diff --git a/vendor/k8s.io/api/authorization/v1/types.go b/vendor/k8s.io/api/authorization/v1/types.go index 99ec3bcb..23b5ae70 100644 --- a/vendor/k8s.io/api/authorization/v1/types.go +++ b/vendor/k8s.io/api/authorization/v1/types.go @@ -241,7 +241,8 @@ type ResourceRule struct { // the enumerated resources in any API group will be allowed. "*" means all. // +optional APIGroups []string `json:"apiGroups,omitempty" protobuf:"bytes,2,rep,name=apiGroups"` - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. "*" means all. + // Resources is a list of resources this rule applies to. "*" means all in the specified apiGroups. + // "*/foo" represents the subresource 'foo' for all resources in the specified apiGroups. // +optional Resources []string `json:"resources,omitempty" protobuf:"bytes,3,rep,name=resources"` // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. "*" means all. diff --git a/vendor/k8s.io/api/authorization/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/authorization/v1/types_swagger_doc_generated.go index 8a0fb8a8..1e3f780d 100644 --- a/vendor/k8s.io/api/authorization/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/authorization/v1/types_swagger_doc_generated.go @@ -76,7 +76,7 @@ var map_ResourceRule = map[string]string{ "": "ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", "verbs": "Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", "apiGroups": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. \"*\" means all.", - "resources": "Resources is a list of resources this rule applies to. ResourceAll represents all resources. \"*\" means all.", + "resources": "Resources is a list of resources this rule applies to. \"*\" means all in the specified apiGroups.\n \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.", "resourceNames": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. \"*\" means all.", } diff --git a/vendor/k8s.io/api/authorization/v1beta1/generated.proto b/vendor/k8s.io/api/authorization/v1beta1/generated.proto index b7aed862..1394725d 100644 --- a/vendor/k8s.io/api/authorization/v1beta1/generated.proto +++ b/vendor/k8s.io/api/authorization/v1beta1/generated.proto @@ -121,7 +121,8 @@ message ResourceRule { // +optional repeated string apiGroups = 2; - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. "*" means all. + // Resources is a list of resources this rule applies to. "*" means all in the specified apiGroups. + // "*/foo" represents the subresource 'foo' for all resources in the specified apiGroups. // +optional repeated string resources = 3; diff --git a/vendor/k8s.io/api/authorization/v1beta1/types.go b/vendor/k8s.io/api/authorization/v1beta1/types.go index a0659d51..f62f5956 100644 --- a/vendor/k8s.io/api/authorization/v1beta1/types.go +++ b/vendor/k8s.io/api/authorization/v1beta1/types.go @@ -241,7 +241,8 @@ type ResourceRule struct { // the enumerated resources in any API group will be allowed. "*" means all. // +optional APIGroups []string `json:"apiGroups,omitempty" protobuf:"bytes,2,rep,name=apiGroups"` - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. "*" means all. + // Resources is a list of resources this rule applies to. "*" means all in the specified apiGroups. + // "*/foo" represents the subresource 'foo' for all resources in the specified apiGroups. // +optional Resources []string `json:"resources,omitempty" protobuf:"bytes,3,rep,name=resources"` // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. "*" means all. diff --git a/vendor/k8s.io/api/authorization/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/authorization/v1beta1/types_swagger_doc_generated.go index 1d8bb984..544c2fa4 100644 --- a/vendor/k8s.io/api/authorization/v1beta1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/authorization/v1beta1/types_swagger_doc_generated.go @@ -76,7 +76,7 @@ var map_ResourceRule = map[string]string{ "": "ResourceRule is the list of actions the subject is allowed to perform on resources. The list ordering isn't significant, may contain duplicates, and possibly be incomplete.", "verbs": "Verb is a list of kubernetes resource API verbs, like: get, list, watch, create, update, delete, proxy. \"*\" means all.", "apiGroups": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed. \"*\" means all.", - "resources": "Resources is a list of resources this rule applies to. ResourceAll represents all resources. \"*\" means all.", + "resources": "Resources is a list of resources this rule applies to. \"*\" means all in the specified apiGroups.\n \"*/foo\" represents the subresource 'foo' for all resources in the specified apiGroups.", "resourceNames": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. \"*\" means all.", } diff --git a/vendor/k8s.io/api/autoscaling/v1/types.go b/vendor/k8s.io/api/autoscaling/v1/types.go index a18c3730..e726c140 100644 --- a/vendor/k8s.io/api/autoscaling/v1/types.go +++ b/vendor/k8s.io/api/autoscaling/v1/types.go @@ -264,7 +264,7 @@ var ( // ScalingActive indicates that the HPA controller is able to scale if necessary: // it's correctly configured, can fetch the desired metrics, and isn't disabled. ScalingActive HorizontalPodAutoscalerConditionType = "ScalingActive" - // AbleToScale indicates a lack of transient issues which prevent scaling from occuring, + // AbleToScale indicates a lack of transient issues which prevent scaling from occurring, // such as being in a backoff window, or being unable to access/update the target scale. AbleToScale HorizontalPodAutoscalerConditionType = "AbleToScale" // ScalingLimited indicates that the calculated scale based on metrics would be above or diff --git a/vendor/k8s.io/api/autoscaling/v2beta1/types.go b/vendor/k8s.io/api/autoscaling/v2beta1/types.go index d7b262ff..9c72ae25 100644 --- a/vendor/k8s.io/api/autoscaling/v2beta1/types.go +++ b/vendor/k8s.io/api/autoscaling/v2beta1/types.go @@ -180,7 +180,7 @@ var ( // ScalingActive indicates that the HPA controller is able to scale if necessary: // it's correctly configured, can fetch the desired metrics, and isn't disabled. ScalingActive HorizontalPodAutoscalerConditionType = "ScalingActive" - // AbleToScale indicates a lack of transient issues which prevent scaling from occuring, + // AbleToScale indicates a lack of transient issues which prevent scaling from occurring, // such as being in a backoff window, or being unable to access/update the target scale. AbleToScale HorizontalPodAutoscalerConditionType = "AbleToScale" // ScalingLimited indicates that the calculated scale based on metrics would be above or diff --git a/vendor/k8s.io/api/batch/v1/generated.proto b/vendor/k8s.io/api/batch/v1/generated.proto index 5595eae4..43d8acc7 100644 --- a/vendor/k8s.io/api/batch/v1/generated.proto +++ b/vendor/k8s.io/api/batch/v1/generated.proto @@ -128,7 +128,7 @@ message JobSpec { // and other jobs to not function correctly. However, You may see // `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` // API. - // More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector // +optional optional bool manualSelector = 5; diff --git a/vendor/k8s.io/api/batch/v1/types.go b/vendor/k8s.io/api/batch/v1/types.go index 4f3b83e8..84abb1a9 100644 --- a/vendor/k8s.io/api/batch/v1/types.go +++ b/vendor/k8s.io/api/batch/v1/types.go @@ -107,7 +107,7 @@ type JobSpec struct { // and other jobs to not function correctly. However, You may see // `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` // API. - // More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md + // More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector // +optional ManualSelector *bool `json:"manualSelector,omitempty" protobuf:"varint,5,opt,name=manualSelector"` diff --git a/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go b/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go index 53b2d634..0ddf4b11 100644 --- a/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/batch/v1/types_swagger_doc_generated.go @@ -69,7 +69,7 @@ var map_JobSpec = map[string]string{ "activeDeadlineSeconds": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer", "backoffLimit": "Specifies the number of retries before marking this job failed. Defaults to 6", "selector": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors", - "manualSelector": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md", + "manualSelector": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#specifying-your-own-pod-selector", "template": "Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/", } diff --git a/vendor/k8s.io/api/core/v1/generated.pb.go b/vendor/k8s.io/api/core/v1/generated.pb.go index 6db91737..1cd0bdc7 100644 --- a/vendor/k8s.io/api/core/v1/generated.pb.go +++ b/vendor/k8s.io/api/core/v1/generated.pb.go @@ -158,6 +158,7 @@ limitations under the License. Probe ProjectedVolumeSource QuobyteVolumeSource + RBDPersistentVolumeSource RBDVolumeSource RangeAllocation ReplicationController @@ -172,6 +173,7 @@ limitations under the License. ResourceQuotaStatus ResourceRequirements SELinuxOptions + ScaleIOPersistentVolumeSource ScaleIOVolumeSource Secret SecretEnvSource @@ -798,198 +800,210 @@ func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSou func (*QuobyteVolumeSource) ProtoMessage() {} func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } +func (m *RBDPersistentVolumeSource) Reset() { *m = RBDPersistentVolumeSource{} } +func (*RBDPersistentVolumeSource) ProtoMessage() {} +func (*RBDPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{133} +} + func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } func (*RBDVolumeSource) ProtoMessage() {} -func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } func (*RangeAllocation) ProtoMessage() {} -func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } func (m *ReplicationController) Reset() { *m = ReplicationController{} } func (*ReplicationController) ProtoMessage() {} -func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } func (*ReplicationControllerCondition) ProtoMessage() {} func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{136} + return fileDescriptorGenerated, []int{137} } func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } func (*ReplicationControllerList) ProtoMessage() {} func (*ReplicationControllerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{137} + return fileDescriptorGenerated, []int{138} } func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } func (*ReplicationControllerSpec) ProtoMessage() {} func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{138} + return fileDescriptorGenerated, []int{139} } func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } func (*ReplicationControllerStatus) ProtoMessage() {} func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{139} + return fileDescriptorGenerated, []int{140} } func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } func (*ResourceFieldSelector) ProtoMessage() {} -func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } func (*ResourceQuota) ProtoMessage() {} -func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } func (*ResourceQuotaList) ProtoMessage() {} -func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } func (*ResourceQuotaSpec) ProtoMessage() {} -func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } func (*ResourceQuotaStatus) ProtoMessage() {} -func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } func (*SELinuxOptions) ProtoMessage() {} -func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } + +func (m *ScaleIOPersistentVolumeSource) Reset() { *m = ScaleIOPersistentVolumeSource{} } +func (*ScaleIOPersistentVolumeSource) ProtoMessage() {} +func (*ScaleIOPersistentVolumeSource) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{148} +} func (m *ScaleIOVolumeSource) Reset() { *m = ScaleIOVolumeSource{} } func (*ScaleIOVolumeSource) ProtoMessage() {} -func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } +func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } func (*SecretEnvSource) ProtoMessage() {} -func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } +func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } func (*SecretKeySelector) ProtoMessage() {} -func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } func (m *SecretList) Reset() { *m = SecretList{} } func (*SecretList) ProtoMessage() {} -func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } func (m *SecretProjection) Reset() { *m = SecretProjection{} } func (*SecretProjection) ProtoMessage() {} -func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } +func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } func (m *SecretReference) Reset() { *m = SecretReference{} } func (*SecretReference) ProtoMessage() {} -func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } +func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } func (*SecretVolumeSource) ProtoMessage() {} -func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } func (m *SecurityContext) Reset() { *m = SecurityContext{} } func (*SecurityContext) ProtoMessage() {} -func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } func (m *SerializedReference) Reset() { *m = SerializedReference{} } func (*SerializedReference) ProtoMessage() {} -func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } func (*ServiceAccount) ProtoMessage() {} -func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } func (*ServiceAccountList) ProtoMessage() {} -func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } func (m *ServiceList) Reset() { *m = ServiceList{} } func (*ServiceList) ProtoMessage() {} -func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } func (m *ServicePort) Reset() { *m = ServicePort{} } func (*ServicePort) ProtoMessage() {} -func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } func (*ServiceProxyOptions) ProtoMessage() {} -func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } func (*ServiceStatus) ProtoMessage() {} -func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } func (m *SessionAffinityConfig) Reset() { *m = SessionAffinityConfig{} } func (*SessionAffinityConfig) ProtoMessage() {} -func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } +func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } func (m *StorageOSPersistentVolumeSource) Reset() { *m = StorageOSPersistentVolumeSource{} } func (*StorageOSPersistentVolumeSource) ProtoMessage() {} func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{166} + return fileDescriptorGenerated, []int{168} } func (m *StorageOSVolumeSource) Reset() { *m = StorageOSVolumeSource{} } func (*StorageOSVolumeSource) ProtoMessage() {} -func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } +func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } func (m *Sysctl) Reset() { *m = Sysctl{} } func (*Sysctl) ProtoMessage() {} -func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } +func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } func (*TCPSocketAction) ProtoMessage() {} -func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} } func (m *Taint) Reset() { *m = Taint{} } func (*Taint) ProtoMessage() {} -func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} } func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} -func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} } +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} } func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} } +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } func (m *VolumeMount) Reset() { *m = VolumeMount{} } func (*VolumeMount) ProtoMessage() {} -func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} } +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } func (*VolumeProjection) ProtoMessage() {} -func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } +func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} } func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} -func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{176} + return fileDescriptorGenerated, []int{178} } func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{177} + return fileDescriptorGenerated, []int{179} } func init() { @@ -1126,6 +1140,7 @@ func init() { proto.RegisterType((*Probe)(nil), "k8s.io.api.core.v1.Probe") proto.RegisterType((*ProjectedVolumeSource)(nil), "k8s.io.api.core.v1.ProjectedVolumeSource") proto.RegisterType((*QuobyteVolumeSource)(nil), "k8s.io.api.core.v1.QuobyteVolumeSource") + proto.RegisterType((*RBDPersistentVolumeSource)(nil), "k8s.io.api.core.v1.RBDPersistentVolumeSource") proto.RegisterType((*RBDVolumeSource)(nil), "k8s.io.api.core.v1.RBDVolumeSource") proto.RegisterType((*RangeAllocation)(nil), "k8s.io.api.core.v1.RangeAllocation") proto.RegisterType((*ReplicationController)(nil), "k8s.io.api.core.v1.ReplicationController") @@ -1140,6 +1155,7 @@ func init() { proto.RegisterType((*ResourceQuotaStatus)(nil), "k8s.io.api.core.v1.ResourceQuotaStatus") proto.RegisterType((*ResourceRequirements)(nil), "k8s.io.api.core.v1.ResourceRequirements") proto.RegisterType((*SELinuxOptions)(nil), "k8s.io.api.core.v1.SELinuxOptions") + proto.RegisterType((*ScaleIOPersistentVolumeSource)(nil), "k8s.io.api.core.v1.ScaleIOPersistentVolumeSource") proto.RegisterType((*ScaleIOVolumeSource)(nil), "k8s.io.api.core.v1.ScaleIOVolumeSource") proto.RegisterType((*Secret)(nil), "k8s.io.api.core.v1.Secret") proto.RegisterType((*SecretEnvSource)(nil), "k8s.io.api.core.v1.SecretEnvSource") @@ -7541,7 +7557,7 @@ func (m *QuobyteVolumeSource) MarshalTo(dAtA []byte) (int, error) { return i, nil } -func (m *RBDVolumeSource) Marshal() (dAtA []byte, err error) { +func (m *RBDPersistentVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalTo(dAtA) @@ -7551,7 +7567,7 @@ func (m *RBDVolumeSource) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) { +func (m *RBDPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { var i int _ = i var l int @@ -7612,6 +7628,77 @@ func (m *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *RBDVolumeSource) 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 *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + if len(m.CephMonitors) > 0 { + for _, s := range m.CephMonitors { + dAtA[i] = 0xa + 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) + } + } + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDImage))) + i += copy(dAtA[i:], m.RBDImage) + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i += copy(dAtA[i:], m.FSType) + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RBDPool))) + i += copy(dAtA[i:], m.RBDPool) + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.RadosUser))) + i += copy(dAtA[i:], m.RadosUser) + dAtA[i] = 0x32 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Keyring))) + i += copy(dAtA[i:], m.Keyring) + if m.SecretRef != nil { + dAtA[i] = 0x3a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) + n150, err := m.SecretRef.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n150 + } + dAtA[i] = 0x40 + i++ + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + return i, nil +} + func (m *RangeAllocation) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7630,11 +7717,11 @@ func (m *RangeAllocation) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n150, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n151, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n150 + i += n151 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Range))) @@ -7666,27 +7753,27 @@ func (m *ReplicationController) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n151, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n151 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n152, err := m.Spec.MarshalTo(dAtA[i:]) + n152, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n152 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n153, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n153, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n153 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n154, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n154 return i, nil } @@ -7716,11 +7803,11 @@ func (m *ReplicationControllerCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n154, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n155, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n154 + i += n155 dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -7750,11 +7837,11 @@ func (m *ReplicationControllerList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n155, err := m.ListMeta.MarshalTo(dAtA[i:]) + n156, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n155 + i += n156 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -7816,11 +7903,11 @@ func (m *ReplicationControllerSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n156, err := m.Template.MarshalTo(dAtA[i:]) + n157, err := m.Template.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n156 + i += n157 } dAtA[i] = 0x20 i++ @@ -7899,11 +7986,11 @@ func (m *ResourceFieldSelector) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Divisor.Size())) - n157, err := m.Divisor.MarshalTo(dAtA[i:]) + n158, err := m.Divisor.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n157 + i += n158 return i, nil } @@ -7925,27 +8012,27 @@ func (m *ResourceQuota) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n158, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n158 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n159, err := m.Spec.MarshalTo(dAtA[i:]) + n159, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n159 - dAtA[i] = 0x1a + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n160, err := m.Status.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n160, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n160 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n161, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n161 return i, nil } @@ -7967,11 +8054,11 @@ func (m *ResourceQuotaList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n161, err := m.ListMeta.MarshalTo(dAtA[i:]) + n162, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n161 + i += n162 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8026,11 +8113,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n162, err := (&v).MarshalTo(dAtA[i:]) + n163, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n162 + i += n163 } } if len(m.Scopes) > 0 { @@ -8090,11 +8177,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n163, err := (&v).MarshalTo(dAtA[i:]) + n164, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n163 + i += n164 } } if len(m.Used) > 0 { @@ -8121,11 +8208,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n164, err := (&v).MarshalTo(dAtA[i:]) + n165, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n164 + i += n165 } } return i, nil @@ -8170,11 +8257,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n165, err := (&v).MarshalTo(dAtA[i:]) + n166, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n165 + i += n166 } } if len(m.Requests) > 0 { @@ -8201,11 +8288,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n166, err := (&v).MarshalTo(dAtA[i:]) + n167, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n166 + i += n167 } } return i, nil @@ -8245,6 +8332,78 @@ func (m *SELinuxOptions) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *ScaleIOPersistentVolumeSource) 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 *ScaleIOPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.Gateway))) + i += copy(dAtA[i:], m.Gateway) + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.System))) + i += copy(dAtA[i:], m.System) + if m.SecretRef != nil { + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) + n168, err := m.SecretRef.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n168 + } + dAtA[i] = 0x20 + i++ + if m.SSLEnabled { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + dAtA[i] = 0x2a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ProtectionDomain))) + i += copy(dAtA[i:], m.ProtectionDomain) + dAtA[i] = 0x32 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StoragePool))) + i += copy(dAtA[i:], m.StoragePool) + dAtA[i] = 0x3a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StorageMode))) + i += copy(dAtA[i:], m.StorageMode) + dAtA[i] = 0x42 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) + i += copy(dAtA[i:], m.VolumeName) + dAtA[i] = 0x4a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.FSType))) + i += copy(dAtA[i:], m.FSType) + dAtA[i] = 0x50 + i++ + if m.ReadOnly { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + return i, nil +} + func (m *ScaleIOVolumeSource) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8272,11 +8431,11 @@ func (m *ScaleIOVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n167, err := m.SecretRef.MarshalTo(dAtA[i:]) + n169, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n167 + i += n169 } dAtA[i] = 0x20 i++ @@ -8335,11 +8494,11 @@ func (m *Secret) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n168, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n170, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n168 + i += n170 if len(m.Data) > 0 { keysForData := make([]string, 0, len(m.Data)) for k := range m.Data { @@ -8415,11 +8574,11 @@ func (m *SecretEnvSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n169, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n171, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n169 + i += n171 if m.Optional != nil { dAtA[i] = 0x10 i++ @@ -8451,11 +8610,11 @@ func (m *SecretKeySelector) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n170, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n172, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n170 + i += n172 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) @@ -8491,11 +8650,11 @@ func (m *SecretList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n171, err := m.ListMeta.MarshalTo(dAtA[i:]) + n173, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n171 + i += n173 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8529,11 +8688,11 @@ func (m *SecretProjection) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n172, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n174, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n172 + i += n174 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8653,11 +8812,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Capabilities.Size())) - n173, err := m.Capabilities.MarshalTo(dAtA[i:]) + n175, err := m.Capabilities.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n173 + i += n175 } if m.Privileged != nil { dAtA[i] = 0x10 @@ -8673,11 +8832,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n174, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) + n176, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n174 + i += n176 } if m.RunAsUser != nil { dAtA[i] = 0x20 @@ -8735,11 +8894,11 @@ func (m *SerializedReference) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Reference.Size())) - n175, err := m.Reference.MarshalTo(dAtA[i:]) + n177, err := m.Reference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n175 + i += n177 return i, nil } @@ -8761,27 +8920,27 @@ func (m *Service) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n176, err := m.ObjectMeta.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n176 - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n177, err := m.Spec.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n177 - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n178, err := m.Status.MarshalTo(dAtA[i:]) + n178, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n178 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) + n179, err := m.Spec.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n179 + dAtA[i] = 0x1a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) + n180, err := m.Status.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n180 return i, nil } @@ -8803,11 +8962,11 @@ func (m *ServiceAccount) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n179, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n181, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n179 + i += n181 if len(m.Secrets) > 0 { for _, msg := range m.Secrets { dAtA[i] = 0x12 @@ -8863,11 +9022,11 @@ func (m *ServiceAccountList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n180, err := m.ListMeta.MarshalTo(dAtA[i:]) + n182, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n180 + i += n182 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8901,11 +9060,11 @@ func (m *ServiceList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n181, err := m.ListMeta.MarshalTo(dAtA[i:]) + n183, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n181 + i += n183 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8950,11 +9109,11 @@ func (m *ServicePort) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TargetPort.Size())) - n182, err := m.TargetPort.MarshalTo(dAtA[i:]) + n184, err := m.TargetPort.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n182 + i += n184 dAtA[i] = 0x28 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NodePort)) @@ -9101,11 +9260,11 @@ func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x72 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SessionAffinityConfig.Size())) - n183, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:]) + n185, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n183 + i += n185 } return i, nil } @@ -9128,11 +9287,11 @@ func (m *ServiceStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LoadBalancer.Size())) - n184, err := m.LoadBalancer.MarshalTo(dAtA[i:]) + n186, err := m.LoadBalancer.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n184 + i += n186 return i, nil } @@ -9155,11 +9314,11 @@ func (m *SessionAffinityConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ClientIP.Size())) - n185, err := m.ClientIP.MarshalTo(dAtA[i:]) + n187, err := m.ClientIP.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n185 + i += n187 } return i, nil } @@ -9203,11 +9362,11 @@ func (m *StorageOSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n186, err := m.SecretRef.MarshalTo(dAtA[i:]) + n188, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n186 + i += n188 } return i, nil } @@ -9251,11 +9410,11 @@ func (m *StorageOSVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n187, err := m.SecretRef.MarshalTo(dAtA[i:]) + n189, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n187 + i += n189 } return i, nil } @@ -9304,11 +9463,11 @@ func (m *TCPSocketAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n188, err := m.Port.MarshalTo(dAtA[i:]) + n190, err := m.Port.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n188 + i += n190 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) @@ -9343,14 +9502,16 @@ func (m *Taint) MarshalTo(dAtA []byte) (int, error) { i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Effect))) i += copy(dAtA[i:], m.Effect) - dAtA[i] = 0x22 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.TimeAdded.Size())) - n189, err := m.TimeAdded.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err + if m.TimeAdded != nil { + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.TimeAdded.Size())) + n191, err := m.TimeAdded.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n191 } - i += n189 return i, nil } @@ -9415,11 +9576,11 @@ func (m *Volume) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VolumeSource.Size())) - n190, err := m.VolumeSource.MarshalTo(dAtA[i:]) + n192, err := m.VolumeSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n190 + i += n192 return i, nil } @@ -9486,31 +9647,31 @@ func (m *VolumeProjection) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n191, err := m.Secret.MarshalTo(dAtA[i:]) + n193, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n191 + i += n193 } if m.DownwardAPI != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n192, err := m.DownwardAPI.MarshalTo(dAtA[i:]) + n194, err := m.DownwardAPI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n192 + i += n194 } if m.ConfigMap != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n193, err := m.ConfigMap.MarshalTo(dAtA[i:]) + n195, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n193 + i += n195 } return i, nil } @@ -9534,163 +9695,163 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size())) - n194, err := m.HostPath.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n194 - } - if m.EmptyDir != nil { - dAtA[i] = 0x12 - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size())) - n195, err := m.EmptyDir.MarshalTo(dAtA[i:]) - if err != nil { - return 0, err - } - i += n195 - } - if m.GCEPersistentDisk != nil { - dAtA[i] = 0x1a - i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) - n196, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) + n196, err := m.HostPath.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n196 } - if m.AWSElasticBlockStore != nil { - dAtA[i] = 0x22 + if m.EmptyDir != nil { + dAtA[i] = 0x12 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) - n197, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size())) + n197, err := m.EmptyDir.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n197 } - if m.GitRepo != nil { - dAtA[i] = 0x2a + if m.GCEPersistentDisk != nil { + dAtA[i] = 0x1a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size())) - n198, err := m.GitRepo.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) + n198, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n198 } - if m.Secret != nil { - dAtA[i] = 0x32 + if m.AWSElasticBlockStore != nil { + dAtA[i] = 0x22 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n199, err := m.Secret.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) + n199, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n199 } - if m.NFS != nil { - dAtA[i] = 0x3a + if m.GitRepo != nil { + dAtA[i] = 0x2a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) - n200, err := m.NFS.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size())) + n200, err := m.GitRepo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n200 } - if m.ISCSI != nil { - dAtA[i] = 0x42 + if m.Secret != nil { + dAtA[i] = 0x32 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) - n201, err := m.ISCSI.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) + n201, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n201 } - if m.Glusterfs != nil { - dAtA[i] = 0x4a + if m.NFS != nil { + dAtA[i] = 0x3a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) - n202, err := m.Glusterfs.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) + n202, err := m.NFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n202 } - if m.PersistentVolumeClaim != nil { - dAtA[i] = 0x52 + if m.ISCSI != nil { + dAtA[i] = 0x42 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size())) - n203, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) + n203, err := m.ISCSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n203 } - if m.RBD != nil { - dAtA[i] = 0x5a + if m.Glusterfs != nil { + dAtA[i] = 0x4a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) - n204, err := m.RBD.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) + n204, err := m.Glusterfs.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n204 } - if m.FlexVolume != nil { - dAtA[i] = 0x62 + if m.PersistentVolumeClaim != nil { + dAtA[i] = 0x52 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) - n205, err := m.FlexVolume.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size())) + n205, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n205 } - if m.Cinder != nil { - dAtA[i] = 0x6a + if m.RBD != nil { + dAtA[i] = 0x5a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) - n206, err := m.Cinder.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) + n206, err := m.RBD.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n206 } - if m.CephFS != nil { - dAtA[i] = 0x72 + if m.FlexVolume != nil { + dAtA[i] = 0x62 i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) - n207, err := m.CephFS.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) + n207, err := m.FlexVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n207 } - if m.Flocker != nil { - dAtA[i] = 0x7a + if m.Cinder != nil { + dAtA[i] = 0x6a i++ - i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) - n208, err := m.Flocker.MarshalTo(dAtA[i:]) + i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) + n208, err := m.Cinder.MarshalTo(dAtA[i:]) if err != nil { return 0, err } i += n208 } + if m.CephFS != nil { + dAtA[i] = 0x72 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) + n209, err := m.CephFS.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n209 + } + if m.Flocker != nil { + dAtA[i] = 0x7a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) + n210, err := m.Flocker.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n210 + } if m.DownwardAPI != nil { dAtA[i] = 0x82 i++ dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n209, err := m.DownwardAPI.MarshalTo(dAtA[i:]) + n211, err := m.DownwardAPI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n209 + i += n211 } if m.FC != nil { dAtA[i] = 0x8a @@ -9698,11 +9859,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size())) - n210, err := m.FC.MarshalTo(dAtA[i:]) + n212, err := m.FC.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n210 + i += n212 } if m.AzureFile != nil { dAtA[i] = 0x92 @@ -9710,11 +9871,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size())) - n211, err := m.AzureFile.MarshalTo(dAtA[i:]) + n213, err := m.AzureFile.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n211 + i += n213 } if m.ConfigMap != nil { dAtA[i] = 0x9a @@ -9722,11 +9883,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n212, err := m.ConfigMap.MarshalTo(dAtA[i:]) + n214, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n212 + i += n214 } if m.VsphereVolume != nil { dAtA[i] = 0xa2 @@ -9734,11 +9895,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size())) - n213, err := m.VsphereVolume.MarshalTo(dAtA[i:]) + n215, err := m.VsphereVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n213 + i += n215 } if m.Quobyte != nil { dAtA[i] = 0xaa @@ -9746,11 +9907,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size())) - n214, err := m.Quobyte.MarshalTo(dAtA[i:]) + n216, err := m.Quobyte.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n214 + i += n216 } if m.AzureDisk != nil { dAtA[i] = 0xb2 @@ -9758,11 +9919,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size())) - n215, err := m.AzureDisk.MarshalTo(dAtA[i:]) + n217, err := m.AzureDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n215 + i += n217 } if m.PhotonPersistentDisk != nil { dAtA[i] = 0xba @@ -9770,11 +9931,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size())) - n216, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) + n218, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n216 + i += n218 } if m.PortworxVolume != nil { dAtA[i] = 0xc2 @@ -9782,11 +9943,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size())) - n217, err := m.PortworxVolume.MarshalTo(dAtA[i:]) + n219, err := m.PortworxVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n217 + i += n219 } if m.ScaleIO != nil { dAtA[i] = 0xca @@ -9794,11 +9955,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size())) - n218, err := m.ScaleIO.MarshalTo(dAtA[i:]) + n220, err := m.ScaleIO.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n218 + i += n220 } if m.Projected != nil { dAtA[i] = 0xd2 @@ -9806,11 +9967,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Projected.Size())) - n219, err := m.Projected.MarshalTo(dAtA[i:]) + n221, err := m.Projected.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n219 + i += n221 } if m.StorageOS != nil { dAtA[i] = 0xda @@ -9818,11 +9979,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size())) - n220, err := m.StorageOS.MarshalTo(dAtA[i:]) + n222, err := m.StorageOS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n220 + i += n222 } return i, nil } @@ -9882,11 +10043,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodAffinityTerm.Size())) - n221, err := m.PodAffinityTerm.MarshalTo(dAtA[i:]) + n223, err := m.PodAffinityTerm.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n221 + i += n223 return i, nil } @@ -12240,6 +12401,33 @@ func (m *QuobyteVolumeSource) Size() (n int) { return n } +func (m *RBDPersistentVolumeSource) Size() (n int) { + var l int + _ = l + if len(m.CephMonitors) > 0 { + for _, s := range m.CephMonitors { + l = len(s) + n += 1 + l + sovGenerated(uint64(l)) + } + } + l = len(m.RBDImage) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RBDPool) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.RadosUser) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.Keyring) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + return n +} + func (m *RBDVolumeSource) Size() (n int) { var l int _ = l @@ -12483,6 +12671,32 @@ func (m *SELinuxOptions) Size() (n int) { return n } +func (m *ScaleIOPersistentVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.Gateway) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.System) + n += 1 + l + sovGenerated(uint64(l)) + if m.SecretRef != nil { + l = m.SecretRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + n += 2 + l = len(m.ProtectionDomain) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StoragePool) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StorageMode) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.VolumeName) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + func (m *ScaleIOVolumeSource) Size() (n int) { var l int _ = l @@ -12877,8 +13091,10 @@ func (m *Taint) Size() (n int) { n += 1 + l + sovGenerated(uint64(l)) l = len(m.Effect) n += 1 + l + sovGenerated(uint64(l)) - l = m.TimeAdded.Size() - n += 1 + l + sovGenerated(uint64(l)) + if m.TimeAdded != nil { + l = m.TimeAdded.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -14516,7 +14732,7 @@ func (this *PersistentVolumeSource) String() string { `HostPath:` + strings.Replace(fmt.Sprintf("%v", this.HostPath), "HostPathVolumeSource", "HostPathVolumeSource", 1) + `,`, `Glusterfs:` + strings.Replace(fmt.Sprintf("%v", this.Glusterfs), "GlusterfsVolumeSource", "GlusterfsVolumeSource", 1) + `,`, `NFS:` + strings.Replace(fmt.Sprintf("%v", this.NFS), "NFSVolumeSource", "NFSVolumeSource", 1) + `,`, - `RBD:` + strings.Replace(fmt.Sprintf("%v", this.RBD), "RBDVolumeSource", "RBDVolumeSource", 1) + `,`, + `RBD:` + strings.Replace(fmt.Sprintf("%v", this.RBD), "RBDPersistentVolumeSource", "RBDPersistentVolumeSource", 1) + `,`, `ISCSI:` + strings.Replace(fmt.Sprintf("%v", this.ISCSI), "ISCSIVolumeSource", "ISCSIVolumeSource", 1) + `,`, `Cinder:` + strings.Replace(fmt.Sprintf("%v", this.Cinder), "CinderVolumeSource", "CinderVolumeSource", 1) + `,`, `CephFS:` + strings.Replace(fmt.Sprintf("%v", this.CephFS), "CephFSPersistentVolumeSource", "CephFSPersistentVolumeSource", 1) + `,`, @@ -14529,7 +14745,7 @@ func (this *PersistentVolumeSource) String() string { `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, `PhotonPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.PhotonPersistentDisk), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`, `PortworxVolume:` + strings.Replace(fmt.Sprintf("%v", this.PortworxVolume), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`, - `ScaleIO:` + strings.Replace(fmt.Sprintf("%v", this.ScaleIO), "ScaleIOVolumeSource", "ScaleIOVolumeSource", 1) + `,`, + `ScaleIO:` + strings.Replace(fmt.Sprintf("%v", this.ScaleIO), "ScaleIOPersistentVolumeSource", "ScaleIOPersistentVolumeSource", 1) + `,`, `Local:` + strings.Replace(fmt.Sprintf("%v", this.Local), "LocalVolumeSource", "LocalVolumeSource", 1) + `,`, `StorageOS:` + strings.Replace(fmt.Sprintf("%v", this.StorageOS), "StorageOSPersistentVolumeSource", "StorageOSPersistentVolumeSource", 1) + `,`, `}`, @@ -14940,6 +15156,23 @@ func (this *QuobyteVolumeSource) String() string { }, "") return s } +func (this *RBDPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&RBDPersistentVolumeSource{`, + `CephMonitors:` + fmt.Sprintf("%v", this.CephMonitors) + `,`, + `RBDImage:` + fmt.Sprintf("%v", this.RBDImage) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `RBDPool:` + fmt.Sprintf("%v", this.RBDPool) + `,`, + `RadosUser:` + fmt.Sprintf("%v", this.RadosUser) + `,`, + `Keyring:` + fmt.Sprintf("%v", this.Keyring) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "SecretReference", 1) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} func (this *RBDVolumeSource) String() string { if this == nil { return "nil" @@ -15175,6 +15408,25 @@ func (this *SELinuxOptions) String() string { }, "") return s } +func (this *ScaleIOPersistentVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&ScaleIOPersistentVolumeSource{`, + `Gateway:` + fmt.Sprintf("%v", this.Gateway) + `,`, + `System:` + fmt.Sprintf("%v", this.System) + `,`, + `SecretRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretRef), "SecretReference", "SecretReference", 1) + `,`, + `SSLEnabled:` + fmt.Sprintf("%v", this.SSLEnabled) + `,`, + `ProtectionDomain:` + fmt.Sprintf("%v", this.ProtectionDomain) + `,`, + `StoragePool:` + fmt.Sprintf("%v", this.StoragePool) + `,`, + `StorageMode:` + fmt.Sprintf("%v", this.StorageMode) + `,`, + `VolumeName:` + fmt.Sprintf("%v", this.VolumeName) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} func (this *ScaleIOVolumeSource) String() string { if this == nil { return "nil" @@ -15504,7 +15756,7 @@ func (this *Taint) String() string { `Key:` + fmt.Sprintf("%v", this.Key) + `,`, `Value:` + fmt.Sprintf("%v", this.Value) + `,`, `Effect:` + fmt.Sprintf("%v", this.Effect) + `,`, - `TimeAdded:` + strings.Replace(strings.Replace(this.TimeAdded.String(), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1), `&`, ``, 1) + `,`, + `TimeAdded:` + strings.Replace(fmt.Sprintf("%v", this.TimeAdded), "Time", "k8s_io_apimachinery_pkg_apis_meta_v1.Time", 1) + `,`, `}`, }, "") return s @@ -32298,7 +32550,7 @@ func (m *PersistentVolumeSource) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.RBD == nil { - m.RBD = &RBDVolumeSource{} + m.RBD = &RBDPersistentVolumeSource{} } if err := m.RBD.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -32727,7 +32979,7 @@ func (m *PersistentVolumeSource) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } if m.ScaleIO == nil { - m.ScaleIO = &ScaleIOVolumeSource{} + m.ScaleIO = &ScaleIOPersistentVolumeSource{} } if err := m.ScaleIO.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err @@ -37864,6 +38116,283 @@ func (m *QuobyteVolumeSource) Unmarshal(dAtA []byte) error { } return nil } +func (m *RBDPersistentVolumeSource) 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: RBDPersistentVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: RBDPersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CephMonitors", 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.CephMonitors = append(m.CephMonitors, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RBDImage", 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.RBDImage = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", 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.FSType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RBDPool", 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.RBDPool = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field RadosUser", 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.RadosUser = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Keyring", 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.Keyring = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &SecretReference{} + } + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + 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 *RBDVolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -40481,6 +41010,332 @@ func (m *SELinuxOptions) Unmarshal(dAtA []byte) error { } return nil } +func (m *ScaleIOPersistentVolumeSource) 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: ScaleIOPersistentVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ScaleIOPersistentVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Gateway", 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.Gateway = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field System", 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.System = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretRef == nil { + m.SecretRef = &SecretReference{} + } + if err := m.SecretRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field SSLEnabled", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.SSLEnabled = bool(v != 0) + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProtectionDomain", 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.ProtectionDomain = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StoragePool", 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.StoragePool = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StorageMode", 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.StorageMode = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeName", 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.VolumeName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", 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.FSType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + 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 *ScaleIOVolumeSource) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -44365,6 +45220,9 @@ func (m *Taint) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } + if m.TimeAdded == nil { + m.TimeAdded = &k8s_io_apimachinery_pkg_apis_meta_v1.Time{} + } if err := m.TimeAdded.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } @@ -46337,745 +47195,749 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 11834 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x24, 0xd7, - 0x75, 0x18, 0xac, 0x9e, 0xc1, 0x6b, 0x0e, 0xde, 0x77, 0xb1, 0xe4, 0x10, 0x24, 0x17, 0xcb, 0xa6, - 0x44, 0x2e, 0x5f, 0x80, 0xb8, 0x24, 0x45, 0x5a, 0xa4, 0x68, 0x03, 0x18, 0x60, 0x17, 0xdc, 0xc5, - 0xee, 0xf0, 0x0e, 0x76, 0x69, 0x52, 0x34, 0x3f, 0x35, 0xa6, 0x2f, 0x80, 0x26, 0x1a, 0xdd, 0xc3, - 0xee, 0x1e, 0xec, 0x82, 0x65, 0x57, 0x7d, 0x51, 0x64, 0xe5, 0x21, 0xff, 0x70, 0x25, 0xaa, 0xc4, - 0xb1, 0x54, 0x4e, 0x55, 0x1e, 0x65, 0x2b, 0x4e, 0x52, 0x71, 0xe4, 0xd8, 0x8e, 0xe4, 0x54, 0x1c, - 0xe7, 0x51, 0xf2, 0x1f, 0xc5, 0xce, 0x1f, 0xa9, 0x2a, 0x15, 0xd8, 0x5a, 0xa5, 0x92, 0xf2, 0x8f, - 0xa4, 0x92, 0xf8, 0x97, 0x11, 0x27, 0x4a, 0xdd, 0x67, 0xdf, 0xdb, 0xd3, 0x3d, 0x33, 0x58, 0x62, - 0x41, 0x4a, 0xe5, 0x7f, 0x33, 0xe7, 0x9c, 0x7b, 0xee, 0xed, 0xfb, 0x38, 0xf7, 0xdc, 0x73, 0xcf, - 0x39, 0x17, 0x5e, 0xde, 0x7d, 0x29, 0x9e, 0xf7, 0xc2, 0x85, 0xdd, 0xf6, 0x26, 0x89, 0x02, 0x92, - 0x90, 0x78, 0x61, 0x9f, 0x04, 0x6e, 0x18, 0x2d, 0x08, 0x84, 0xd3, 0xf2, 0x16, 0x9a, 0x61, 0x44, - 0x16, 0xf6, 0x9f, 0x5d, 0xd8, 0x26, 0x01, 0x89, 0x9c, 0x84, 0xb8, 0xf3, 0xad, 0x28, 0x4c, 0x42, - 0x84, 0x38, 0xcd, 0xbc, 0xd3, 0xf2, 0xe6, 0x29, 0xcd, 0xfc, 0xfe, 0xb3, 0xb3, 0xcf, 0x6c, 0x7b, - 0xc9, 0x4e, 0x7b, 0x73, 0xbe, 0x19, 0xee, 0x2d, 0x6c, 0x87, 0xdb, 0xe1, 0x02, 0x23, 0xdd, 0x6c, - 0x6f, 0xb1, 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x59, 0xcc, 0xae, 0xa7, 0xd5, 0x90, 0xdb, 0x09, 0x09, - 0x62, 0x2f, 0x0c, 0xe2, 0x67, 0x9c, 0x96, 0x17, 0x93, 0x68, 0x9f, 0x44, 0x0b, 0xad, 0xdd, 0x6d, - 0x8a, 0x8b, 0x4d, 0x82, 0x85, 0xfd, 0x67, 0x37, 0x49, 0xe2, 0x74, 0xb4, 0x68, 0xf6, 0xf9, 0x94, - 0xdd, 0x9e, 0xd3, 0xdc, 0xf1, 0x02, 0x12, 0x1d, 0x48, 0x1e, 0x0b, 0x11, 0x89, 0xc3, 0x76, 0xd4, - 0x24, 0xc7, 0x2a, 0x15, 0x2f, 0xec, 0x91, 0xc4, 0xc9, 0xf9, 0xfa, 0xd9, 0x85, 0xa2, 0x52, 0x51, - 0x3b, 0x48, 0xbc, 0xbd, 0xce, 0x6a, 0x3e, 0xd5, 0xab, 0x40, 0xdc, 0xdc, 0x21, 0x7b, 0x4e, 0x47, - 0xb9, 0xe7, 0x8a, 0xca, 0xb5, 0x13, 0xcf, 0x5f, 0xf0, 0x82, 0x24, 0x4e, 0xa2, 0x6c, 0x21, 0xfb, - 0x3b, 0x16, 0x9c, 0x5f, 0x7c, 0xa3, 0xb1, 0xe2, 0x3b, 0x71, 0xe2, 0x35, 0x97, 0xfc, 0xb0, 0xb9, - 0xdb, 0x48, 0xc2, 0x88, 0xdc, 0x0c, 0xfd, 0xf6, 0x1e, 0x69, 0xb0, 0x8e, 0x40, 0x4f, 0xc3, 0xc8, - 0x3e, 0xfb, 0xbf, 0x56, 0xab, 0x5a, 0xe7, 0xad, 0x0b, 0x95, 0xa5, 0xa9, 0x6f, 0x1d, 0xce, 0x7d, - 0xec, 0xce, 0xe1, 0xdc, 0xc8, 0x4d, 0x01, 0xc7, 0x8a, 0x02, 0x3d, 0x06, 0x43, 0x5b, 0xf1, 0xc6, - 0x41, 0x8b, 0x54, 0x4b, 0x8c, 0x76, 0x42, 0xd0, 0x0e, 0xad, 0x36, 0x28, 0x14, 0x0b, 0x2c, 0x5a, - 0x80, 0x4a, 0xcb, 0x89, 0x12, 0x2f, 0xf1, 0xc2, 0xa0, 0x5a, 0x3e, 0x6f, 0x5d, 0x18, 0x5c, 0x9a, - 0x16, 0xa4, 0x95, 0xba, 0x44, 0xe0, 0x94, 0x86, 0x36, 0x23, 0x22, 0x8e, 0x7b, 0x3d, 0xf0, 0x0f, - 0xaa, 0x03, 0xe7, 0xad, 0x0b, 0x23, 0x69, 0x33, 0xb0, 0x80, 0x63, 0x45, 0x61, 0xff, 0x62, 0x09, - 0x46, 0x16, 0xb7, 0xb6, 0xbc, 0xc0, 0x4b, 0x0e, 0xd0, 0x4d, 0x18, 0x0b, 0x42, 0x97, 0xc8, 0xff, - 0xec, 0x2b, 0x46, 0x2f, 0x9e, 0x9f, 0xef, 0x9c, 0x99, 0xf3, 0xd7, 0x34, 0xba, 0xa5, 0xa9, 0x3b, - 0x87, 0x73, 0x63, 0x3a, 0x04, 0x1b, 0x7c, 0x10, 0x86, 0xd1, 0x56, 0xe8, 0x2a, 0xb6, 0x25, 0xc6, - 0x76, 0x2e, 0x8f, 0x6d, 0x3d, 0x25, 0x5b, 0x9a, 0xbc, 0x73, 0x38, 0x37, 0xaa, 0x01, 0xb0, 0xce, - 0x04, 0x6d, 0xc2, 0x24, 0xfd, 0x1b, 0x24, 0x9e, 0xe2, 0x5b, 0x66, 0x7c, 0x1f, 0x2d, 0xe2, 0xab, - 0x91, 0x2e, 0x9d, 0xb9, 0x73, 0x38, 0x37, 0x99, 0x01, 0xe2, 0x2c, 0x43, 0xfb, 0x7d, 0x98, 0x58, - 0x4c, 0x12, 0xa7, 0xb9, 0x43, 0x5c, 0x3e, 0x82, 0xe8, 0x79, 0x18, 0x08, 0x9c, 0x3d, 0x22, 0xc6, - 0xf7, 0xbc, 0xe8, 0xd8, 0x81, 0x6b, 0xce, 0x1e, 0x39, 0x3a, 0x9c, 0x9b, 0xba, 0x11, 0x78, 0xef, - 0xb5, 0xc5, 0xac, 0xa0, 0x30, 0xcc, 0xa8, 0xd1, 0x45, 0x00, 0x97, 0xec, 0x7b, 0x4d, 0x52, 0x77, - 0x92, 0x1d, 0x31, 0xde, 0x48, 0x94, 0x85, 0x9a, 0xc2, 0x60, 0x8d, 0xca, 0xbe, 0x0d, 0x95, 0xc5, - 0xfd, 0xd0, 0x73, 0xeb, 0xa1, 0x1b, 0xa3, 0x5d, 0x98, 0x6c, 0x45, 0x64, 0x8b, 0x44, 0x0a, 0x54, - 0xb5, 0xce, 0x97, 0x2f, 0x8c, 0x5e, 0xbc, 0x90, 0xfb, 0xb1, 0x26, 0xe9, 0x4a, 0x90, 0x44, 0x07, - 0x4b, 0xf7, 0x8b, 0xfa, 0x26, 0x33, 0x58, 0x9c, 0xe5, 0x6c, 0xff, 0x9b, 0x12, 0x9c, 0x5d, 0x7c, - 0xbf, 0x1d, 0x91, 0x9a, 0x17, 0xef, 0x66, 0x67, 0xb8, 0xeb, 0xc5, 0xbb, 0xd7, 0xd2, 0x1e, 0x50, - 0x53, 0xab, 0x26, 0xe0, 0x58, 0x51, 0xa0, 0x67, 0x60, 0x98, 0xfe, 0xbe, 0x81, 0xd7, 0xc4, 0x27, - 0x9f, 0x11, 0xc4, 0xa3, 0x35, 0x27, 0x71, 0x6a, 0x1c, 0x85, 0x25, 0x0d, 0x5a, 0x87, 0xd1, 0x26, - 0x5b, 0x90, 0xdb, 0xeb, 0xa1, 0x4b, 0xd8, 0x60, 0x56, 0x96, 0x9e, 0xa2, 0xe4, 0xcb, 0x29, 0xf8, - 0xe8, 0x70, 0xae, 0xca, 0xdb, 0x26, 0x58, 0x68, 0x38, 0xac, 0x97, 0x47, 0xb6, 0x5a, 0x5f, 0x03, - 0x8c, 0x13, 0xe4, 0xac, 0xad, 0x0b, 0xda, 0x52, 0x19, 0x64, 0x4b, 0x65, 0x2c, 0x7f, 0x99, 0xa0, - 0x67, 0x61, 0x60, 0xd7, 0x0b, 0xdc, 0xea, 0x10, 0xe3, 0xf5, 0x30, 0x1d, 0xf3, 0x2b, 0x5e, 0xe0, - 0x1e, 0x1d, 0xce, 0x4d, 0x1b, 0xcd, 0xa1, 0x40, 0xcc, 0x48, 0xed, 0x3f, 0xb1, 0x60, 0x8e, 0xe1, - 0x56, 0x3d, 0x9f, 0xd4, 0x49, 0x14, 0x7b, 0x71, 0x42, 0x82, 0xc4, 0xe8, 0xd0, 0x8b, 0x00, 0x31, - 0x69, 0x46, 0x24, 0xd1, 0xba, 0x54, 0x4d, 0x8c, 0x86, 0xc2, 0x60, 0x8d, 0x8a, 0x0a, 0x84, 0x78, - 0xc7, 0x89, 0xd8, 0xfc, 0x12, 0x1d, 0xab, 0x04, 0x42, 0x43, 0x22, 0x70, 0x4a, 0x63, 0x08, 0x84, - 0x72, 0x2f, 0x81, 0x80, 0x3e, 0x03, 0x93, 0x69, 0x65, 0x71, 0xcb, 0x69, 0xca, 0x0e, 0x64, 0x4b, - 0xa6, 0x61, 0xa2, 0x70, 0x96, 0xd6, 0xfe, 0x07, 0x96, 0x98, 0x3c, 0xf4, 0xab, 0x3f, 0xe2, 0xdf, - 0x6a, 0xff, 0x96, 0x05, 0xc3, 0x4b, 0x5e, 0xe0, 0x7a, 0xc1, 0x36, 0xfa, 0x1c, 0x8c, 0xd0, 0xbd, - 0xc9, 0x75, 0x12, 0x47, 0xc8, 0xbd, 0x4f, 0x6a, 0x6b, 0x4b, 0x6d, 0x15, 0xf3, 0xad, 0xdd, 0x6d, - 0x0a, 0x88, 0xe7, 0x29, 0x35, 0x5d, 0x6d, 0xd7, 0x37, 0xdf, 0x25, 0xcd, 0x64, 0x9d, 0x24, 0x4e, - 0xfa, 0x39, 0x29, 0x0c, 0x2b, 0xae, 0xe8, 0x0a, 0x0c, 0x25, 0x4e, 0xb4, 0x4d, 0x12, 0x21, 0x00, - 0x73, 0x05, 0x15, 0x2f, 0x89, 0xe9, 0x8a, 0x24, 0x41, 0x93, 0xa4, 0xdb, 0xc2, 0x06, 0x2b, 0x8a, - 0x05, 0x0b, 0xbb, 0x09, 0x63, 0xcb, 0x4e, 0xcb, 0xd9, 0xf4, 0x7c, 0x2f, 0xf1, 0x48, 0x8c, 0x1e, - 0x87, 0xb2, 0xe3, 0xba, 0x4c, 0x2a, 0x54, 0x96, 0xce, 0xde, 0x39, 0x9c, 0x2b, 0x2f, 0xba, 0x74, - 0x7a, 0x82, 0xa2, 0x3a, 0xc0, 0x94, 0x02, 0x3d, 0x09, 0x03, 0x6e, 0x14, 0xb6, 0xaa, 0x25, 0x46, - 0x79, 0x1f, 0x9d, 0xc9, 0xb5, 0x28, 0x6c, 0x65, 0x48, 0x19, 0x8d, 0xfd, 0x3b, 0x25, 0x78, 0x68, - 0x99, 0xb4, 0x76, 0x56, 0x1b, 0x05, 0xf3, 0xf7, 0x02, 0x8c, 0xec, 0x85, 0x81, 0x97, 0x84, 0x51, - 0x2c, 0xaa, 0x66, 0x0b, 0x68, 0x5d, 0xc0, 0xb0, 0xc2, 0xa2, 0xf3, 0x30, 0xd0, 0x4a, 0x85, 0xdf, - 0x98, 0x14, 0x9c, 0x4c, 0xec, 0x31, 0x0c, 0xa5, 0x68, 0xc7, 0x24, 0x12, 0x0b, 0x5f, 0x51, 0xdc, - 0x88, 0x49, 0x84, 0x19, 0x26, 0x9d, 0x41, 0x74, 0x6e, 0x89, 0x59, 0x99, 0x99, 0x41, 0x14, 0x83, - 0x35, 0x2a, 0x54, 0x87, 0x0a, 0xff, 0x87, 0xc9, 0x16, 0x5b, 0xe3, 0x05, 0xfd, 0xde, 0x90, 0x44, - 0xa2, 0xdf, 0xc7, 0xd9, 0x14, 0x93, 0x40, 0x9c, 0x32, 0x31, 0xa6, 0xd8, 0x50, 0xcf, 0x29, 0xf6, - 0xcd, 0x12, 0x20, 0xde, 0x85, 0x3f, 0x64, 0x1d, 0x77, 0xa3, 0xb3, 0xe3, 0x72, 0x37, 0x9b, 0xab, - 0x61, 0xd3, 0xf1, 0xb3, 0xb3, 0xf6, 0xa4, 0x7a, 0xef, 0x17, 0x2c, 0x40, 0xcb, 0x5e, 0xe0, 0x92, - 0xe8, 0x14, 0x34, 0xad, 0xe3, 0xc9, 0x8e, 0xab, 0x30, 0xb1, 0xec, 0x7b, 0x24, 0x48, 0xd6, 0xea, - 0xcb, 0x61, 0xb0, 0xe5, 0x6d, 0xa3, 0x4f, 0xc3, 0x04, 0x55, 0x3c, 0xc3, 0x76, 0xd2, 0x20, 0xcd, - 0x30, 0x60, 0x7b, 0x34, 0x55, 0xd7, 0xd0, 0x9d, 0xc3, 0xb9, 0x89, 0x0d, 0x03, 0x83, 0x33, 0x94, - 0xf6, 0x7f, 0xa4, 0x1f, 0x1a, 0xee, 0xb5, 0xc2, 0x80, 0x04, 0xc9, 0x72, 0x18, 0xb8, 0x5c, 0x97, - 0xfb, 0x34, 0x0c, 0x24, 0xb4, 0xe1, 0xfc, 0x23, 0x1f, 0x93, 0x43, 0x4b, 0x9b, 0x7b, 0x74, 0x38, - 0x77, 0x5f, 0x67, 0x09, 0xf6, 0x41, 0xac, 0x0c, 0xfa, 0x31, 0x18, 0x8a, 0x13, 0x27, 0x69, 0xc7, - 0xe2, 0xb3, 0x1f, 0x91, 0x9f, 0xdd, 0x60, 0xd0, 0xa3, 0xc3, 0xb9, 0x49, 0x55, 0x8c, 0x83, 0xb0, - 0x28, 0x80, 0x9e, 0x80, 0xe1, 0x3d, 0x12, 0xc7, 0xce, 0xb6, 0xdc, 0x86, 0x27, 0x45, 0xd9, 0xe1, - 0x75, 0x0e, 0xc6, 0x12, 0x8f, 0x1e, 0x85, 0x41, 0x12, 0x45, 0x61, 0x24, 0x66, 0xd5, 0xb8, 0x20, - 0x1c, 0x5c, 0xa1, 0x40, 0xcc, 0x71, 0xf6, 0xbf, 0xb7, 0x60, 0x52, 0xb5, 0x95, 0xd7, 0x75, 0x0a, - 0xf2, 0xf6, 0x2d, 0x80, 0xa6, 0xfc, 0xc0, 0x98, 0xc9, 0xbb, 0xd1, 0x8b, 0x8f, 0xe5, 0x4d, 0xe1, - 0xce, 0x6e, 0x4c, 0x39, 0x2b, 0x50, 0x8c, 0x35, 0x6e, 0xf6, 0xbf, 0xb0, 0xe0, 0x4c, 0xe6, 0x8b, - 0xae, 0x7a, 0x71, 0x82, 0xde, 0xee, 0xf8, 0xaa, 0xf9, 0xfe, 0xbe, 0x8a, 0x96, 0x66, 0xdf, 0xa4, - 0xe6, 0x9c, 0x84, 0x68, 0x5f, 0x74, 0x19, 0x06, 0xbd, 0x84, 0xec, 0xc9, 0x8f, 0x79, 0xb4, 0xeb, - 0xc7, 0xf0, 0x56, 0xa5, 0x23, 0xb2, 0x46, 0x4b, 0x62, 0xce, 0xc0, 0xfe, 0x9f, 0x16, 0x54, 0xf8, - 0xb4, 0x5d, 0x77, 0x5a, 0xa7, 0x30, 0x16, 0x6b, 0x30, 0xc0, 0xb8, 0xf3, 0x86, 0x3f, 0x9e, 0xdf, - 0x70, 0xd1, 0x9c, 0x79, 0xaa, 0x4c, 0x71, 0xa5, 0x55, 0x09, 0x33, 0x0a, 0xc2, 0x8c, 0xc5, 0xec, - 0x8b, 0x50, 0x51, 0x04, 0x68, 0x0a, 0xca, 0xbb, 0x84, 0x1f, 0x54, 0x2a, 0x98, 0xfe, 0x44, 0x33, - 0x30, 0xb8, 0xef, 0xf8, 0x6d, 0xb1, 0xd8, 0x31, 0xff, 0xf3, 0xe9, 0xd2, 0x4b, 0x96, 0xfd, 0x0d, - 0xb6, 0xc6, 0x44, 0x25, 0x2b, 0xc1, 0xbe, 0x10, 0x26, 0xef, 0xc3, 0x8c, 0x9f, 0x23, 0xc3, 0x44, - 0x47, 0xf4, 0x2f, 0xf3, 0x1e, 0x12, 0x6d, 0x9d, 0xc9, 0xc3, 0xe2, 0xdc, 0x3a, 0xe8, 0x36, 0x10, - 0xb6, 0xe8, 0x8c, 0x72, 0x7c, 0xd6, 0x5e, 0xa1, 0x80, 0x5e, 0x17, 0x30, 0xac, 0xb0, 0x54, 0x40, - 0xcc, 0xa8, 0xc6, 0x5f, 0x21, 0x07, 0x0d, 0xe2, 0x93, 0x66, 0x12, 0x46, 0x1f, 0x6a, 0xf3, 0x1f, - 0xe6, 0xbd, 0xcf, 0xe5, 0xcb, 0xa8, 0x60, 0x50, 0xbe, 0x42, 0x0e, 0xf8, 0x50, 0xe8, 0x5f, 0x57, - 0xee, 0xfa, 0x75, 0xbf, 0x66, 0xc1, 0xb8, 0xfa, 0xba, 0x53, 0x58, 0x48, 0x4b, 0xe6, 0x42, 0x7a, - 0xb8, 0xeb, 0x7c, 0x2c, 0x58, 0x42, 0x3f, 0x60, 0x22, 0x40, 0xd0, 0xd4, 0xa3, 0x90, 0x76, 0x0d, - 0x95, 0xd9, 0x1f, 0xe6, 0x80, 0xf4, 0xf3, 0x5d, 0x57, 0xc8, 0xc1, 0x46, 0x48, 0xd5, 0x87, 0xfc, - 0xef, 0x32, 0x46, 0x6d, 0xa0, 0xeb, 0xa8, 0xfd, 0x7a, 0x09, 0xce, 0xaa, 0x1e, 0x30, 0x36, 0xe8, - 0x1f, 0xf6, 0x3e, 0x78, 0x16, 0x46, 0x5d, 0xb2, 0xe5, 0xb4, 0xfd, 0x44, 0x9d, 0x45, 0x07, 0xb9, - 0x3d, 0xa2, 0x96, 0x82, 0xb1, 0x4e, 0x73, 0x8c, 0x6e, 0xfb, 0xb7, 0xc0, 0x64, 0x6f, 0xe2, 0xd0, - 0x19, 0x4c, 0xb5, 0x37, 0xcd, 0xa2, 0x30, 0xa6, 0x5b, 0x14, 0x84, 0xf5, 0xe0, 0x51, 0x18, 0xf4, - 0xf6, 0xe8, 0x5e, 0x5c, 0x32, 0xb7, 0xd8, 0x35, 0x0a, 0xc4, 0x1c, 0x87, 0x3e, 0x01, 0xc3, 0xcd, - 0x70, 0x6f, 0xcf, 0x09, 0xdc, 0x6a, 0x99, 0xe9, 0x93, 0xa3, 0x74, 0xbb, 0x5e, 0xe6, 0x20, 0x2c, - 0x71, 0xe8, 0x21, 0x18, 0x70, 0xa2, 0xed, 0xb8, 0x3a, 0xc0, 0x68, 0x46, 0x68, 0x4d, 0x8b, 0xd1, - 0x76, 0x8c, 0x19, 0x94, 0xea, 0x89, 0xb7, 0xc2, 0x68, 0xd7, 0x0b, 0xb6, 0x6b, 0x5e, 0xc4, 0x94, - 0x3e, 0x4d, 0x4f, 0x7c, 0x43, 0x61, 0xb0, 0x46, 0x85, 0x56, 0x61, 0xb0, 0x15, 0x46, 0x49, 0x5c, - 0x1d, 0x62, 0xdd, 0xfd, 0x48, 0xc1, 0x52, 0xe2, 0x5f, 0x5b, 0x0f, 0xa3, 0x24, 0xfd, 0x00, 0xfa, - 0x2f, 0xc6, 0xbc, 0x38, 0xfa, 0x31, 0x28, 0x93, 0x60, 0xbf, 0x3a, 0xcc, 0xb8, 0xcc, 0xe6, 0x71, - 0x59, 0x09, 0xf6, 0x6f, 0x3a, 0x51, 0x2a, 0x67, 0x56, 0x82, 0x7d, 0x4c, 0xcb, 0xa0, 0x37, 0xa1, - 0x22, 0xad, 0x91, 0x71, 0x75, 0xa4, 0x78, 0x8a, 0x61, 0x41, 0x84, 0xc9, 0x7b, 0x6d, 0x2f, 0x22, - 0x7b, 0x24, 0x48, 0xe2, 0xf4, 0x3c, 0x29, 0xb1, 0x31, 0x4e, 0xb9, 0xa1, 0x37, 0x61, 0x8c, 0xeb, - 0x91, 0xeb, 0x61, 0x3b, 0x48, 0xe2, 0x6a, 0x85, 0x35, 0x2f, 0xd7, 0x74, 0x75, 0x33, 0xa5, 0x5b, - 0x9a, 0x11, 0x4c, 0xc7, 0x34, 0x60, 0x8c, 0x0d, 0x56, 0x08, 0xc3, 0xb8, 0xef, 0xed, 0x93, 0x80, - 0xc4, 0x71, 0x3d, 0x0a, 0x37, 0x49, 0x15, 0x58, 0xcb, 0x1f, 0xc8, 0xb7, 0xe8, 0x84, 0x9b, 0x64, - 0x69, 0xfa, 0xce, 0xe1, 0xdc, 0xf8, 0x55, 0xbd, 0x0c, 0x36, 0x59, 0xa0, 0x1b, 0x30, 0x41, 0x15, - 0x54, 0x2f, 0x65, 0x3a, 0xda, 0x8b, 0x29, 0xd3, 0x4e, 0xb1, 0x51, 0x08, 0x67, 0x98, 0xa0, 0xd7, - 0xa0, 0xe2, 0x7b, 0x5b, 0xa4, 0x79, 0xd0, 0xf4, 0x49, 0x75, 0x8c, 0x71, 0xcc, 0x5d, 0x56, 0x57, - 0x25, 0x11, 0x3f, 0x00, 0xa8, 0xbf, 0x38, 0x2d, 0x8e, 0x6e, 0xc2, 0x7d, 0x09, 0x89, 0xf6, 0xbc, - 0xc0, 0xa1, 0xcb, 0x41, 0xe8, 0x93, 0xcc, 0x2e, 0x36, 0xce, 0xe6, 0xdb, 0x39, 0xd1, 0x75, 0xf7, - 0x6d, 0xe4, 0x52, 0xe1, 0x82, 0xd2, 0xe8, 0x3a, 0x4c, 0xb2, 0x95, 0x50, 0x6f, 0xfb, 0x7e, 0x3d, - 0xf4, 0xbd, 0xe6, 0x41, 0x75, 0x82, 0x31, 0xfc, 0x84, 0x34, 0x7c, 0xad, 0x99, 0x68, 0x7a, 0xe2, - 0x4d, 0xff, 0xe1, 0x6c, 0x69, 0xb4, 0xc9, 0x0c, 0x21, 0xed, 0xc8, 0x4b, 0x0e, 0xe8, 0xfc, 0x25, - 0xb7, 0x93, 0xea, 0x64, 0xd7, 0xf3, 0xa3, 0x4e, 0xaa, 0xac, 0x25, 0x3a, 0x10, 0x67, 0x19, 0xd2, - 0xa5, 0x1d, 0x27, 0xae, 0x17, 0x54, 0xa7, 0x98, 0xc4, 0x50, 0x2b, 0xa3, 0x41, 0x81, 0x98, 0xe3, - 0x98, 0x11, 0x84, 0xfe, 0xb8, 0x4e, 0x25, 0xe8, 0x34, 0x23, 0x4c, 0x8d, 0x20, 0x12, 0x81, 0x53, - 0x1a, 0xba, 0x2d, 0x27, 0xc9, 0x41, 0x15, 0x31, 0x52, 0xb5, 0x5c, 0x36, 0x36, 0xde, 0xc4, 0x14, - 0x8e, 0xae, 0xc2, 0x30, 0x09, 0xf6, 0x57, 0xa3, 0x70, 0xaf, 0x7a, 0xa6, 0x78, 0xcd, 0xae, 0x70, - 0x12, 0x2e, 0xd0, 0xd3, 0x03, 0x80, 0x00, 0x63, 0xc9, 0x02, 0xdd, 0x86, 0x6a, 0xce, 0x88, 0xf0, - 0x01, 0x98, 0x61, 0x03, 0xf0, 0x8a, 0x28, 0x5b, 0xdd, 0x28, 0xa0, 0x3b, 0xea, 0x82, 0xc3, 0x85, - 0xdc, 0xed, 0x4d, 0x98, 0x50, 0x82, 0x85, 0x8d, 0x2d, 0x9a, 0x83, 0x41, 0x2a, 0x31, 0xe5, 0x91, - 0xba, 0x42, 0xbb, 0x92, 0x99, 0xa6, 0x30, 0x87, 0xb3, 0xae, 0xf4, 0xde, 0x27, 0x4b, 0x07, 0x09, - 0xe1, 0xc7, 0xa2, 0xb2, 0xd6, 0x95, 0x12, 0x81, 0x53, 0x1a, 0xfb, 0xff, 0x72, 0xc5, 0x24, 0x95, - 0x5e, 0x7d, 0xc8, 0xeb, 0xa7, 0x61, 0x64, 0x27, 0x8c, 0x13, 0x4a, 0xcd, 0xea, 0x18, 0x4c, 0x55, - 0x91, 0xcb, 0x02, 0x8e, 0x15, 0x05, 0x7a, 0x19, 0xc6, 0x9b, 0x7a, 0x05, 0x62, 0xb3, 0x39, 0x2b, - 0x8a, 0x98, 0xb5, 0x63, 0x93, 0x16, 0xbd, 0x04, 0x23, 0xec, 0x82, 0xa2, 0x19, 0xfa, 0xe2, 0x00, - 0x26, 0x77, 0xcc, 0x91, 0xba, 0x80, 0x1f, 0x69, 0xbf, 0xb1, 0xa2, 0xa6, 0x87, 0x62, 0xda, 0x84, - 0xb5, 0xba, 0x10, 0xf3, 0xea, 0x50, 0x7c, 0x99, 0x41, 0xb1, 0xc0, 0xda, 0x7f, 0xad, 0xa4, 0xf5, - 0x32, 0x3d, 0x52, 0x10, 0x54, 0x87, 0xe1, 0x5b, 0x8e, 0x97, 0x78, 0xc1, 0xb6, 0xd8, 0xcf, 0x9f, - 0xe8, 0x2a, 0xf3, 0x59, 0xa1, 0x37, 0x78, 0x01, 0xbe, 0x2b, 0x89, 0x3f, 0x58, 0xb2, 0xa1, 0x1c, - 0xa3, 0x76, 0x10, 0x50, 0x8e, 0xa5, 0x7e, 0x39, 0x62, 0x5e, 0x80, 0x73, 0x14, 0x7f, 0xb0, 0x64, - 0x83, 0xde, 0x06, 0x90, 0xf3, 0x86, 0xb8, 0xe2, 0x62, 0xe0, 0xe9, 0xde, 0x4c, 0x37, 0x54, 0x99, - 0xa5, 0x09, 0xba, 0xe7, 0xa5, 0xff, 0xb1, 0xc6, 0xcf, 0x4e, 0x98, 0xde, 0xd3, 0xd9, 0x18, 0xf4, - 0x59, 0xba, 0x54, 0x9d, 0x28, 0x21, 0xee, 0x62, 0x22, 0x3a, 0xe7, 0xc9, 0xfe, 0xd4, 0xd6, 0x0d, - 0x6f, 0x8f, 0xe8, 0xcb, 0x5a, 0x30, 0xc1, 0x29, 0x3f, 0xfb, 0x37, 0xcb, 0x50, 0x2d, 0x6a, 0x2e, - 0x9d, 0x74, 0xe4, 0xb6, 0x97, 0x2c, 0x53, 0x75, 0xc5, 0x32, 0x27, 0xdd, 0x8a, 0x80, 0x63, 0x45, - 0x41, 0x47, 0x3f, 0xf6, 0xb6, 0xe5, 0xa9, 0x63, 0x30, 0x1d, 0xfd, 0x06, 0x83, 0x62, 0x81, 0xa5, - 0x74, 0x11, 0x71, 0x62, 0x71, 0xf3, 0xa4, 0xcd, 0x12, 0xcc, 0xa0, 0x58, 0x60, 0x75, 0x83, 0xc1, - 0x40, 0x0f, 0x83, 0x81, 0xd1, 0x45, 0x83, 0x27, 0xdb, 0x45, 0xe8, 0x1d, 0x80, 0x2d, 0x2f, 0xf0, - 0xe2, 0x1d, 0xc6, 0x7d, 0xe8, 0xd8, 0xdc, 0x95, 0xb2, 0xb3, 0xaa, 0xb8, 0x60, 0x8d, 0x23, 0x7a, - 0x01, 0x46, 0xd5, 0x02, 0x5c, 0xab, 0x55, 0x87, 0xcd, 0x6b, 0x8d, 0x54, 0x1a, 0xd5, 0xb0, 0x4e, - 0x67, 0xbf, 0x9b, 0x9d, 0x2f, 0x62, 0x05, 0x68, 0xfd, 0x6b, 0xf5, 0xdb, 0xbf, 0xa5, 0xee, 0xfd, - 0x6b, 0xff, 0x6e, 0x19, 0x26, 0x8d, 0xca, 0xda, 0x71, 0x1f, 0x32, 0xeb, 0x12, 0xdd, 0x88, 0x9c, - 0x84, 0x88, 0xf5, 0x67, 0xf7, 0x5e, 0x2a, 0xfa, 0x66, 0x45, 0x57, 0x00, 0x2f, 0x8f, 0xde, 0x81, - 0x8a, 0xef, 0xc4, 0xcc, 0xf8, 0x40, 0xc4, 0xba, 0xeb, 0x87, 0x59, 0xaa, 0xe8, 0x3b, 0x71, 0xa2, - 0xed, 0x05, 0x9c, 0x77, 0xca, 0x92, 0xee, 0x98, 0x54, 0x39, 0x91, 0x57, 0x9b, 0xaa, 0x11, 0x54, - 0x83, 0x39, 0xc0, 0x1c, 0x87, 0x5e, 0x82, 0xb1, 0x88, 0xb0, 0x59, 0xb1, 0x4c, 0x75, 0x2d, 0x36, - 0xcd, 0x06, 0x53, 0xa5, 0x0c, 0x6b, 0x38, 0x6c, 0x50, 0xa6, 0xba, 0xf6, 0x50, 0x17, 0x5d, 0xfb, - 0x09, 0x18, 0x66, 0x3f, 0xd4, 0x0c, 0x50, 0xa3, 0xb1, 0xc6, 0xc1, 0x58, 0xe2, 0xb3, 0x13, 0x66, - 0xa4, 0xcf, 0x09, 0xf3, 0x24, 0x4c, 0xd4, 0x1c, 0xb2, 0x17, 0x06, 0x2b, 0x81, 0xdb, 0x0a, 0xbd, - 0x20, 0x41, 0x55, 0x18, 0x60, 0xbb, 0x03, 0x5f, 0xdb, 0x03, 0x94, 0x03, 0x1e, 0xa0, 0x9a, 0xb3, - 0xfd, 0x07, 0x25, 0x18, 0xaf, 0x11, 0x9f, 0x24, 0x84, 0x9f, 0x35, 0x62, 0xb4, 0x0a, 0x68, 0x3b, - 0x72, 0x9a, 0xa4, 0x4e, 0x22, 0x2f, 0x74, 0x75, 0x63, 0x64, 0x99, 0x19, 0xfc, 0xd1, 0xa5, 0x0e, - 0x2c, 0xce, 0x29, 0x81, 0xde, 0x82, 0xf1, 0x56, 0x44, 0x0c, 0x1b, 0x9a, 0x55, 0xa4, 0x2e, 0xd4, - 0x75, 0x42, 0xae, 0xa9, 0x1a, 0x20, 0x6c, 0xb2, 0x42, 0x3f, 0x01, 0x53, 0x61, 0xd4, 0xda, 0x71, - 0x82, 0x1a, 0x69, 0x91, 0xc0, 0xa5, 0xaa, 0xb8, 0xb0, 0x11, 0xcc, 0xdc, 0x39, 0x9c, 0x9b, 0xba, - 0x9e, 0xc1, 0xe1, 0x0e, 0x6a, 0xf4, 0x16, 0x4c, 0xb7, 0xa2, 0xb0, 0xe5, 0x6c, 0xb3, 0x89, 0x22, - 0x34, 0x0e, 0x2e, 0x7d, 0x9e, 0xbe, 0x73, 0x38, 0x37, 0x5d, 0xcf, 0x22, 0x8f, 0x0e, 0xe7, 0xce, - 0xb0, 0x8e, 0xa2, 0x90, 0x14, 0x89, 0x3b, 0xd9, 0xd8, 0xdb, 0x70, 0xb6, 0x16, 0xde, 0x0a, 0x6e, - 0x39, 0x91, 0xbb, 0x58, 0x5f, 0xd3, 0x0e, 0xf7, 0xd7, 0xe4, 0xe1, 0x92, 0x5f, 0xbf, 0xe6, 0xee, - 0x53, 0x5a, 0x49, 0xae, 0xfe, 0xaf, 0x7a, 0x3e, 0x29, 0x30, 0x22, 0xfc, 0xcd, 0x92, 0x51, 0x53, - 0x4a, 0xaf, 0xec, 0xfe, 0x56, 0xa1, 0xdd, 0xff, 0x75, 0x18, 0xd9, 0xf2, 0x88, 0xef, 0x62, 0xb2, - 0x25, 0x46, 0xe6, 0xf1, 0xe2, 0x1b, 0xa5, 0x55, 0x4a, 0x29, 0x8d, 0x46, 0xfc, 0x68, 0xba, 0x2a, - 0x0a, 0x63, 0xc5, 0x06, 0xed, 0xc2, 0x94, 0x3c, 0xfb, 0x48, 0xac, 0x58, 0xc4, 0x4f, 0x74, 0x3b, - 0x50, 0x99, 0xcc, 0xd9, 0x00, 0xe2, 0x0c, 0x1b, 0xdc, 0xc1, 0x98, 0x9e, 0x45, 0xf7, 0xe8, 0x76, - 0x35, 0xc0, 0xa6, 0x34, 0x3b, 0x8b, 0xb2, 0x63, 0x35, 0x83, 0xda, 0x5f, 0xb5, 0xe0, 0xfe, 0x8e, - 0x9e, 0x11, 0xe6, 0x85, 0x13, 0x1e, 0x85, 0xec, 0x71, 0xbf, 0xd4, 0xfb, 0xb8, 0x6f, 0xff, 0x43, - 0x0b, 0x66, 0x56, 0xf6, 0x5a, 0xc9, 0x41, 0xcd, 0x33, 0xef, 0x26, 0x5e, 0x84, 0xa1, 0x3d, 0xe2, - 0x7a, 0xed, 0x3d, 0x31, 0x72, 0x73, 0x52, 0xa4, 0xaf, 0x33, 0xe8, 0xd1, 0xe1, 0xdc, 0x78, 0x23, - 0x09, 0x23, 0x67, 0x9b, 0x70, 0x00, 0x16, 0xe4, 0x6c, 0x63, 0xf4, 0xde, 0x27, 0x57, 0xbd, 0x3d, - 0x4f, 0xde, 0x10, 0x76, 0x35, 0x79, 0xcd, 0xcb, 0x0e, 0x9d, 0x7f, 0xbd, 0xed, 0x04, 0x89, 0x97, - 0x1c, 0x88, 0x6b, 0x17, 0xc9, 0x04, 0xa7, 0xfc, 0xec, 0xef, 0x58, 0x30, 0x29, 0x65, 0xc9, 0xa2, - 0xeb, 0x46, 0x24, 0x8e, 0xd1, 0x2c, 0x94, 0xbc, 0x96, 0x68, 0x25, 0x88, 0x56, 0x96, 0xd6, 0xea, - 0xb8, 0xe4, 0xb5, 0x50, 0x1d, 0x2a, 0xfc, 0xa2, 0x31, 0x9d, 0x5c, 0x7d, 0x5d, 0x57, 0xb2, 0x16, - 0x6c, 0xc8, 0x92, 0x38, 0x65, 0x22, 0xb5, 0x62, 0xb6, 0x0f, 0x95, 0xcd, 0x3b, 0x9b, 0xcb, 0x02, - 0x8e, 0x15, 0x05, 0xba, 0x00, 0x23, 0x41, 0xe8, 0xf2, 0x7b, 0x5f, 0xbe, 0xa6, 0xd9, 0x94, 0xbd, - 0x26, 0x60, 0x58, 0x61, 0xed, 0x9f, 0xb3, 0x60, 0x4c, 0x7e, 0x59, 0x9f, 0x0a, 0x3a, 0x5d, 0x5a, - 0xa9, 0x72, 0x9e, 0x2e, 0x2d, 0xaa, 0x60, 0x33, 0x8c, 0xa1, 0x57, 0x97, 0x8f, 0xa3, 0x57, 0xdb, - 0x5f, 0x29, 0xc1, 0x84, 0x6c, 0x4e, 0xa3, 0xbd, 0x19, 0x93, 0x04, 0x6d, 0x40, 0xc5, 0xe1, 0x5d, - 0x4e, 0xe4, 0x8c, 0x7d, 0x34, 0xff, 0xc4, 0x65, 0x8c, 0x4f, 0xaa, 0xea, 0x2c, 0xca, 0xd2, 0x38, - 0x65, 0x84, 0x7c, 0x98, 0x0e, 0xc2, 0x84, 0x6d, 0x7b, 0x0a, 0xdf, 0xed, 0x5e, 0x20, 0xcb, 0xfd, - 0x01, 0xc1, 0x7d, 0xfa, 0x5a, 0x96, 0x0b, 0xee, 0x64, 0x8c, 0x56, 0xa4, 0x95, 0xa7, 0xcc, 0x6a, - 0x38, 0xdf, 0xad, 0x86, 0x62, 0x23, 0x8f, 0xfd, 0xdb, 0x16, 0x54, 0x24, 0xd9, 0x69, 0x5c, 0x01, - 0xad, 0xc3, 0x70, 0xcc, 0x06, 0x41, 0x76, 0x8d, 0xdd, 0xad, 0xe1, 0x7c, 0xbc, 0xd2, 0xdd, 0x9c, - 0xff, 0x8f, 0xb1, 0xe4, 0xc1, 0xcc, 0xd4, 0xaa, 0xf9, 0x1f, 0x11, 0x33, 0xb5, 0x6a, 0x4f, 0xc1, - 0x0e, 0xf3, 0x5f, 0x59, 0x9b, 0xb5, 0xb3, 0x3c, 0x55, 0x3a, 0x5b, 0x11, 0xd9, 0xf2, 0x6e, 0x67, - 0x95, 0xce, 0x3a, 0x83, 0x62, 0x81, 0x45, 0x6f, 0xc3, 0x58, 0x53, 0x5a, 0x77, 0x53, 0x31, 0xf0, - 0x58, 0x57, 0x5b, 0xb9, 0xba, 0x56, 0xe1, 0x3e, 0x61, 0xcb, 0x5a, 0x79, 0x6c, 0x70, 0x33, 0x2f, - 0xe6, 0xcb, 0xbd, 0x2e, 0xe6, 0x53, 0xbe, 0x85, 0x57, 0xcb, 0xf6, 0x2f, 0x59, 0x30, 0xc4, 0x6d, - 0x84, 0xfd, 0x19, 0x55, 0xb5, 0x6b, 0xa2, 0xb4, 0xef, 0x6e, 0x52, 0xa0, 0xb8, 0x35, 0x42, 0xeb, - 0x50, 0x61, 0x3f, 0x98, 0xad, 0xa4, 0x5c, 0xec, 0x0c, 0xc7, 0x6b, 0xd5, 0x1b, 0x78, 0x53, 0x16, - 0xc3, 0x29, 0x07, 0xfb, 0xcb, 0x65, 0x2a, 0xaa, 0x52, 0x52, 0x63, 0x07, 0xb7, 0xee, 0xdd, 0x0e, - 0x5e, 0xba, 0x57, 0x3b, 0xf8, 0x36, 0x4c, 0x36, 0xb5, 0x3b, 0xa9, 0x74, 0x24, 0x2f, 0x74, 0x9d, - 0x24, 0xda, 0xf5, 0x15, 0xb7, 0x93, 0x2d, 0x9b, 0x4c, 0x70, 0x96, 0x2b, 0xfa, 0x2c, 0x8c, 0xf1, - 0x71, 0x16, 0xb5, 0x0c, 0xb0, 0x5a, 0x3e, 0x51, 0x3c, 0x5f, 0xf4, 0x2a, 0xd8, 0x4c, 0x6c, 0x68, - 0xc5, 0xb1, 0xc1, 0xcc, 0xfe, 0xe2, 0x20, 0x0c, 0xae, 0xec, 0x93, 0x20, 0x39, 0x05, 0x81, 0xd4, - 0x84, 0x09, 0x2f, 0xd8, 0x0f, 0xfd, 0x7d, 0xe2, 0x72, 0xfc, 0x71, 0x36, 0xd7, 0xfb, 0x04, 0xeb, - 0x89, 0x35, 0x83, 0x05, 0xce, 0xb0, 0xbc, 0x17, 0xa7, 0xf6, 0x4b, 0x30, 0xc4, 0xc7, 0x5e, 0x1c, - 0xd9, 0x73, 0x2d, 0xe0, 0xac, 0x13, 0xc5, 0x2a, 0x48, 0x2d, 0x0a, 0xdc, 0xe4, 0x2e, 0x8a, 0xa3, - 0x77, 0x61, 0x62, 0xcb, 0x8b, 0xe2, 0x84, 0x1e, 0xb7, 0xe3, 0xc4, 0xd9, 0x6b, 0xdd, 0xc5, 0x29, - 0x5d, 0xf5, 0xc3, 0xaa, 0xc1, 0x09, 0x67, 0x38, 0xa3, 0x6d, 0x18, 0xa7, 0x07, 0xc7, 0xb4, 0xaa, - 0xe1, 0x63, 0x57, 0xa5, 0xcc, 0x70, 0x57, 0x75, 0x46, 0xd8, 0xe4, 0x4b, 0x85, 0x49, 0x93, 0x1d, - 0x34, 0x47, 0x98, 0x46, 0xa1, 0x84, 0x09, 0x3f, 0x61, 0x72, 0x1c, 0x95, 0x49, 0xcc, 0x97, 0xa3, - 0x62, 0xca, 0xa4, 0xd4, 0x63, 0xc3, 0xfe, 0x1a, 0xdd, 0x1d, 0x69, 0x1f, 0x9e, 0xc2, 0xd6, 0xf2, - 0xaa, 0xb9, 0xb5, 0x3c, 0x50, 0x38, 0x9e, 0x05, 0xdb, 0xca, 0xe7, 0x60, 0x54, 0x1b, 0x6e, 0xb4, - 0x00, 0x95, 0xa6, 0x74, 0x3c, 0x10, 0x52, 0x57, 0xa9, 0x2f, 0xca, 0x23, 0x01, 0xa7, 0x34, 0xb4, - 0x37, 0xa8, 0xb2, 0x97, 0x75, 0x6b, 0xa2, 0xaa, 0x20, 0x66, 0x18, 0xfb, 0x39, 0x80, 0x95, 0xdb, - 0xa4, 0xb9, 0xc8, 0x0f, 0x5e, 0xda, 0xfd, 0x96, 0x55, 0x7c, 0xbf, 0x65, 0xff, 0x07, 0x0b, 0x26, - 0x56, 0x97, 0x0d, 0x85, 0x7c, 0x1e, 0x80, 0x6b, 0xa1, 0x6f, 0xbc, 0x71, 0x4d, 0x5a, 0x86, 0xb9, - 0x71, 0x4f, 0x41, 0xb1, 0x46, 0x81, 0x1e, 0x80, 0xb2, 0xdf, 0x0e, 0x84, 0x72, 0x38, 0x7c, 0xe7, - 0x70, 0xae, 0x7c, 0xb5, 0x1d, 0x60, 0x0a, 0xd3, 0x3c, 0x89, 0xca, 0x7d, 0x7b, 0x12, 0xf5, 0x74, - 0xc1, 0x46, 0x73, 0x30, 0x78, 0xeb, 0x96, 0xe7, 0xc6, 0xd5, 0xc1, 0xd4, 0x6a, 0xfd, 0xc6, 0x1b, - 0x6b, 0xb5, 0x18, 0x73, 0xb8, 0xfd, 0x17, 0xca, 0x30, 0xb5, 0xea, 0x93, 0xdb, 0xc6, 0x67, 0x3d, - 0x06, 0x43, 0x6e, 0xe4, 0xed, 0x93, 0x28, 0xbb, 0x8b, 0xd7, 0x18, 0x14, 0x0b, 0x6c, 0xdf, 0xde, - 0x4f, 0x37, 0x3a, 0xf7, 0xe3, 0x93, 0xf6, 0xf7, 0xea, 0xdd, 0x15, 0x6f, 0xc3, 0x30, 0xbf, 0x26, - 0xe5, 0x9d, 0x31, 0x7a, 0xf1, 0xd9, 0xbc, 0x26, 0x64, 0xfb, 0x62, 0x5e, 0x18, 0x3e, 0xb8, 0xcf, - 0x88, 0x12, 0x62, 0x02, 0x8a, 0x25, 0xcb, 0xd9, 0x4f, 0xc3, 0x98, 0x4e, 0x79, 0x2c, 0xe7, 0x91, - 0xbf, 0x68, 0xc1, 0x99, 0x55, 0x3f, 0x6c, 0xee, 0x66, 0x5c, 0xd1, 0x5e, 0x80, 0x51, 0xba, 0x9e, - 0x62, 0xc3, 0xad, 0xd5, 0x70, 0x74, 0x16, 0x28, 0xac, 0xd3, 0x69, 0xc5, 0x6e, 0xdc, 0x58, 0xab, - 0xe5, 0xf9, 0x47, 0x0b, 0x14, 0xd6, 0xe9, 0xec, 0x6f, 0x5b, 0xf0, 0xf0, 0xa5, 0xe5, 0x95, 0xd4, - 0x1b, 0xb3, 0xc3, 0x45, 0x9b, 0x2a, 0x77, 0xae, 0xd6, 0x94, 0x54, 0xb9, 0xab, 0xb1, 0x56, 0x08, - 0xec, 0x47, 0x25, 0xfc, 0xe0, 0x57, 0x2c, 0x38, 0x73, 0xc9, 0x4b, 0x30, 0x69, 0x85, 0x59, 0x67, - 0xe1, 0x88, 0xb4, 0xc2, 0xd8, 0x4b, 0xc2, 0xe8, 0x20, 0xeb, 0x2c, 0x8c, 0x15, 0x06, 0x6b, 0x54, - 0xbc, 0xe6, 0x7d, 0x2f, 0xa6, 0x2d, 0x2d, 0x99, 0x27, 0x4c, 0x2c, 0xe0, 0x58, 0x51, 0xd0, 0x0f, - 0x73, 0xbd, 0x88, 0x69, 0x08, 0x07, 0x62, 0x39, 0xab, 0x0f, 0xab, 0x49, 0x04, 0x4e, 0x69, 0xec, - 0xaf, 0x5a, 0x70, 0xf6, 0x92, 0xdf, 0x8e, 0x13, 0x12, 0x6d, 0xc5, 0x46, 0x63, 0x9f, 0x83, 0x0a, - 0x91, 0x5a, 0xb8, 0x68, 0xab, 0xda, 0x37, 0x94, 0x7a, 0xce, 0x3d, 0x95, 0x15, 0x5d, 0x1f, 0x7e, - 0x9d, 0xc7, 0xf3, 0x47, 0xfc, 0x7a, 0x09, 0xc6, 0x2f, 0x6f, 0x6c, 0xd4, 0x2f, 0x91, 0x44, 0x88, - 0xcc, 0xde, 0x16, 0x24, 0xac, 0x1d, 0x84, 0xbb, 0xe9, 0x3a, 0xed, 0xc4, 0xf3, 0xe7, 0x79, 0x68, - 0xcc, 0xfc, 0x5a, 0x90, 0x5c, 0x8f, 0x1a, 0x49, 0xe4, 0x05, 0xdb, 0xb9, 0x47, 0x67, 0x29, 0xd8, - 0xcb, 0x45, 0x82, 0x1d, 0x3d, 0x07, 0x43, 0x2c, 0x36, 0x47, 0x6a, 0x1d, 0x0f, 0x2a, 0x55, 0x81, - 0x41, 0x8f, 0x0e, 0xe7, 0x2a, 0x37, 0xf0, 0x1a, 0xff, 0x83, 0x05, 0x29, 0xba, 0x01, 0xa3, 0x3b, - 0x49, 0xd2, 0xba, 0x4c, 0x1c, 0x97, 0x44, 0x52, 0x3a, 0x9c, 0xcb, 0x93, 0x0e, 0xb4, 0x13, 0x38, - 0x59, 0xba, 0xa0, 0x52, 0x58, 0x8c, 0x75, 0x3e, 0x76, 0x03, 0x20, 0xc5, 0x9d, 0xd0, 0xb1, 0xc1, - 0xfe, 0xbe, 0x05, 0xc3, 0x97, 0x9d, 0xc0, 0xf5, 0x49, 0x84, 0x5e, 0x81, 0x01, 0x72, 0x9b, 0x34, - 0xc5, 0x0e, 0x9e, 0xdb, 0xe0, 0x74, 0x97, 0xe3, 0x46, 0x30, 0xfa, 0x1f, 0xb3, 0x52, 0xe8, 0x32, - 0x0c, 0xd3, 0xd6, 0x5e, 0x52, 0x3e, 0xe3, 0x8f, 0x14, 0x7d, 0xb1, 0x1a, 0x76, 0xbe, 0x31, 0x0a, - 0x10, 0x96, 0xc5, 0x99, 0x41, 0xa7, 0xd9, 0x6a, 0x50, 0x01, 0x96, 0x74, 0x3b, 0x6e, 0x6d, 0x2c, - 0xd7, 0x39, 0x91, 0xe0, 0xc6, 0x0d, 0x3a, 0x12, 0x88, 0x53, 0x26, 0xf6, 0x06, 0x54, 0xe8, 0xa0, - 0x2e, 0xfa, 0x9e, 0xd3, 0xdd, 0x96, 0xf4, 0x14, 0x54, 0xa4, 0x5d, 0x27, 0x16, 0x6e, 0xe7, 0x8c, - 0xab, 0x34, 0xfb, 0xc4, 0x38, 0xc5, 0xdb, 0x5b, 0x30, 0xc3, 0x2e, 0x49, 0x9d, 0x64, 0xc7, 0x58, - 0x63, 0xbd, 0x27, 0xf3, 0xd3, 0x42, 0xbf, 0xe2, 0x23, 0x53, 0xd5, 0xfc, 0x64, 0xc7, 0x24, 0x47, - 0x4d, 0xd7, 0xfa, 0xcf, 0x03, 0x30, 0xbd, 0xd6, 0x58, 0x6e, 0x98, 0x86, 0xc5, 0x97, 0x60, 0x8c, - 0x6b, 0x02, 0x74, 0x42, 0x3b, 0xbe, 0xa8, 0x4d, 0x5d, 0x1c, 0x6c, 0x68, 0x38, 0x6c, 0x50, 0xa2, - 0x87, 0xa1, 0xec, 0xbd, 0x17, 0x64, 0x5d, 0xe1, 0xd6, 0x5e, 0xbf, 0x86, 0x29, 0x9c, 0xa2, 0xa9, - 0x52, 0xc1, 0x05, 0xa8, 0x42, 0x2b, 0xc5, 0xe2, 0x55, 0x98, 0xf0, 0xe2, 0x66, 0xec, 0xad, 0x05, - 0x54, 0xba, 0xa4, 0x31, 0x17, 0xa9, 0xc6, 0x4f, 0x9b, 0xaa, 0xb0, 0x38, 0x43, 0xad, 0x49, 0xf3, - 0xc1, 0xbe, 0x15, 0x93, 0x9e, 0xde, 0xd7, 0x54, 0xe7, 0x6a, 0xb1, 0xaf, 0x8b, 0x99, 0x5b, 0x8e, - 0xd0, 0xb9, 0xf8, 0x07, 0xc7, 0x58, 0xe2, 0xd0, 0x25, 0x98, 0x6e, 0xee, 0x38, 0xad, 0xc5, 0x76, - 0xb2, 0x53, 0xf3, 0xe2, 0x66, 0xb8, 0x4f, 0xa2, 0x03, 0xa6, 0x09, 0x8f, 0xa4, 0x46, 0x26, 0x85, - 0x58, 0xbe, 0xbc, 0x58, 0xa7, 0x94, 0xb8, 0xb3, 0x8c, 0xa9, 0x82, 0xc0, 0x89, 0xa9, 0x20, 0x8b, - 0x30, 0x29, 0xeb, 0x6a, 0x90, 0x98, 0x6d, 0x0f, 0xa3, 0xac, 0x75, 0x2a, 0x24, 0x4a, 0x80, 0x55, - 0xdb, 0xb2, 0xf4, 0xe8, 0x45, 0x18, 0xf7, 0x02, 0x2f, 0xf1, 0x9c, 0x24, 0x8c, 0xd8, 0xe6, 0x3a, - 0xc6, 0x37, 0x0c, 0x2a, 0xe1, 0xd7, 0x74, 0x04, 0x36, 0xe9, 0xec, 0x77, 0xa1, 0xa2, 0x7c, 0xcd, - 0xa4, 0xbb, 0xa4, 0x55, 0xe0, 0x2e, 0xd9, 0x7b, 0x47, 0x90, 0x16, 0xf3, 0x72, 0xae, 0xc5, 0xfc, - 0x6f, 0x59, 0x90, 0xba, 0xdc, 0xa0, 0xcb, 0x50, 0x69, 0x85, 0xec, 0xd6, 0x2c, 0x92, 0x57, 0xd1, - 0x0f, 0xe6, 0x0a, 0x0f, 0x2e, 0xa8, 0x78, 0xff, 0xd5, 0x65, 0x09, 0x9c, 0x16, 0x46, 0x4b, 0x30, - 0xdc, 0x8a, 0x48, 0x23, 0x61, 0x41, 0x23, 0x3d, 0xf9, 0xf0, 0x39, 0xc2, 0xe9, 0xb1, 0x2c, 0x68, - 0xff, 0xba, 0x05, 0xc0, 0x8d, 0xd2, 0x4e, 0xb0, 0x4d, 0x4e, 0xe1, 0xa0, 0x5d, 0x83, 0x81, 0xb8, - 0x45, 0x9a, 0xdd, 0xee, 0x33, 0xd3, 0xf6, 0x34, 0x5a, 0xa4, 0x99, 0x76, 0x38, 0xfd, 0x87, 0x59, - 0x69, 0xfb, 0x67, 0x01, 0x26, 0x52, 0x32, 0x7a, 0x00, 0x42, 0xcf, 0x18, 0x2e, 0xf9, 0x0f, 0x64, - 0x5c, 0xf2, 0x2b, 0x8c, 0x5a, 0xf3, 0xc2, 0x7f, 0x17, 0xca, 0x7b, 0xce, 0x6d, 0x71, 0xca, 0x7a, - 0xaa, 0x7b, 0x33, 0x28, 0xff, 0xf9, 0x75, 0xe7, 0x36, 0xd7, 0x63, 0x9f, 0x92, 0x13, 0x64, 0xdd, - 0xb9, 0x7d, 0xc4, 0x6f, 0x2d, 0x99, 0x90, 0xa2, 0x87, 0xb9, 0xcf, 0xff, 0x61, 0xfa, 0x9f, 0x4d, - 0x3b, 0x5a, 0x09, 0xab, 0xcb, 0x0b, 0x84, 0x89, 0xb6, 0xaf, 0xba, 0xbc, 0x20, 0x5b, 0x97, 0x17, - 0xf4, 0x51, 0x97, 0x17, 0xa0, 0xf7, 0x61, 0x58, 0x5c, 0x87, 0x30, 0x5f, 0xc2, 0xd1, 0x8b, 0x0b, - 0x7d, 0xd4, 0x27, 0x6e, 0x53, 0x78, 0x9d, 0x0b, 0x52, 0x4f, 0x17, 0xd0, 0x9e, 0xf5, 0xca, 0x0a, - 0xd1, 0xdf, 0xb0, 0x60, 0x42, 0xfc, 0xc6, 0xe4, 0xbd, 0x36, 0x89, 0x13, 0xa1, 0x0f, 0x7c, 0xaa, - 0xff, 0x36, 0x88, 0x82, 0xbc, 0x29, 0x9f, 0x92, 0x62, 0xd6, 0x44, 0xf6, 0x6c, 0x51, 0xa6, 0x15, - 0xe8, 0x1f, 0x5b, 0x30, 0xb3, 0xe7, 0xdc, 0xe6, 0x35, 0x72, 0x18, 0x76, 0x12, 0x2f, 0x14, 0xbe, - 0x91, 0xaf, 0xf4, 0x37, 0xfc, 0x1d, 0xc5, 0x79, 0x23, 0xa5, 0x1b, 0xd5, 0x4c, 0x1e, 0x49, 0xcf, - 0xa6, 0xe6, 0xb6, 0x6b, 0x76, 0x0b, 0x46, 0xe4, 0x7c, 0xcb, 0x39, 0x0d, 0xd5, 0x74, 0x65, 0xe7, - 0xd8, 0xb7, 0x51, 0xda, 0xe9, 0x89, 0xd5, 0x23, 0xe6, 0xda, 0x3d, 0xad, 0xe7, 0x5d, 0x18, 0xd3, - 0xe7, 0xd8, 0x3d, 0xad, 0xeb, 0x3d, 0x38, 0x93, 0x33, 0x97, 0xee, 0x69, 0x95, 0xb7, 0xe0, 0x81, - 0xc2, 0xf9, 0x71, 0x2f, 0x2b, 0xb6, 0xbf, 0x6e, 0xe9, 0x72, 0xf0, 0x14, 0xcc, 0x53, 0xcb, 0xa6, - 0x79, 0xea, 0x5c, 0xf7, 0x95, 0x53, 0x60, 0xa3, 0x7a, 0x5b, 0x6f, 0x34, 0x95, 0xea, 0xe8, 0x35, - 0x18, 0xf2, 0x29, 0x44, 0xde, 0xc3, 0xd9, 0xbd, 0x57, 0x64, 0xaa, 0x4b, 0x31, 0x78, 0x8c, 0x05, - 0x07, 0xfb, 0xb7, 0x2c, 0x18, 0x38, 0x85, 0x9e, 0xc0, 0x66, 0x4f, 0x3c, 0x53, 0xc8, 0x5a, 0xe4, - 0x3d, 0x98, 0xc7, 0xce, 0xad, 0x15, 0x99, 0xdb, 0xa1, 0xa0, 0x63, 0xfe, 0x4f, 0x09, 0x46, 0x69, - 0x55, 0xd2, 0x61, 0xe4, 0x65, 0x18, 0xf7, 0x9d, 0x4d, 0xe2, 0x4b, 0x93, 0x79, 0xf6, 0x10, 0x7b, - 0x55, 0x47, 0x62, 0x93, 0x96, 0x16, 0xde, 0xd2, 0x6f, 0x0f, 0x84, 0xfe, 0xa2, 0x0a, 0x1b, 0x57, - 0x0b, 0xd8, 0xa4, 0xa5, 0xe7, 0xa9, 0x5b, 0x4e, 0xd2, 0xdc, 0x11, 0x07, 0x5c, 0xd5, 0xdc, 0x37, - 0x28, 0x10, 0x73, 0x1c, 0x55, 0xe0, 0xe4, 0xec, 0xbc, 0x49, 0x22, 0xa6, 0xc0, 0x71, 0xf5, 0x58, - 0x29, 0x70, 0xd8, 0x44, 0xe3, 0x2c, 0x7d, 0x4e, 0x6c, 0xde, 0x20, 0x73, 0x87, 0xe9, 0x23, 0x36, - 0x0f, 0xd5, 0x61, 0xc6, 0x0b, 0x9a, 0x7e, 0xdb, 0x25, 0x37, 0x02, 0xae, 0xdd, 0xf9, 0xde, 0xfb, - 0xc4, 0x15, 0x0a, 0xb4, 0xf2, 0x5c, 0x5a, 0xcb, 0xa1, 0xc1, 0xb9, 0x25, 0xed, 0xff, 0x0f, 0xce, - 0x5c, 0x0d, 0x1d, 0x77, 0xc9, 0xf1, 0x9d, 0xa0, 0x49, 0xa2, 0xb5, 0x60, 0xbb, 0xe7, 0x85, 0xbc, - 0x7e, 0x7d, 0x5e, 0xea, 0x75, 0x7d, 0x6e, 0xef, 0x00, 0xd2, 0x2b, 0x10, 0x6e, 0x60, 0x18, 0x86, - 0x3d, 0x5e, 0x95, 0x98, 0xfe, 0x8f, 0xe7, 0x6b, 0xd7, 0x1d, 0x2d, 0xd3, 0x1c, 0x9c, 0x38, 0x00, - 0x4b, 0x46, 0xf6, 0x4b, 0x90, 0x1b, 0x9b, 0xd1, 0xfb, 0x28, 0x6d, 0xbf, 0x00, 0xd3, 0xac, 0xe4, - 0xf1, 0x8e, 0x79, 0xf6, 0x5f, 0xb1, 0x60, 0xf2, 0x5a, 0x26, 0x9a, 0xf6, 0x31, 0x18, 0xe2, 0x19, - 0x4e, 0xb2, 0x46, 0xaf, 0x06, 0x83, 0x62, 0x81, 0x3d, 0x71, 0x9b, 0xcb, 0x0f, 0x2c, 0xa8, 0xa8, - 0xd0, 0xf7, 0x53, 0x50, 0x6a, 0x97, 0x0d, 0xa5, 0x36, 0xd7, 0x16, 0xa0, 0x9a, 0x53, 0xa4, 0xd3, - 0xa2, 0x2b, 0x2a, 0x2e, 0xb4, 0x8b, 0x19, 0x20, 0x65, 0xc3, 0xa3, 0x08, 0x27, 0xcc, 0xe0, 0x51, - 0x19, 0x29, 0xca, 0x6e, 0xc4, 0x15, 0xed, 0x47, 0xe4, 0x46, 0x5c, 0xb5, 0xa7, 0x40, 0xfa, 0xd5, - 0xb5, 0x26, 0xb3, 0x5d, 0xe1, 0xc7, 0x99, 0xd7, 0x28, 0x5b, 0x9b, 0x2a, 0x1c, 0x7b, 0x4e, 0x78, - 0x81, 0x0a, 0xe8, 0x11, 0x13, 0x64, 0xe2, 0x1f, 0x4f, 0x53, 0x90, 0x16, 0xb1, 0x2f, 0xc3, 0x64, - 0xa6, 0xc3, 0xd0, 0x0b, 0x30, 0xd8, 0xda, 0x71, 0x62, 0x92, 0xf1, 0x02, 0x1a, 0xac, 0x53, 0xe0, - 0xd1, 0xe1, 0xdc, 0x84, 0x2a, 0xc0, 0x20, 0x98, 0x53, 0xdb, 0xff, 0xc3, 0x82, 0x81, 0x6b, 0xa1, - 0x7b, 0x1a, 0x93, 0xe9, 0x55, 0x63, 0x32, 0x3d, 0x54, 0x94, 0xe4, 0xa5, 0x70, 0x1e, 0xad, 0x66, - 0xe6, 0xd1, 0xb9, 0x42, 0x0e, 0xdd, 0xa7, 0xd0, 0x1e, 0x8c, 0xb2, 0xd4, 0x31, 0xc2, 0x2b, 0xe9, - 0x39, 0xe3, 0x7c, 0x35, 0x97, 0x39, 0x5f, 0x4d, 0x6a, 0xa4, 0xda, 0x29, 0xeb, 0x09, 0x18, 0x16, - 0x9e, 0x31, 0x59, 0xff, 0x58, 0x41, 0x8b, 0x25, 0xde, 0xfe, 0xa5, 0x32, 0x18, 0xa9, 0x6a, 0xd0, - 0x6f, 0x5b, 0x30, 0x1f, 0xf1, 0x88, 0x20, 0xb7, 0xd6, 0x8e, 0xbc, 0x60, 0xbb, 0xd1, 0xdc, 0x21, - 0x6e, 0xdb, 0xf7, 0x82, 0xed, 0xb5, 0xed, 0x20, 0x54, 0xe0, 0x95, 0xdb, 0xa4, 0xd9, 0x66, 0x76, - 0xf0, 0x1e, 0x79, 0x71, 0xd4, 0xcd, 0xf3, 0xc5, 0x3b, 0x87, 0x73, 0xf3, 0xf8, 0x58, 0xbc, 0xf1, - 0x31, 0xdb, 0x82, 0xbe, 0x6d, 0xc1, 0x02, 0xcf, 0xe0, 0xd2, 0x7f, 0xfb, 0xbb, 0x9c, 0x46, 0xeb, - 0x92, 0x55, 0xca, 0x64, 0x83, 0x44, 0x7b, 0x4b, 0x2f, 0x8a, 0x0e, 0x5d, 0xa8, 0x1f, 0xaf, 0x2e, - 0x7c, 0xdc, 0xc6, 0xd9, 0xff, 0xaa, 0x0c, 0xe3, 0xb4, 0x17, 0xd3, 0x28, 0xf8, 0x17, 0x8c, 0x29, - 0xf1, 0x48, 0x66, 0x4a, 0x4c, 0x1b, 0xc4, 0x27, 0x13, 0x00, 0x1f, 0xc3, 0xb4, 0xef, 0xc4, 0xc9, - 0x65, 0xe2, 0x44, 0xc9, 0x26, 0x71, 0xd8, 0x55, 0xaf, 0x98, 0xe6, 0xc7, 0xb9, 0x3d, 0x56, 0xe6, - 0xaf, 0xab, 0x59, 0x66, 0xb8, 0x93, 0x3f, 0xda, 0x07, 0xc4, 0xae, 0x95, 0x23, 0x27, 0x88, 0xf9, - 0xb7, 0x78, 0xc2, 0x46, 0x7e, 0xbc, 0x5a, 0x67, 0x45, 0xad, 0xe8, 0x6a, 0x07, 0x37, 0x9c, 0x53, - 0x83, 0xe6, 0x2e, 0x30, 0xd8, 0xaf, 0xbb, 0xc0, 0x50, 0x0f, 0x27, 0xf4, 0x3d, 0x98, 0x12, 0xa3, - 0xb2, 0xe5, 0x6d, 0x8b, 0x4d, 0xfa, 0xcd, 0x8c, 0x3b, 0x91, 0xd5, 0xbf, 0xe3, 0x43, 0x0f, 0x5f, - 0x22, 0xfb, 0xa7, 0xe1, 0x0c, 0xad, 0xce, 0x74, 0x99, 0x8e, 0x11, 0x81, 0xc9, 0xdd, 0xf6, 0x26, - 0xf1, 0x49, 0x22, 0x61, 0xa2, 0xd2, 0x5c, 0xb5, 0xdf, 0x2c, 0x9d, 0xea, 0x96, 0x57, 0x4c, 0x16, - 0x38, 0xcb, 0xd3, 0xfe, 0x65, 0x0b, 0x98, 0x63, 0xe2, 0x29, 0x6c, 0x7f, 0x9f, 0x31, 0xb7, 0xbf, - 0x6a, 0x91, 0x04, 0x2a, 0xd8, 0xf9, 0x9e, 0xe7, 0xc3, 0x52, 0x8f, 0xc2, 0xdb, 0x07, 0x52, 0xf7, - 0xef, 0xad, 0x71, 0xfd, 0x6f, 0x8b, 0x2f, 0x48, 0x15, 0x20, 0x89, 0x7e, 0x06, 0x46, 0x9a, 0x4e, - 0xcb, 0x69, 0xf2, 0x1c, 0x61, 0x85, 0xd6, 0x1f, 0xa3, 0xd0, 0xfc, 0xb2, 0x28, 0xc1, 0xad, 0x19, - 0x9f, 0x94, 0x5f, 0x29, 0xc1, 0x3d, 0x2d, 0x18, 0xaa, 0xca, 0xd9, 0x5d, 0x18, 0x37, 0x98, 0xdd, - 0xd3, 0xa3, 0xef, 0xcf, 0xf0, 0xed, 0x42, 0x9d, 0x58, 0xf6, 0x60, 0x3a, 0xd0, 0xfe, 0x53, 0xe1, - 0x28, 0xd5, 0xe9, 0x8f, 0xf7, 0xda, 0x10, 0x98, 0x24, 0xd5, 0x1c, 0x2f, 0x33, 0x6c, 0x70, 0x27, - 0x67, 0xfb, 0xef, 0x58, 0x70, 0xbf, 0x4e, 0xa8, 0xc5, 0xae, 0xf6, 0xb2, 0x27, 0xd7, 0x60, 0x24, - 0x6c, 0x91, 0xc8, 0x49, 0xcf, 0x64, 0x17, 0x64, 0xa7, 0x5f, 0x17, 0xf0, 0xa3, 0xc3, 0xb9, 0x19, - 0x9d, 0xbb, 0x84, 0x63, 0x55, 0x12, 0xd9, 0x30, 0xc4, 0x3a, 0x23, 0x16, 0x71, 0xc5, 0x2c, 0x8f, - 0x16, 0xbb, 0xee, 0x8a, 0xb1, 0xc0, 0xd8, 0x3f, 0x6b, 0xf1, 0x89, 0xa5, 0x37, 0x1d, 0xbd, 0x07, - 0x53, 0x7b, 0xf4, 0xf8, 0xb6, 0x72, 0xbb, 0x15, 0x71, 0x33, 0xba, 0xec, 0xa7, 0xa7, 0x7a, 0xf5, - 0x93, 0xf6, 0x91, 0x4b, 0x55, 0xd1, 0xe6, 0xa9, 0xf5, 0x0c, 0x33, 0xdc, 0xc1, 0xde, 0xfe, 0xd3, - 0x12, 0x5f, 0x89, 0x4c, 0xab, 0x7b, 0x02, 0x86, 0x5b, 0xa1, 0xbb, 0xbc, 0x56, 0xc3, 0xa2, 0x87, - 0x94, 0xb8, 0xaa, 0x73, 0x30, 0x96, 0x78, 0x74, 0x11, 0x80, 0xdc, 0x4e, 0x48, 0x14, 0x38, 0xbe, - 0xba, 0x8c, 0x57, 0xca, 0xd3, 0x8a, 0xc2, 0x60, 0x8d, 0x8a, 0x96, 0x69, 0x45, 0xe1, 0xbe, 0xe7, - 0xb2, 0xc0, 0x8e, 0xb2, 0x59, 0xa6, 0xae, 0x30, 0x58, 0xa3, 0xa2, 0x47, 0xe5, 0x76, 0x10, 0xf3, - 0x0d, 0xd0, 0xd9, 0x14, 0xa9, 0x78, 0x46, 0xd2, 0xa3, 0xf2, 0x0d, 0x1d, 0x89, 0x4d, 0x5a, 0xb4, - 0x08, 0x43, 0x89, 0xc3, 0xae, 0x98, 0x07, 0x8b, 0x5d, 0x76, 0x36, 0x28, 0x85, 0x9e, 0x34, 0x8a, - 0x16, 0xc0, 0xa2, 0x20, 0x7a, 0x4b, 0x8a, 0x60, 0x2e, 0x92, 0x85, 0xeb, 0x55, 0xe1, 0xb4, 0xd5, - 0xc5, 0xb7, 0x2e, 0x83, 0x85, 0x4b, 0x97, 0xc1, 0xcb, 0xfe, 0x42, 0x05, 0x20, 0xd5, 0xf6, 0xd0, - 0xfb, 0x1d, 0x22, 0xe2, 0xe9, 0xee, 0xfa, 0xe1, 0xc9, 0xc9, 0x07, 0xf4, 0x45, 0x0b, 0x46, 0x1d, - 0xdf, 0x0f, 0x9b, 0x4e, 0xc2, 0x7a, 0xb9, 0xd4, 0x5d, 0x44, 0x89, 0xfa, 0x17, 0xd3, 0x12, 0xbc, - 0x09, 0xcf, 0xc9, 0xdb, 0x63, 0x0d, 0xd3, 0xb3, 0x15, 0x7a, 0xc5, 0xe8, 0x93, 0xf2, 0x10, 0xc0, - 0xa7, 0xc7, 0x6c, 0xf6, 0x10, 0x50, 0x61, 0xd2, 0x58, 0xd3, 0xff, 0xd1, 0x0d, 0x23, 0x67, 0xcd, - 0x40, 0x71, 0x78, 0xae, 0xa1, 0xf4, 0xf4, 0x4a, 0x57, 0x83, 0xea, 0xba, 0x0b, 0xfa, 0x60, 0x71, - 0x0c, 0xbb, 0xa6, 0x5d, 0xf7, 0x70, 0x3f, 0x7f, 0x17, 0x26, 0x5d, 0x73, 0xbb, 0x15, 0xb3, 0xe9, - 0xf1, 0x22, 0xbe, 0x99, 0xdd, 0x39, 0xdd, 0x60, 0x33, 0x08, 0x9c, 0x65, 0x8c, 0xea, 0x3c, 0x18, - 0x60, 0x2d, 0xd8, 0x0a, 0x85, 0x0b, 0x9f, 0x5d, 0x38, 0x96, 0x07, 0x71, 0x42, 0xf6, 0x28, 0x65, - 0xba, 0x8f, 0x5e, 0x13, 0x65, 0xb1, 0xe2, 0x82, 0x5e, 0x83, 0x21, 0x16, 0xa1, 0x15, 0x57, 0x47, - 0x8a, 0xed, 0x80, 0x66, 0x70, 0x71, 0xba, 0xa8, 0xd8, 0xdf, 0x18, 0x0b, 0x0e, 0xe8, 0xb2, 0x4c, - 0x11, 0x10, 0xaf, 0x05, 0x37, 0x62, 0xc2, 0x52, 0x04, 0x54, 0x96, 0x3e, 0x9e, 0x46, 0xff, 0x73, - 0x78, 0x6e, 0x7a, 0x48, 0xa3, 0x24, 0xd5, 0x57, 0xc4, 0x7f, 0x99, 0x75, 0xb2, 0x0a, 0xc5, 0xcd, - 0x33, 0x33, 0x53, 0xa6, 0xdd, 0x79, 0xd3, 0x64, 0x81, 0xb3, 0x3c, 0x4f, 0x75, 0xfb, 0x9c, 0x0d, - 0x60, 0x2a, 0xbb, 0xb0, 0xee, 0xe9, 0x76, 0xfd, 0xfd, 0x01, 0x98, 0x30, 0x27, 0x02, 0x5a, 0x80, - 0x8a, 0x60, 0xa2, 0xd2, 0x85, 0xa9, 0xb9, 0xbd, 0x2e, 0x11, 0x38, 0xa5, 0x61, 0xe9, 0xd2, 0x58, - 0x71, 0xcd, 0x37, 0x2b, 0x4d, 0x97, 0xa6, 0x30, 0x58, 0xa3, 0xa2, 0x4a, 0xf4, 0x66, 0x18, 0x26, - 0x6a, 0x2b, 0x50, 0xb3, 0x65, 0x89, 0x41, 0xb1, 0xc0, 0xd2, 0x2d, 0x60, 0x97, 0x44, 0x01, 0xf1, - 0x4d, 0x4b, 0xa6, 0xda, 0x02, 0xae, 0xe8, 0x48, 0x6c, 0xd2, 0xd2, 0x2d, 0x2d, 0x8c, 0xd9, 0xf4, - 0x13, 0xaa, 0x7a, 0xea, 0xeb, 0xd6, 0xe0, 0x11, 0x8a, 0x12, 0x8f, 0xde, 0x84, 0xfb, 0x55, 0x40, - 0x21, 0xe6, 0x96, 0x61, 0x59, 0xe3, 0x90, 0x71, 0xb2, 0xbe, 0x7f, 0x39, 0x9f, 0x0c, 0x17, 0x95, - 0x47, 0xaf, 0xc2, 0x84, 0x50, 0x81, 0x25, 0xc7, 0x61, 0xd3, 0x59, 0xe1, 0x8a, 0x81, 0xc5, 0x19, - 0x6a, 0x54, 0x83, 0x29, 0x0a, 0x61, 0x5a, 0xa8, 0xe4, 0xc0, 0x03, 0x23, 0xd5, 0x5e, 0x7f, 0x25, - 0x83, 0xc7, 0x1d, 0x25, 0xd0, 0x22, 0x4c, 0x72, 0x1d, 0x85, 0x9e, 0x29, 0xd9, 0x38, 0x08, 0xcf, - 0x5a, 0xb5, 0x10, 0xae, 0x9b, 0x68, 0x9c, 0xa5, 0x47, 0x2f, 0xc1, 0x98, 0x13, 0x35, 0x77, 0xbc, - 0x84, 0x34, 0x93, 0x76, 0xc4, 0x13, 0x70, 0x68, 0xde, 0x1e, 0x8b, 0x1a, 0x0e, 0x1b, 0x94, 0xf6, - 0xfb, 0x70, 0x26, 0xc7, 0x29, 0x9f, 0x4e, 0x1c, 0xa7, 0xe5, 0xc9, 0x6f, 0xca, 0x78, 0xad, 0x2d, - 0xd6, 0xd7, 0xe4, 0xd7, 0x68, 0x54, 0x74, 0x76, 0x32, 0x93, 0xb8, 0x96, 0x1a, 0x56, 0xcd, 0xce, - 0x55, 0x89, 0xc0, 0x29, 0x8d, 0xfd, 0x7b, 0x00, 0x9a, 0x41, 0xa7, 0x0f, 0x9f, 0xa5, 0x97, 0x60, - 0x4c, 0xe6, 0x33, 0xd6, 0xf2, 0x68, 0xaa, 0xcf, 0xbc, 0xa4, 0xe1, 0xb0, 0x41, 0x49, 0xdb, 0x16, - 0xa8, 0x2c, 0xa0, 0x19, 0x1f, 0xb9, 0x34, 0x07, 0x68, 0x4a, 0x83, 0x9e, 0x86, 0x91, 0x98, 0xf8, - 0x5b, 0x57, 0xbd, 0x60, 0x57, 0x4c, 0x6c, 0x25, 0x85, 0x1b, 0x02, 0x8e, 0x15, 0x05, 0x5a, 0x82, - 0x72, 0xdb, 0x73, 0xc5, 0x54, 0x96, 0x1b, 0x7e, 0xf9, 0xc6, 0x5a, 0xed, 0xe8, 0x70, 0xee, 0x91, - 0xa2, 0x34, 0xcd, 0xf4, 0x68, 0x1f, 0xcf, 0xd3, 0xe5, 0x47, 0x0b, 0xe7, 0xdd, 0x0d, 0x0c, 0x1d, - 0xf3, 0x6e, 0xe0, 0x22, 0x80, 0xf8, 0x6a, 0x39, 0x97, 0xcb, 0xe9, 0xa8, 0x5d, 0x52, 0x18, 0xac, - 0x51, 0xa1, 0x18, 0xa6, 0x9b, 0x11, 0x71, 0xe4, 0x19, 0x9a, 0xbb, 0x97, 0x8f, 0xdc, 0xbd, 0x81, - 0x60, 0x39, 0xcb, 0x0c, 0x77, 0xf2, 0x47, 0x21, 0x4c, 0xbb, 0x22, 0x7e, 0x35, 0xad, 0xb4, 0x72, - 0x7c, 0x9f, 0x76, 0xe6, 0x90, 0x93, 0x65, 0x84, 0x3b, 0x79, 0xa3, 0x77, 0x60, 0x56, 0x02, 0x3b, - 0x43, 0x86, 0xd9, 0x72, 0x29, 0x2f, 0x9d, 0xbb, 0x73, 0x38, 0x37, 0x5b, 0x2b, 0xa4, 0xc2, 0x5d, - 0x38, 0x20, 0x0c, 0x43, 0xec, 0x2e, 0x29, 0xae, 0x8e, 0xb2, 0x7d, 0xee, 0xc9, 0x62, 0x63, 0x00, - 0x9d, 0xeb, 0xf3, 0xec, 0x1e, 0x4a, 0xb8, 0xf9, 0xa6, 0xd7, 0x72, 0x0c, 0x88, 0x05, 0x27, 0xb4, - 0x05, 0xa3, 0x4e, 0x10, 0x84, 0x89, 0xc3, 0x55, 0xa8, 0xb1, 0x62, 0xdd, 0x4f, 0x63, 0xbc, 0x98, - 0x96, 0xe0, 0xdc, 0x95, 0xe7, 0xa0, 0x86, 0xc1, 0x3a, 0x63, 0x74, 0x0b, 0x26, 0xc3, 0x5b, 0x54, - 0x38, 0x4a, 0x2b, 0x45, 0x5c, 0x1d, 0x67, 0x75, 0x3d, 0xdf, 0xa7, 0x9d, 0xd6, 0x28, 0xac, 0x49, - 0x2d, 0x93, 0x29, 0xce, 0xd6, 0x82, 0xe6, 0x0d, 0x6b, 0xf5, 0x44, 0xea, 0xcf, 0x9e, 0x5a, 0xab, - 0x75, 0xe3, 0x34, 0x0b, 0x41, 0xe7, 0x6e, 0xab, 0x6c, 0xf5, 0x4f, 0x66, 0x42, 0xd0, 0x53, 0x14, - 0xd6, 0xe9, 0xd0, 0x0e, 0x8c, 0xa5, 0x57, 0x56, 0x51, 0xcc, 0x32, 0xd4, 0x8c, 0x5e, 0xbc, 0xd8, - 0xdf, 0xc7, 0xad, 0x69, 0x25, 0xf9, 0xc9, 0x41, 0x87, 0x60, 0x83, 0xf3, 0xec, 0x8f, 0xc1, 0xa8, - 0x36, 0xb0, 0xc7, 0xf1, 0xca, 0x9e, 0x7d, 0x15, 0xa6, 0xb2, 0x43, 0x77, 0x2c, 0xaf, 0xee, 0xff, - 0x55, 0x82, 0xc9, 0x9c, 0x9b, 0x2b, 0x96, 0xea, 0x39, 0x23, 0x50, 0xd3, 0xcc, 0xce, 0xa6, 0x58, - 0x2c, 0xf5, 0x21, 0x16, 0xa5, 0x8c, 0x2e, 0x17, 0xca, 0x68, 0x21, 0x0a, 0x07, 0x3e, 0x88, 0x28, - 0x34, 0x77, 0x9f, 0xc1, 0xbe, 0x76, 0x9f, 0x13, 0x10, 0x9f, 0xc6, 0x06, 0x36, 0xdc, 0xc7, 0x06, - 0xf6, 0xe5, 0x12, 0x4c, 0x65, 0xf3, 0x09, 0x9f, 0xc2, 0x7d, 0xc7, 0x6b, 0xc6, 0x7d, 0x47, 0x7e, - 0xe2, 0xf4, 0x6c, 0x96, 0xe3, 0xa2, 0xbb, 0x0f, 0x9c, 0xb9, 0xfb, 0x78, 0xb2, 0x2f, 0x6e, 0xdd, - 0xef, 0x41, 0xfe, 0x6e, 0x09, 0xce, 0x66, 0x8b, 0x2c, 0xfb, 0x8e, 0xb7, 0x77, 0x0a, 0x7d, 0x73, - 0xdd, 0xe8, 0x9b, 0x67, 0xfa, 0xf9, 0x1a, 0xd6, 0xb4, 0xc2, 0x0e, 0x7a, 0x23, 0xd3, 0x41, 0x0b, - 0xfd, 0xb3, 0xec, 0xde, 0x4b, 0xdf, 0x29, 0xc3, 0xb9, 0xdc, 0x72, 0xe9, 0x75, 0xc1, 0xaa, 0x71, - 0x5d, 0x70, 0x31, 0x73, 0x5d, 0x60, 0x77, 0x2f, 0x7d, 0x32, 0xf7, 0x07, 0x22, 0xf2, 0x8c, 0x65, - 0x4f, 0xbb, 0xcb, 0xbb, 0x03, 0x23, 0xf2, 0x4c, 0x31, 0xc2, 0x26, 0xdf, 0x1f, 0xa5, 0x3b, 0x83, - 0xdf, 0xb3, 0xe0, 0x81, 0xdc, 0xb1, 0x39, 0x05, 0xbb, 0xfa, 0x35, 0xd3, 0xae, 0xfe, 0x44, 0xdf, - 0xb3, 0xb5, 0xc0, 0xd0, 0xfe, 0xd5, 0x72, 0xc1, 0xb7, 0x30, 0xcb, 0xe4, 0x75, 0x18, 0x75, 0x9a, - 0x4d, 0x12, 0xc7, 0xeb, 0xa1, 0xab, 0x92, 0x95, 0x3d, 0xc3, 0xb4, 0x8d, 0x14, 0x7c, 0x74, 0x38, - 0x37, 0x9b, 0x65, 0x91, 0xa2, 0xb1, 0xce, 0xc1, 0x4c, 0x80, 0x58, 0x3a, 0xd1, 0x04, 0x88, 0x17, - 0x01, 0xf6, 0x95, 0xbd, 0x22, 0x6b, 0xe6, 0xd4, 0x2c, 0x19, 0x1a, 0x15, 0xfa, 0x29, 0x76, 0x0a, - 0xe0, 0xce, 0x40, 0x7c, 0x2a, 0x3e, 0xd7, 0xe7, 0x58, 0xe9, 0x8e, 0x45, 0x3c, 0xc4, 0x59, 0x99, - 0x84, 0x15, 0x4b, 0xf4, 0x13, 0x30, 0x15, 0xf3, 0x0c, 0x1a, 0xcb, 0xbe, 0x13, 0xb3, 0xc0, 0x1a, - 0x31, 0x0b, 0x59, 0xdc, 0x72, 0x23, 0x83, 0xc3, 0x1d, 0xd4, 0xf6, 0x97, 0x07, 0xe0, 0xc1, 0x2e, - 0xc2, 0x07, 0x2d, 0x9a, 0x97, 0xf7, 0x4f, 0x65, 0xed, 0x76, 0xb3, 0xb9, 0x85, 0x0d, 0x43, 0x5e, - 0x66, 0x8c, 0x4b, 0x1f, 0x78, 0x8c, 0xbf, 0x64, 0x69, 0x16, 0x55, 0xee, 0xe2, 0xfb, 0x99, 0x63, - 0x0a, 0xd5, 0x13, 0x34, 0xb1, 0x6e, 0xe5, 0xd8, 0x29, 0x2f, 0xf6, 0xdd, 0x9c, 0xbe, 0x0d, 0x97, - 0xa7, 0x7b, 0xd5, 0xf3, 0x79, 0x0b, 0x1e, 0xc9, 0x6d, 0xaf, 0xe1, 0x6c, 0xb4, 0x00, 0x95, 0x26, - 0x05, 0x6a, 0x41, 0x76, 0x69, 0xa8, 0xab, 0x44, 0xe0, 0x94, 0xc6, 0xf0, 0x29, 0x2a, 0xf5, 0xf4, - 0x29, 0xfa, 0x97, 0x16, 0xcc, 0x64, 0x1b, 0x71, 0x0a, 0x12, 0x70, 0xcd, 0x94, 0x80, 0x1f, 0xef, - 0x67, 0x2c, 0x0b, 0x84, 0xdf, 0x1f, 0x4f, 0xc0, 0x7d, 0x05, 0xef, 0x45, 0xec, 0xc3, 0xf4, 0x76, - 0x93, 0x98, 0xe1, 0x8b, 0xe2, 0x63, 0x72, 0x23, 0x3d, 0xbb, 0xc6, 0x3a, 0xf2, 0x83, 0x6c, 0x07, - 0x09, 0xee, 0xac, 0x02, 0x7d, 0xde, 0x82, 0x19, 0xe7, 0x56, 0xdc, 0xf1, 0x7e, 0x93, 0x98, 0x33, - 0xcf, 0xe7, 0xda, 0x57, 0x7b, 0xbc, 0xf7, 0xc4, 0x42, 0x8c, 0x66, 0xf2, 0xa8, 0x70, 0x6e, 0x5d, - 0x08, 0x8b, 0xbc, 0x90, 0x54, 0x4f, 0xee, 0x12, 0x60, 0x9b, 0x17, 0xfe, 0xc4, 0x65, 0xa1, 0xc4, - 0x60, 0xc5, 0x07, 0xdd, 0x84, 0xca, 0xb6, 0x8c, 0x49, 0x14, 0xb2, 0x36, 0x77, 0xf3, 0xca, 0x0d, - 0x5c, 0xe4, 0x31, 0x1f, 0x0a, 0x85, 0x53, 0x56, 0xe8, 0x55, 0x28, 0x07, 0x5b, 0x71, 0xb7, 0x07, - 0x33, 0x32, 0x3e, 0x78, 0x3c, 0x52, 0xfa, 0xda, 0x6a, 0x03, 0xd3, 0x82, 0xb4, 0x7c, 0xb4, 0xe9, - 0x8a, 0x2b, 0x81, 0xdc, 0xf2, 0x78, 0xa9, 0xd6, 0x59, 0x1e, 0x2f, 0xd5, 0x30, 0x2d, 0x88, 0x56, - 0x61, 0x90, 0x85, 0x38, 0x09, 0x7b, 0x7f, 0x6e, 0xa6, 0x87, 0x8e, 0xf0, 0x2d, 0x1e, 0x3a, 0xcd, - 0xc0, 0x98, 0x17, 0x47, 0xaf, 0xc1, 0x50, 0x93, 0xbd, 0x1f, 0x21, 0x8c, 0x33, 0xf9, 0xd9, 0x4b, - 0x3a, 0x5e, 0x98, 0xe0, 0xb7, 0x9c, 0x1c, 0x8e, 0x05, 0x07, 0xb4, 0x01, 0x43, 0x4d, 0xd2, 0xda, - 0xd9, 0x8a, 0x85, 0xcd, 0xe5, 0x93, 0xb9, 0xbc, 0xba, 0x3c, 0x97, 0x22, 0xb8, 0x32, 0x0a, 0x2c, - 0x78, 0xa1, 0x4f, 0x43, 0x69, 0xab, 0x29, 0xa2, 0x9d, 0x72, 0xed, 0xfc, 0x66, 0x38, 0xfb, 0xd2, - 0xd0, 0x9d, 0xc3, 0xb9, 0xd2, 0xea, 0x32, 0x2e, 0x6d, 0x35, 0xd1, 0x35, 0x18, 0xde, 0xe2, 0x31, - 0xc9, 0x22, 0xcf, 0xef, 0xe3, 0xf9, 0xe1, 0xd2, 0x1d, 0x61, 0xcb, 0x3c, 0x4a, 0x47, 0x20, 0xb0, - 0x64, 0x82, 0x36, 0x00, 0xb6, 0x54, 0x6c, 0xb5, 0x48, 0xf4, 0xfb, 0xf1, 0x7e, 0x22, 0xb0, 0x85, - 0x01, 0x42, 0x41, 0xb1, 0xc6, 0x07, 0x7d, 0x0e, 0x2a, 0x8e, 0x7c, 0x11, 0x88, 0x25, 0xf9, 0x35, - 0xf5, 0x81, 0x74, 0xc1, 0x75, 0x7f, 0x2c, 0x89, 0xcf, 0x56, 0x45, 0x84, 0x53, 0xa6, 0x68, 0x17, - 0xc6, 0xf7, 0xe3, 0xd6, 0x0e, 0x91, 0x0b, 0x94, 0x65, 0xfe, 0x2d, 0xd8, 0x90, 0x6e, 0x0a, 0x42, - 0x2f, 0x4a, 0xda, 0x8e, 0xdf, 0x21, 0x53, 0x58, 0x48, 0xd7, 0x4d, 0x9d, 0x19, 0x36, 0x79, 0xd3, - 0x4e, 0x7f, 0xaf, 0x1d, 0x6e, 0x1e, 0x24, 0x44, 0xe4, 0x03, 0xce, 0xed, 0xf4, 0xd7, 0x39, 0x49, - 0x67, 0xa7, 0x0b, 0x04, 0x96, 0x4c, 0xe8, 0x12, 0x76, 0xe4, 0x6b, 0x5b, 0xc2, 0xca, 0xf2, 0x44, - 0x61, 0xf7, 0x74, 0xb4, 0x37, 0xed, 0x14, 0x26, 0xfb, 0x52, 0x56, 0x4c, 0xe6, 0xb5, 0x76, 0xc2, - 0x24, 0x0c, 0x32, 0xf2, 0x76, 0xba, 0x58, 0xe6, 0xd5, 0x73, 0xe8, 0x3b, 0x65, 0x5e, 0x1e, 0x15, - 0xce, 0xad, 0x0b, 0xb9, 0x30, 0xd1, 0x0a, 0xa3, 0xe4, 0x56, 0x18, 0xc9, 0x59, 0x85, 0xba, 0x1c, - 0xbf, 0x0d, 0x4a, 0x51, 0x23, 0xf3, 0xd0, 0x36, 0x31, 0x38, 0xc3, 0x93, 0x0e, 0x49, 0xdc, 0x74, - 0x7c, 0xb2, 0x76, 0xbd, 0x7a, 0xa6, 0x78, 0x48, 0x1a, 0x9c, 0xa4, 0x73, 0x48, 0x04, 0x02, 0x4b, - 0x26, 0x54, 0xfa, 0xb0, 0xd4, 0xf2, 0x2c, 0x81, 0x71, 0x81, 0xf4, 0xe9, 0xf0, 0x5d, 0xe6, 0xd2, - 0x87, 0x81, 0x31, 0x2f, 0x4e, 0x67, 0xbe, 0xd0, 0x3d, 0xc3, 0xb8, 0x7a, 0xb6, 0x78, 0xe6, 0x0b, - 0x95, 0xf5, 0x7a, 0xa3, 0xdb, 0xcc, 0x57, 0x44, 0x38, 0x65, 0x6a, 0x7f, 0x63, 0xa8, 0x53, 0x5b, - 0x60, 0x67, 0x8c, 0x2f, 0x58, 0x1d, 0x17, 0xf0, 0x9f, 0xea, 0xd7, 0xe4, 0x71, 0x82, 0x7a, 0xe2, - 0xe7, 0x2d, 0xb8, 0xaf, 0x95, 0xfb, 0x51, 0x62, 0xeb, 0xed, 0xcf, 0x72, 0xc2, 0xbb, 0x41, 0xa5, - 0x06, 0xcf, 0xc7, 0xe3, 0x82, 0x9a, 0xb2, 0xba, 0x78, 0xf9, 0x03, 0xeb, 0xe2, 0xeb, 0x30, 0xc2, - 0xd4, 0xbb, 0x34, 0x15, 0x51, 0x5f, 0x6e, 0x6c, 0x6c, 0x13, 0x5f, 0x16, 0x05, 0xb1, 0x62, 0x81, - 0x7e, 0xce, 0x82, 0x87, 0xb3, 0x4d, 0xc7, 0x84, 0xa1, 0x45, 0x5a, 0x4b, 0x7e, 0xbc, 0x59, 0x15, - 0xdf, 0xff, 0x70, 0xbd, 0x1b, 0xf1, 0x51, 0x2f, 0x02, 0xdc, 0xbd, 0x32, 0x54, 0xcb, 0x39, 0x5f, - 0x0d, 0x99, 0xf7, 0x73, 0xbd, 0xcf, 0x58, 0xe8, 0x79, 0x18, 0xdb, 0x0b, 0xdb, 0x81, 0x8c, 0x31, - 0x11, 0x11, 0xc4, 0xcc, 0x16, 0xbc, 0xae, 0xc1, 0xb1, 0x41, 0x75, 0xba, 0xfa, 0xfe, 0xd7, 0xac, - 0x1c, 0x45, 0x95, 0x9f, 0x00, 0x5f, 0x31, 0x4f, 0x80, 0x8f, 0x65, 0x4f, 0x80, 0x1d, 0x96, 0x3a, - 0xe3, 0xf0, 0xd7, 0x7f, 0xba, 0xde, 0x7e, 0x73, 0x35, 0xd9, 0x3e, 0x9c, 0xef, 0x25, 0x9c, 0x99, - 0x2b, 0x9f, 0xab, 0xee, 0xb8, 0x53, 0x57, 0x3e, 0x77, 0xad, 0x86, 0x19, 0xa6, 0xdf, 0xac, 0x1f, - 0xf6, 0x7f, 0xb3, 0xa0, 0x5c, 0x0f, 0xdd, 0x53, 0xb0, 0x3c, 0x7e, 0xc6, 0xb0, 0x3c, 0x3e, 0x58, - 0xf0, 0x76, 0x67, 0xa1, 0x9d, 0x71, 0x25, 0x63, 0x67, 0x7c, 0xb8, 0x88, 0x41, 0x77, 0xab, 0xe2, - 0xdf, 0x2b, 0x83, 0xfe, 0xd2, 0x28, 0xfa, 0xd7, 0x77, 0xe3, 0x13, 0x5e, 0xee, 0xf6, 0xf8, 0xa8, - 0xe0, 0xcc, 0x3c, 0x00, 0x65, 0xb8, 0xe9, 0x0f, 0x99, 0x6b, 0xf8, 0x1b, 0xc4, 0xdb, 0xde, 0x49, - 0x88, 0x9b, 0xfd, 0x9c, 0xd3, 0x73, 0x0d, 0xff, 0x2f, 0x16, 0x4c, 0x66, 0x6a, 0x47, 0x7e, 0x5e, - 0xec, 0xda, 0x5d, 0x5a, 0x9c, 0xa6, 0x7b, 0x06, 0xbb, 0xcd, 0x03, 0xa8, 0x6b, 0x1d, 0x69, 0xd5, - 0x61, 0xba, 0xaf, 0xba, 0xf7, 0x89, 0xb1, 0x46, 0x81, 0x5e, 0x80, 0xd1, 0x24, 0x6c, 0x85, 0x7e, - 0xb8, 0x7d, 0x70, 0x85, 0xc8, 0x3c, 0x33, 0xea, 0xf2, 0x6d, 0x23, 0x45, 0x61, 0x9d, 0xce, 0xfe, - 0x95, 0x32, 0x64, 0x5f, 0xa7, 0xfd, 0xf3, 0x39, 0xf9, 0xd1, 0x9c, 0x93, 0xdf, 0xb1, 0x60, 0x8a, - 0xd6, 0xce, 0xbc, 0xab, 0xa4, 0x53, 0xb5, 0x7a, 0xd7, 0xc3, 0xea, 0xf2, 0xae, 0xc7, 0x63, 0x54, - 0x76, 0xb9, 0x61, 0x3b, 0x11, 0x56, 0x21, 0x4d, 0x38, 0x51, 0x28, 0x16, 0x58, 0x41, 0x47, 0xa2, - 0x48, 0x44, 0xa4, 0xe9, 0x74, 0x24, 0x8a, 0xb0, 0xc0, 0xca, 0x67, 0x3f, 0x06, 0x0a, 0x9e, 0xfd, - 0x60, 0x29, 0xda, 0x84, 0x47, 0x8f, 0x50, 0x28, 0xb4, 0x14, 0x6d, 0xd2, 0xd5, 0x27, 0xa5, 0xb1, - 0xbf, 0x5e, 0x86, 0xb1, 0x7a, 0xe8, 0xa6, 0x17, 0x2b, 0xcf, 0x1b, 0x17, 0x2b, 0xe7, 0x33, 0x17, - 0x2b, 0x53, 0x3a, 0xed, 0x9f, 0x5f, 0xa3, 0x7c, 0x58, 0xd7, 0x28, 0x7f, 0x66, 0xc1, 0x44, 0x3d, - 0x74, 0xe9, 0x04, 0xfd, 0x51, 0x9a, 0x8d, 0x7a, 0x02, 0xc0, 0xa1, 0x2e, 0x09, 0x00, 0xff, 0xbe, - 0x05, 0xc3, 0xf5, 0xd0, 0x3d, 0x05, 0x8b, 0xe9, 0x2b, 0xa6, 0xc5, 0xf4, 0xfe, 0x02, 0x29, 0x5b, - 0x60, 0x24, 0xfd, 0x8d, 0x32, 0x8c, 0xd3, 0x76, 0x86, 0xdb, 0x72, 0x94, 0x8c, 0x1e, 0xb1, 0xfa, - 0xe8, 0x11, 0xaa, 0xcc, 0x85, 0xbe, 0x1f, 0xde, 0xca, 0x8e, 0xd8, 0x2a, 0x83, 0x62, 0x81, 0x45, - 0x4f, 0xc3, 0x48, 0x2b, 0x22, 0xfb, 0x5e, 0xd8, 0x8e, 0xb3, 0x31, 0xad, 0x75, 0x01, 0xc7, 0x8a, - 0x82, 0xea, 0xed, 0xb1, 0x17, 0x34, 0x89, 0xf4, 0xf2, 0x19, 0x60, 0x5e, 0x3e, 0x3c, 0x87, 0xaa, - 0x06, 0xc7, 0x06, 0x15, 0x7a, 0x03, 0x2a, 0xec, 0x3f, 0x5b, 0x37, 0xc7, 0x7f, 0xd5, 0x43, 0x24, - 0x2e, 0x17, 0x0c, 0x70, 0xca, 0x0b, 0x5d, 0x04, 0x48, 0xa4, 0x3f, 0x52, 0x2c, 0x42, 0xae, 0x95, - 0x46, 0xa9, 0x3c, 0x95, 0x62, 0xac, 0x51, 0xa1, 0xa7, 0xa0, 0x92, 0x38, 0x9e, 0x7f, 0xd5, 0x0b, - 0x48, 0x2c, 0xfc, 0xb9, 0x44, 0x5e, 0x72, 0x01, 0xc4, 0x29, 0x9e, 0xee, 0xe8, 0x2c, 0xa0, 0x9f, - 0xbf, 0x09, 0x34, 0xc2, 0xa8, 0xd9, 0x8e, 0x7e, 0x55, 0x41, 0xb1, 0x46, 0x61, 0xbf, 0x04, 0x67, - 0xeb, 0xa1, 0x5b, 0x0f, 0xa3, 0x64, 0x35, 0x8c, 0x6e, 0x39, 0x91, 0x2b, 0xc7, 0x6f, 0x4e, 0xa6, - 0xc8, 0xa6, 0xbb, 0xee, 0x20, 0xb7, 0x06, 0x18, 0xc9, 0xaf, 0x9f, 0x63, 0x7b, 0xfa, 0x31, 0x83, - 0x6f, 0xfe, 0x5d, 0x09, 0x50, 0x9d, 0x79, 0x4c, 0x19, 0x0f, 0x47, 0xbd, 0x03, 0x13, 0x31, 0xb9, - 0xea, 0x05, 0xed, 0xdb, 0xf2, 0x7c, 0xd5, 0x25, 0xb2, 0xa9, 0xb1, 0xa2, 0x53, 0x72, 0x8b, 0x8a, - 0x09, 0xc3, 0x19, 0x6e, 0xb4, 0x0b, 0xa3, 0x76, 0xb0, 0x18, 0xdf, 0x88, 0x49, 0x24, 0x1e, 0x4a, - 0x62, 0x5d, 0x88, 0x25, 0x10, 0xa7, 0x78, 0x3a, 0x65, 0xd8, 0x9f, 0x6b, 0x61, 0x80, 0xc3, 0x30, - 0x91, 0x93, 0x8c, 0x3d, 0xb5, 0xa1, 0xc1, 0xb1, 0x41, 0x85, 0x56, 0x01, 0xc5, 0xed, 0x56, 0xcb, - 0x67, 0xd7, 0x90, 0x8e, 0x7f, 0x29, 0x0a, 0xdb, 0x2d, 0x7e, 0x95, 0x24, 0x5e, 0xa9, 0x68, 0x74, - 0x60, 0x71, 0x4e, 0x09, 0x2a, 0x18, 0xb6, 0x62, 0xf6, 0x5b, 0xc4, 0xf4, 0x73, 0xdb, 0x66, 0x83, - 0x81, 0xb0, 0xc4, 0xd9, 0x3f, 0xc3, 0x36, 0x33, 0xf6, 0xbe, 0x4d, 0xd2, 0x8e, 0x08, 0xda, 0x83, - 0xf1, 0x16, 0xdb, 0xb0, 0x92, 0x28, 0xf4, 0x7d, 0x22, 0xf5, 0xc6, 0xbb, 0xf3, 0xde, 0xe2, 0xef, - 0x5d, 0xe8, 0xec, 0xb0, 0xc9, 0xdd, 0xfe, 0xc2, 0x24, 0x93, 0x4b, 0x0d, 0x7e, 0x68, 0x19, 0x16, - 0x3e, 0xd9, 0x42, 0x43, 0x9b, 0x2d, 0x7e, 0x4f, 0x2e, 0x95, 0xf4, 0xc2, 0xaf, 0x1b, 0xcb, 0xb2, - 0xe8, 0x75, 0x76, 0x07, 0xc7, 0x85, 0x41, 0xaf, 0x97, 0x2c, 0x39, 0x95, 0x71, 0xdd, 0x26, 0x0a, - 0x62, 0x8d, 0x09, 0xba, 0x0a, 0xe3, 0xe2, 0x39, 0x14, 0x61, 0x78, 0x28, 0x1b, 0xc7, 0xdf, 0x71, - 0xac, 0x23, 0x8f, 0xb2, 0x00, 0x6c, 0x16, 0x46, 0xdb, 0xf0, 0xb0, 0xf6, 0x78, 0x57, 0x8e, 0x07, - 0x21, 0x97, 0x2d, 0x8f, 0xdc, 0x39, 0x9c, 0x7b, 0x78, 0xa3, 0x1b, 0x21, 0xee, 0xce, 0x07, 0x5d, - 0x87, 0xb3, 0x4e, 0x33, 0xf1, 0xf6, 0x49, 0x8d, 0x38, 0xae, 0xef, 0x05, 0xc4, 0x4c, 0xf2, 0xf0, - 0xc0, 0x9d, 0xc3, 0xb9, 0xb3, 0x8b, 0x79, 0x04, 0x38, 0xbf, 0x1c, 0x7a, 0x05, 0x2a, 0x6e, 0x10, - 0x8b, 0x3e, 0x18, 0x32, 0xde, 0xa5, 0xab, 0xd4, 0xae, 0x35, 0xd4, 0xf7, 0xa7, 0x7f, 0x70, 0x5a, - 0x00, 0x6d, 0xc3, 0x98, 0x1e, 0xc8, 0x25, 0xde, 0x34, 0x7c, 0xa6, 0xcb, 0xd9, 0xd6, 0x88, 0x7e, - 0xe2, 0x56, 0x37, 0xe5, 0x9f, 0x6b, 0x04, 0x46, 0x19, 0x8c, 0xd1, 0x6b, 0x80, 0x62, 0x12, 0xed, - 0x7b, 0x4d, 0xb2, 0xd8, 0x64, 0x49, 0x86, 0x99, 0xad, 0x66, 0xc4, 0x08, 0x36, 0x41, 0x8d, 0x0e, - 0x0a, 0x9c, 0x53, 0x0a, 0x5d, 0xa6, 0x12, 0x45, 0x87, 0x0a, 0x77, 0x6a, 0xa9, 0xe6, 0x55, 0x6b, - 0xa4, 0x15, 0x91, 0xa6, 0x93, 0x10, 0xd7, 0xe4, 0x88, 0x33, 0xe5, 0xe8, 0x7e, 0xa3, 0xde, 0x6e, - 0x00, 0xd3, 0x09, 0xb8, 0xf3, 0xfd, 0x06, 0x7a, 0x42, 0xda, 0x09, 0xe3, 0xe4, 0x1a, 0x49, 0x6e, - 0x85, 0xd1, 0xae, 0xc8, 0xcc, 0x96, 0x26, 0x6e, 0x4c, 0x51, 0x58, 0xa7, 0xa3, 0x1a, 0x11, 0xbb, - 0x04, 0x5b, 0xab, 0xb1, 0x7b, 0x8a, 0x91, 0x74, 0x9d, 0x5c, 0xe6, 0x60, 0x2c, 0xf1, 0x92, 0x74, - 0xad, 0xbe, 0xcc, 0x6e, 0x1f, 0x32, 0xa4, 0x6b, 0xf5, 0x65, 0x2c, 0xf1, 0x88, 0x74, 0xbe, 0xf9, - 0x37, 0x51, 0x7c, 0x6f, 0xd4, 0x29, 0x97, 0xfb, 0x7c, 0xf6, 0x2f, 0x80, 0x29, 0xf5, 0xda, 0x20, - 0x4f, 0x59, 0x17, 0x57, 0x27, 0xd9, 0x24, 0xe9, 0x3f, 0xdf, 0x9d, 0xb2, 0xc5, 0xad, 0x65, 0x38, - 0xe1, 0x0e, 0xde, 0x46, 0xf2, 0x90, 0xa9, 0x9e, 0x6f, 0x6f, 0x2c, 0x40, 0x25, 0x6e, 0x6f, 0xba, - 0xe1, 0x9e, 0xe3, 0x05, 0xec, 0xb2, 0x40, 0x53, 0x44, 0x1a, 0x12, 0x81, 0x53, 0x1a, 0xb4, 0x0a, - 0x23, 0x8e, 0x38, 0x7c, 0x09, 0xf3, 0x7e, 0x6e, 0x36, 0x01, 0x79, 0x40, 0xe3, 0x76, 0x50, 0xf9, - 0x0f, 0xab, 0xb2, 0xe8, 0x65, 0x18, 0x17, 0x01, 0x6f, 0xc2, 0x57, 0xf5, 0x8c, 0x19, 0x1b, 0xd1, - 0xd0, 0x91, 0xd8, 0xa4, 0x45, 0x3f, 0x05, 0x13, 0x94, 0x4b, 0x2a, 0xd8, 0xaa, 0x33, 0xfd, 0x48, - 0x44, 0x2d, 0xa7, 0xba, 0x5e, 0x18, 0x67, 0x98, 0x21, 0x17, 0x1e, 0x72, 0xda, 0x49, 0xc8, 0x8c, - 0x95, 0xe6, 0xfc, 0xdf, 0x08, 0x77, 0x49, 0xc0, 0xac, 0xfb, 0x23, 0x4b, 0xe7, 0xef, 0x1c, 0xce, - 0x3d, 0xb4, 0xd8, 0x85, 0x0e, 0x77, 0xe5, 0x82, 0x6e, 0xc0, 0x68, 0x12, 0xfa, 0xc2, 0xc9, 0x3c, - 0xae, 0xde, 0x57, 0x9c, 0xfc, 0x68, 0x43, 0x91, 0xe9, 0xe6, 0x04, 0x55, 0x14, 0xeb, 0x7c, 0xd0, - 0x06, 0x5f, 0x63, 0x2c, 0x55, 0x27, 0x89, 0xab, 0xf7, 0x17, 0x77, 0x8c, 0xca, 0xe8, 0x69, 0x2e, - 0x41, 0x51, 0x12, 0xeb, 0x6c, 0xd0, 0x25, 0x98, 0x6e, 0x45, 0x5e, 0xc8, 0x26, 0xb6, 0x32, 0x14, - 0x57, 0x8d, 0xb4, 0x78, 0xd3, 0xf5, 0x2c, 0x01, 0xee, 0x2c, 0x83, 0x2e, 0x50, 0x05, 0x95, 0x03, - 0xab, 0x0f, 0xf0, 0x37, 0x59, 0xb8, 0x72, 0xca, 0x61, 0x58, 0x61, 0x67, 0x7f, 0x1c, 0xa6, 0x3b, - 0x24, 0xe5, 0xb1, 0x1c, 0x7e, 0xff, 0xc9, 0x20, 0x54, 0x94, 0x39, 0x10, 0x2d, 0x98, 0x56, 0xde, - 0x07, 0xb2, 0x56, 0xde, 0x11, 0xaa, 0xaf, 0xe9, 0x86, 0xdd, 0x8d, 0x9c, 0x27, 0xe5, 0xcf, 0x17, - 0x88, 0x86, 0xfe, 0xa3, 0xf3, 0x8e, 0xf1, 0xdc, 0x7e, 0x7a, 0x60, 0x1c, 0xe8, 0x7a, 0x60, 0xec, - 0xf3, 0x79, 0x47, 0x7a, 0x34, 0x6c, 0x85, 0xee, 0x5a, 0x3d, 0xfb, 0xde, 0x59, 0x9d, 0x02, 0x31, - 0xc7, 0x31, 0xe5, 0x9e, 0x6e, 0xeb, 0x4c, 0xb9, 0x1f, 0xbe, 0x4b, 0xe5, 0x5e, 0x32, 0xc0, 0x29, - 0x2f, 0xe4, 0xc3, 0x74, 0xd3, 0x7c, 0xaa, 0x4e, 0x45, 0xe4, 0x3d, 0xda, 0xf3, 0xd1, 0xb8, 0xb6, - 0xf6, 0x86, 0xcd, 0x72, 0x96, 0x0b, 0xee, 0x64, 0x8c, 0x5e, 0x86, 0x91, 0xf7, 0xc2, 0x98, 0x4d, - 0x3b, 0xb1, 0xb7, 0xc9, 0x18, 0xa8, 0x91, 0xd7, 0xaf, 0x37, 0x18, 0xfc, 0xe8, 0x70, 0x6e, 0xb4, - 0x1e, 0xba, 0xf2, 0x2f, 0x56, 0x05, 0xd0, 0x6d, 0x38, 0x6b, 0x48, 0x04, 0xd5, 0x5c, 0xe8, 0xbf, - 0xb9, 0x0f, 0x8b, 0xea, 0xce, 0xae, 0xe5, 0x71, 0xc2, 0xf9, 0x15, 0xd8, 0xdf, 0xe0, 0x46, 0x4f, - 0x61, 0x1a, 0x21, 0x71, 0xdb, 0x3f, 0x8d, 0x87, 0x2a, 0x56, 0x0c, 0xab, 0xcd, 0x5d, 0x1b, 0xd6, - 0x7f, 0xd7, 0x62, 0x86, 0xf5, 0x0d, 0xb2, 0xd7, 0xf2, 0x9d, 0xe4, 0x34, 0xdc, 0xbc, 0x5f, 0x87, - 0x91, 0x44, 0xd4, 0xd6, 0xed, 0x6d, 0x0d, 0xad, 0x51, 0xec, 0x72, 0x41, 0x6d, 0x88, 0x12, 0x8a, - 0x15, 0x1b, 0xfb, 0x9f, 0xf1, 0x11, 0x90, 0x98, 0x53, 0xb0, 0x2d, 0xd4, 0x4c, 0xdb, 0xc2, 0x5c, - 0x8f, 0x2f, 0x28, 0xb0, 0x31, 0xfc, 0x53, 0xb3, 0xdd, 0xec, 0xec, 0xf1, 0x51, 0xbf, 0xd1, 0xb1, - 0x7f, 0xd1, 0x82, 0x99, 0x3c, 0x47, 0x00, 0xaa, 0xc4, 0xf0, 0x93, 0x8f, 0xba, 0xe1, 0x52, 0x3d, - 0x78, 0x53, 0xc0, 0xb1, 0xa2, 0xe8, 0x3b, 0xbf, 0xfd, 0xf1, 0x12, 0x7e, 0x5d, 0x07, 0xf3, 0x55, - 0x43, 0xf4, 0x2a, 0x8f, 0xdb, 0xb0, 0xd4, 0xb3, 0x83, 0xc7, 0x8b, 0xd9, 0xb0, 0x7f, 0xb5, 0x04, - 0x33, 0xdc, 0x44, 0xbd, 0xb8, 0x1f, 0x7a, 0x6e, 0x3d, 0x74, 0x45, 0x14, 0xcb, 0x5b, 0x30, 0xd6, - 0xd2, 0x8e, 0xab, 0xdd, 0x52, 0x0e, 0xe9, 0xc7, 0xda, 0xf4, 0xd8, 0xa0, 0x43, 0xb1, 0xc1, 0x0b, - 0xb9, 0x30, 0x46, 0xf6, 0xbd, 0xa6, 0xb2, 0x73, 0x96, 0x8e, 0x2d, 0xd2, 0x55, 0x2d, 0x2b, 0x1a, - 0x1f, 0x6c, 0x70, 0xbd, 0x07, 0xaf, 0xd0, 0xd8, 0x5f, 0xb1, 0xe0, 0xfe, 0x82, 0x04, 0x45, 0xb4, - 0xba, 0x5b, 0xec, 0x32, 0x40, 0x3c, 0x91, 0xa9, 0xaa, 0xe3, 0x57, 0x04, 0x58, 0x60, 0xd1, 0x4f, - 0x02, 0x70, 0x13, 0x3f, 0xd5, 0xa2, 0xc5, 0xa7, 0xf7, 0x97, 0xb8, 0x43, 0xcb, 0xee, 0x20, 0xcb, - 0x63, 0x8d, 0x97, 0xfd, 0xcb, 0x65, 0x18, 0xe4, 0xef, 0xa5, 0xaf, 0xc2, 0xf0, 0x0e, 0x4f, 0x87, - 0xdc, 0x4f, 0xe6, 0xe5, 0xf4, 0x38, 0xc2, 0x01, 0x58, 0x16, 0x46, 0xeb, 0x70, 0x46, 0x44, 0x4a, - 0xd5, 0x88, 0xef, 0x1c, 0xc8, 0x53, 0x2d, 0x7f, 0x9a, 0x44, 0xa6, 0xcd, 0x3f, 0xb3, 0xd6, 0x49, - 0x82, 0xf3, 0xca, 0xa1, 0x57, 0x3b, 0x92, 0x20, 0xf2, 0x44, 0xd2, 0x4a, 0x07, 0xee, 0x91, 0x08, - 0xf1, 0x65, 0x18, 0x6f, 0x75, 0x9c, 0xdf, 0xb5, 0xa7, 0xaa, 0xcd, 0x33, 0xbb, 0x49, 0xcb, 0xbc, - 0x0a, 0xda, 0xcc, 0x87, 0x62, 0x63, 0x27, 0x22, 0xf1, 0x4e, 0xe8, 0xbb, 0xe2, 0x5d, 0xd6, 0xd4, - 0xab, 0x20, 0x83, 0xc7, 0x1d, 0x25, 0x28, 0x97, 0x2d, 0xc7, 0xf3, 0xdb, 0x11, 0x49, 0xb9, 0x0c, - 0x99, 0x5c, 0x56, 0x33, 0x78, 0xdc, 0x51, 0x82, 0xce, 0xa3, 0xb3, 0xe2, 0x51, 0x4f, 0x19, 0x3f, - 0xaf, 0x5c, 0x45, 0x86, 0xa5, 0x1f, 0x7d, 0x97, 0x9c, 0x2e, 0xe2, 0xca, 0x5f, 0x3d, 0x0b, 0xaa, - 0x3d, 0x19, 0x27, 0x3c, 0xe8, 0x25, 0x97, 0xbb, 0x79, 0x5a, 0xf2, 0x8f, 0x2c, 0x38, 0x93, 0xe3, - 0x3e, 0xc6, 0x45, 0xd5, 0xb6, 0x17, 0x27, 0xea, 0x45, 0x0c, 0x4d, 0x54, 0x71, 0x38, 0x56, 0x14, - 0x74, 0x3d, 0x70, 0x61, 0x98, 0x15, 0x80, 0xc2, 0xe5, 0x43, 0x60, 0x8f, 0x27, 0x00, 0xd1, 0x79, - 0x18, 0x68, 0xc7, 0x24, 0x92, 0x6f, 0x32, 0x4a, 0xf9, 0xcd, 0x2c, 0x82, 0x0c, 0x43, 0x35, 0xca, - 0x6d, 0x65, 0x8c, 0xd3, 0x34, 0x4a, 0x6e, 0x8e, 0xe3, 0x38, 0xfb, 0x4b, 0x65, 0x98, 0xcc, 0x38, - 0x80, 0xd2, 0x86, 0xec, 0x85, 0x81, 0x97, 0x84, 0x2a, 0x07, 0x1f, 0x4f, 0x39, 0x42, 0x5a, 0x3b, - 0xeb, 0x02, 0x8e, 0x15, 0x05, 0x7a, 0x4c, 0x3e, 0xd4, 0x9b, 0x7d, 0xe9, 0x63, 0xa9, 0x66, 0xbc, - 0xd5, 0xdb, 0xef, 0x93, 0x3d, 0x8f, 0xc2, 0x40, 0x2b, 0x54, 0xaf, 0xa8, 0xab, 0xf1, 0xc4, 0x4b, - 0xb5, 0x7a, 0x18, 0xfa, 0x98, 0x21, 0xd1, 0x27, 0xc4, 0xd7, 0x67, 0xee, 0x2b, 0xb0, 0xe3, 0x86, - 0xb1, 0xd6, 0x05, 0x4f, 0xc0, 0xf0, 0x2e, 0x39, 0x88, 0xbc, 0x60, 0x3b, 0x7b, 0x5b, 0x73, 0x85, - 0x83, 0xb1, 0xc4, 0x9b, 0x29, 0xef, 0x87, 0xef, 0xc9, 0xab, 0x3b, 0x23, 0x3d, 0x77, 0xb5, 0xdf, - 0xb0, 0x60, 0x92, 0xe5, 0xbb, 0x15, 0x99, 0x1a, 0xbc, 0x30, 0x38, 0x05, 0x3d, 0xe1, 0x51, 0x18, - 0x8c, 0x68, 0xa5, 0xd9, 0xa7, 0x34, 0x58, 0x4b, 0x30, 0xc7, 0xa1, 0x87, 0x60, 0x80, 0x35, 0x81, - 0x0e, 0xde, 0x18, 0xcf, 0x78, 0x5f, 0x73, 0x12, 0x07, 0x33, 0x28, 0x0b, 0x99, 0xc3, 0xa4, 0xe5, - 0x7b, 0xbc, 0xd1, 0xa9, 0xb9, 0xf5, 0xa3, 0x11, 0x32, 0x97, 0xdb, 0xb4, 0x0f, 0x16, 0x32, 0x97, - 0xcf, 0xb2, 0xbb, 0x0e, 0xfe, 0xdf, 0x4b, 0x70, 0x2e, 0xb7, 0x5c, 0xdf, 0x21, 0x73, 0xdd, 0x4b, - 0x9f, 0xcc, 0x5d, 0x6f, 0xfe, 0x15, 0x6c, 0xf9, 0x14, 0xaf, 0x60, 0x07, 0xfa, 0x55, 0x53, 0x06, - 0xfb, 0x88, 0x64, 0xcb, 0xed, 0xb2, 0x8f, 0x48, 0x24, 0x5b, 0x6e, 0xdb, 0x0a, 0xce, 0x10, 0x3f, - 0x28, 0x15, 0x7c, 0x0b, 0x3b, 0x4d, 0x5c, 0xa0, 0x72, 0x86, 0x21, 0x63, 0xa1, 0x76, 0x8d, 0x71, - 0x19, 0xc3, 0x61, 0x58, 0x61, 0x91, 0xa7, 0xc5, 0x84, 0xf1, 0xa6, 0xbd, 0x7c, 0xac, 0x25, 0x33, - 0x6f, 0x5a, 0xc7, 0xf5, 0xb4, 0x12, 0xd9, 0xf8, 0xb0, 0x75, 0xed, 0x04, 0x58, 0xee, 0xff, 0x04, - 0x38, 0x96, 0x7f, 0xfa, 0x43, 0x8b, 0x30, 0xb9, 0xe7, 0x05, 0xec, 0x3d, 0x5c, 0x53, 0xef, 0x51, - 0x21, 0xd2, 0xeb, 0x26, 0x1a, 0x67, 0xe9, 0x67, 0x5f, 0x86, 0xf1, 0xbb, 0x37, 0x59, 0x7d, 0xa7, - 0x0c, 0x0f, 0x76, 0x59, 0xf6, 0x5c, 0xd6, 0x1b, 0x63, 0xa0, 0xc9, 0xfa, 0x8e, 0x71, 0xa8, 0xc3, - 0xcc, 0x56, 0xdb, 0xf7, 0x0f, 0x98, 0x97, 0x13, 0x71, 0x25, 0x85, 0x50, 0x4c, 0x54, 0x32, 0xeb, - 0xd5, 0x1c, 0x1a, 0x9c, 0x5b, 0x12, 0xbd, 0x06, 0x28, 0xdc, 0x64, 0x09, 0x96, 0xdd, 0x34, 0x59, - 0x06, 0xeb, 0xf8, 0x72, 0xba, 0x18, 0xaf, 0x77, 0x50, 0xe0, 0x9c, 0x52, 0x54, 0xc3, 0x64, 0x2f, - 0xf8, 0xab, 0x66, 0x65, 0x34, 0x4c, 0xac, 0x23, 0xb1, 0x49, 0x8b, 0x2e, 0xc1, 0xb4, 0xb3, 0xef, - 0x78, 0x3c, 0x79, 0x9a, 0x64, 0xc0, 0x55, 0x4c, 0x65, 0x28, 0x5a, 0xcc, 0x12, 0xe0, 0xce, 0x32, - 0x99, 0xe0, 0xb6, 0xa1, 0xe2, 0xe0, 0xb6, 0xee, 0x72, 0xb1, 0x97, 0xdd, 0xcf, 0xfe, 0x4f, 0x16, - 0xdd, 0xbe, 0x72, 0x1e, 0x60, 0xa5, 0xfd, 0xa0, 0xec, 0x57, 0x5a, 0x9c, 0x99, 0xea, 0x87, 0x65, - 0x1d, 0x89, 0x4d, 0x5a, 0x3e, 0x21, 0xe2, 0xd4, 0xc9, 0xda, 0xd0, 0x13, 0x45, 0x00, 0xa8, 0xa2, - 0x40, 0x6f, 0xc2, 0xb0, 0xeb, 0xed, 0x7b, 0x71, 0x18, 0x89, 0xc5, 0x72, 0xdc, 0x47, 0xc7, 0x95, - 0x1c, 0xac, 0x71, 0x36, 0x58, 0xf2, 0xb3, 0xbf, 0x54, 0x82, 0x71, 0x59, 0xe3, 0xeb, 0xed, 0x30, - 0x71, 0x4e, 0x61, 0x5b, 0xbe, 0x64, 0x6c, 0xcb, 0x9f, 0xe8, 0x16, 0x05, 0xcb, 0x9a, 0x54, 0xb8, - 0x1d, 0x5f, 0xcf, 0x6c, 0xc7, 0x8f, 0xf7, 0x66, 0xd5, 0x7d, 0x1b, 0xfe, 0xe7, 0x16, 0x4c, 0x1b, - 0xf4, 0xa7, 0xb0, 0x1b, 0xac, 0x9a, 0xbb, 0xc1, 0x23, 0x3d, 0xbf, 0xa1, 0x60, 0x17, 0xf8, 0x5a, - 0x29, 0xd3, 0x76, 0x26, 0xfd, 0xdf, 0x83, 0x81, 0x1d, 0x27, 0x72, 0xbb, 0xa5, 0x00, 0xed, 0x28, - 0x34, 0x7f, 0xd9, 0x89, 0x5c, 0x2e, 0xc3, 0x9f, 0x56, 0x6f, 0xc3, 0x39, 0x91, 0xdb, 0x33, 0xa6, - 0x80, 0x55, 0x85, 0x5e, 0x82, 0xa1, 0xb8, 0x19, 0xb6, 0x94, 0xef, 0xe5, 0x79, 0xfe, 0x6e, 0x1c, - 0x85, 0x1c, 0x1d, 0xce, 0x21, 0xb3, 0x3a, 0x0a, 0xc6, 0x82, 0x7e, 0x76, 0x1b, 0x2a, 0xaa, 0xea, - 0x7b, 0xea, 0x55, 0xfe, 0x07, 0x65, 0x38, 0x93, 0x33, 0x2f, 0x50, 0x6c, 0xf4, 0xd6, 0xb3, 0x7d, - 0x4e, 0xa7, 0x0f, 0xd8, 0x5f, 0x31, 0x3b, 0xb1, 0xb8, 0x62, 0xfc, 0xfb, 0xae, 0xf4, 0x46, 0x4c, - 0xb2, 0x95, 0x52, 0x50, 0xef, 0x4a, 0x69, 0x65, 0xa7, 0xd6, 0xd5, 0xb4, 0x22, 0xd5, 0xd2, 0x7b, - 0x3a, 0xa6, 0x7f, 0x52, 0x86, 0x99, 0xbc, 0xe0, 0x79, 0xf4, 0xd3, 0x99, 0x07, 0x45, 0x9e, 0xef, - 0x37, 0xec, 0x9e, 0xbf, 0x32, 0x22, 0xb2, 0x0d, 0xcd, 0x9b, 0x4f, 0x8c, 0xf4, 0xec, 0x66, 0x51, - 0x27, 0x0b, 0xf2, 0x89, 0xf8, 0x43, 0x30, 0x72, 0x89, 0x7f, 0xaa, 0xef, 0x06, 0x88, 0x17, 0x64, - 0xe2, 0x4c, 0x90, 0x8f, 0x04, 0xf7, 0x0e, 0xf2, 0x91, 0x35, 0xcf, 0x7a, 0x30, 0xaa, 0x7d, 0xcd, - 0x3d, 0x1d, 0xf1, 0x5d, 0xba, 0xa3, 0x68, 0xed, 0xbe, 0xa7, 0xa3, 0xfe, 0x15, 0x0b, 0x32, 0x7e, - 0x52, 0xca, 0xfe, 0x61, 0x15, 0xda, 0x3f, 0xce, 0xc3, 0x40, 0x14, 0xfa, 0x24, 0xfb, 0xc6, 0x04, - 0x0e, 0x7d, 0x82, 0x19, 0x46, 0x3d, 0x04, 0x5d, 0x2e, 0x7a, 0x08, 0x9a, 0x1e, 0x8d, 0x7d, 0xb2, - 0x4f, 0xa4, 0x35, 0x42, 0xc9, 0xe4, 0xab, 0x14, 0x88, 0x39, 0xce, 0xfe, 0xb5, 0x01, 0x38, 0x93, - 0x13, 0xd2, 0x46, 0x0f, 0x2a, 0xdb, 0x4e, 0x42, 0x6e, 0x39, 0x07, 0xd9, 0xbc, 0xb7, 0x97, 0x38, - 0x18, 0x4b, 0x3c, 0xf3, 0xe5, 0xe4, 0xa9, 0xf3, 0x32, 0x36, 0x22, 0x91, 0x31, 0x4f, 0x60, 0xef, - 0xd5, 0xdb, 0xc0, 0x17, 0x01, 0xe2, 0xd8, 0x5f, 0x09, 0xa8, 0xf2, 0xe5, 0x0a, 0x4f, 0xd1, 0x34, - 0xcf, 0x62, 0xe3, 0xaa, 0xc0, 0x60, 0x8d, 0x0a, 0xd5, 0x60, 0xaa, 0x15, 0x85, 0x09, 0xb7, 0xbb, - 0xd5, 0xb8, 0x8f, 0xc2, 0xa0, 0x19, 0x9c, 0x54, 0xcf, 0xe0, 0x71, 0x47, 0x09, 0xf4, 0x02, 0x8c, - 0x8a, 0x80, 0xa5, 0x7a, 0x18, 0xfa, 0xc2, 0x4a, 0xa3, 0x6e, 0xbc, 0x1b, 0x29, 0x0a, 0xeb, 0x74, - 0x5a, 0x31, 0x66, 0xcc, 0x1b, 0xce, 0x2d, 0xc6, 0x0d, 0x7a, 0x1a, 0x5d, 0x26, 0x87, 0xc6, 0x48, - 0x5f, 0x39, 0x34, 0x52, 0xbb, 0x55, 0xa5, 0xef, 0xfb, 0x0b, 0xe8, 0x69, 0xe9, 0xf9, 0x46, 0x19, - 0x86, 0xf8, 0x50, 0x9c, 0x82, 0x2a, 0xb6, 0x2a, 0x6c, 0x37, 0x5d, 0x32, 0x0a, 0xf0, 0xb6, 0xcc, - 0xd7, 0x9c, 0xc4, 0xe1, 0x62, 0x48, 0xad, 0x86, 0xd4, 0xca, 0x83, 0xe6, 0x8d, 0xf5, 0x32, 0x9b, - 0x31, 0x4e, 0x00, 0xe7, 0xa1, 0xad, 0x9e, 0x77, 0x00, 0x62, 0xf6, 0x3e, 0x2d, 0xe5, 0x21, 0x72, - 0x53, 0x3c, 0xd9, 0xa5, 0xf6, 0x86, 0x22, 0xe6, 0x6d, 0x48, 0xa7, 0xa0, 0x42, 0x60, 0x8d, 0xe3, - 0xec, 0x8b, 0x50, 0x51, 0xc4, 0xbd, 0x4e, 0x72, 0x63, 0xba, 0xf0, 0xfa, 0x0c, 0x4c, 0x66, 0xea, - 0x3a, 0xd6, 0x41, 0xf0, 0x37, 0x2d, 0x98, 0xe4, 0x4d, 0x5e, 0x09, 0xf6, 0xc5, 0x62, 0x7f, 0x1f, - 0x66, 0xfc, 0x9c, 0x45, 0x27, 0x46, 0xb4, 0xff, 0x45, 0xaa, 0x0e, 0x7e, 0x79, 0x58, 0x9c, 0x5b, - 0x07, 0x3d, 0xfc, 0xf3, 0x97, 0xb5, 0x1d, 0x5f, 0x78, 0x20, 0x8f, 0xf1, 0xdc, 0xe2, 0x1c, 0x86, - 0x15, 0xd6, 0xfe, 0xae, 0x05, 0xd3, 0xbc, 0xe5, 0x57, 0xc8, 0x81, 0x3a, 0xe4, 0x7c, 0x98, 0x6d, - 0x17, 0xa9, 0xd3, 0x4b, 0x05, 0xa9, 0xd3, 0xf5, 0x4f, 0x2b, 0x77, 0xfd, 0xb4, 0x5f, 0xb5, 0x40, - 0xcc, 0xc0, 0x53, 0x50, 0xe7, 0x7f, 0xdc, 0x54, 0xe7, 0x67, 0x8b, 0x27, 0x75, 0x81, 0x1e, 0xff, - 0x67, 0x16, 0x4c, 0x71, 0x82, 0xf4, 0xf2, 0xe2, 0x43, 0x1d, 0x87, 0x7e, 0xde, 0xf3, 0x51, 0x0f, - 0xa8, 0xe6, 0x7f, 0x94, 0x31, 0x58, 0x03, 0x5d, 0x07, 0xcb, 0x95, 0x0b, 0xe8, 0x18, 0xef, 0x54, - 0x1d, 0x3b, 0xdb, 0x9f, 0xfd, 0xc7, 0x16, 0x20, 0x5e, 0x4d, 0xf6, 0x49, 0x73, 0xbe, 0xf5, 0x69, - 0x07, 0xfa, 0x54, 0xd4, 0x28, 0x0c, 0xd6, 0xa8, 0x4e, 0xa4, 0x7b, 0x32, 0x37, 0x50, 0xe5, 0xde, - 0x37, 0x50, 0xc7, 0xe8, 0xd1, 0xbf, 0x3a, 0x00, 0x59, 0x77, 0x47, 0x74, 0x13, 0xc6, 0x9a, 0x4e, - 0xcb, 0xd9, 0xf4, 0x7c, 0x2f, 0xf1, 0x48, 0xdc, 0xed, 0xea, 0x7a, 0x59, 0xa3, 0x13, 0xd7, 0x3d, - 0x1a, 0x04, 0x1b, 0x7c, 0xd0, 0x3c, 0x40, 0x2b, 0xf2, 0xf6, 0x3d, 0x9f, 0x6c, 0xb3, 0x13, 0x0d, - 0x8b, 0x79, 0xe0, 0xf7, 0xb1, 0x12, 0x8a, 0x35, 0x8a, 0x1c, 0x1f, 0xf9, 0xf2, 0xbd, 0xf3, 0x91, - 0x1f, 0x38, 0xa6, 0x8f, 0xfc, 0x60, 0x5f, 0x3e, 0xf2, 0x18, 0xee, 0x93, 0x7b, 0x37, 0xfd, 0xbf, - 0xea, 0xf9, 0x44, 0x28, 0x6c, 0x3c, 0x12, 0x62, 0xf6, 0xce, 0xe1, 0xdc, 0x7d, 0x38, 0x97, 0x02, - 0x17, 0x94, 0x44, 0x3f, 0x09, 0x55, 0xc7, 0xf7, 0xc3, 0x5b, 0xaa, 0xd7, 0x56, 0xe2, 0xa6, 0xe3, - 0xa7, 0xc9, 0x6f, 0x47, 0x96, 0x1e, 0xba, 0x73, 0x38, 0x57, 0x5d, 0x2c, 0xa0, 0xc1, 0x85, 0xa5, - 0xed, 0x5d, 0x38, 0xd3, 0x20, 0x91, 0x7c, 0xfa, 0x4e, 0x2d, 0xb1, 0x0d, 0xa8, 0x44, 0x19, 0xa1, - 0xd2, 0x57, 0xb8, 0xbc, 0x96, 0x98, 0x4c, 0x0a, 0x91, 0x94, 0x91, 0xfd, 0xa7, 0x16, 0x0c, 0x0b, - 0x17, 0xca, 0x53, 0xd0, 0x65, 0x16, 0x0d, 0xb3, 0xd2, 0x5c, 0xbe, 0xe0, 0x65, 0x8d, 0x29, 0x34, - 0x28, 0xad, 0x65, 0x0c, 0x4a, 0x8f, 0x74, 0x63, 0xd2, 0xdd, 0x94, 0xf4, 0x0b, 0x65, 0x98, 0x30, - 0xdd, 0x47, 0x4f, 0xa1, 0x0b, 0xae, 0xc1, 0x70, 0x2c, 0x7c, 0x95, 0x4b, 0xc5, 0x3e, 0x6f, 0xd9, - 0x41, 0x4c, 0x6f, 0xc6, 0x85, 0x77, 0xb2, 0x64, 0x92, 0xeb, 0x04, 0x5d, 0xbe, 0x87, 0x4e, 0xd0, - 0xbd, 0x3c, 0x78, 0x07, 0x4e, 0xc2, 0x83, 0xd7, 0xfe, 0x26, 0x13, 0xfe, 0x3a, 0xfc, 0x14, 0xf4, - 0x82, 0x4b, 0xe6, 0x36, 0x61, 0x77, 0x99, 0x59, 0xa2, 0x51, 0x05, 0xfa, 0xc1, 0x3f, 0xb2, 0x60, - 0x54, 0x10, 0x9e, 0x42, 0xb3, 0x7f, 0xc2, 0x6c, 0xf6, 0x83, 0x5d, 0x9a, 0x5d, 0xd0, 0xde, 0xbf, - 0x5d, 0x52, 0xed, 0xad, 0x87, 0x51, 0xd2, 0x57, 0x32, 0xf4, 0x11, 0x7a, 0x1a, 0x0c, 0x9b, 0xa1, - 0x2f, 0x36, 0xf3, 0x87, 0xd2, 0x60, 0x38, 0x0e, 0x3f, 0xd2, 0x7e, 0x63, 0x45, 0xcd, 0x62, 0xb5, - 0xc2, 0x28, 0x11, 0x1b, 0x68, 0x1a, 0xab, 0x15, 0x46, 0x09, 0x66, 0x18, 0xe4, 0x02, 0x24, 0x4e, - 0xb4, 0x4d, 0x12, 0x0a, 0x13, 0xd1, 0xa3, 0xc5, 0xab, 0xb0, 0x9d, 0x78, 0xfe, 0xbc, 0x17, 0x24, - 0x71, 0x12, 0xcd, 0xaf, 0x05, 0xc9, 0xf5, 0x88, 0x9f, 0x0d, 0xb4, 0xe8, 0x36, 0xc5, 0x0b, 0x6b, - 0x7c, 0x65, 0x78, 0x05, 0xab, 0x63, 0xd0, 0xbc, 0xef, 0xb9, 0x26, 0xe0, 0x58, 0x51, 0xd8, 0x2f, - 0x32, 0x99, 0xcc, 0x3a, 0xe8, 0x78, 0x81, 0x67, 0xdf, 0x1e, 0x51, 0x5d, 0xcb, 0x8c, 0xbd, 0x35, - 0x3d, 0xbc, 0xad, 0xbb, 0x08, 0xa4, 0x15, 0xeb, 0xae, 0xc4, 0x69, 0x0c, 0x1c, 0xfa, 0x6c, 0xc7, - 0x35, 0xe0, 0x33, 0x3d, 0x64, 0xe9, 0x31, 0x2e, 0xfe, 0x58, 0x66, 0x3e, 0x96, 0xc1, 0x6c, 0xad, - 0x9e, 0x4d, 0x57, 0xbf, 0x2c, 0x11, 0x38, 0xa5, 0x41, 0x0b, 0xe2, 0x64, 0xc9, 0xcd, 0x2c, 0x0f, - 0x66, 0x4e, 0x96, 0xf2, 0xf3, 0xb5, 0xa3, 0xe5, 0xb3, 0x30, 0xaa, 0x9e, 0x00, 0xaa, 0xf3, 0x97, - 0x54, 0x2a, 0x5c, 0x97, 0x5a, 0x49, 0xc1, 0x58, 0xa7, 0x41, 0x1b, 0x30, 0x19, 0xf3, 0xf7, 0x89, - 0x64, 0xc4, 0x83, 0xb0, 0x1b, 0x3c, 0x29, 0xaf, 0x0f, 0x1b, 0x26, 0xfa, 0x88, 0x81, 0xf8, 0x62, - 0x95, 0x31, 0x12, 0x59, 0x16, 0xe8, 0x55, 0x98, 0xf0, 0xf5, 0x77, 0x5a, 0xeb, 0xc2, 0xac, 0xa0, - 0x5c, 0xb9, 0x8c, 0x57, 0x5c, 0xeb, 0x38, 0x43, 0x4d, 0x95, 0x00, 0x1d, 0x22, 0x12, 0xe8, 0x38, - 0xc1, 0x36, 0x89, 0xc5, 0x03, 0x26, 0x4c, 0x09, 0xb8, 0x5a, 0x40, 0x83, 0x0b, 0x4b, 0xa3, 0x97, - 0x60, 0x4c, 0x7e, 0xbe, 0x16, 0x01, 0x94, 0x3a, 0x0c, 0x6a, 0x38, 0x6c, 0x50, 0xa2, 0x5b, 0x70, - 0x56, 0xfe, 0xdf, 0x88, 0x9c, 0xad, 0x2d, 0xaf, 0x29, 0x02, 0xb0, 0x46, 0x19, 0x8b, 0x45, 0xe9, - 0x3d, 0xbd, 0x92, 0x47, 0x74, 0x74, 0x38, 0x77, 0x5e, 0xf4, 0x5a, 0x2e, 0x9e, 0x0d, 0x62, 0x3e, - 0x7f, 0xb4, 0x0e, 0x67, 0x76, 0x88, 0xe3, 0x27, 0x3b, 0xcb, 0x3b, 0xa4, 0xb9, 0x2b, 0x17, 0x11, - 0x8b, 0x2b, 0xd2, 0xdc, 0xec, 0x2e, 0x77, 0x92, 0xe0, 0xbc, 0x72, 0xe8, 0x6d, 0xa8, 0xb6, 0xda, - 0x9b, 0xbe, 0x17, 0xef, 0x5c, 0x0b, 0x13, 0x76, 0x63, 0xa9, 0x5e, 0xd0, 0x11, 0x01, 0x48, 0x2a, - 0xa6, 0xaa, 0x5e, 0x40, 0x87, 0x0b, 0x39, 0xa0, 0xf7, 0xe1, 0x6c, 0x66, 0x32, 0xf0, 0x47, 0x99, - 0x44, 0xa0, 0xd2, 0x13, 0xf9, 0xcb, 0x29, 0xa7, 0x00, 0x0f, 0x8b, 0xcb, 0x45, 0xe1, 0xfc, 0x2a, - 0x3e, 0xd8, 0x3d, 0xf6, 0x7b, 0xb4, 0xb0, 0xa6, 0xdd, 0xa0, 0xcf, 0xc1, 0x98, 0x3e, 0x8b, 0xc4, - 0x06, 0xf3, 0x58, 0xaf, 0x37, 0x89, 0x85, 0x6e, 0xa4, 0x66, 0x94, 0x8e, 0xc3, 0x06, 0x47, 0x9b, - 0x40, 0xfe, 0xf7, 0xa1, 0xab, 0x30, 0xd2, 0xf4, 0x3d, 0x12, 0x24, 0x6b, 0xf5, 0x6e, 0x81, 0xb3, - 0xcb, 0x82, 0x46, 0x74, 0x98, 0xc8, 0xdf, 0xc4, 0x61, 0x58, 0x71, 0xb0, 0x7f, 0xa7, 0x04, 0x73, - 0x3d, 0x52, 0x78, 0x65, 0x6c, 0x80, 0x56, 0x5f, 0x36, 0xc0, 0x45, 0xf9, 0x1e, 0xd0, 0xb5, 0xcc, - 0xf9, 0x33, 0xf3, 0xd6, 0x4f, 0x7a, 0x0a, 0xcd, 0xd2, 0xf7, 0xed, 0xfe, 0xa6, 0x9b, 0x11, 0x07, - 0x7a, 0x7a, 0x01, 0xd6, 0x75, 0x7b, 0xf0, 0x60, 0xff, 0x1a, 0x7d, 0xa1, 0x29, 0xd8, 0xfe, 0x66, - 0x09, 0xce, 0xaa, 0x2e, 0xfc, 0xd1, 0xed, 0xb8, 0x1b, 0x9d, 0x1d, 0x77, 0x02, 0x86, 0x74, 0xfb, - 0x3a, 0x0c, 0x35, 0x0e, 0xe2, 0x66, 0xe2, 0xf7, 0xa1, 0x00, 0x3d, 0x6a, 0x2c, 0xd0, 0x74, 0x9b, - 0x66, 0x4f, 0xfa, 0x89, 0xf5, 0x6a, 0xff, 0x25, 0x0b, 0x26, 0x37, 0x96, 0xeb, 0x8d, 0xb0, 0xb9, - 0x4b, 0x92, 0x45, 0x6e, 0x26, 0xc2, 0x42, 0xff, 0xb1, 0xee, 0x52, 0xaf, 0xc9, 0xd3, 0x98, 0xce, - 0xc3, 0xc0, 0x4e, 0x18, 0x27, 0xd9, 0xcb, 0x92, 0xcb, 0x61, 0x9c, 0x60, 0x86, 0xb1, 0xff, 0xd0, - 0x82, 0x41, 0xf6, 0x8a, 0x5d, 0xaf, 0xd7, 0x0e, 0xfb, 0xf9, 0x2e, 0xf4, 0x02, 0x0c, 0x91, 0xad, - 0x2d, 0xd2, 0x4c, 0xc4, 0xa8, 0xca, 0x88, 0x9c, 0xa1, 0x15, 0x06, 0xa5, 0x9b, 0x3e, 0xab, 0x8c, - 0xff, 0xc5, 0x82, 0x18, 0x7d, 0x16, 0x2a, 0x89, 0xb7, 0x47, 0x16, 0x5d, 0x57, 0xdc, 0x53, 0x1c, - 0xcf, 0x25, 0x4d, 0x29, 0x21, 0x1b, 0x92, 0x09, 0x4e, 0xf9, 0xd9, 0x3f, 0x5f, 0x02, 0x48, 0x23, - 0xf7, 0x7a, 0x7d, 0xe6, 0x52, 0xc7, 0xa3, 0x8e, 0x8f, 0xe5, 0x3c, 0xea, 0x88, 0x52, 0x86, 0x39, - 0x4f, 0x3a, 0xaa, 0xae, 0x2a, 0xf7, 0xd5, 0x55, 0x03, 0xc7, 0xe9, 0xaa, 0x65, 0x98, 0x4e, 0x23, - 0x0f, 0xcd, 0x30, 0x6c, 0x96, 0xae, 0x77, 0x23, 0x8b, 0xc4, 0x9d, 0xf4, 0xf6, 0x17, 0x2d, 0x10, - 0x6e, 0xca, 0x7d, 0x4c, 0xe8, 0xb7, 0xe4, 0xfb, 0x6b, 0x46, 0x5e, 0xc1, 0xf3, 0xc5, 0x7e, 0xdb, - 0x22, 0x9b, 0xa0, 0xda, 0x40, 0x8c, 0x1c, 0x82, 0x06, 0x2f, 0xfb, 0xaf, 0x97, 0x60, 0x94, 0xa3, - 0x59, 0xce, 0xba, 0x3e, 0x5a, 0x73, 0xac, 0x64, 0xcf, 0xec, 0x69, 0x32, 0xca, 0x58, 0xe5, 0x04, - 0xd6, 0x9f, 0x26, 0x93, 0x08, 0x9c, 0xd2, 0xa0, 0x27, 0x60, 0x38, 0x6e, 0x6f, 0x32, 0xf2, 0x8c, - 0xa7, 0x72, 0x83, 0x83, 0xb1, 0xc4, 0xa3, 0x9f, 0x84, 0x29, 0x5e, 0x2e, 0x0a, 0x5b, 0xce, 0x36, - 0xb7, 0xef, 0x0c, 0xaa, 0x38, 0x95, 0xa9, 0xf5, 0x0c, 0xee, 0xe8, 0x70, 0x6e, 0x26, 0x0b, 0x63, - 0x96, 0xc1, 0x0e, 0x2e, 0x74, 0xc6, 0x4e, 0x65, 0x5d, 0xe0, 0xd1, 0x65, 0x18, 0xe2, 0x02, 0x49, - 0x08, 0x88, 0x2e, 0xf7, 0x3d, 0x9a, 0xe3, 0x3c, 0xf0, 0x57, 0xfa, 0x99, 0x20, 0x13, 0xe5, 0xd1, - 0xdb, 0x30, 0xea, 0x86, 0xb7, 0x82, 0x5b, 0x4e, 0xe4, 0x2e, 0xd6, 0xd7, 0xc4, 0x78, 0xe6, 0xea, - 0x35, 0xb5, 0x94, 0x4c, 0x77, 0xc6, 0x67, 0xb6, 0xcd, 0x14, 0x85, 0x75, 0x76, 0x68, 0x83, 0xa5, - 0x59, 0xe1, 0x6f, 0x07, 0x77, 0x73, 0xed, 0x51, 0xcf, 0x0d, 0x6b, 0x9c, 0xc7, 0x45, 0x2e, 0x16, - 0xf1, 0xf2, 0x70, 0xca, 0xc8, 0xfe, 0xfc, 0x19, 0x30, 0xe6, 0x91, 0x91, 0xec, 0xd9, 0x3a, 0xa1, - 0x64, 0xcf, 0x18, 0x46, 0xc8, 0x5e, 0x2b, 0x39, 0xa8, 0x79, 0x51, 0xb7, 0x2c, 0xff, 0x2b, 0x82, - 0xa6, 0x93, 0xa7, 0xc4, 0x60, 0xc5, 0x27, 0x3f, 0x23, 0x77, 0xf9, 0x43, 0xcc, 0xc8, 0x3d, 0x70, - 0x8a, 0x19, 0xb9, 0xaf, 0xc1, 0xf0, 0xb6, 0x97, 0x60, 0xd2, 0x0a, 0xc5, 0x66, 0x9c, 0x3b, 0x13, - 0x2e, 0x71, 0x92, 0xce, 0xbc, 0xb1, 0x02, 0x81, 0x25, 0x13, 0xf4, 0x9a, 0x5a, 0x03, 0x43, 0xc5, - 0xba, 0x6c, 0xe7, 0xd5, 0x40, 0xee, 0x2a, 0x10, 0x19, 0xb8, 0x87, 0xef, 0x36, 0x03, 0xb7, 0xca, - 0xa0, 0x3d, 0xf2, 0xc1, 0x32, 0x68, 0x1b, 0x19, 0xc6, 0x2b, 0x27, 0x97, 0x61, 0xfc, 0x8b, 0x16, - 0x9c, 0x6d, 0xe5, 0x25, 0xdb, 0x17, 0xb9, 0xb0, 0x5f, 0xe8, 0xfb, 0x35, 0x01, 0xa3, 0x42, 0x76, - 0xa8, 0xc9, 0x25, 0xc3, 0xf9, 0xd5, 0xc9, 0x54, 0xe5, 0xa3, 0x77, 0x9b, 0xaa, 0xfc, 0xde, 0x24, - 0xcd, 0x4e, 0x13, 0x97, 0x8f, 0x7f, 0xe0, 0xc4, 0xe5, 0xaf, 0xa9, 0xc4, 0xe5, 0x5d, 0x92, 0x59, - 0xf0, 0xb4, 0xe4, 0x3d, 0xd3, 0x95, 0x6b, 0x29, 0xc7, 0x27, 0x4f, 0x22, 0xe5, 0xf8, 0x3b, 0xa6, - 0xb0, 0xe7, 0xf9, 0xaf, 0x9f, 0xea, 0x21, 0xec, 0x0d, 0xbe, 0xdd, 0xc5, 0x3d, 0x4f, 0xaf, 0x3e, - 0x7d, 0x57, 0xe9, 0xd5, 0x6f, 0xea, 0x89, 0xcb, 0x51, 0x8f, 0xcc, 0xdc, 0x94, 0xa8, 0xcf, 0x74, - 0xe5, 0x37, 0xf5, 0x2d, 0xe8, 0x4c, 0x31, 0x5f, 0xb5, 0xd3, 0x74, 0xf2, 0xcd, 0xdb, 0x84, 0x3a, - 0xd3, 0xa0, 0xcf, 0x9c, 0x4e, 0x1a, 0xf4, 0xb3, 0x27, 0x9e, 0x06, 0xfd, 0xbe, 0x53, 0x48, 0x83, - 0x7e, 0xff, 0x87, 0x9a, 0x06, 0xbd, 0x7a, 0x6f, 0xd3, 0xa0, 0x3f, 0x70, 0x12, 0x69, 0xd0, 0x6f, - 0x42, 0xa5, 0x25, 0xa3, 0x24, 0xab, 0xb3, 0xc5, 0x43, 0x92, 0x1b, 0x4a, 0xc9, 0x87, 0x44, 0xa1, - 0x70, 0xca, 0x8a, 0xf2, 0x4d, 0xd3, 0xa2, 0x3f, 0xd8, 0xc5, 0x6c, 0x95, 0x67, 0x10, 0xe8, 0x92, - 0x0c, 0xfd, 0x2f, 0x97, 0xe0, 0x5c, 0xf7, 0x79, 0x9d, 0x5a, 0x13, 0xea, 0xa9, 0xf5, 0x3b, 0x63, - 0x4d, 0x60, 0x4a, 0x97, 0x46, 0xd5, 0x77, 0x28, 0xf9, 0x25, 0x98, 0x56, 0xce, 0x62, 0xbe, 0xd7, - 0x3c, 0xd0, 0x5e, 0x4c, 0x52, 0xf1, 0x07, 0x8d, 0x2c, 0x01, 0xee, 0x2c, 0x83, 0x16, 0x61, 0xd2, - 0x00, 0xae, 0xd5, 0x84, 0xb2, 0xaf, 0xcc, 0x17, 0x0d, 0x13, 0x8d, 0xb3, 0xf4, 0xf6, 0xd7, 0x2c, - 0xb8, 0xbf, 0x20, 0x37, 0x6a, 0xdf, 0x91, 0xd2, 0x5b, 0x30, 0xd9, 0x32, 0x8b, 0xf6, 0x48, 0xa8, - 0x60, 0x64, 0x60, 0x55, 0x6d, 0xcd, 0x20, 0x70, 0x96, 0xe9, 0xd2, 0x85, 0x6f, 0x7d, 0xef, 0xdc, - 0xc7, 0x7e, 0xff, 0x7b, 0xe7, 0x3e, 0xf6, 0xdd, 0xef, 0x9d, 0xfb, 0xd8, 0xff, 0x7f, 0xe7, 0x9c, - 0xf5, 0xad, 0x3b, 0xe7, 0xac, 0xdf, 0xbf, 0x73, 0xce, 0xfa, 0xee, 0x9d, 0x73, 0xd6, 0x1f, 0xdd, - 0x39, 0x67, 0xfd, 0xfc, 0xf7, 0xcf, 0x7d, 0xec, 0xad, 0xd2, 0xfe, 0xb3, 0xff, 0x2f, 0x00, 0x00, - 0xff, 0xff, 0x98, 0xcc, 0x13, 0x07, 0x60, 0xd1, 0x00, 0x00, + // 11903 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6b, 0x70, 0x24, 0xc7, + 0x79, 0x98, 0x66, 0x17, 0xaf, 0xfd, 0xf0, 0xee, 0xc3, 0x91, 0x7b, 0x20, 0xef, 0x70, 0x1c, 0x4a, + 0xe4, 0xf1, 0x05, 0x88, 0x47, 0x52, 0xa4, 0x45, 0x8a, 0x36, 0x80, 0x05, 0xee, 0xc0, 0x3b, 0xdc, + 0x2d, 0x7b, 0x71, 0x77, 0x22, 0x4d, 0x33, 0x1a, 0xec, 0x36, 0x16, 0x43, 0x0c, 0x66, 0x96, 0x33, + 0xb3, 0xb8, 0x03, 0xcb, 0xaa, 0x4a, 0x14, 0x59, 0x79, 0xc8, 0x3f, 0x54, 0x89, 0x2a, 0x71, 0x2c, + 0x95, 0x53, 0x95, 0x47, 0xd9, 0x8a, 0x93, 0x54, 0x1c, 0x39, 0xb2, 0x23, 0x39, 0x15, 0xc7, 0x79, + 0x94, 0xfc, 0x47, 0xb1, 0xf3, 0x47, 0xaa, 0x72, 0x05, 0xb1, 0x4e, 0xa9, 0xa4, 0xf2, 0x23, 0xa9, + 0x24, 0xfe, 0x65, 0xc4, 0x89, 0x52, 0xfd, 0x9c, 0xee, 0xd9, 0x99, 0xdd, 0xc5, 0x11, 0x07, 0x52, + 0x2a, 0xfd, 0xdb, 0xed, 0xef, 0xeb, 0xaf, 0x7b, 0xfa, 0xf1, 0xf5, 0xd7, 0x5f, 0x7f, 0x0f, 0x78, + 0x79, 0xe7, 0xa5, 0x68, 0xde, 0x0d, 0x16, 0x76, 0xda, 0x9b, 0x24, 0xf4, 0x49, 0x4c, 0xa2, 0x85, + 0x3d, 0xe2, 0x37, 0x82, 0x70, 0x41, 0x00, 0x9c, 0x96, 0xbb, 0x50, 0x0f, 0x42, 0xb2, 0xb0, 0xf7, + 0xec, 0x42, 0x93, 0xf8, 0x24, 0x74, 0x62, 0xd2, 0x98, 0x6f, 0x85, 0x41, 0x1c, 0x20, 0xc4, 0x71, + 0xe6, 0x9d, 0x96, 0x3b, 0x4f, 0x71, 0xe6, 0xf7, 0x9e, 0x9d, 0x7d, 0xa6, 0xe9, 0xc6, 0xdb, 0xed, + 0xcd, 0xf9, 0x7a, 0xb0, 0xbb, 0xd0, 0x0c, 0x9a, 0xc1, 0x02, 0x43, 0xdd, 0x6c, 0x6f, 0xb1, 0x7f, + 0xec, 0x0f, 0xfb, 0xc5, 0x49, 0xcc, 0xae, 0x27, 0xcd, 0x90, 0x3b, 0x31, 0xf1, 0x23, 0x37, 0xf0, + 0xa3, 0x67, 0x9c, 0x96, 0x1b, 0x91, 0x70, 0x8f, 0x84, 0x0b, 0xad, 0x9d, 0x26, 0x85, 0x45, 0x26, + 0xc2, 0xc2, 0xde, 0xb3, 0x9b, 0x24, 0x76, 0x3a, 0x7a, 0x34, 0xfb, 0x7c, 0x42, 0x6e, 0xd7, 0xa9, + 0x6f, 0xbb, 0x3e, 0x09, 0xf7, 0x25, 0x8d, 0x85, 0x90, 0x44, 0x41, 0x3b, 0xac, 0x93, 0x23, 0xd5, + 0x8a, 0x16, 0x76, 0x49, 0xec, 0x64, 0x7c, 0xfd, 0xec, 0x42, 0x5e, 0xad, 0xb0, 0xed, 0xc7, 0xee, + 0x6e, 0x67, 0x33, 0x9f, 0xe8, 0x55, 0x21, 0xaa, 0x6f, 0x93, 0x5d, 0xa7, 0xa3, 0xde, 0x73, 0x79, + 0xf5, 0xda, 0xb1, 0xeb, 0x2d, 0xb8, 0x7e, 0x1c, 0xc5, 0x61, 0xba, 0x92, 0xfd, 0x5d, 0x0b, 0xce, + 0x2f, 0xde, 0xaa, 0xad, 0x78, 0x4e, 0x14, 0xbb, 0xf5, 0x25, 0x2f, 0xa8, 0xef, 0xd4, 0xe2, 0x20, + 0x24, 0x37, 0x03, 0xaf, 0xbd, 0x4b, 0x6a, 0x6c, 0x20, 0xd0, 0xd3, 0x30, 0xb2, 0xc7, 0xfe, 0xaf, + 0x55, 0xca, 0xd6, 0x79, 0xeb, 0x42, 0x69, 0x69, 0xea, 0xdb, 0x07, 0x73, 0x1f, 0xb9, 0x7b, 0x30, + 0x37, 0x72, 0x53, 0x94, 0x63, 0x85, 0x81, 0x1e, 0x83, 0xa1, 0xad, 0x68, 0x63, 0xbf, 0x45, 0xca, + 0x05, 0x86, 0x3b, 0x21, 0x70, 0x87, 0x56, 0x6b, 0xb4, 0x14, 0x0b, 0x28, 0x5a, 0x80, 0x52, 0xcb, + 0x09, 0x63, 0x37, 0x76, 0x03, 0xbf, 0x5c, 0x3c, 0x6f, 0x5d, 0x18, 0x5c, 0x9a, 0x16, 0xa8, 0xa5, + 0xaa, 0x04, 0xe0, 0x04, 0x87, 0x76, 0x23, 0x24, 0x4e, 0xe3, 0xba, 0xef, 0xed, 0x97, 0x07, 0xce, + 0x5b, 0x17, 0x46, 0x92, 0x6e, 0x60, 0x51, 0x8e, 0x15, 0x86, 0xfd, 0xcb, 0x05, 0x18, 0x59, 0xdc, + 0xda, 0x72, 0x7d, 0x37, 0xde, 0x47, 0x37, 0x61, 0xcc, 0x0f, 0x1a, 0x44, 0xfe, 0x67, 0x5f, 0x31, + 0x7a, 0xf1, 0xfc, 0x7c, 0xe7, 0xca, 0x9c, 0xbf, 0xa6, 0xe1, 0x2d, 0x4d, 0xdd, 0x3d, 0x98, 0x1b, + 0xd3, 0x4b, 0xb0, 0x41, 0x07, 0x61, 0x18, 0x6d, 0x05, 0x0d, 0x45, 0xb6, 0xc0, 0xc8, 0xce, 0x65, + 0x91, 0xad, 0x26, 0x68, 0x4b, 0x93, 0x77, 0x0f, 0xe6, 0x46, 0xb5, 0x02, 0xac, 0x13, 0x41, 0x9b, + 0x30, 0x49, 0xff, 0xfa, 0xb1, 0xab, 0xe8, 0x16, 0x19, 0xdd, 0x47, 0xf3, 0xe8, 0x6a, 0xa8, 0x4b, + 0xa7, 0xee, 0x1e, 0xcc, 0x4d, 0xa6, 0x0a, 0x71, 0x9a, 0xa0, 0xfd, 0x1e, 0x4c, 0x2c, 0xc6, 0xb1, + 0x53, 0xdf, 0x26, 0x0d, 0x3e, 0x83, 0xe8, 0x79, 0x18, 0xf0, 0x9d, 0x5d, 0x22, 0xe6, 0xf7, 0xbc, + 0x18, 0xd8, 0x81, 0x6b, 0xce, 0x2e, 0x39, 0x3c, 0x98, 0x9b, 0xba, 0xe1, 0xbb, 0xef, 0xb6, 0xc5, + 0xaa, 0xa0, 0x65, 0x98, 0x61, 0xa3, 0x8b, 0x00, 0x0d, 0xb2, 0xe7, 0xd6, 0x49, 0xd5, 0x89, 0xb7, + 0xc5, 0x7c, 0x23, 0x51, 0x17, 0x2a, 0x0a, 0x82, 0x35, 0x2c, 0xfb, 0x0e, 0x94, 0x16, 0xf7, 0x02, + 0xb7, 0x51, 0x0d, 0x1a, 0x11, 0xda, 0x81, 0xc9, 0x56, 0x48, 0xb6, 0x48, 0xa8, 0x8a, 0xca, 0xd6, + 0xf9, 0xe2, 0x85, 0xd1, 0x8b, 0x17, 0x32, 0x3f, 0xd6, 0x44, 0x5d, 0xf1, 0xe3, 0x70, 0x7f, 0xe9, + 0x41, 0xd1, 0xde, 0x64, 0x0a, 0x8a, 0xd3, 0x94, 0xed, 0x7f, 0x53, 0x80, 0xd3, 0x8b, 0xef, 0xb5, + 0x43, 0x52, 0x71, 0xa3, 0x9d, 0xf4, 0x0a, 0x6f, 0xb8, 0xd1, 0xce, 0xb5, 0x64, 0x04, 0xd4, 0xd2, + 0xaa, 0x88, 0x72, 0xac, 0x30, 0xd0, 0x33, 0x30, 0x4c, 0x7f, 0xdf, 0xc0, 0x6b, 0xe2, 0x93, 0x4f, + 0x09, 0xe4, 0xd1, 0x8a, 0x13, 0x3b, 0x15, 0x0e, 0xc2, 0x12, 0x07, 0xad, 0xc3, 0x68, 0x9d, 0x6d, + 0xc8, 0xe6, 0x7a, 0xd0, 0x20, 0x6c, 0x32, 0x4b, 0x4b, 0x4f, 0x51, 0xf4, 0xe5, 0xa4, 0xf8, 0xf0, + 0x60, 0xae, 0xcc, 0xfb, 0x26, 0x48, 0x68, 0x30, 0xac, 0xd7, 0x47, 0xb6, 0xda, 0x5f, 0x03, 0x8c, + 0x12, 0x64, 0xec, 0xad, 0x0b, 0xda, 0x56, 0x19, 0x64, 0x5b, 0x65, 0x2c, 0x7b, 0x9b, 0xa0, 0x67, + 0x61, 0x60, 0xc7, 0xf5, 0x1b, 0xe5, 0x21, 0x46, 0xeb, 0x2c, 0x9d, 0xf3, 0x2b, 0xae, 0xdf, 0x38, + 0x3c, 0x98, 0x9b, 0x36, 0xba, 0x43, 0x0b, 0x31, 0x43, 0xb5, 0xff, 0xc4, 0x82, 0x39, 0x06, 0x5b, + 0x75, 0x3d, 0x52, 0x25, 0x61, 0xe4, 0x46, 0x31, 0xf1, 0x63, 0x63, 0x40, 0x2f, 0x02, 0x44, 0xa4, + 0x1e, 0x92, 0x58, 0x1b, 0x52, 0xb5, 0x30, 0x6a, 0x0a, 0x82, 0x35, 0x2c, 0xca, 0x10, 0xa2, 0x6d, + 0x27, 0x64, 0xeb, 0x4b, 0x0c, 0xac, 0x62, 0x08, 0x35, 0x09, 0xc0, 0x09, 0x8e, 0xc1, 0x10, 0x8a, + 0xbd, 0x18, 0x02, 0xfa, 0x14, 0x4c, 0x26, 0x8d, 0x45, 0x2d, 0xa7, 0x2e, 0x07, 0x90, 0x6d, 0x99, + 0x9a, 0x09, 0xc2, 0x69, 0x5c, 0xfb, 0x1f, 0x58, 0x62, 0xf1, 0xd0, 0xaf, 0xfe, 0x90, 0x7f, 0xab, + 0xfd, 0xdb, 0x16, 0x0c, 0x2f, 0xb9, 0x7e, 0xc3, 0xf5, 0x9b, 0xe8, 0x33, 0x30, 0x42, 0xcf, 0xa6, + 0x86, 0x13, 0x3b, 0x82, 0xef, 0x7d, 0x5c, 0xdb, 0x5b, 0xea, 0xa8, 0x98, 0x6f, 0xed, 0x34, 0x69, + 0x41, 0x34, 0x4f, 0xb1, 0xe9, 0x6e, 0xbb, 0xbe, 0xf9, 0x0e, 0xa9, 0xc7, 0xeb, 0x24, 0x76, 0x92, + 0xcf, 0x49, 0xca, 0xb0, 0xa2, 0x8a, 0xae, 0xc0, 0x50, 0xec, 0x84, 0x4d, 0x12, 0x0b, 0x06, 0x98, + 0xc9, 0xa8, 0x78, 0x4d, 0x4c, 0x77, 0x24, 0xf1, 0xeb, 0x24, 0x39, 0x16, 0x36, 0x58, 0x55, 0x2c, + 0x48, 0xd8, 0x75, 0x18, 0x5b, 0x76, 0x5a, 0xce, 0xa6, 0xeb, 0xb9, 0xb1, 0x4b, 0x22, 0xf4, 0x38, + 0x14, 0x9d, 0x46, 0x83, 0x71, 0x85, 0xd2, 0xd2, 0xe9, 0xbb, 0x07, 0x73, 0xc5, 0xc5, 0x06, 0x5d, + 0x9e, 0xa0, 0xb0, 0xf6, 0x31, 0xc5, 0x40, 0x4f, 0xc2, 0x40, 0x23, 0x0c, 0x5a, 0xe5, 0x02, 0xc3, + 0x7c, 0x80, 0xae, 0xe4, 0x4a, 0x18, 0xb4, 0x52, 0xa8, 0x0c, 0xc7, 0xfe, 0xdd, 0x02, 0x3c, 0xbc, + 0x4c, 0x5a, 0xdb, 0xab, 0xb5, 0x9c, 0xf5, 0x7b, 0x01, 0x46, 0x76, 0x03, 0xdf, 0x8d, 0x83, 0x30, + 0x12, 0x4d, 0xb3, 0x0d, 0xb4, 0x2e, 0xca, 0xb0, 0x82, 0xa2, 0xf3, 0x30, 0xd0, 0x4a, 0x98, 0xdf, + 0x98, 0x64, 0x9c, 0x8c, 0xed, 0x31, 0x08, 0xc5, 0x68, 0x47, 0x24, 0x14, 0x1b, 0x5f, 0x61, 0xdc, + 0x88, 0x48, 0x88, 0x19, 0x24, 0x59, 0x41, 0x74, 0x6d, 0x89, 0x55, 0x99, 0x5a, 0x41, 0x14, 0x82, + 0x35, 0x2c, 0x54, 0x85, 0x12, 0xff, 0x87, 0xc9, 0x16, 0xdb, 0xe3, 0x39, 0xe3, 0x5e, 0x93, 0x48, + 0x62, 0xdc, 0xc7, 0xd9, 0x12, 0x93, 0x85, 0x38, 0x21, 0x62, 0x2c, 0xb1, 0xa1, 0x9e, 0x4b, 0xec, + 0x5b, 0x05, 0x40, 0x7c, 0x08, 0x7f, 0xc4, 0x06, 0xee, 0x46, 0xe7, 0xc0, 0x65, 0x1e, 0x36, 0x57, + 0x83, 0xba, 0xe3, 0xa5, 0x57, 0xed, 0x71, 0x8d, 0xde, 0x2f, 0x59, 0x80, 0x96, 0x5d, 0xbf, 0x41, + 0xc2, 0x13, 0x90, 0xb4, 0x8e, 0xc6, 0x3b, 0xae, 0xc2, 0xc4, 0xb2, 0xe7, 0x12, 0x3f, 0x5e, 0xab, + 0x2e, 0x07, 0xfe, 0x96, 0xdb, 0x44, 0x9f, 0x84, 0x09, 0x2a, 0x78, 0x06, 0xed, 0xb8, 0x46, 0xea, + 0x81, 0xcf, 0xce, 0x68, 0x2a, 0xae, 0xa1, 0xbb, 0x07, 0x73, 0x13, 0x1b, 0x06, 0x04, 0xa7, 0x30, + 0xed, 0x3f, 0xa2, 0x1f, 0x1a, 0xec, 0xb6, 0x02, 0x9f, 0xf8, 0xf1, 0x72, 0xe0, 0x37, 0xb8, 0x2c, + 0xf7, 0x49, 0x18, 0x88, 0x69, 0xc7, 0xf9, 0x47, 0x3e, 0x26, 0xa7, 0x96, 0x76, 0xf7, 0xf0, 0x60, + 0xee, 0x81, 0xce, 0x1a, 0xec, 0x83, 0x58, 0x1d, 0xf4, 0x53, 0x30, 0x14, 0xc5, 0x4e, 0xdc, 0x8e, + 0xc4, 0x67, 0x3f, 0x22, 0x3f, 0xbb, 0xc6, 0x4a, 0x0f, 0x0f, 0xe6, 0x26, 0x55, 0x35, 0x5e, 0x84, + 0x45, 0x05, 0xf4, 0x04, 0x0c, 0xef, 0x92, 0x28, 0x72, 0x9a, 0xf2, 0x18, 0x9e, 0x14, 0x75, 0x87, + 0xd7, 0x79, 0x31, 0x96, 0x70, 0xf4, 0x28, 0x0c, 0x92, 0x30, 0x0c, 0x42, 0xb1, 0xaa, 0xc6, 0x05, + 0xe2, 0xe0, 0x0a, 0x2d, 0xc4, 0x1c, 0x66, 0xff, 0x7b, 0x0b, 0x26, 0x55, 0x5f, 0x79, 0x5b, 0x27, + 0xc0, 0x6f, 0xdf, 0x04, 0xa8, 0xcb, 0x0f, 0x8c, 0x18, 0xbf, 0x1b, 0xbd, 0xf8, 0x58, 0xd6, 0x12, + 0xee, 0x1c, 0xc6, 0x84, 0xb2, 0x2a, 0x8a, 0xb0, 0x46, 0xcd, 0xfe, 0x17, 0x16, 0x9c, 0x4a, 0x7d, + 0xd1, 0x55, 0x37, 0x8a, 0xd1, 0x5b, 0x1d, 0x5f, 0x35, 0xdf, 0xdf, 0x57, 0xd1, 0xda, 0xec, 0x9b, + 0xd4, 0x9a, 0x93, 0x25, 0xda, 0x17, 0x5d, 0x86, 0x41, 0x37, 0x26, 0xbb, 0xf2, 0x63, 0x1e, 0xed, + 0xfa, 0x31, 0xbc, 0x57, 0xc9, 0x8c, 0xac, 0xd1, 0x9a, 0x98, 0x13, 0xb0, 0xff, 0x97, 0x05, 0x25, + 0xbe, 0x6c, 0xd7, 0x9d, 0xd6, 0x09, 0xcc, 0xc5, 0x1a, 0x0c, 0x30, 0xea, 0xbc, 0xe3, 0x8f, 0x67, + 0x77, 0x5c, 0x74, 0x67, 0x9e, 0x0a, 0x53, 0x5c, 0x68, 0x55, 0xcc, 0x8c, 0x16, 0x61, 0x46, 0x62, + 0xf6, 0x45, 0x28, 0x29, 0x04, 0x34, 0x05, 0xc5, 0x1d, 0xc2, 0x2f, 0x2a, 0x25, 0x4c, 0x7f, 0xa2, + 0x19, 0x18, 0xdc, 0x73, 0xbc, 0xb6, 0xd8, 0xec, 0x98, 0xff, 0xf9, 0x64, 0xe1, 0x25, 0xcb, 0xfe, + 0x26, 0xdb, 0x63, 0xa2, 0x91, 0x15, 0x7f, 0x4f, 0x30, 0x93, 0xf7, 0x60, 0xc6, 0xcb, 0xe0, 0x61, + 0x62, 0x20, 0xfa, 0xe7, 0x79, 0x0f, 0x8b, 0xbe, 0xce, 0x64, 0x41, 0x71, 0x66, 0x1b, 0xf4, 0x18, + 0x08, 0x5a, 0x74, 0x45, 0x39, 0x1e, 0xeb, 0xaf, 0x10, 0x40, 0xaf, 0x8b, 0x32, 0xac, 0xa0, 0x94, + 0x41, 0xcc, 0xa8, 0xce, 0x5f, 0x21, 0xfb, 0x35, 0xe2, 0x91, 0x7a, 0x1c, 0x84, 0x1f, 0x68, 0xf7, + 0xcf, 0xf2, 0xd1, 0xe7, 0xfc, 0x65, 0x54, 0x10, 0x28, 0x5e, 0x21, 0xfb, 0x7c, 0x2a, 0xf4, 0xaf, + 0x2b, 0x76, 0xfd, 0xba, 0xdf, 0xb0, 0x60, 0x5c, 0x7d, 0xdd, 0x09, 0x6c, 0xa4, 0x25, 0x73, 0x23, + 0x9d, 0xed, 0xba, 0x1e, 0x73, 0xb6, 0xd0, 0x0f, 0x19, 0x0b, 0x10, 0x38, 0xd5, 0x30, 0xa0, 0x43, + 0x43, 0x79, 0xf6, 0x07, 0x39, 0x21, 0xfd, 0x7c, 0xd7, 0x15, 0xb2, 0xbf, 0x11, 0x50, 0xf1, 0x21, + 0xfb, 0xbb, 0x8c, 0x59, 0x1b, 0xe8, 0x3a, 0x6b, 0xbf, 0x59, 0x80, 0xd3, 0x6a, 0x04, 0x8c, 0x03, + 0xfa, 0x47, 0x7d, 0x0c, 0x9e, 0x85, 0xd1, 0x06, 0xd9, 0x72, 0xda, 0x5e, 0xac, 0xee, 0xa2, 0x83, + 0x5c, 0x1f, 0x51, 0x49, 0x8a, 0xb1, 0x8e, 0x73, 0x84, 0x61, 0xfb, 0xb7, 0xc0, 0x78, 0x6f, 0xec, + 0xd0, 0x15, 0x4c, 0xa5, 0x37, 0x4d, 0xa3, 0x30, 0xa6, 0x6b, 0x14, 0x84, 0xf6, 0xe0, 0x51, 0x18, + 0x74, 0x77, 0xe9, 0x59, 0x5c, 0x30, 0x8f, 0xd8, 0x35, 0x5a, 0x88, 0x39, 0x0c, 0x7d, 0x0c, 0x86, + 0xeb, 0xc1, 0xee, 0xae, 0xe3, 0x37, 0xca, 0x45, 0x26, 0x4f, 0x8e, 0xd2, 0xe3, 0x7a, 0x99, 0x17, + 0x61, 0x09, 0x43, 0x0f, 0xc3, 0x80, 0x13, 0x36, 0xa3, 0xf2, 0x00, 0xc3, 0x19, 0xa1, 0x2d, 0x2d, + 0x86, 0xcd, 0x08, 0xb3, 0x52, 0x2a, 0x27, 0xde, 0x0e, 0xc2, 0x1d, 0xd7, 0x6f, 0x56, 0xdc, 0x90, + 0x09, 0x7d, 0x9a, 0x9c, 0x78, 0x4b, 0x41, 0xb0, 0x86, 0x85, 0x56, 0x61, 0xb0, 0x15, 0x84, 0x71, + 0x54, 0x1e, 0x62, 0xc3, 0xfd, 0x48, 0xce, 0x56, 0xe2, 0x5f, 0x5b, 0x0d, 0xc2, 0x38, 0xf9, 0x00, + 0xfa, 0x2f, 0xc2, 0xbc, 0x3a, 0xfa, 0x29, 0x28, 0x12, 0x7f, 0xaf, 0x3c, 0xcc, 0xa8, 0xcc, 0x66, + 0x51, 0x59, 0xf1, 0xf7, 0x6e, 0x3a, 0x61, 0xc2, 0x67, 0x56, 0xfc, 0x3d, 0x4c, 0xeb, 0xa0, 0x37, + 0xa0, 0x24, 0xb5, 0x91, 0x51, 0x79, 0x24, 0x7f, 0x89, 0x61, 0x81, 0x84, 0xc9, 0xbb, 0x6d, 0x37, + 0x24, 0xbb, 0xc4, 0x8f, 0xa3, 0xe4, 0x3e, 0x29, 0xa1, 0x11, 0x4e, 0xa8, 0xa1, 0x37, 0x60, 0x8c, + 0xcb, 0x91, 0xeb, 0x41, 0xdb, 0x8f, 0xa3, 0x72, 0x89, 0x75, 0x2f, 0x53, 0x75, 0x75, 0x33, 0xc1, + 0x5b, 0x9a, 0x11, 0x44, 0xc7, 0xb4, 0xc2, 0x08, 0x1b, 0xa4, 0x10, 0x86, 0x71, 0xcf, 0xdd, 0x23, + 0x3e, 0x89, 0xa2, 0x6a, 0x18, 0x6c, 0x92, 0x32, 0xb0, 0x9e, 0x9f, 0xc9, 0xd6, 0xe8, 0x04, 0x9b, + 0x64, 0x69, 0xfa, 0xee, 0xc1, 0xdc, 0xf8, 0x55, 0xbd, 0x0e, 0x36, 0x49, 0xa0, 0x1b, 0x30, 0x41, + 0x05, 0x54, 0x37, 0x21, 0x3a, 0xda, 0x8b, 0x28, 0x93, 0x4e, 0xb1, 0x51, 0x09, 0xa7, 0x88, 0xa0, + 0xd7, 0xa0, 0xe4, 0xb9, 0x5b, 0xa4, 0xbe, 0x5f, 0xf7, 0x48, 0x79, 0x8c, 0x51, 0xcc, 0xdc, 0x56, + 0x57, 0x25, 0x12, 0xbf, 0x00, 0xa8, 0xbf, 0x38, 0xa9, 0x8e, 0x6e, 0xc2, 0x03, 0x31, 0x09, 0x77, + 0x5d, 0xdf, 0xa1, 0xdb, 0x41, 0xc8, 0x93, 0x4c, 0x2f, 0x36, 0xce, 0xd6, 0xdb, 0x39, 0x31, 0x74, + 0x0f, 0x6c, 0x64, 0x62, 0xe1, 0x9c, 0xda, 0xe8, 0x3a, 0x4c, 0xb2, 0x9d, 0x50, 0x6d, 0x7b, 0x5e, + 0x35, 0xf0, 0xdc, 0xfa, 0x7e, 0x79, 0x82, 0x11, 0xfc, 0x98, 0x54, 0x7c, 0xad, 0x99, 0x60, 0x7a, + 0xe3, 0x4d, 0xfe, 0xe1, 0x74, 0x6d, 0xb4, 0xc9, 0x14, 0x21, 0xed, 0xd0, 0x8d, 0xf7, 0xe9, 0xfa, + 0x25, 0x77, 0xe2, 0xf2, 0x64, 0xd7, 0xfb, 0xa3, 0x8e, 0xaa, 0xb4, 0x25, 0x7a, 0x21, 0x4e, 0x13, + 0xa4, 0x5b, 0x3b, 0x8a, 0x1b, 0xae, 0x5f, 0x9e, 0x62, 0x1c, 0x43, 0xed, 0x8c, 0x1a, 0x2d, 0xc4, + 0x1c, 0xc6, 0x94, 0x20, 0xf4, 0xc7, 0x75, 0xca, 0x41, 0xa7, 0x19, 0x62, 0xa2, 0x04, 0x91, 0x00, + 0x9c, 0xe0, 0xd0, 0x63, 0x39, 0x8e, 0xf7, 0xcb, 0x88, 0xa1, 0xaa, 0xed, 0xb2, 0xb1, 0xf1, 0x06, + 0xa6, 0xe5, 0xe8, 0x2a, 0x0c, 0x13, 0x7f, 0x6f, 0x35, 0x0c, 0x76, 0xcb, 0xa7, 0xf2, 0xf7, 0xec, + 0x0a, 0x47, 0xe1, 0x0c, 0x3d, 0xb9, 0x00, 0x88, 0x62, 0x2c, 0x49, 0xa0, 0x3b, 0x50, 0xce, 0x98, + 0x11, 0x3e, 0x01, 0x33, 0x6c, 0x02, 0x5e, 0x11, 0x75, 0xcb, 0x1b, 0x39, 0x78, 0x87, 0x5d, 0x60, + 0x38, 0x97, 0xba, 0xbd, 0x09, 0x13, 0x8a, 0xb1, 0xb0, 0xb9, 0x45, 0x73, 0x30, 0x48, 0x39, 0xa6, + 0xbc, 0x52, 0x97, 0xe8, 0x50, 0x32, 0xd5, 0x14, 0xe6, 0xe5, 0x6c, 0x28, 0xdd, 0xf7, 0xc8, 0xd2, + 0x7e, 0x4c, 0xf8, 0xb5, 0xa8, 0xa8, 0x0d, 0xa5, 0x04, 0xe0, 0x04, 0xc7, 0xfe, 0x7f, 0x5c, 0x30, + 0x49, 0xb8, 0x57, 0x1f, 0xfc, 0xfa, 0x69, 0x18, 0xd9, 0x0e, 0xa2, 0x98, 0x62, 0xb3, 0x36, 0x06, + 0x13, 0x51, 0xe4, 0xb2, 0x28, 0xc7, 0x0a, 0x03, 0xbd, 0x0c, 0xe3, 0x75, 0xbd, 0x01, 0x71, 0xd8, + 0x9c, 0x16, 0x55, 0xcc, 0xd6, 0xb1, 0x89, 0x8b, 0x5e, 0x82, 0x11, 0xf6, 0x40, 0x51, 0x0f, 0x3c, + 0x71, 0x01, 0x93, 0x27, 0xe6, 0x48, 0x55, 0x94, 0x1f, 0x6a, 0xbf, 0xb1, 0xc2, 0xa6, 0x97, 0x62, + 0xda, 0x85, 0xb5, 0xaa, 0x60, 0xf3, 0xea, 0x52, 0x7c, 0x99, 0x95, 0x62, 0x01, 0xb5, 0xff, 0x5a, + 0x41, 0x1b, 0x65, 0x7a, 0xa5, 0x20, 0xa8, 0x0a, 0xc3, 0xb7, 0x1d, 0x37, 0x76, 0xfd, 0xa6, 0x38, + 0xcf, 0x9f, 0xe8, 0xca, 0xf3, 0x59, 0xa5, 0x5b, 0xbc, 0x02, 0x3f, 0x95, 0xc4, 0x1f, 0x2c, 0xc9, + 0x50, 0x8a, 0x61, 0xdb, 0xf7, 0x29, 0xc5, 0x42, 0xbf, 0x14, 0x31, 0xaf, 0xc0, 0x29, 0x8a, 0x3f, + 0x58, 0x92, 0x41, 0x6f, 0x01, 0xc8, 0x75, 0x43, 0x1a, 0xe2, 0x61, 0xe0, 0xe9, 0xde, 0x44, 0x37, + 0x54, 0x9d, 0xa5, 0x09, 0x7a, 0xe6, 0x25, 0xff, 0xb1, 0x46, 0xcf, 0x8e, 0x99, 0xdc, 0xd3, 0xd9, + 0x19, 0xf4, 0xb3, 0x74, 0xab, 0x3a, 0x61, 0x4c, 0x1a, 0x8b, 0xb1, 0x18, 0x9c, 0x27, 0xfb, 0x13, + 0x5b, 0x37, 0xdc, 0x5d, 0xa2, 0x6f, 0x6b, 0x41, 0x04, 0x27, 0xf4, 0xec, 0xdf, 0x2a, 0x42, 0x39, + 0xaf, 0xbb, 0x74, 0xd1, 0x91, 0x3b, 0x6e, 0xbc, 0x4c, 0xc5, 0x15, 0xcb, 0x5c, 0x74, 0x2b, 0xa2, + 0x1c, 0x2b, 0x0c, 0x3a, 0xfb, 0x91, 0xdb, 0x94, 0xb7, 0x8e, 0xc1, 0x64, 0xf6, 0x6b, 0xac, 0x14, + 0x0b, 0x28, 0xc5, 0x0b, 0x89, 0x13, 0x89, 0x97, 0x27, 0x6d, 0x95, 0x60, 0x56, 0x8a, 0x05, 0x54, + 0x57, 0x18, 0x0c, 0xf4, 0x50, 0x18, 0x18, 0x43, 0x34, 0x78, 0xbc, 0x43, 0x84, 0xde, 0x06, 0xd8, + 0x72, 0x7d, 0x37, 0xda, 0x66, 0xd4, 0x87, 0x8e, 0x4c, 0x5d, 0x09, 0x3b, 0xab, 0x8a, 0x0a, 0xd6, + 0x28, 0xa2, 0x17, 0x60, 0x54, 0x6d, 0xc0, 0xb5, 0x4a, 0x79, 0xd8, 0x7c, 0xd6, 0x48, 0xb8, 0x51, + 0x05, 0xeb, 0x78, 0xf6, 0x3b, 0xe9, 0xf5, 0x22, 0x76, 0x80, 0x36, 0xbe, 0x56, 0xbf, 0xe3, 0x5b, + 0xe8, 0x3e, 0xbe, 0xf6, 0xef, 0x15, 0x61, 0xd2, 0x68, 0xac, 0x1d, 0xf5, 0xc1, 0xb3, 0x2e, 0xd1, + 0x83, 0xc8, 0x89, 0x89, 0xd8, 0x7f, 0x76, 0xef, 0xad, 0xa2, 0x1f, 0x56, 0x74, 0x07, 0xf0, 0xfa, + 0xe8, 0x6d, 0x28, 0x79, 0x4e, 0xc4, 0x94, 0x0f, 0x44, 0xec, 0xbb, 0x7e, 0x88, 0x25, 0x82, 0xbe, + 0x13, 0xc5, 0xda, 0x59, 0xc0, 0x69, 0x27, 0x24, 0xe9, 0x89, 0x49, 0x85, 0x13, 0xf9, 0xb4, 0xa9, + 0x3a, 0x41, 0x25, 0x98, 0x7d, 0xcc, 0x61, 0xe8, 0x25, 0x18, 0x0b, 0x09, 0x5b, 0x15, 0xcb, 0x54, + 0xd6, 0x62, 0xcb, 0x6c, 0x30, 0x11, 0xca, 0xb0, 0x06, 0xc3, 0x06, 0x66, 0x22, 0x6b, 0x0f, 0x75, + 0x91, 0xb5, 0x9f, 0x80, 0x61, 0xf6, 0x43, 0xad, 0x00, 0x35, 0x1b, 0x6b, 0xbc, 0x18, 0x4b, 0x78, + 0x7a, 0xc1, 0x8c, 0xf4, 0xb9, 0x60, 0x9e, 0x84, 0x89, 0x8a, 0x43, 0x76, 0x03, 0x7f, 0xc5, 0x6f, + 0xb4, 0x02, 0xd7, 0x8f, 0x51, 0x19, 0x06, 0xd8, 0xe9, 0xc0, 0xf7, 0xf6, 0x00, 0xa5, 0x80, 0x07, + 0xa8, 0xe4, 0x6c, 0xff, 0x61, 0x01, 0xc6, 0x2b, 0xc4, 0x23, 0x31, 0xe1, 0x77, 0x8d, 0x08, 0xad, + 0x02, 0x6a, 0x86, 0x4e, 0x9d, 0x54, 0x49, 0xe8, 0x06, 0x0d, 0x5d, 0x19, 0x59, 0x64, 0x0a, 0x7f, + 0x74, 0xa9, 0x03, 0x8a, 0x33, 0x6a, 0xa0, 0x37, 0x61, 0xbc, 0x15, 0x12, 0x43, 0x87, 0x66, 0xe5, + 0x89, 0x0b, 0x55, 0x1d, 0x91, 0x4b, 0xaa, 0x46, 0x11, 0x36, 0x49, 0xa1, 0x9f, 0x81, 0xa9, 0x20, + 0x6c, 0x6d, 0x3b, 0x7e, 0x85, 0xb4, 0x88, 0xdf, 0xa0, 0xa2, 0xb8, 0xd0, 0x11, 0xcc, 0xdc, 0x3d, + 0x98, 0x9b, 0xba, 0x9e, 0x82, 0xe1, 0x0e, 0x6c, 0xf4, 0x26, 0x4c, 0xb7, 0xc2, 0xa0, 0xe5, 0x34, + 0xd9, 0x42, 0x11, 0x12, 0x07, 0xe7, 0x3e, 0x4f, 0xdf, 0x3d, 0x98, 0x9b, 0xae, 0xa6, 0x81, 0x87, + 0x07, 0x73, 0xa7, 0xd8, 0x40, 0xd1, 0x92, 0x04, 0x88, 0x3b, 0xc9, 0xd8, 0x4d, 0x38, 0x5d, 0x09, + 0x6e, 0xfb, 0xb7, 0x9d, 0xb0, 0xb1, 0x58, 0x5d, 0xd3, 0x2e, 0xf7, 0xd7, 0xe4, 0xe5, 0x92, 0x3f, + 0xbf, 0x66, 0x9e, 0x53, 0x5a, 0x4d, 0x2e, 0xfe, 0xaf, 0xba, 0x1e, 0xc9, 0x51, 0x22, 0xfc, 0xcd, + 0x82, 0xd1, 0x52, 0x82, 0xaf, 0xf4, 0xfe, 0x56, 0xae, 0xde, 0xff, 0x75, 0x18, 0xd9, 0x72, 0x89, + 0xd7, 0xc0, 0x64, 0x4b, 0xcc, 0xcc, 0xe3, 0xf9, 0x2f, 0x4a, 0xab, 0x14, 0x53, 0x2a, 0x8d, 0xf8, + 0xd5, 0x74, 0x55, 0x54, 0xc6, 0x8a, 0x0c, 0xda, 0x81, 0x29, 0x79, 0xf7, 0x91, 0x50, 0xb1, 0x89, + 0x9f, 0xe8, 0x76, 0xa1, 0x32, 0x89, 0xb3, 0x09, 0xc4, 0x29, 0x32, 0xb8, 0x83, 0x30, 0xbd, 0x8b, + 0xee, 0xd2, 0xe3, 0x6a, 0x80, 0x2d, 0x69, 0x76, 0x17, 0x65, 0xd7, 0x6a, 0x56, 0x6a, 0x7f, 0xd5, + 0x82, 0x07, 0x3b, 0x46, 0x46, 0xa8, 0x17, 0x8e, 0x79, 0x16, 0xd2, 0xd7, 0xfd, 0x42, 0xef, 0xeb, + 0xbe, 0xfd, 0x0f, 0x2d, 0x98, 0x59, 0xd9, 0x6d, 0xc5, 0xfb, 0x15, 0xd7, 0x7c, 0x9b, 0x78, 0x11, + 0x86, 0x76, 0x49, 0xc3, 0x6d, 0xef, 0x8a, 0x99, 0x9b, 0x93, 0x2c, 0x7d, 0x9d, 0x95, 0x1e, 0x1e, + 0xcc, 0x8d, 0xd7, 0xe2, 0x20, 0x74, 0x9a, 0x84, 0x17, 0x60, 0x81, 0xce, 0x0e, 0x46, 0xf7, 0x3d, + 0x72, 0xd5, 0xdd, 0x75, 0xe5, 0x0b, 0x61, 0x57, 0x95, 0xd7, 0xbc, 0x1c, 0xd0, 0xf9, 0xd7, 0xdb, + 0x8e, 0x1f, 0xbb, 0xf1, 0xbe, 0x78, 0x76, 0x91, 0x44, 0x70, 0x42, 0xcf, 0xfe, 0xae, 0x05, 0x93, + 0x92, 0x97, 0x2c, 0x36, 0x1a, 0x21, 0x89, 0x22, 0x34, 0x0b, 0x05, 0xb7, 0x25, 0x7a, 0x09, 0xa2, + 0x97, 0x85, 0xb5, 0x2a, 0x2e, 0xb8, 0x2d, 0x54, 0x85, 0x12, 0x7f, 0x68, 0x4c, 0x16, 0x57, 0x5f, + 0xcf, 0x95, 0xac, 0x07, 0x1b, 0xb2, 0x26, 0x4e, 0x88, 0x48, 0xa9, 0x98, 0x9d, 0x43, 0x45, 0xf3, + 0xcd, 0xe6, 0xb2, 0x28, 0xc7, 0x0a, 0x03, 0x5d, 0x80, 0x11, 0x3f, 0x68, 0xf0, 0x77, 0x5f, 0xbe, + 0xa7, 0xd9, 0x92, 0xbd, 0x26, 0xca, 0xb0, 0x82, 0xda, 0xbf, 0x68, 0xc1, 0x98, 0xfc, 0xb2, 0x3e, + 0x05, 0x74, 0xba, 0xb5, 0x12, 0xe1, 0x3c, 0xd9, 0x5a, 0x54, 0xc0, 0x66, 0x10, 0x43, 0xae, 0x2e, + 0x1e, 0x45, 0xae, 0xb6, 0xbf, 0x52, 0x80, 0x09, 0xd9, 0x9d, 0x5a, 0x7b, 0x33, 0x22, 0x31, 0xda, + 0x80, 0x92, 0xc3, 0x87, 0x9c, 0xc8, 0x15, 0xfb, 0x68, 0xf6, 0x8d, 0xcb, 0x98, 0x9f, 0x44, 0xd4, + 0x59, 0x94, 0xb5, 0x71, 0x42, 0x08, 0x79, 0x30, 0xed, 0x07, 0x31, 0x3b, 0xf6, 0x14, 0xbc, 0xdb, + 0xbb, 0x40, 0x9a, 0xfa, 0x19, 0x41, 0x7d, 0xfa, 0x5a, 0x9a, 0x0a, 0xee, 0x24, 0x8c, 0x56, 0xa4, + 0x96, 0xa7, 0xc8, 0x5a, 0x38, 0xdf, 0xad, 0x85, 0x7c, 0x25, 0x8f, 0xfd, 0x3b, 0x16, 0x94, 0x24, + 0xda, 0x49, 0x3c, 0x01, 0xad, 0xc3, 0x70, 0xc4, 0x26, 0x41, 0x0e, 0x8d, 0xdd, 0xad, 0xe3, 0x7c, + 0xbe, 0x92, 0xd3, 0x9c, 0xff, 0x8f, 0xb0, 0xa4, 0xc1, 0xd4, 0xd4, 0xaa, 0xfb, 0x1f, 0x12, 0x35, + 0xb5, 0xea, 0x4f, 0xce, 0x09, 0xf3, 0x5f, 0x59, 0x9f, 0xb5, 0xbb, 0x3c, 0x15, 0x3a, 0x5b, 0x21, + 0xd9, 0x72, 0xef, 0xa4, 0x85, 0xce, 0x2a, 0x2b, 0xc5, 0x02, 0x8a, 0xde, 0x82, 0xb1, 0xba, 0xd4, + 0xee, 0x26, 0x6c, 0xe0, 0xb1, 0xae, 0xba, 0x72, 0xf5, 0xac, 0xc2, 0x6d, 0xc2, 0x96, 0xb5, 0xfa, + 0xd8, 0xa0, 0x66, 0x3e, 0xcc, 0x17, 0x7b, 0x3d, 0xcc, 0x27, 0x74, 0x73, 0x9f, 0x96, 0xed, 0x5f, + 0xb1, 0x60, 0x88, 0xeb, 0x08, 0xfb, 0x53, 0xaa, 0x6a, 0xcf, 0x44, 0xc9, 0xd8, 0xdd, 0xa4, 0x85, + 0xe2, 0xd5, 0x08, 0xad, 0x43, 0x89, 0xfd, 0x60, 0xba, 0x92, 0x62, 0xbe, 0x31, 0x1c, 0x6f, 0x55, + 0xef, 0xe0, 0x4d, 0x59, 0x0d, 0x27, 0x14, 0xec, 0x2f, 0x17, 0x29, 0xab, 0x4a, 0x50, 0x8d, 0x13, + 0xdc, 0xba, 0x7f, 0x27, 0x78, 0xe1, 0x7e, 0x9d, 0xe0, 0x4d, 0x98, 0xac, 0x6b, 0x6f, 0x52, 0xc9, + 0x4c, 0x5e, 0xe8, 0xba, 0x48, 0xb4, 0xe7, 0x2b, 0xae, 0x27, 0x5b, 0x36, 0x89, 0xe0, 0x34, 0x55, + 0xf4, 0xb3, 0x30, 0xc6, 0xe7, 0x59, 0xb4, 0x32, 0xc0, 0x5a, 0xf9, 0x58, 0xfe, 0x7a, 0xd1, 0x9b, + 0x60, 0x2b, 0xb1, 0xa6, 0x55, 0xc7, 0x06, 0x31, 0xfb, 0x0b, 0x83, 0x30, 0xb8, 0xb2, 0x47, 0xfc, + 0xf8, 0x04, 0x18, 0x52, 0x1d, 0x26, 0x5c, 0x7f, 0x2f, 0xf0, 0xf6, 0x48, 0x83, 0xc3, 0x8f, 0x72, + 0xb8, 0x3e, 0x20, 0x48, 0x4f, 0xac, 0x19, 0x24, 0x70, 0x8a, 0xe4, 0xfd, 0xb8, 0xb5, 0x5f, 0x82, + 0x21, 0x3e, 0xf7, 0xe2, 0xca, 0x9e, 0xa9, 0x01, 0x67, 0x83, 0x28, 0x76, 0x41, 0xa2, 0x51, 0xe0, + 0x2a, 0x77, 0x51, 0x1d, 0xbd, 0x03, 0x13, 0x5b, 0x6e, 0x18, 0xc5, 0xf4, 0xba, 0x1d, 0xc5, 0xce, + 0x6e, 0xeb, 0x1e, 0x6e, 0xe9, 0x6a, 0x1c, 0x56, 0x0d, 0x4a, 0x38, 0x45, 0x19, 0x35, 0x61, 0x9c, + 0x5e, 0x1c, 0x93, 0xa6, 0x86, 0x8f, 0xdc, 0x94, 0x52, 0xc3, 0x5d, 0xd5, 0x09, 0x61, 0x93, 0x2e, + 0x65, 0x26, 0x75, 0x76, 0xd1, 0x1c, 0x61, 0x12, 0x85, 0x62, 0x26, 0xfc, 0x86, 0xc9, 0x61, 0x94, + 0x27, 0x31, 0x5b, 0x8e, 0x92, 0xc9, 0x93, 0x12, 0x8b, 0x0d, 0xfb, 0x6b, 0xf4, 0x74, 0xa4, 0x63, + 0x78, 0x02, 0x47, 0xcb, 0xab, 0xe6, 0xd1, 0x72, 0x26, 0x77, 0x3e, 0x73, 0x8e, 0x95, 0xcf, 0xc0, + 0xa8, 0x36, 0xdd, 0x68, 0x01, 0x4a, 0x75, 0x69, 0x78, 0x20, 0xb8, 0xae, 0x12, 0x5f, 0x94, 0x45, + 0x02, 0x4e, 0x70, 0xe8, 0x68, 0x50, 0x61, 0x2f, 0x6d, 0xd6, 0x44, 0x45, 0x41, 0xcc, 0x20, 0xf6, + 0x73, 0x00, 0x2b, 0x77, 0x48, 0x7d, 0x91, 0x5f, 0xbc, 0xb4, 0xf7, 0x2d, 0x2b, 0xff, 0x7d, 0xcb, + 0xfe, 0x0f, 0x16, 0x4c, 0xac, 0x2e, 0x1b, 0x02, 0xf9, 0x3c, 0x00, 0x97, 0x42, 0x6f, 0xdd, 0xba, + 0x26, 0x35, 0xc3, 0x5c, 0xb9, 0xa7, 0x4a, 0xb1, 0x86, 0x81, 0xce, 0x40, 0xd1, 0x6b, 0xfb, 0x42, + 0x38, 0x1c, 0xbe, 0x7b, 0x30, 0x57, 0xbc, 0xda, 0xf6, 0x31, 0x2d, 0xd3, 0x2c, 0x89, 0x8a, 0x7d, + 0x5b, 0x12, 0xf5, 0x34, 0xc1, 0x46, 0x73, 0x30, 0x78, 0xfb, 0xb6, 0xdb, 0x88, 0xca, 0x83, 0x89, + 0xd6, 0xfa, 0xd6, 0xad, 0xb5, 0x4a, 0x84, 0x79, 0xb9, 0xfd, 0x17, 0x8a, 0x30, 0xb5, 0xea, 0x91, + 0x3b, 0xc6, 0x67, 0x3d, 0x06, 0x43, 0x8d, 0xd0, 0xdd, 0x23, 0x61, 0xfa, 0x14, 0xaf, 0xb0, 0x52, + 0x2c, 0xa0, 0x7d, 0x5b, 0x3f, 0xdd, 0xe8, 0x3c, 0x8f, 0x8f, 0xdb, 0xde, 0xab, 0xf7, 0x50, 0xbc, + 0x05, 0xc3, 0xfc, 0x99, 0x94, 0x0f, 0xc6, 0xe8, 0xc5, 0x67, 0xb3, 0xba, 0x90, 0x1e, 0x8b, 0x79, + 0xa1, 0xf8, 0xe0, 0x36, 0x23, 0x8a, 0x89, 0x89, 0x52, 0x2c, 0x49, 0xce, 0x7e, 0x12, 0xc6, 0x74, + 0xcc, 0x23, 0x19, 0x8f, 0xfc, 0x45, 0x0b, 0x4e, 0xad, 0x7a, 0x41, 0x7d, 0x27, 0x65, 0x8a, 0xf6, + 0x02, 0x8c, 0xd2, 0xfd, 0x14, 0x19, 0x66, 0xad, 0x86, 0xa1, 0xb3, 0x00, 0x61, 0x1d, 0x4f, 0xab, + 0x76, 0xe3, 0xc6, 0x5a, 0x25, 0xcb, 0x3e, 0x5a, 0x80, 0xb0, 0x8e, 0x67, 0x7f, 0xc7, 0x82, 0xb3, + 0x97, 0x96, 0x57, 0x12, 0x6b, 0xcc, 0x0e, 0x13, 0x6d, 0x2a, 0xdc, 0x35, 0xb4, 0xae, 0x24, 0xc2, + 0x5d, 0x85, 0xf5, 0x42, 0x40, 0x3f, 0x2c, 0xee, 0x07, 0xbf, 0x66, 0xc1, 0xa9, 0x4b, 0x6e, 0x8c, + 0x49, 0x2b, 0x48, 0x1b, 0x0b, 0x87, 0xa4, 0x15, 0x44, 0x6e, 0x1c, 0x84, 0xfb, 0x69, 0x63, 0x61, + 0xac, 0x20, 0x58, 0xc3, 0xe2, 0x2d, 0xef, 0xb9, 0x11, 0xed, 0x69, 0xc1, 0xbc, 0x61, 0x62, 0x51, + 0x8e, 0x15, 0x06, 0xfd, 0xb0, 0x86, 0x1b, 0x32, 0x09, 0x61, 0x5f, 0x6c, 0x67, 0xf5, 0x61, 0x15, + 0x09, 0xc0, 0x09, 0x8e, 0xfd, 0x55, 0x0b, 0x4e, 0x5f, 0xf2, 0xda, 0x51, 0x4c, 0xc2, 0xad, 0xc8, + 0xe8, 0xec, 0x73, 0x50, 0x22, 0x52, 0x0a, 0x17, 0x7d, 0x55, 0xe7, 0x86, 0x12, 0xcf, 0xb9, 0xa5, + 0xb2, 0xc2, 0xeb, 0xc3, 0xae, 0xf3, 0x68, 0xf6, 0x88, 0x5f, 0x2f, 0xc0, 0xf8, 0xe5, 0x8d, 0x8d, + 0xea, 0x25, 0x12, 0x0b, 0x96, 0xd9, 0x5b, 0x83, 0x84, 0xb5, 0x8b, 0x70, 0x37, 0x59, 0xa7, 0x1d, + 0xbb, 0xde, 0x3c, 0x77, 0x8d, 0x99, 0x5f, 0xf3, 0xe3, 0xeb, 0x61, 0x2d, 0x0e, 0x5d, 0xbf, 0x99, + 0x79, 0x75, 0x96, 0x8c, 0xbd, 0x98, 0xc7, 0xd8, 0xd1, 0x73, 0x30, 0xc4, 0x7c, 0x73, 0xa4, 0xd4, + 0xf1, 0x90, 0x12, 0x15, 0x58, 0xe9, 0xe1, 0xc1, 0x5c, 0xe9, 0x06, 0x5e, 0xe3, 0x7f, 0xb0, 0x40, + 0x45, 0x37, 0x60, 0x74, 0x3b, 0x8e, 0x5b, 0x97, 0x89, 0xd3, 0x20, 0xa1, 0xe4, 0x0e, 0xe7, 0xb2, + 0xb8, 0x03, 0x1d, 0x04, 0x8e, 0x96, 0x6c, 0xa8, 0xa4, 0x2c, 0xc2, 0x3a, 0x1d, 0xbb, 0x06, 0x90, + 0xc0, 0x8e, 0xe9, 0xda, 0x60, 0xff, 0xc0, 0x82, 0xe1, 0xcb, 0x8e, 0xdf, 0xf0, 0x48, 0x88, 0x5e, + 0x81, 0x01, 0x72, 0x87, 0xd4, 0xc5, 0x09, 0x9e, 0xd9, 0xe1, 0xe4, 0x94, 0xe3, 0x4a, 0x30, 0xfa, + 0x1f, 0xb3, 0x5a, 0xe8, 0x32, 0x0c, 0xd3, 0xde, 0x5e, 0x52, 0x36, 0xe3, 0x8f, 0xe4, 0x7d, 0xb1, + 0x9a, 0x76, 0x7e, 0x30, 0x8a, 0x22, 0x2c, 0xab, 0x33, 0x85, 0x4e, 0xbd, 0x55, 0xa3, 0x0c, 0x2c, + 0xee, 0x76, 0xdd, 0xda, 0x58, 0xae, 0x72, 0x24, 0x41, 0x8d, 0x2b, 0x74, 0x64, 0x21, 0x4e, 0x88, + 0xd8, 0x1b, 0x50, 0xa2, 0x93, 0xba, 0xe8, 0xb9, 0x4e, 0x77, 0x5d, 0xd2, 0x53, 0x50, 0x92, 0x7a, + 0x9d, 0x48, 0x98, 0x9d, 0x33, 0xaa, 0x52, 0xed, 0x13, 0xe1, 0x04, 0x6e, 0x6f, 0xc1, 0x0c, 0x7b, + 0x24, 0x75, 0xe2, 0x6d, 0x63, 0x8f, 0xf5, 0x5e, 0xcc, 0x4f, 0x0b, 0xf9, 0x8a, 0xcf, 0x4c, 0x59, + 0xb3, 0x93, 0x1d, 0x93, 0x14, 0x35, 0x59, 0xeb, 0x3f, 0x0f, 0xc0, 0xf4, 0x5a, 0x6d, 0xb9, 0x66, + 0x2a, 0x16, 0x5f, 0x82, 0x31, 0x2e, 0x09, 0xd0, 0x05, 0xed, 0x78, 0xa2, 0x35, 0xf5, 0x70, 0xb0, + 0xa1, 0xc1, 0xb0, 0x81, 0x89, 0xce, 0x42, 0xd1, 0x7d, 0xd7, 0x4f, 0x9b, 0xc2, 0xad, 0xbd, 0x7e, + 0x0d, 0xd3, 0x72, 0x0a, 0xa6, 0x42, 0x05, 0x67, 0xa0, 0x0a, 0xac, 0x04, 0x8b, 0x57, 0x61, 0xc2, + 0x8d, 0xea, 0x91, 0xbb, 0xe6, 0x53, 0xee, 0x92, 0xf8, 0x5c, 0x24, 0x12, 0x3f, 0xed, 0xaa, 0x82, + 0xe2, 0x14, 0xb6, 0xc6, 0xcd, 0x07, 0xfb, 0x16, 0x4c, 0x7a, 0x5a, 0x5f, 0x53, 0x99, 0xab, 0xc5, + 0xbe, 0x2e, 0x62, 0x66, 0x39, 0x42, 0xe6, 0xe2, 0x1f, 0x1c, 0x61, 0x09, 0x43, 0x97, 0x60, 0xba, + 0xbe, 0xed, 0xb4, 0x16, 0xdb, 0xf1, 0x76, 0xc5, 0x8d, 0xea, 0xc1, 0x1e, 0x09, 0xf7, 0x99, 0x24, + 0x3c, 0x92, 0x28, 0x99, 0x14, 0x60, 0xf9, 0xf2, 0x62, 0x95, 0x62, 0xe2, 0xce, 0x3a, 0xa6, 0x08, + 0x02, 0xc7, 0x26, 0x82, 0x2c, 0xc2, 0xa4, 0x6c, 0xab, 0x46, 0x22, 0x76, 0x3c, 0x8c, 0xb2, 0xde, + 0x29, 0x97, 0x28, 0x51, 0xac, 0xfa, 0x96, 0xc6, 0x47, 0x2f, 0xc2, 0xb8, 0xeb, 0xbb, 0xb1, 0xeb, + 0xc4, 0x41, 0xc8, 0x0e, 0xd7, 0x31, 0x7e, 0x60, 0x50, 0x0e, 0xbf, 0xa6, 0x03, 0xb0, 0x89, 0x67, + 0xbf, 0x03, 0x25, 0x65, 0x6b, 0x26, 0xcd, 0x25, 0xad, 0x1c, 0x73, 0xc9, 0xde, 0x27, 0x82, 0xd4, + 0x98, 0x17, 0x33, 0x35, 0xe6, 0x7f, 0xcb, 0x82, 0xc4, 0xe4, 0x06, 0x5d, 0x86, 0x52, 0x2b, 0x60, + 0xaf, 0x66, 0xa1, 0x7c, 0x8a, 0x7e, 0x28, 0x93, 0x79, 0x70, 0x46, 0xc5, 0xc7, 0xaf, 0x2a, 0x6b, + 0xe0, 0xa4, 0x32, 0x5a, 0x82, 0xe1, 0x56, 0x48, 0x6a, 0x31, 0x73, 0x1a, 0xe9, 0x49, 0x87, 0xaf, + 0x11, 0x8e, 0x8f, 0x65, 0x45, 0xfb, 0x37, 0x2d, 0x00, 0xae, 0x94, 0x76, 0xfc, 0x26, 0x39, 0x81, + 0x8b, 0x76, 0x05, 0x06, 0xa2, 0x16, 0xa9, 0x77, 0x7b, 0xcf, 0x4c, 0xfa, 0x53, 0x6b, 0x91, 0x7a, + 0x32, 0xe0, 0xf4, 0x1f, 0x66, 0xb5, 0xed, 0x5f, 0x00, 0x98, 0x48, 0xd0, 0xe8, 0x05, 0x08, 0x3d, + 0x63, 0x98, 0xe4, 0x9f, 0x49, 0x99, 0xe4, 0x97, 0x18, 0xb6, 0x66, 0x85, 0xff, 0x0e, 0x14, 0x77, + 0x9d, 0x3b, 0xe2, 0x96, 0xf5, 0x54, 0xf7, 0x6e, 0x50, 0xfa, 0xf3, 0xeb, 0xce, 0x1d, 0x2e, 0xc7, + 0x3e, 0x25, 0x17, 0xc8, 0xba, 0x73, 0xe7, 0x90, 0xbf, 0x5a, 0x32, 0x26, 0x45, 0x2f, 0x73, 0x9f, + 0xfb, 0x4f, 0xc9, 0x7f, 0xb6, 0xec, 0x68, 0x23, 0xac, 0x2d, 0xd7, 0x17, 0x2a, 0xda, 0xbe, 0xda, + 0x72, 0xfd, 0x74, 0x5b, 0xae, 0xdf, 0x47, 0x5b, 0xae, 0x8f, 0xde, 0x83, 0x61, 0xf1, 0x1c, 0xc2, + 0x6c, 0x09, 0x47, 0x2f, 0x2e, 0xf4, 0xd1, 0x9e, 0x78, 0x4d, 0xe1, 0x6d, 0x2e, 0x48, 0x39, 0x5d, + 0x94, 0xf6, 0x6c, 0x57, 0x36, 0x88, 0xfe, 0x86, 0x05, 0x13, 0xe2, 0x37, 0x26, 0xef, 0xb6, 0x49, + 0x14, 0x0b, 0x79, 0xe0, 0x13, 0xfd, 0xf7, 0x41, 0x54, 0xe4, 0x5d, 0xf9, 0x84, 0x64, 0xb3, 0x26, + 0xb0, 0x67, 0x8f, 0x52, 0xbd, 0x40, 0xff, 0xd8, 0x82, 0x99, 0x5d, 0xe7, 0x0e, 0x6f, 0x91, 0x97, + 0x61, 0x27, 0x76, 0x03, 0x61, 0x1b, 0xf9, 0x4a, 0x7f, 0xd3, 0xdf, 0x51, 0x9d, 0x77, 0x52, 0x9a, + 0x51, 0xcd, 0x64, 0xa1, 0xf4, 0xec, 0x6a, 0x66, 0xbf, 0x66, 0xb7, 0x60, 0x44, 0xae, 0xb7, 0x8c, + 0xdb, 0x50, 0x45, 0x17, 0x76, 0x8e, 0xfc, 0x1a, 0xa5, 0xdd, 0x9e, 0x58, 0x3b, 0x62, 0xad, 0xdd, + 0xd7, 0x76, 0xde, 0x81, 0x31, 0x7d, 0x8d, 0xdd, 0xd7, 0xb6, 0xde, 0x85, 0x53, 0x19, 0x6b, 0xe9, + 0xbe, 0x36, 0x79, 0x1b, 0xce, 0xe4, 0xae, 0x8f, 0xfb, 0xd9, 0xb0, 0xfd, 0x75, 0x4b, 0xe7, 0x83, + 0x27, 0xa0, 0x9e, 0x5a, 0x36, 0xd5, 0x53, 0xe7, 0xba, 0xef, 0x9c, 0x1c, 0x1d, 0xd5, 0x5b, 0x7a, + 0xa7, 0x29, 0x57, 0x47, 0xaf, 0xc1, 0x90, 0x47, 0x4b, 0xe4, 0x3b, 0x9c, 0xdd, 0x7b, 0x47, 0x26, + 0xb2, 0x14, 0x2b, 0x8f, 0xb0, 0xa0, 0x60, 0xff, 0xb6, 0x05, 0x03, 0x27, 0x30, 0x12, 0xd8, 0x1c, + 0x89, 0x67, 0x72, 0x49, 0x8b, 0xb8, 0x07, 0xf3, 0xd8, 0xb9, 0xbd, 0x22, 0x63, 0x3b, 0xe4, 0x0c, + 0xcc, 0xff, 0x2d, 0xc0, 0x28, 0x6d, 0x4a, 0x1a, 0x8c, 0xbc, 0x0c, 0xe3, 0x9e, 0xb3, 0x49, 0x3c, + 0xa9, 0x32, 0x4f, 0x5f, 0x62, 0xaf, 0xea, 0x40, 0x6c, 0xe2, 0xd2, 0xca, 0x5b, 0xfa, 0xeb, 0x81, + 0x90, 0x5f, 0x54, 0x65, 0xe3, 0x69, 0x01, 0x9b, 0xb8, 0xf4, 0x3e, 0x75, 0xdb, 0x89, 0xeb, 0xdb, + 0xe2, 0x82, 0xab, 0xba, 0x7b, 0x8b, 0x16, 0x62, 0x0e, 0xa3, 0x02, 0x9c, 0x5c, 0x9d, 0x37, 0x49, + 0xc8, 0x04, 0x38, 0x2e, 0x1e, 0x2b, 0x01, 0x0e, 0x9b, 0x60, 0x9c, 0xc6, 0xcf, 0xf0, 0xcd, 0x1b, + 0x64, 0xe6, 0x30, 0x7d, 0xf8, 0xe6, 0xa1, 0x2a, 0xcc, 0xb8, 0x7e, 0xdd, 0x6b, 0x37, 0xc8, 0x0d, + 0x9f, 0x4b, 0x77, 0x9e, 0xfb, 0x1e, 0x69, 0x08, 0x01, 0x5a, 0x59, 0x2e, 0xad, 0x65, 0xe0, 0xe0, + 0xcc, 0x9a, 0xf6, 0x9f, 0x83, 0x53, 0x57, 0x03, 0xa7, 0xb1, 0xe4, 0x78, 0x8e, 0x5f, 0x27, 0xe1, + 0x9a, 0xdf, 0xec, 0xf9, 0x20, 0xaf, 0x3f, 0x9f, 0x17, 0x7a, 0x3d, 0x9f, 0xdb, 0xdb, 0x80, 0xf4, + 0x06, 0x84, 0x19, 0x18, 0x86, 0x61, 0x97, 0x37, 0x25, 0x96, 0xff, 0xe3, 0xd9, 0xd2, 0x75, 0x47, + 0xcf, 0x34, 0x03, 0x27, 0x5e, 0x80, 0x25, 0x21, 0xfb, 0x25, 0xc8, 0xf4, 0xcd, 0xe8, 0x7d, 0x95, + 0xb6, 0x5f, 0x80, 0x69, 0x56, 0xf3, 0x68, 0xd7, 0x3c, 0xfb, 0xaf, 0x58, 0x30, 0x79, 0x2d, 0xe5, + 0x4d, 0xfb, 0x18, 0x0c, 0xf1, 0x08, 0x27, 0x69, 0xa5, 0x57, 0x8d, 0x95, 0x62, 0x01, 0x3d, 0x76, + 0x9d, 0xcb, 0x0f, 0x2d, 0x28, 0x29, 0xd7, 0xf7, 0x13, 0x10, 0x6a, 0x97, 0x0d, 0xa1, 0x36, 0x53, + 0x17, 0xa0, 0xba, 0x93, 0x27, 0xd3, 0xa2, 0x2b, 0xca, 0x2f, 0xb4, 0x8b, 0x1a, 0x20, 0x21, 0xc3, + 0xbd, 0x08, 0x27, 0x4c, 0xe7, 0x51, 0xe9, 0x29, 0xca, 0x5e, 0xc4, 0x15, 0xee, 0x87, 0xe4, 0x45, + 0x5c, 0xf5, 0x27, 0x87, 0xfb, 0x55, 0xb5, 0x2e, 0xb3, 0x53, 0xe1, 0xa7, 0x99, 0xd5, 0x28, 0xdb, + 0x9b, 0xca, 0x1d, 0x7b, 0x4e, 0x58, 0x81, 0x8a, 0xd2, 0x43, 0xc6, 0xc8, 0xc4, 0x3f, 0x1e, 0xa6, + 0x20, 0xa9, 0x62, 0x5f, 0x86, 0xc9, 0xd4, 0x80, 0xa1, 0x17, 0x60, 0xb0, 0xb5, 0xed, 0x44, 0x24, + 0x65, 0x05, 0x34, 0x58, 0xa5, 0x85, 0x87, 0x07, 0x73, 0x13, 0xaa, 0x02, 0x2b, 0xc1, 0x1c, 0xdb, + 0xfe, 0x9f, 0x16, 0x0c, 0x5c, 0x0b, 0x1a, 0x27, 0xb1, 0x98, 0x5e, 0x35, 0x16, 0xd3, 0xc3, 0x79, + 0x41, 0x5e, 0x72, 0xd7, 0xd1, 0x6a, 0x6a, 0x1d, 0x9d, 0xcb, 0xa5, 0xd0, 0x7d, 0x09, 0xed, 0xc2, + 0x28, 0x0b, 0x1d, 0x23, 0xac, 0x92, 0x9e, 0x33, 0xee, 0x57, 0x73, 0xa9, 0xfb, 0xd5, 0xa4, 0x86, + 0xaa, 0xdd, 0xb2, 0x9e, 0x80, 0x61, 0x61, 0x19, 0x93, 0xb6, 0x8f, 0x15, 0xb8, 0x58, 0xc2, 0xed, + 0x5f, 0x29, 0x82, 0x11, 0xaa, 0x06, 0xfd, 0x8e, 0x05, 0xf3, 0x21, 0xf7, 0x08, 0x6a, 0x54, 0xda, + 0xa1, 0xeb, 0x37, 0x6b, 0xf5, 0x6d, 0xd2, 0x68, 0x7b, 0xae, 0xdf, 0x5c, 0x6b, 0xfa, 0x81, 0x2a, + 0x5e, 0xb9, 0x43, 0xea, 0x6d, 0xa6, 0x07, 0xef, 0x11, 0x17, 0x47, 0xbd, 0x3c, 0x5f, 0xbc, 0x7b, + 0x30, 0x37, 0x8f, 0x8f, 0x44, 0x1b, 0x1f, 0xb1, 0x2f, 0xe8, 0x3b, 0x16, 0x2c, 0xf0, 0x08, 0x2e, + 0xfd, 0xf7, 0xbf, 0xcb, 0x6d, 0xb4, 0x2a, 0x49, 0x25, 0x44, 0x36, 0x48, 0xb8, 0xbb, 0xf4, 0xa2, + 0x18, 0xd0, 0x85, 0xea, 0xd1, 0xda, 0xc2, 0x47, 0xed, 0x9c, 0xfd, 0xaf, 0x8a, 0x30, 0x4e, 0x47, + 0x31, 0xf1, 0x82, 0x7f, 0xc1, 0x58, 0x12, 0x8f, 0xa4, 0x96, 0xc4, 0xb4, 0x81, 0x7c, 0x3c, 0x0e, + 0xf0, 0x11, 0x4c, 0x7b, 0x4e, 0x14, 0x5f, 0x26, 0x4e, 0x18, 0x6f, 0x12, 0x87, 0x3d, 0xf5, 0x8a, + 0x65, 0x7e, 0x94, 0xd7, 0x63, 0xa5, 0xfe, 0xba, 0x9a, 0x26, 0x86, 0x3b, 0xe9, 0xa3, 0x3d, 0x40, + 0xec, 0x59, 0x39, 0x74, 0xfc, 0x88, 0x7f, 0x8b, 0x2b, 0x74, 0xe4, 0x47, 0x6b, 0x75, 0x56, 0xb4, + 0x8a, 0xae, 0x76, 0x50, 0xc3, 0x19, 0x2d, 0x68, 0xe6, 0x02, 0x83, 0xfd, 0x9a, 0x0b, 0x0c, 0xf5, + 0x30, 0x42, 0xdf, 0x85, 0x29, 0x31, 0x2b, 0x5b, 0x6e, 0x53, 0x1c, 0xd2, 0x6f, 0xa4, 0xcc, 0x89, + 0xac, 0xfe, 0x0d, 0x1f, 0x7a, 0xd8, 0x12, 0xd9, 0x3f, 0x0f, 0xa7, 0x68, 0x73, 0xa6, 0xc9, 0x74, + 0x84, 0x08, 0x4c, 0xee, 0xb4, 0x37, 0x89, 0x47, 0x62, 0x59, 0x26, 0x1a, 0xcd, 0x14, 0xfb, 0xcd, + 0xda, 0x89, 0x6c, 0x79, 0xc5, 0x24, 0x81, 0xd3, 0x34, 0xed, 0x5f, 0xb5, 0x80, 0x19, 0x26, 0x9e, + 0xc0, 0xf1, 0xf7, 0x29, 0xf3, 0xf8, 0x2b, 0xe7, 0x71, 0xa0, 0x9c, 0x93, 0xef, 0x79, 0x3e, 0x2d, + 0xd5, 0x30, 0xb8, 0xb3, 0x2f, 0x65, 0xff, 0xde, 0x12, 0xd7, 0xff, 0xb1, 0xf8, 0x86, 0x54, 0x0e, + 0x92, 0xe8, 0xb3, 0x30, 0x52, 0x77, 0x5a, 0x4e, 0x9d, 0xc7, 0x08, 0xcb, 0xd5, 0xfe, 0x18, 0x95, + 0xe6, 0x97, 0x45, 0x0d, 0xae, 0xcd, 0xf8, 0xb8, 0xfc, 0x4a, 0x59, 0xdc, 0x53, 0x83, 0xa1, 0x9a, + 0x9c, 0xdd, 0x81, 0x71, 0x83, 0xd8, 0x7d, 0xbd, 0xfa, 0x7e, 0x96, 0x1f, 0x17, 0xea, 0xc6, 0xb2, + 0x0b, 0xd3, 0xbe, 0xf6, 0x9f, 0x32, 0x47, 0x29, 0x4e, 0x7f, 0xb4, 0xd7, 0x81, 0xc0, 0x38, 0xa9, + 0x66, 0x78, 0x99, 0x22, 0x83, 0x3b, 0x29, 0xdb, 0x7f, 0xc7, 0x82, 0x07, 0x75, 0x44, 0xcd, 0x77, + 0xb5, 0x97, 0x3e, 0xb9, 0x02, 0x23, 0x41, 0x8b, 0x84, 0x4e, 0x72, 0x27, 0xbb, 0x20, 0x07, 0xfd, + 0xba, 0x28, 0x3f, 0x3c, 0x98, 0x9b, 0xd1, 0xa9, 0xcb, 0x72, 0xac, 0x6a, 0x22, 0x1b, 0x86, 0xd8, + 0x60, 0x44, 0xc2, 0xaf, 0x98, 0xc5, 0xd1, 0x62, 0xcf, 0x5d, 0x11, 0x16, 0x10, 0xfb, 0x17, 0x2c, + 0xbe, 0xb0, 0xf4, 0xae, 0xa3, 0x77, 0x61, 0x6a, 0x97, 0x5e, 0xdf, 0x56, 0xee, 0xb4, 0x42, 0xae, + 0x46, 0x97, 0xe3, 0xf4, 0x54, 0xaf, 0x71, 0xd2, 0x3e, 0x72, 0xa9, 0x2c, 0xfa, 0x3c, 0xb5, 0x9e, + 0x22, 0x86, 0x3b, 0xc8, 0xdb, 0x7f, 0x5a, 0xe0, 0x3b, 0x91, 0x49, 0x75, 0x4f, 0xc0, 0x70, 0x2b, + 0x68, 0x2c, 0xaf, 0x55, 0xb0, 0x18, 0x21, 0xc5, 0xae, 0xaa, 0xbc, 0x18, 0x4b, 0x38, 0xba, 0x08, + 0x40, 0xee, 0xc4, 0x24, 0xf4, 0x1d, 0x4f, 0x3d, 0xc6, 0x2b, 0xe1, 0x69, 0x45, 0x41, 0xb0, 0x86, + 0x45, 0xeb, 0xb4, 0xc2, 0x60, 0xcf, 0x6d, 0x30, 0xc7, 0x8e, 0xa2, 0x59, 0xa7, 0xaa, 0x20, 0x58, + 0xc3, 0xa2, 0x57, 0xe5, 0xb6, 0x1f, 0xf1, 0x03, 0xd0, 0xd9, 0x14, 0xa1, 0x78, 0x46, 0x92, 0xab, + 0xf2, 0x0d, 0x1d, 0x88, 0x4d, 0x5c, 0xb4, 0x08, 0x43, 0xb1, 0xc3, 0x9e, 0x98, 0x07, 0xf3, 0x4d, + 0x76, 0x36, 0x28, 0x86, 0x1e, 0x34, 0x8a, 0x56, 0xc0, 0xa2, 0x22, 0x7a, 0x53, 0xb2, 0x60, 0xce, + 0x92, 0x85, 0xe9, 0x55, 0xee, 0xb2, 0xd5, 0xd9, 0xb7, 0xce, 0x83, 0x85, 0x49, 0x97, 0x41, 0xcb, + 0xfe, 0x7c, 0x09, 0x20, 0x91, 0xf6, 0xd0, 0x7b, 0x1d, 0x2c, 0xe2, 0xe9, 0xee, 0xf2, 0xe1, 0xf1, + 0xf1, 0x07, 0xf4, 0x05, 0x0b, 0x46, 0x1d, 0xcf, 0x0b, 0xea, 0x4e, 0xcc, 0x46, 0xb9, 0xd0, 0x9d, + 0x45, 0x89, 0xf6, 0x17, 0x93, 0x1a, 0xbc, 0x0b, 0xcf, 0xc9, 0xd7, 0x63, 0x0d, 0xd2, 0xb3, 0x17, + 0x7a, 0xc3, 0xe8, 0xe3, 0xf2, 0x12, 0xc0, 0x97, 0xc7, 0x6c, 0xfa, 0x12, 0x50, 0x62, 0xdc, 0x58, + 0x93, 0xff, 0xd1, 0x0d, 0x23, 0x66, 0xcd, 0x40, 0xbe, 0x7b, 0xae, 0x21, 0xf4, 0xf4, 0x0a, 0x57, + 0x83, 0xaa, 0xba, 0x09, 0xfa, 0x60, 0xbe, 0x0f, 0xbb, 0x26, 0x5d, 0xf7, 0x30, 0x3f, 0x7f, 0x07, + 0x26, 0x1b, 0xe6, 0x71, 0x2b, 0x56, 0xd3, 0xe3, 0x79, 0x74, 0x53, 0xa7, 0x73, 0x72, 0xc0, 0xa6, + 0x00, 0x38, 0x4d, 0x18, 0x55, 0xb9, 0x33, 0xc0, 0x9a, 0xbf, 0x15, 0x08, 0x13, 0x3e, 0x3b, 0x77, + 0x2e, 0xf7, 0xa3, 0x98, 0xec, 0x52, 0xcc, 0xe4, 0x1c, 0xbd, 0x26, 0xea, 0x62, 0x45, 0x05, 0xbd, + 0x06, 0x43, 0xcc, 0x43, 0x2b, 0x2a, 0x8f, 0xe4, 0xeb, 0x01, 0x4d, 0xe7, 0xe2, 0x64, 0x53, 0xb1, + 0xbf, 0x11, 0x16, 0x14, 0xd0, 0x65, 0x19, 0x22, 0x20, 0x5a, 0xf3, 0x6f, 0x44, 0x84, 0x85, 0x08, + 0x28, 0x2d, 0x7d, 0x34, 0xf1, 0xfe, 0xe7, 0xe5, 0x99, 0xe1, 0x21, 0x8d, 0x9a, 0x54, 0x5e, 0x11, + 0xff, 0x65, 0xd4, 0xc9, 0x32, 0xe4, 0x77, 0xcf, 0x8c, 0x4c, 0x99, 0x0c, 0xe7, 0x4d, 0x93, 0x04, + 0x4e, 0xd3, 0x3c, 0xd1, 0xe3, 0x73, 0xd6, 0x87, 0xa9, 0xf4, 0xc6, 0xba, 0xaf, 0xc7, 0xf5, 0x0f, + 0x06, 0x60, 0xc2, 0x5c, 0x08, 0x68, 0x01, 0x4a, 0x82, 0x88, 0x0a, 0x17, 0xa6, 0xd6, 0xf6, 0xba, + 0x04, 0xe0, 0x04, 0x87, 0x85, 0x4b, 0x63, 0xd5, 0x35, 0xdb, 0xac, 0x24, 0x5c, 0x9a, 0x82, 0x60, + 0x0d, 0x8b, 0x0a, 0xd1, 0x9b, 0x41, 0x10, 0xab, 0xa3, 0x40, 0xad, 0x96, 0x25, 0x56, 0x8a, 0x05, + 0x94, 0x1e, 0x01, 0x3b, 0x24, 0xf4, 0x89, 0x67, 0x6a, 0x32, 0xd5, 0x11, 0x70, 0x45, 0x07, 0x62, + 0x13, 0x97, 0x1e, 0x69, 0x41, 0xc4, 0x96, 0x9f, 0x10, 0xd5, 0x13, 0x5b, 0xb7, 0x1a, 0xf7, 0x50, + 0x94, 0x70, 0xf4, 0x06, 0x3c, 0xa8, 0x1c, 0x0a, 0x31, 0xd7, 0x0c, 0xcb, 0x16, 0x87, 0x8c, 0x9b, + 0xf5, 0x83, 0xcb, 0xd9, 0x68, 0x38, 0xaf, 0x3e, 0x7a, 0x15, 0x26, 0x84, 0x08, 0x2c, 0x29, 0x0e, + 0x9b, 0xc6, 0x0a, 0x57, 0x0c, 0x28, 0x4e, 0x61, 0xa3, 0x0a, 0x4c, 0xd1, 0x12, 0x26, 0x85, 0x4a, + 0x0a, 0xdc, 0x31, 0x52, 0x9d, 0xf5, 0x57, 0x52, 0x70, 0xdc, 0x51, 0x03, 0x2d, 0xc2, 0x24, 0x97, + 0x51, 0xe8, 0x9d, 0x92, 0xcd, 0x83, 0xb0, 0xac, 0x55, 0x1b, 0xe1, 0xba, 0x09, 0xc6, 0x69, 0x7c, + 0xf4, 0x12, 0x8c, 0x39, 0x61, 0x7d, 0xdb, 0x8d, 0x49, 0x3d, 0x6e, 0x87, 0x3c, 0x00, 0x87, 0x66, + 0xed, 0xb1, 0xa8, 0xc1, 0xb0, 0x81, 0x69, 0xbf, 0x07, 0xa7, 0x32, 0x8c, 0xf2, 0xe9, 0xc2, 0x71, + 0x5a, 0xae, 0xfc, 0xa6, 0x94, 0xd5, 0xda, 0x62, 0x75, 0x4d, 0x7e, 0x8d, 0x86, 0x45, 0x57, 0x27, + 0x53, 0x89, 0x6b, 0xa1, 0x61, 0xd5, 0xea, 0x5c, 0x95, 0x00, 0x9c, 0xe0, 0xd8, 0xbf, 0x0f, 0xa0, + 0x29, 0x74, 0xfa, 0xb0, 0x59, 0x7a, 0x09, 0xc6, 0x64, 0x3c, 0x63, 0x2d, 0x8e, 0xa6, 0xfa, 0xcc, + 0x4b, 0x1a, 0x0c, 0x1b, 0x98, 0xb4, 0x6f, 0xbe, 0x8a, 0x02, 0x9a, 0xb2, 0x91, 0x4b, 0x62, 0x80, + 0x26, 0x38, 0xe8, 0x69, 0x18, 0x89, 0x88, 0xb7, 0x75, 0xd5, 0xf5, 0x77, 0xc4, 0xc2, 0x56, 0x5c, + 0xb8, 0x26, 0xca, 0xb1, 0xc2, 0x40, 0x4b, 0x50, 0x6c, 0xbb, 0x0d, 0xb1, 0x94, 0xe5, 0x81, 0x5f, + 0xbc, 0xb1, 0x56, 0x39, 0x3c, 0x98, 0x7b, 0x24, 0x2f, 0x4c, 0x33, 0xbd, 0xda, 0x47, 0xf3, 0x74, + 0xfb, 0xd1, 0xca, 0x59, 0x6f, 0x03, 0x43, 0x47, 0x7c, 0x1b, 0xb8, 0x08, 0x20, 0xbe, 0x5a, 0xae, + 0xe5, 0x62, 0x32, 0x6b, 0x97, 0x14, 0x04, 0x6b, 0x58, 0x28, 0x82, 0xe9, 0x7a, 0x48, 0x1c, 0x79, + 0x87, 0xe6, 0xe6, 0xe5, 0x23, 0xf7, 0xae, 0x20, 0x58, 0x4e, 0x13, 0xc3, 0x9d, 0xf4, 0x51, 0x00, + 0xd3, 0x0d, 0xe1, 0xbf, 0x9a, 0x34, 0x5a, 0x3a, 0xba, 0x4d, 0x3b, 0x33, 0xc8, 0x49, 0x13, 0xc2, + 0x9d, 0xb4, 0xd1, 0xdb, 0x30, 0x2b, 0x0b, 0x3b, 0x5d, 0x86, 0xd9, 0x76, 0x29, 0x2e, 0x9d, 0xbb, + 0x7b, 0x30, 0x37, 0x5b, 0xc9, 0xc5, 0xc2, 0x5d, 0x28, 0x20, 0x0c, 0x43, 0xec, 0x2d, 0x29, 0x2a, + 0x8f, 0xb2, 0x73, 0xee, 0xc9, 0x7c, 0x65, 0x00, 0x5d, 0xeb, 0xf3, 0xec, 0x1d, 0x4a, 0x98, 0xf9, + 0x26, 0xcf, 0x72, 0xac, 0x10, 0x0b, 0x4a, 0x68, 0x0b, 0x46, 0x1d, 0xdf, 0x0f, 0x62, 0x87, 0x8b, + 0x50, 0x63, 0xf9, 0xb2, 0x9f, 0x46, 0x78, 0x31, 0xa9, 0xc1, 0xa9, 0x2b, 0xcb, 0x41, 0x0d, 0x82, + 0x75, 0xc2, 0xe8, 0x36, 0x4c, 0x06, 0xb7, 0x29, 0x73, 0x94, 0x5a, 0x8a, 0xa8, 0x3c, 0xce, 0xda, + 0x7a, 0xbe, 0x4f, 0x3d, 0xad, 0x51, 0x59, 0xe3, 0x5a, 0x26, 0x51, 0x9c, 0x6e, 0x05, 0xcd, 0x1b, + 0xda, 0xea, 0x89, 0xc4, 0x9e, 0x3d, 0xd1, 0x56, 0xeb, 0xca, 0x69, 0xe6, 0x82, 0xce, 0xcd, 0x56, + 0xd9, 0xee, 0x9f, 0x4c, 0xb9, 0xa0, 0x27, 0x20, 0xac, 0xe3, 0xa1, 0x6d, 0x18, 0x4b, 0x9e, 0xac, + 0xc2, 0x88, 0x45, 0xa8, 0x19, 0xbd, 0x78, 0xb1, 0xbf, 0x8f, 0x5b, 0xd3, 0x6a, 0xf2, 0x9b, 0x83, + 0x5e, 0x82, 0x0d, 0xca, 0xb3, 0x3f, 0x05, 0xa3, 0xda, 0xc4, 0x1e, 0xc5, 0x2a, 0x7b, 0xf6, 0x55, + 0x98, 0x4a, 0x4f, 0xdd, 0x91, 0xac, 0xba, 0xff, 0x77, 0x01, 0x26, 0x33, 0x5e, 0xae, 0x58, 0xa8, + 0xe7, 0x14, 0x43, 0x4d, 0x22, 0x3b, 0x9b, 0x6c, 0xb1, 0xd0, 0x07, 0x5b, 0x94, 0x3c, 0xba, 0x98, + 0xcb, 0xa3, 0x05, 0x2b, 0x1c, 0x78, 0x3f, 0xac, 0xd0, 0x3c, 0x7d, 0x06, 0xfb, 0x3a, 0x7d, 0x8e, + 0x81, 0x7d, 0x1a, 0x07, 0xd8, 0x70, 0x1f, 0x07, 0xd8, 0x97, 0x0b, 0x30, 0x95, 0x8e, 0x27, 0x7c, + 0x02, 0xef, 0x1d, 0xaf, 0x19, 0xef, 0x1d, 0xd9, 0x81, 0xd3, 0xd3, 0x51, 0x8e, 0xf3, 0xde, 0x3e, + 0x70, 0xea, 0xed, 0xe3, 0xc9, 0xbe, 0xa8, 0x75, 0x7f, 0x07, 0xf9, 0xbb, 0x05, 0x38, 0x9d, 0xae, + 0xb2, 0xec, 0x39, 0xee, 0xee, 0x09, 0x8c, 0xcd, 0x75, 0x63, 0x6c, 0x9e, 0xe9, 0xe7, 0x6b, 0x58, + 0xd7, 0x72, 0x07, 0xe8, 0x56, 0x6a, 0x80, 0x16, 0xfa, 0x27, 0xd9, 0x7d, 0x94, 0xbe, 0x5b, 0x84, + 0x73, 0x99, 0xf5, 0x92, 0xe7, 0x82, 0x55, 0xe3, 0xb9, 0xe0, 0x62, 0xea, 0xb9, 0xc0, 0xee, 0x5e, + 0xfb, 0x78, 0xde, 0x0f, 0x84, 0xe7, 0x19, 0x8b, 0x9e, 0x76, 0x8f, 0x6f, 0x07, 0x86, 0xe7, 0x99, + 0x22, 0x84, 0x4d, 0xba, 0x3f, 0x4e, 0x6f, 0x06, 0xbf, 0x6f, 0xc1, 0x99, 0xcc, 0xb9, 0x39, 0x01, + 0xbd, 0xfa, 0x35, 0x53, 0xaf, 0xfe, 0x44, 0xdf, 0xab, 0x35, 0x47, 0xd1, 0xfe, 0xd5, 0x62, 0xce, + 0xb7, 0x30, 0xcd, 0xe4, 0x75, 0x18, 0x75, 0xea, 0x75, 0x12, 0x45, 0xeb, 0x41, 0x43, 0x05, 0x2b, + 0x7b, 0x86, 0x49, 0x1b, 0x49, 0xf1, 0xe1, 0xc1, 0xdc, 0x6c, 0x9a, 0x44, 0x02, 0xc6, 0x3a, 0x05, + 0x33, 0x00, 0x62, 0xe1, 0x58, 0x03, 0x20, 0x5e, 0x04, 0xd8, 0x53, 0xfa, 0x8a, 0xb4, 0x9a, 0x53, + 0xd3, 0x64, 0x68, 0x58, 0xe8, 0xe7, 0xd8, 0x2d, 0x80, 0x1b, 0x03, 0xf1, 0xa5, 0xf8, 0x5c, 0x9f, + 0x73, 0xa5, 0x1b, 0x16, 0x71, 0x17, 0x67, 0xa5, 0x12, 0x56, 0x24, 0xd1, 0xcf, 0xc0, 0x54, 0xc4, + 0x23, 0x68, 0x2c, 0x7b, 0x4e, 0xc4, 0x1c, 0x6b, 0xc4, 0x2a, 0x64, 0x7e, 0xcb, 0xb5, 0x14, 0x0c, + 0x77, 0x60, 0xdb, 0x5f, 0x1e, 0x80, 0x87, 0xba, 0x30, 0x1f, 0xb4, 0x68, 0x3e, 0xde, 0x3f, 0x95, + 0xd6, 0xdb, 0xcd, 0x66, 0x56, 0x36, 0x14, 0x79, 0xa9, 0x39, 0x2e, 0xbc, 0xef, 0x39, 0xfe, 0xa2, + 0xa5, 0x69, 0x54, 0xb9, 0x89, 0xef, 0xa7, 0x8e, 0xc8, 0x54, 0x8f, 0x51, 0xc5, 0xba, 0x95, 0xa1, + 0xa7, 0xbc, 0xd8, 0x77, 0x77, 0xfa, 0x56, 0x5c, 0x9e, 0xec, 0x53, 0xcf, 0xe7, 0x2c, 0x78, 0x24, + 0xb3, 0xbf, 0x86, 0xb1, 0xd1, 0x02, 0x94, 0xea, 0xb4, 0x50, 0x73, 0xb2, 0x4b, 0x5c, 0x5d, 0x25, + 0x00, 0x27, 0x38, 0x86, 0x4d, 0x51, 0xa1, 0xa7, 0x4d, 0xd1, 0xbf, 0xb4, 0x60, 0x26, 0xdd, 0x89, + 0x13, 0xe0, 0x80, 0x6b, 0x26, 0x07, 0xfc, 0x68, 0x3f, 0x73, 0x99, 0x67, 0x5d, 0x38, 0x01, 0x0f, + 0xe4, 0xe4, 0x8b, 0xd8, 0x83, 0xe9, 0x66, 0x9d, 0x98, 0xee, 0x8b, 0xe2, 0x63, 0x32, 0x3d, 0x3d, + 0xbb, 0xfa, 0x3a, 0xf2, 0x8b, 0x6c, 0x07, 0x0a, 0xee, 0x6c, 0x02, 0x7d, 0xce, 0x82, 0x19, 0xe7, + 0x76, 0xd4, 0x91, 0xbf, 0x49, 0xac, 0x99, 0xe7, 0x33, 0xf5, 0xab, 0x3d, 0xf2, 0x3d, 0x31, 0x17, + 0xa3, 0x99, 0x2c, 0x2c, 0x9c, 0xd9, 0x16, 0xc2, 0x22, 0x2e, 0x24, 0x95, 0x93, 0xbb, 0x38, 0xd8, + 0x66, 0xb9, 0x3f, 0x71, 0x5e, 0x28, 0x21, 0x58, 0xd1, 0x41, 0x37, 0xa1, 0xd4, 0x94, 0x3e, 0x89, + 0x82, 0xd7, 0x66, 0x1e, 0x5e, 0x99, 0x8e, 0x8b, 0xdc, 0xe7, 0x43, 0x81, 0x70, 0x42, 0x0a, 0xbd, + 0x0a, 0x45, 0x7f, 0x2b, 0xea, 0x96, 0x30, 0x23, 0x65, 0x83, 0xc7, 0x3d, 0xa5, 0xaf, 0xad, 0xd6, + 0x30, 0xad, 0x88, 0x2e, 0x43, 0x31, 0xdc, 0x6c, 0x88, 0x27, 0x81, 0x4c, 0x79, 0x12, 0x2f, 0x55, + 0xb2, 0x17, 0x09, 0xa7, 0x84, 0x97, 0x2a, 0x98, 0x92, 0x40, 0xab, 0x30, 0xc8, 0x9c, 0x9d, 0x84, + 0xe6, 0x3f, 0x33, 0xe6, 0x43, 0x87, 0x23, 0x17, 0x77, 0xa2, 0x66, 0xc5, 0x98, 0x57, 0x47, 0xaf, + 0xc1, 0x50, 0x9d, 0x65, 0x92, 0x10, 0x6a, 0x9a, 0xec, 0x38, 0x26, 0x1d, 0xb9, 0x26, 0xf8, 0x7b, + 0x27, 0x2f, 0xc7, 0x82, 0x02, 0xda, 0x80, 0xa1, 0x3a, 0x69, 0x6d, 0x6f, 0x45, 0x42, 0xfb, 0xf2, + 0xf1, 0x4c, 0x5a, 0x5d, 0x12, 0xa7, 0x08, 0xaa, 0x0c, 0x03, 0x0b, 0x5a, 0xe8, 0x93, 0x50, 0xd8, + 0xaa, 0x0b, 0xbf, 0xa7, 0x4c, 0x8d, 0xbf, 0xe9, 0xd8, 0xbe, 0x34, 0x74, 0xf7, 0x60, 0xae, 0xb0, + 0xba, 0x8c, 0x0b, 0x5b, 0x75, 0x74, 0x0d, 0x86, 0xb7, 0xb8, 0x77, 0xb2, 0x88, 0xf8, 0xfb, 0x78, + 0xb6, 0xe3, 0x74, 0x87, 0x03, 0x33, 0xf7, 0xd7, 0x11, 0x00, 0x2c, 0x89, 0xa0, 0x0d, 0x80, 0x2d, + 0xe5, 0x65, 0x2d, 0x42, 0xfe, 0x7e, 0xb4, 0x1f, 0x5f, 0x6c, 0xa1, 0x8a, 0x50, 0xa5, 0x58, 0xa3, + 0x83, 0x3e, 0x03, 0x25, 0x47, 0xe6, 0x06, 0x62, 0xe1, 0x7e, 0x4d, 0xc9, 0x20, 0xd9, 0x7a, 0xdd, + 0xd3, 0x26, 0xf1, 0x75, 0xab, 0x90, 0x70, 0x42, 0x14, 0xed, 0xc0, 0xf8, 0x5e, 0xd4, 0xda, 0x26, + 0x72, 0xab, 0xb2, 0x18, 0xc0, 0x39, 0x47, 0xd3, 0x4d, 0x81, 0xe8, 0x86, 0x71, 0xdb, 0xf1, 0x3a, + 0xb8, 0x0b, 0x73, 0xee, 0xba, 0xa9, 0x13, 0xc3, 0x26, 0x6d, 0x3a, 0xe8, 0xef, 0xb6, 0x83, 0xcd, + 0xfd, 0x98, 0x88, 0xc8, 0xc0, 0x99, 0x83, 0xfe, 0x3a, 0x47, 0xe9, 0x1c, 0x74, 0x01, 0xc0, 0x92, + 0x08, 0xdd, 0xcc, 0x8e, 0xcc, 0xbb, 0x25, 0xf4, 0x2d, 0x4f, 0xe4, 0x0e, 0x4f, 0x47, 0x7f, 0x93, + 0x41, 0x61, 0x5c, 0x30, 0x21, 0xc5, 0xb8, 0x5f, 0x6b, 0x3b, 0x88, 0x03, 0x3f, 0xc5, 0x79, 0xa7, + 0xf3, 0xb9, 0x5f, 0x35, 0x03, 0xbf, 0x93, 0xfb, 0x65, 0x61, 0xe1, 0xcc, 0xb6, 0x50, 0x03, 0x26, + 0x5a, 0x41, 0x18, 0xdf, 0x0e, 0x42, 0xb9, 0xaa, 0x50, 0x97, 0x8b, 0xb8, 0x81, 0x29, 0x5a, 0x64, + 0xb6, 0xda, 0x26, 0x04, 0xa7, 0x68, 0xa2, 0x4f, 0xc3, 0x70, 0x54, 0x77, 0x3c, 0xb2, 0x76, 0xbd, + 0x7c, 0x2a, 0xff, 0x58, 0xa9, 0x71, 0x94, 0x9c, 0xd5, 0xc5, 0x26, 0x47, 0xa0, 0x60, 0x49, 0x8e, + 0xf2, 0x21, 0x16, 0x6e, 0x9e, 0x05, 0x35, 0xce, 0xe1, 0x43, 0x1d, 0xf6, 0xcc, 0x9c, 0x0f, 0xb1, + 0x62, 0xcc, 0xab, 0xd3, 0x3d, 0x20, 0xe4, 0xd1, 0x20, 0x2a, 0x9f, 0xce, 0xdf, 0x03, 0x42, 0x8c, + 0xbd, 0x5e, 0xeb, 0xb6, 0x07, 0x14, 0x12, 0x4e, 0x88, 0xda, 0xdf, 0x1c, 0xea, 0x94, 0x20, 0xd8, + 0xbd, 0xe3, 0xf3, 0x56, 0xc7, 0xa3, 0xfc, 0x27, 0xfa, 0x55, 0x83, 0x1c, 0xa3, 0xec, 0xf8, 0x39, + 0x0b, 0x1e, 0x68, 0x65, 0x7e, 0x94, 0x38, 0x8e, 0xfb, 0xd3, 0xa6, 0xf0, 0x61, 0x50, 0xe1, 0xc2, + 0xb3, 0xe1, 0x38, 0xa7, 0xa5, 0xb4, 0x7c, 0x5e, 0x7c, 0xdf, 0xf2, 0xf9, 0x3a, 0x8c, 0x30, 0x91, + 0x2f, 0x09, 0x4f, 0xd4, 0x97, 0x69, 0x1b, 0x3b, 0xd8, 0x97, 0x45, 0x45, 0xac, 0x48, 0xa0, 0x5f, + 0xb4, 0xe0, 0x6c, 0xba, 0xeb, 0x98, 0x30, 0xb0, 0x08, 0x75, 0xc9, 0xaf, 0x3c, 0xab, 0xe2, 0xfb, + 0xcf, 0x56, 0xbb, 0x21, 0x1f, 0xf6, 0x42, 0xc0, 0xdd, 0x1b, 0x43, 0x95, 0x8c, 0x3b, 0xd7, 0x90, + 0xf9, 0x66, 0xd7, 0xfb, 0xde, 0x85, 0x9e, 0x87, 0xb1, 0xdd, 0xa0, 0xed, 0x4b, 0xbf, 0x13, 0xe1, + 0x55, 0xcc, 0xf4, 0xc3, 0xeb, 0x5a, 0x39, 0x36, 0xb0, 0x4e, 0xf6, 0x0e, 0xf0, 0x35, 0x2b, 0x43, + 0x78, 0xe5, 0xb7, 0xc2, 0x57, 0xcc, 0x5b, 0xe1, 0x63, 0xe9, 0x5b, 0x61, 0x87, 0xf6, 0xce, 0xb8, + 0x10, 0xf6, 0x1f, 0xc2, 0xb7, 0xdf, 0xf8, 0x4d, 0xb6, 0x07, 0xe7, 0x7b, 0xb1, 0x69, 0x66, 0xde, + 0xd7, 0x50, 0xef, 0xde, 0x89, 0x79, 0x5f, 0x63, 0xad, 0x82, 0x19, 0xa4, 0xdf, 0x48, 0x20, 0xf6, + 0x7f, 0xb7, 0xa0, 0x58, 0x0d, 0x1a, 0x27, 0xa0, 0x8d, 0xfc, 0x94, 0xa1, 0x8d, 0x7c, 0x28, 0x27, + 0x9f, 0x67, 0xae, 0xee, 0x71, 0x25, 0xa5, 0x7b, 0x3c, 0x9b, 0x47, 0xa0, 0xbb, 0xa6, 0xf1, 0xef, + 0x15, 0x41, 0xcf, 0x3e, 0x8a, 0xfe, 0xf5, 0xbd, 0xd8, 0x89, 0x17, 0xbb, 0x25, 0x24, 0x15, 0x94, + 0x99, 0x55, 0xa0, 0x74, 0x41, 0xfd, 0x11, 0x33, 0x17, 0xbf, 0x45, 0xdc, 0xe6, 0x76, 0x4c, 0x1a, + 0xe9, 0xcf, 0x39, 0x39, 0x73, 0xf1, 0xff, 0x62, 0xc1, 0x64, 0xaa, 0x75, 0xe4, 0x65, 0xf9, 0xb3, + 0xdd, 0xa3, 0x16, 0x6a, 0xba, 0xa7, 0x03, 0xdc, 0x3c, 0x80, 0x7a, 0xea, 0x91, 0x9a, 0x1e, 0x26, + 0x05, 0xab, 0xb7, 0xa0, 0x08, 0x6b, 0x18, 0xe8, 0x05, 0x18, 0x8d, 0x83, 0x56, 0xe0, 0x05, 0xcd, + 0xfd, 0x2b, 0x44, 0xc6, 0x9e, 0x51, 0x0f, 0x72, 0x1b, 0x09, 0x08, 0xeb, 0x78, 0xf6, 0xaf, 0x15, + 0x21, 0x9d, 0xb1, 0xf6, 0x27, 0x6b, 0xf2, 0xc3, 0xb9, 0x26, 0xbf, 0x6b, 0xc1, 0x14, 0x6d, 0x9d, + 0x59, 0x5c, 0x49, 0x43, 0x6b, 0x95, 0xeb, 0xc3, 0xea, 0x92, 0xeb, 0xe3, 0x31, 0xca, 0xbb, 0x1a, + 0x41, 0x3b, 0x16, 0x9a, 0x22, 0x8d, 0x39, 0xd1, 0x52, 0x2c, 0xa0, 0x02, 0x8f, 0x84, 0xa1, 0xf0, + 0x52, 0xd3, 0xf1, 0x48, 0x18, 0x62, 0x01, 0x95, 0xa9, 0x40, 0x06, 0x72, 0x52, 0x81, 0xb0, 0xb0, + 0x6d, 0xc2, 0xca, 0x47, 0x08, 0x14, 0x5a, 0xd8, 0x36, 0x69, 0xfe, 0x93, 0xe0, 0xd8, 0x5f, 0x2f, + 0xc2, 0x58, 0x35, 0x68, 0x24, 0x8f, 0x2d, 0xcf, 0x1b, 0x8f, 0x2d, 0xe7, 0x53, 0x8f, 0x2d, 0x53, + 0x3a, 0xee, 0x4f, 0x9e, 0x56, 0x3e, 0xa8, 0xa7, 0x95, 0x3f, 0xb3, 0x60, 0xa2, 0x1a, 0x34, 0xe8, + 0x02, 0xfd, 0x71, 0x5a, 0x8d, 0x7a, 0x50, 0xc0, 0xa1, 0x2e, 0x41, 0x01, 0xff, 0xbe, 0x05, 0xc3, + 0xd5, 0xa0, 0x71, 0x02, 0x5a, 0xd4, 0x57, 0x4c, 0x2d, 0xea, 0x83, 0x39, 0x5c, 0x36, 0x47, 0x71, + 0xfa, 0x8d, 0x22, 0x8c, 0xd3, 0x7e, 0x06, 0x4d, 0x39, 0x4b, 0xc6, 0x88, 0x58, 0x7d, 0x8c, 0x08, + 0x15, 0xe6, 0x02, 0xcf, 0x0b, 0x6e, 0xa7, 0x67, 0x6c, 0x95, 0x95, 0x62, 0x01, 0x45, 0x4f, 0xc3, + 0x48, 0x2b, 0x24, 0x7b, 0x6e, 0xd0, 0x8e, 0xd2, 0x7e, 0xae, 0x55, 0x51, 0x8e, 0x15, 0x06, 0x95, + 0xdb, 0x23, 0xd7, 0xaf, 0x13, 0x69, 0xf9, 0x33, 0xc0, 0x2c, 0x7f, 0x78, 0x5c, 0x55, 0xad, 0x1c, + 0x1b, 0x58, 0xe8, 0x16, 0x94, 0xd8, 0x7f, 0xb6, 0x6f, 0x8e, 0x9e, 0xe9, 0x43, 0x04, 0x33, 0x17, + 0x04, 0x70, 0x42, 0x0b, 0x5d, 0x04, 0x88, 0xa5, 0x8d, 0x52, 0x24, 0xdc, 0xb0, 0x95, 0x44, 0xa9, + 0xac, 0x97, 0x22, 0xac, 0x61, 0xa1, 0xa7, 0xa0, 0x14, 0x3b, 0xae, 0x77, 0xd5, 0xf5, 0x49, 0x24, + 0x6c, 0xbc, 0x44, 0xac, 0x72, 0x51, 0x88, 0x13, 0x38, 0x3d, 0xd1, 0x99, 0x93, 0x3f, 0xcf, 0x13, + 0x34, 0xc2, 0xb0, 0xd9, 0x89, 0x7e, 0x55, 0x95, 0x62, 0x0d, 0xc3, 0x7e, 0x09, 0x4e, 0x57, 0x83, + 0x46, 0x35, 0x08, 0xe3, 0xd5, 0x20, 0xbc, 0xed, 0x84, 0x0d, 0x39, 0x7f, 0x73, 0x32, 0x6c, 0x36, + 0x3d, 0x75, 0x07, 0xb9, 0x36, 0xc0, 0x08, 0x88, 0xfd, 0x1c, 0x3b, 0xd3, 0x8f, 0xe8, 0x90, 0xf3, + 0xef, 0x0a, 0x80, 0xaa, 0xcc, 0x8a, 0xca, 0x48, 0x26, 0xf5, 0x36, 0x4c, 0x44, 0xe4, 0xaa, 0xeb, + 0xb7, 0xef, 0xc8, 0xfb, 0x55, 0x17, 0x6f, 0xa7, 0xda, 0x8a, 0x8e, 0xc9, 0x75, 0x2b, 0x66, 0x19, + 0x4e, 0x51, 0xa3, 0x43, 0x18, 0xb6, 0xfd, 0xc5, 0xe8, 0x46, 0x44, 0x42, 0x91, 0x3c, 0x89, 0x0d, + 0x21, 0x96, 0x85, 0x38, 0x81, 0xd3, 0x25, 0xc3, 0xfe, 0x5c, 0x0b, 0x7c, 0x1c, 0x04, 0xb1, 0x5c, + 0x64, 0x2c, 0xfd, 0x86, 0x56, 0x8e, 0x0d, 0x2c, 0xb4, 0x0a, 0x28, 0x6a, 0xb7, 0x5a, 0x1e, 0x7b, + 0x9a, 0x74, 0xbc, 0x4b, 0x61, 0xd0, 0x6e, 0xf1, 0xe7, 0x25, 0x91, 0xb9, 0xa2, 0xd6, 0x01, 0xc5, + 0x19, 0x35, 0x28, 0x63, 0xd8, 0x8a, 0xd8, 0x6f, 0xe1, 0xe7, 0xcf, 0xb5, 0x9c, 0x35, 0x56, 0x84, + 0x25, 0xcc, 0xfe, 0x2c, 0x3b, 0xcc, 0x58, 0xce, 0x9b, 0xb8, 0x1d, 0x12, 0xb4, 0x0b, 0xe3, 0x2d, + 0x76, 0x60, 0xc5, 0x61, 0xe0, 0x79, 0x44, 0xca, 0x8d, 0xf7, 0x66, 0xd1, 0xc5, 0x73, 0x60, 0xe8, + 0xe4, 0xb0, 0x49, 0xdd, 0xfe, 0xfc, 0x24, 0xe3, 0x4b, 0x35, 0x7e, 0x69, 0x19, 0x16, 0x76, 0xda, + 0x42, 0x42, 0x9b, 0xcd, 0xcf, 0x31, 0x97, 0x70, 0x7a, 0x61, 0xeb, 0x8d, 0x65, 0x5d, 0xf4, 0x3a, + 0x7b, 0x97, 0xe3, 0xcc, 0xa0, 0x57, 0x76, 0x4b, 0x8e, 0x65, 0x3c, 0xc1, 0x89, 0x8a, 0x58, 0x23, + 0x82, 0xae, 0xc2, 0xb8, 0x48, 0x91, 0x22, 0x14, 0x0f, 0x45, 0xe3, 0xfa, 0x3b, 0x8e, 0x75, 0xe0, + 0x61, 0xba, 0x00, 0x9b, 0x95, 0x51, 0x13, 0xce, 0x6a, 0x09, 0xbd, 0x32, 0xac, 0x0a, 0x39, 0x6f, + 0x79, 0xe4, 0xee, 0xc1, 0xdc, 0xd9, 0x8d, 0x6e, 0x88, 0xb8, 0x3b, 0x1d, 0x74, 0x1d, 0x4e, 0x3b, + 0xf5, 0xd8, 0xdd, 0x23, 0x15, 0xe2, 0x34, 0x3c, 0xd7, 0x27, 0x66, 0xe0, 0x87, 0x33, 0x77, 0x0f, + 0xe6, 0x4e, 0x2f, 0x66, 0x21, 0xe0, 0xec, 0x7a, 0xe8, 0x15, 0x28, 0x35, 0xfc, 0x48, 0x8c, 0xc1, + 0x90, 0x91, 0xab, 0xae, 0x54, 0xb9, 0x56, 0x53, 0xdf, 0x9f, 0xfc, 0xc1, 0x49, 0x05, 0xd4, 0x84, + 0x31, 0xdd, 0xb9, 0x4b, 0xe4, 0x39, 0x7c, 0xa6, 0xcb, 0xdd, 0xd6, 0xf0, 0x88, 0xe2, 0x5a, 0x37, + 0x65, 0xb3, 0x6b, 0x38, 0x4b, 0x19, 0x84, 0xd1, 0x6b, 0x80, 0x22, 0x12, 0xee, 0xb9, 0x75, 0xb2, + 0x58, 0x67, 0x81, 0x87, 0x99, 0xae, 0x66, 0xc4, 0x70, 0x40, 0x41, 0xb5, 0x0e, 0x0c, 0x9c, 0x51, + 0x0b, 0x5d, 0xa6, 0x1c, 0x45, 0x2f, 0x15, 0x26, 0xd6, 0x52, 0xcc, 0x2b, 0x57, 0x48, 0x2b, 0x24, + 0x75, 0x27, 0x26, 0x0d, 0x93, 0x22, 0x4e, 0xd5, 0xa3, 0xe7, 0x8d, 0xca, 0xe7, 0x00, 0xa6, 0x61, + 0x70, 0x67, 0x4e, 0x07, 0x7a, 0x43, 0xda, 0x0e, 0xa2, 0xf8, 0x1a, 0x89, 0x6f, 0x07, 0xe1, 0x8e, + 0x88, 0xd6, 0x96, 0x04, 0x73, 0x4c, 0x40, 0x58, 0xc7, 0xa3, 0x12, 0x11, 0x7b, 0x18, 0x5b, 0xab, + 0xb0, 0x17, 0x8b, 0x91, 0x64, 0x9f, 0x5c, 0xe6, 0xc5, 0x58, 0xc2, 0x25, 0xea, 0x5a, 0x75, 0x99, + 0xbd, 0x43, 0xa4, 0x50, 0xd7, 0xaa, 0xcb, 0x58, 0xc2, 0x11, 0xe9, 0xcc, 0x03, 0x38, 0x91, 0xff, + 0x82, 0xd4, 0xc9, 0x97, 0xfb, 0x4c, 0x05, 0xe8, 0xc3, 0x94, 0xca, 0x40, 0xc8, 0xc3, 0xd8, 0x45, + 0xe5, 0x49, 0xb6, 0x48, 0xfa, 0x8f, 0x81, 0xa7, 0x74, 0x71, 0x6b, 0x29, 0x4a, 0xb8, 0x83, 0xb6, + 0x11, 0x50, 0x64, 0xaa, 0x67, 0x3e, 0x8e, 0x05, 0x28, 0x45, 0xed, 0xcd, 0x46, 0xb0, 0xeb, 0xb8, + 0x3e, 0x7b, 0x36, 0xd0, 0x04, 0x91, 0x9a, 0x04, 0xe0, 0x04, 0x07, 0xad, 0xc2, 0x88, 0x23, 0x2e, + 0x5f, 0x42, 0xd1, 0x9f, 0x19, 0x61, 0x40, 0x5e, 0xd0, 0xb8, 0x1e, 0x54, 0xfe, 0xc3, 0xaa, 0x2e, + 0x7a, 0x19, 0xc6, 0x85, 0x13, 0x9c, 0xb0, 0x5f, 0x3d, 0x65, 0xfa, 0x4b, 0xd4, 0x74, 0x20, 0x36, + 0x71, 0xd1, 0xcf, 0xc1, 0x04, 0xa5, 0x92, 0x30, 0xb6, 0xf2, 0x4c, 0x3f, 0x1c, 0x51, 0x8b, 0xb3, + 0xae, 0x57, 0xc6, 0x29, 0x62, 0xa8, 0x01, 0x0f, 0x3b, 0xed, 0x38, 0x60, 0xca, 0x4a, 0x73, 0xfd, + 0x6f, 0x04, 0x3b, 0xc4, 0x67, 0xda, 0xfd, 0x91, 0xa5, 0xf3, 0x77, 0x0f, 0xe6, 0x1e, 0x5e, 0xec, + 0x82, 0x87, 0xbb, 0x52, 0x41, 0x37, 0x60, 0x34, 0x0e, 0x3c, 0x61, 0x78, 0x1e, 0x95, 0x1f, 0xc8, + 0x0f, 0x88, 0xb4, 0xa1, 0xd0, 0x74, 0x75, 0x82, 0xaa, 0x8a, 0x75, 0x3a, 0x68, 0x83, 0xef, 0x31, + 0x16, 0xbe, 0x93, 0x44, 0xe5, 0x07, 0xf3, 0x07, 0x46, 0x45, 0xf9, 0x34, 0xb7, 0xa0, 0xa8, 0x89, + 0x75, 0x32, 0xe8, 0x12, 0x4c, 0xb7, 0x42, 0x37, 0x60, 0x0b, 0x5b, 0x29, 0x8a, 0xcb, 0x46, 0xa8, + 0xbc, 0xe9, 0x6a, 0x1a, 0x01, 0x77, 0xd6, 0x41, 0x17, 0xa8, 0x80, 0xca, 0x0b, 0xcb, 0x67, 0x78, + 0x9e, 0x16, 0x2e, 0x9c, 0xf2, 0x32, 0xac, 0xa0, 0xb3, 0x3f, 0x0d, 0xd3, 0x1d, 0x9c, 0xf2, 0x48, + 0x46, 0xc0, 0xff, 0x64, 0x10, 0x4a, 0x4a, 0x1d, 0x88, 0x16, 0x4c, 0x2d, 0xef, 0x99, 0xb4, 0x96, + 0x77, 0x84, 0xca, 0x6b, 0xba, 0x62, 0x77, 0x23, 0x23, 0xcd, 0xfc, 0xf9, 0x1c, 0xd6, 0xd0, 0xbf, + 0xc7, 0xde, 0x11, 0x52, 0xf0, 0x27, 0x17, 0xc6, 0x81, 0xae, 0x17, 0xc6, 0x3e, 0x53, 0x3e, 0xd2, + 0xab, 0x61, 0x2b, 0x68, 0xac, 0x55, 0xd3, 0x39, 0xd0, 0xaa, 0xb4, 0x10, 0x73, 0x18, 0x13, 0xee, + 0xe9, 0xb1, 0xce, 0x84, 0xfb, 0xe1, 0x7b, 0x14, 0xee, 0x25, 0x01, 0x9c, 0xd0, 0x42, 0x1e, 0x4c, + 0xd7, 0xcd, 0xf4, 0x75, 0xca, 0x4b, 0xef, 0xd1, 0x9e, 0x89, 0xe4, 0xda, 0x5a, 0x5e, 0x9b, 0xe5, + 0x34, 0x15, 0xdc, 0x49, 0x18, 0xbd, 0x0c, 0x23, 0xef, 0x06, 0x11, 0x5b, 0x76, 0xe2, 0x6c, 0x93, + 0x7e, 0x51, 0x23, 0xaf, 0x5f, 0xaf, 0xb1, 0xf2, 0xc3, 0x83, 0xb9, 0xd1, 0x6a, 0xd0, 0x90, 0x7f, + 0xb1, 0xaa, 0x80, 0xee, 0xc0, 0x69, 0x83, 0x23, 0xa8, 0xee, 0x42, 0xff, 0xdd, 0x3d, 0x2b, 0x9a, + 0x3b, 0xbd, 0x96, 0x45, 0x09, 0x67, 0x37, 0x60, 0x7f, 0x93, 0x2b, 0x3d, 0x85, 0x6a, 0x84, 0x44, + 0x6d, 0xef, 0x24, 0x92, 0x57, 0xac, 0x18, 0x5a, 0x9b, 0x7b, 0x56, 0xac, 0xff, 0x9e, 0xc5, 0x14, + 0xeb, 0x1b, 0x64, 0xb7, 0xe5, 0x39, 0xf1, 0x49, 0x98, 0x7e, 0xbf, 0x0e, 0x23, 0xb1, 0x68, 0xad, + 0x5b, 0xbe, 0x0d, 0xad, 0x53, 0xec, 0x71, 0x41, 0x1d, 0x88, 0xb2, 0x14, 0x2b, 0x32, 0xf6, 0x3f, + 0xe3, 0x33, 0x20, 0x21, 0x27, 0xa0, 0x5b, 0xa8, 0x98, 0xba, 0x85, 0xb9, 0x1e, 0x5f, 0x90, 0xa3, + 0x63, 0xf8, 0xa7, 0x66, 0xbf, 0xd9, 0xdd, 0xe3, 0xc3, 0xfe, 0xa2, 0x63, 0xff, 0xb2, 0x05, 0x33, + 0x59, 0x26, 0x01, 0x54, 0x88, 0xe1, 0x37, 0x1f, 0xf5, 0xc2, 0xa5, 0x46, 0xf0, 0xa6, 0x28, 0xc7, + 0x0a, 0xa3, 0xef, 0x98, 0xf7, 0x47, 0x0b, 0x02, 0x76, 0x1d, 0xcc, 0x4c, 0x87, 0xe8, 0x55, 0xee, + 0xcb, 0x61, 0xa9, 0x54, 0x84, 0x47, 0xf3, 0xe3, 0xb0, 0x7f, 0xbd, 0x00, 0x33, 0x5c, 0x45, 0xbd, + 0xb8, 0x17, 0xb8, 0x8d, 0x6a, 0xd0, 0x10, 0x9e, 0x2d, 0x6f, 0xc2, 0x58, 0x4b, 0xbb, 0xae, 0x76, + 0x0b, 0x43, 0xa4, 0x5f, 0x6b, 0x93, 0x6b, 0x83, 0x5e, 0x8a, 0x0d, 0x5a, 0xa8, 0x01, 0x63, 0x64, + 0xcf, 0xad, 0x2b, 0x3d, 0x67, 0xe1, 0xc8, 0x2c, 0x5d, 0xb5, 0xb2, 0xa2, 0xd1, 0xc1, 0x06, 0xd5, + 0xfb, 0x90, 0x99, 0xc6, 0xfe, 0x8a, 0x05, 0x0f, 0xe6, 0x04, 0x2d, 0xa2, 0xcd, 0xdd, 0x66, 0x8f, + 0x01, 0x22, 0x6d, 0xa6, 0x6a, 0x8e, 0x3f, 0x11, 0x60, 0x01, 0x45, 0x9f, 0x06, 0xe0, 0x2a, 0x7e, + 0x2a, 0x45, 0x8b, 0x4f, 0xef, 0x2f, 0x98, 0x87, 0x16, 0xf1, 0x41, 0xd6, 0xc7, 0x1a, 0x2d, 0xfb, + 0x57, 0x8b, 0x30, 0xc8, 0x73, 0xa8, 0xaf, 0xc2, 0xf0, 0x36, 0x0f, 0x91, 0xdc, 0x4f, 0x34, 0xe6, + 0xe4, 0x3a, 0xc2, 0x0b, 0xb0, 0xac, 0x8c, 0xd6, 0xe1, 0x94, 0xf0, 0x9e, 0xaa, 0x10, 0xcf, 0xd9, + 0x97, 0xb7, 0x5a, 0x9e, 0xae, 0x44, 0x86, 0xd2, 0x3f, 0xb5, 0xd6, 0x89, 0x82, 0xb3, 0xea, 0xa1, + 0x57, 0x3b, 0x02, 0x23, 0xf2, 0xe0, 0xd2, 0x4a, 0x06, 0xee, 0x11, 0x1c, 0xf1, 0x65, 0x18, 0x6f, + 0x75, 0xdc, 0xdf, 0xb5, 0xf4, 0xd5, 0xe6, 0x9d, 0xdd, 0xc4, 0x65, 0x56, 0x05, 0x6d, 0x66, 0x43, + 0xb1, 0xb1, 0x1d, 0x92, 0x68, 0x3b, 0xf0, 0x1a, 0x22, 0x57, 0x6b, 0x62, 0x55, 0x90, 0x82, 0xe3, + 0x8e, 0x1a, 0x94, 0xca, 0x96, 0xe3, 0x7a, 0xed, 0x90, 0x24, 0x54, 0x86, 0x4c, 0x2a, 0xab, 0x29, + 0x38, 0xee, 0xa8, 0x41, 0xd7, 0xd1, 0x69, 0x91, 0xe8, 0x53, 0xfa, 0xd4, 0x2b, 0x53, 0x91, 0x61, + 0x69, 0x5b, 0xdf, 0x25, 0xce, 0x8b, 0x78, 0xf2, 0x57, 0xa9, 0x42, 0xb5, 0x34, 0x72, 0xc2, 0xaa, + 0x5e, 0x52, 0xb9, 0x97, 0x74, 0x93, 0x7f, 0x6c, 0xc1, 0xa9, 0x0c, 0x43, 0x32, 0xce, 0xaa, 0x9a, + 0x6e, 0x14, 0xab, 0x2c, 0x19, 0x1a, 0xab, 0xe2, 0xe5, 0x58, 0x61, 0xd0, 0xfd, 0xc0, 0x99, 0x61, + 0x9a, 0x01, 0x0a, 0x93, 0x0f, 0x01, 0x3d, 0x1a, 0x03, 0x44, 0xe7, 0x61, 0xa0, 0x1d, 0x91, 0x50, + 0xe6, 0x69, 0x94, 0xfc, 0x9b, 0x69, 0x04, 0x19, 0x84, 0x4a, 0x94, 0x4d, 0xa5, 0x8c, 0xd3, 0x24, + 0x4a, 0xae, 0x8e, 0xe3, 0x30, 0xfb, 0x4b, 0x45, 0x38, 0x93, 0x6b, 0x14, 0x4a, 0xbb, 0xb4, 0x1b, + 0xf8, 0x6e, 0x1c, 0xa8, 0x08, 0x7d, 0x3c, 0x20, 0x09, 0x69, 0x6d, 0xaf, 0x8b, 0x72, 0xac, 0x30, + 0xd0, 0x63, 0x32, 0x8d, 0x6f, 0x3a, 0x0f, 0xc8, 0x52, 0xc5, 0xc8, 0xe4, 0xdb, 0x6f, 0x42, 0x9f, + 0x47, 0x61, 0xa0, 0x15, 0xa8, 0x1c, 0xeb, 0x6a, 0x66, 0x69, 0x77, 0x83, 0xc0, 0xc3, 0x0c, 0x88, + 0x3e, 0x26, 0xc6, 0x21, 0xf5, 0x72, 0x81, 0x9d, 0x46, 0x10, 0x69, 0x83, 0xf1, 0x04, 0x0c, 0xef, + 0x90, 0xfd, 0xd0, 0xf5, 0x9b, 0xe9, 0x77, 0x9b, 0x2b, 0xbc, 0x18, 0x4b, 0xb8, 0x99, 0x23, 0x6f, + 0xb8, 0x57, 0x8e, 0xbc, 0xa3, 0xa6, 0xe3, 0x19, 0xe9, 0x79, 0xb4, 0x7d, 0xb1, 0x08, 0x93, 0x78, + 0xa9, 0xf2, 0x93, 0x89, 0xb8, 0xd1, 0x39, 0x11, 0xc7, 0x9d, 0x1c, 0xa9, 0xf7, 0x6c, 0x7c, 0xc3, + 0x82, 0x49, 0x16, 0x96, 0x58, 0x04, 0xd4, 0x70, 0x03, 0xff, 0x04, 0x44, 0xb7, 0x47, 0x61, 0x30, + 0xa4, 0x8d, 0xa6, 0x33, 0x9e, 0xb0, 0x9e, 0x60, 0x0e, 0x43, 0x0f, 0xc3, 0x00, 0xeb, 0x02, 0x9d, + 0xbc, 0x31, 0x9e, 0x98, 0xa0, 0xe2, 0xc4, 0x0e, 0x66, 0xa5, 0xcc, 0xb3, 0x11, 0x93, 0x96, 0xe7, + 0xf2, 0x4e, 0x27, 0x1a, 0xf0, 0x0f, 0x87, 0x67, 0x63, 0x66, 0xd7, 0xde, 0x9f, 0x67, 0x63, 0x36, + 0xc9, 0xee, 0xd7, 0xa2, 0xff, 0x51, 0x80, 0x73, 0x99, 0xf5, 0xfa, 0xf6, 0x6c, 0xec, 0x5e, 0xfb, + 0x78, 0x9e, 0xdf, 0xb3, 0x5f, 0xc5, 0x8b, 0x27, 0xf8, 0x2a, 0x3e, 0xd0, 0xaf, 0xe4, 0x38, 0xd8, + 0x87, 0xc3, 0x61, 0xe6, 0x90, 0x7d, 0x48, 0x1c, 0x0e, 0x33, 0xfb, 0x96, 0x73, 0xad, 0xfb, 0x61, + 0x21, 0xe7, 0x5b, 0xd8, 0x05, 0xef, 0x02, 0xe5, 0x33, 0x0c, 0x18, 0x09, 0x49, 0x78, 0x8c, 0xf3, + 0x18, 0x5e, 0x86, 0x15, 0x14, 0xb9, 0x9a, 0xeb, 0x1e, 0xef, 0xda, 0xcb, 0x47, 0xda, 0x32, 0xf3, + 0xe6, 0x83, 0x85, 0x1e, 0xfd, 0x23, 0xed, 0xc6, 0xb7, 0xae, 0x5d, 0xca, 0x8b, 0xfd, 0x5f, 0xca, + 0xc7, 0xb2, 0x2f, 0xe4, 0x68, 0x11, 0x26, 0x77, 0x5d, 0x9f, 0xa5, 0x2d, 0x36, 0x45, 0x51, 0xe5, + 0xc9, 0xbe, 0x6e, 0x82, 0x71, 0x1a, 0x7f, 0xf6, 0x65, 0x18, 0xbf, 0x77, 0x2d, 0xe2, 0x77, 0x8b, + 0xf0, 0x50, 0x97, 0x6d, 0xcf, 0x79, 0xbd, 0x31, 0x07, 0x1a, 0xaf, 0xef, 0x98, 0x87, 0x2a, 0xcc, + 0x6c, 0xb5, 0x3d, 0x6f, 0x9f, 0x19, 0x9e, 0x91, 0x86, 0xc4, 0x10, 0xb2, 0xa2, 0x8a, 0x39, 0xbe, + 0x9a, 0x81, 0x83, 0x33, 0x6b, 0xa2, 0xd7, 0x00, 0x05, 0x9b, 0x2c, 0x0e, 0x76, 0x23, 0x89, 0x69, + 0xc2, 0x06, 0xbe, 0x98, 0x6c, 0xc6, 0xeb, 0x1d, 0x18, 0x38, 0xa3, 0x16, 0x15, 0xfa, 0xe9, 0xa9, + 0xb4, 0xaf, 0xba, 0x95, 0x12, 0xfa, 0xb1, 0x0e, 0xc4, 0x26, 0x2e, 0xba, 0x04, 0xd3, 0xce, 0x9e, + 0xe3, 0xf2, 0x18, 0x77, 0x92, 0x00, 0x97, 0xfa, 0x95, 0xee, 0x6e, 0x31, 0x8d, 0x80, 0x3b, 0xeb, + 0xa4, 0x7c, 0x10, 0x87, 0xf2, 0x7d, 0x10, 0xbb, 0xf3, 0xc5, 0x5e, 0xaa, 0x58, 0xfb, 0x3f, 0x5a, + 0xf4, 0xf8, 0xca, 0xc8, 0x93, 0x4b, 0xc7, 0x41, 0xa9, 0x14, 0x35, 0x77, 0x40, 0x35, 0x0e, 0xcb, + 0x3a, 0x10, 0x9b, 0xb8, 0x7c, 0x41, 0x44, 0x89, 0xdd, 0xbb, 0x21, 0xba, 0x0b, 0x3f, 0x5d, 0x85, + 0x81, 0xde, 0x80, 0xe1, 0x86, 0xbb, 0xe7, 0x46, 0x41, 0x28, 0x36, 0xcb, 0x51, 0x73, 0xc3, 0x2b, + 0x3e, 0x58, 0xe1, 0x64, 0xb0, 0xa4, 0x67, 0x7f, 0xb1, 0x00, 0xe3, 0xb2, 0xc5, 0xd7, 0xdb, 0x41, + 0xec, 0x9c, 0xc0, 0xb1, 0x7c, 0xc9, 0x38, 0x96, 0x3f, 0xd6, 0xcd, 0x59, 0x99, 0x75, 0x29, 0xf7, + 0x38, 0xbe, 0x9e, 0x3a, 0x8e, 0x1f, 0xef, 0x4d, 0xaa, 0xfb, 0x31, 0xfc, 0xcf, 0x2d, 0x98, 0x36, + 0xf0, 0x4f, 0xe0, 0x34, 0x58, 0x35, 0x4f, 0x83, 0x47, 0x7a, 0x7e, 0x43, 0xce, 0x29, 0xf0, 0xb5, + 0x42, 0xaa, 0xef, 0x8c, 0xfb, 0xbf, 0x0b, 0x03, 0xdb, 0x4e, 0xd8, 0xe8, 0x16, 0xa9, 0xb5, 0xa3, + 0xd2, 0xfc, 0x65, 0x27, 0x6c, 0x70, 0x1e, 0xfe, 0xb4, 0x4a, 0xe1, 0xe7, 0x84, 0x8d, 0x9e, 0x6e, + 0x1e, 0xac, 0x29, 0xf4, 0x12, 0x0c, 0x45, 0xf5, 0xa0, 0xa5, 0xcc, 0x61, 0xcf, 0xf3, 0xf4, 0x7e, + 0xb4, 0xe4, 0xf0, 0x60, 0x0e, 0x99, 0xcd, 0xd1, 0x62, 0x2c, 0xf0, 0x67, 0x9b, 0x50, 0x52, 0x4d, + 0xdf, 0x57, 0x43, 0xff, 0x3f, 0x2c, 0xc2, 0xa9, 0x8c, 0x75, 0x81, 0x22, 0x63, 0xb4, 0x9e, 0xed, + 0x73, 0x39, 0xbd, 0xcf, 0xf1, 0x8a, 0xd8, 0x8d, 0xa5, 0x21, 0xe6, 0xbf, 0xef, 0x46, 0x6f, 0x44, + 0x24, 0xdd, 0x28, 0x2d, 0xea, 0xdd, 0x28, 0x6d, 0xec, 0xc4, 0x86, 0x9a, 0x36, 0xa4, 0x7a, 0x7a, + 0x5f, 0xe7, 0xf4, 0x4f, 0x8a, 0x30, 0x93, 0x15, 0xe3, 0x00, 0xfd, 0x7c, 0x2a, 0xef, 0xcb, 0xf3, + 0xfd, 0x46, 0x47, 0xe0, 0xc9, 0x60, 0x44, 0x50, 0xa8, 0x79, 0x33, 0x13, 0x4c, 0xcf, 0x61, 0x16, + 0x6d, 0x32, 0xbf, 0xab, 0x90, 0xe7, 0xeb, 0x91, 0x5b, 0xfc, 0x13, 0x7d, 0x77, 0x40, 0x24, 0xfa, + 0x89, 0x52, 0x7e, 0x57, 0xb2, 0xb8, 0xb7, 0xdf, 0x95, 0x6c, 0x79, 0xd6, 0x85, 0x51, 0xed, 0x6b, + 0xee, 0xeb, 0x8c, 0xef, 0xd0, 0x13, 0x45, 0xeb, 0xf7, 0x7d, 0x9d, 0xf5, 0xaf, 0x58, 0x90, 0x32, + 0x5d, 0x53, 0x2a, 0x29, 0x2b, 0x57, 0x25, 0x75, 0x1e, 0x06, 0xc2, 0xc0, 0x23, 0xe9, 0x54, 0x20, + 0x38, 0xf0, 0x08, 0x66, 0x10, 0x95, 0xaf, 0xbb, 0x98, 0x97, 0xaf, 0x9b, 0x5e, 0x8d, 0x3d, 0xb2, + 0x47, 0xa4, 0x36, 0x42, 0xf1, 0xe4, 0xab, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0x8d, 0x01, 0x38, 0xdb, + 0xd5, 0xdf, 0x90, 0x5e, 0x59, 0x9a, 0x4e, 0x4c, 0x6e, 0x3b, 0xfb, 0xe9, 0x40, 0xc5, 0x97, 0x78, + 0x31, 0x96, 0x70, 0x66, 0x68, 0xcb, 0x63, 0x1d, 0xa6, 0x14, 0x78, 0x22, 0xc4, 0xa1, 0x80, 0x9a, + 0x8a, 0xa3, 0xe2, 0x71, 0x28, 0x8e, 0x2e, 0x02, 0x44, 0x91, 0xb7, 0xe2, 0x53, 0x09, 0xac, 0x21, + 0x2c, 0x78, 0x93, 0x98, 0x98, 0xb5, 0xab, 0x02, 0x82, 0x35, 0x2c, 0x54, 0x81, 0xa9, 0x56, 0x18, + 0xc4, 0x5c, 0x1f, 0x5a, 0xe1, 0xb6, 0x23, 0x83, 0xa6, 0xd3, 0x58, 0x35, 0x05, 0xc7, 0x1d, 0x35, + 0xd0, 0x0b, 0x30, 0x2a, 0x1c, 0xc9, 0xaa, 0x41, 0xe0, 0x09, 0x55, 0x8d, 0xb2, 0x44, 0xa8, 0x25, + 0x20, 0xac, 0xe3, 0x69, 0xd5, 0x98, 0x92, 0x75, 0x38, 0xb3, 0x1a, 0x57, 0xb4, 0x6a, 0x78, 0xa9, + 0x78, 0x27, 0x23, 0x7d, 0xc5, 0x3b, 0x49, 0x94, 0x57, 0xa5, 0xbe, 0xdf, 0x95, 0xa0, 0xa7, 0xba, + 0xe7, 0x37, 0x06, 0xe0, 0x94, 0x58, 0x38, 0xf7, 0x7b, 0xb9, 0xdc, 0xa7, 0xdc, 0xdf, 0x3f, 0x59, + 0x33, 0x27, 0xbd, 0x66, 0xbe, 0x59, 0x84, 0x21, 0x3e, 0x15, 0x27, 0x20, 0xc3, 0xaf, 0x0a, 0xa5, + 0x5f, 0x97, 0x88, 0x21, 0xbc, 0x2f, 0xf3, 0x15, 0x27, 0x76, 0xf8, 0xf9, 0xa5, 0xd8, 0x68, 0xa2, + 0x1e, 0x44, 0xf3, 0x06, 0xa3, 0x9d, 0x4d, 0x69, 0xb5, 0x80, 0xd3, 0xd0, 0xd8, 0xee, 0xdb, 0x00, + 0x11, 0xcb, 0x3f, 0x4d, 0x69, 0x88, 0xd8, 0x33, 0x4f, 0x76, 0x69, 0xbd, 0xa6, 0x90, 0x79, 0x1f, + 0x92, 0x25, 0xa8, 0x00, 0x58, 0xa3, 0x38, 0xfb, 0x22, 0x94, 0x14, 0x72, 0x2f, 0x15, 0xc0, 0x98, + 0x7e, 0xea, 0x7d, 0x0a, 0x26, 0x53, 0x6d, 0x1d, 0x49, 0x83, 0xf0, 0x5b, 0x16, 0x4c, 0xf2, 0x2e, + 0xaf, 0xf8, 0x7b, 0x62, 0xb3, 0xbf, 0x07, 0x33, 0x5e, 0xc6, 0xa6, 0x13, 0x33, 0xda, 0xff, 0x26, + 0x55, 0x1a, 0x83, 0x2c, 0x28, 0xce, 0x6c, 0x03, 0x5d, 0x80, 0x11, 0x9e, 0x39, 0xdf, 0xf1, 0x84, + 0x37, 0xc1, 0x18, 0xcf, 0x1d, 0xc0, 0xcb, 0xb0, 0x82, 0xda, 0xdf, 0xb3, 0x60, 0x9a, 0xf7, 0xfc, + 0x0a, 0xd9, 0x57, 0xb7, 0xe3, 0x0f, 0xb2, 0xef, 0x22, 0x35, 0x42, 0x21, 0x27, 0x35, 0x82, 0xfe, + 0x69, 0xc5, 0xae, 0x9f, 0xf6, 0xeb, 0x16, 0x88, 0x15, 0x78, 0x02, 0xf7, 0xc0, 0x9f, 0x36, 0xef, + 0x81, 0xb3, 0xf9, 0x8b, 0x3a, 0xe7, 0x02, 0xf8, 0x67, 0x16, 0x4c, 0x71, 0x84, 0xe4, 0x21, 0xf2, + 0x03, 0x9d, 0x87, 0x7e, 0xf2, 0x75, 0xa9, 0x04, 0xc9, 0xd9, 0x1f, 0x65, 0x4c, 0xd6, 0x40, 0xd7, + 0xc9, 0x6a, 0xc8, 0x0d, 0x74, 0x84, 0x3c, 0x74, 0x47, 0x8e, 0xe6, 0x69, 0xff, 0x37, 0x0b, 0x10, + 0x6f, 0xc6, 0x38, 0x97, 0xe9, 0x69, 0xc7, 0x4a, 0x35, 0x4d, 0x50, 0xc2, 0x6a, 0x14, 0x04, 0x6b, + 0x58, 0xc7, 0x32, 0x3c, 0xa9, 0xd7, 0xe4, 0x62, 0xef, 0xd7, 0xe4, 0x23, 0x8c, 0xe8, 0x5f, 0x1d, + 0x80, 0xb4, 0xe9, 0x32, 0xba, 0x09, 0x63, 0x75, 0xa7, 0xe5, 0x6c, 0xba, 0x9e, 0x1b, 0xbb, 0x24, + 0xea, 0x66, 0x86, 0xb2, 0xac, 0xe1, 0x89, 0x77, 0x42, 0xad, 0x04, 0x1b, 0x74, 0xd0, 0x3c, 0x40, + 0x2b, 0x74, 0xf7, 0x5c, 0x8f, 0x34, 0xd9, 0x55, 0x98, 0xf9, 0x2f, 0x71, 0xdb, 0x0a, 0x59, 0x8a, + 0x35, 0x8c, 0x0c, 0x7f, 0x97, 0xe2, 0xfd, 0xf3, 0x77, 0x19, 0x38, 0xa2, 0xbf, 0xcb, 0x60, 0x5f, + 0xfe, 0x2e, 0x18, 0x1e, 0x90, 0x67, 0x37, 0xfd, 0xbf, 0xea, 0x7a, 0x44, 0x08, 0x6c, 0xdc, 0xab, + 0x69, 0xf6, 0xee, 0xc1, 0xdc, 0x03, 0x38, 0x13, 0x03, 0xe7, 0xd4, 0x44, 0x9f, 0x86, 0xb2, 0xe3, + 0x79, 0xc1, 0x6d, 0x35, 0x6a, 0x2b, 0x51, 0xdd, 0xf1, 0x92, 0xe0, 0xd6, 0x23, 0x4b, 0x0f, 0xdf, + 0x3d, 0x98, 0x2b, 0x2f, 0xe6, 0xe0, 0xe0, 0xdc, 0xda, 0xf6, 0x0e, 0x9c, 0xaa, 0x91, 0x50, 0xa6, + 0xb6, 0x54, 0x5b, 0x6c, 0x03, 0x4a, 0x61, 0x8a, 0xa9, 0xf4, 0x15, 0xfa, 0x42, 0x0b, 0x3c, 0x28, + 0x99, 0x48, 0x42, 0xc8, 0xfe, 0x53, 0x0b, 0x86, 0x85, 0x39, 0xf4, 0x09, 0xc8, 0x32, 0x8b, 0x86, + 0x3e, 0x72, 0x2e, 0x9b, 0xf1, 0xb2, 0xce, 0xe4, 0x6a, 0x22, 0xd7, 0x52, 0x9a, 0xc8, 0x47, 0xba, + 0x11, 0xe9, 0xae, 0x83, 0xfc, 0xa5, 0x22, 0x4c, 0x98, 0xa6, 0xe0, 0x27, 0x30, 0x04, 0xd7, 0x60, + 0x38, 0x12, 0x7e, 0x07, 0x85, 0x7c, 0xfb, 0xd5, 0xf4, 0x24, 0x26, 0x56, 0x2e, 0xc2, 0xd3, 0x40, + 0x12, 0xc9, 0x74, 0x68, 0x28, 0xde, 0x47, 0x87, 0x86, 0x5e, 0xd6, 0xf8, 0x03, 0xc7, 0x61, 0x8d, + 0x6f, 0x7f, 0x8b, 0x31, 0x7f, 0xbd, 0xfc, 0x04, 0xe4, 0x82, 0x4b, 0xe6, 0x31, 0x61, 0x77, 0x59, + 0x59, 0xa2, 0x53, 0x39, 0xf2, 0xc1, 0x3f, 0xb2, 0x60, 0x54, 0x20, 0x9e, 0x40, 0xb7, 0x7f, 0xc6, + 0xec, 0xf6, 0x43, 0x5d, 0xba, 0x9d, 0xd3, 0xdf, 0xbf, 0x5d, 0x50, 0xfd, 0xad, 0x06, 0x61, 0xdc, + 0x57, 0xb2, 0x83, 0x11, 0x7a, 0x1b, 0x0c, 0xea, 0x81, 0x27, 0x0e, 0xf3, 0x87, 0x13, 0xc7, 0x56, + 0x5e, 0x7e, 0xa8, 0xfd, 0xc6, 0x0a, 0x9b, 0xf9, 0x5d, 0x06, 0x61, 0x2c, 0x0e, 0xd0, 0xc4, 0xef, + 0x32, 0x08, 0x63, 0xcc, 0x20, 0xa8, 0x01, 0x10, 0x3b, 0x61, 0x93, 0xc4, 0xb4, 0x4c, 0x78, 0x82, + 0xe7, 0xef, 0xc2, 0x76, 0xec, 0x7a, 0xf3, 0xae, 0x1f, 0x47, 0x71, 0x38, 0xbf, 0xe6, 0xc7, 0xd7, + 0x43, 0x7e, 0x37, 0xd0, 0x3c, 0x55, 0x15, 0x2d, 0xac, 0xd1, 0x95, 0xae, 0x52, 0xac, 0x8d, 0x41, + 0xf3, 0xa1, 0xf0, 0x9a, 0x28, 0xc7, 0x0a, 0xc3, 0x7e, 0x91, 0xf1, 0x64, 0x36, 0x40, 0x47, 0x73, + 0x22, 0xfd, 0xce, 0x88, 0x1a, 0x5a, 0xf6, 0x4a, 0x50, 0xd1, 0x5d, 0x55, 0xbb, 0xb3, 0x40, 0xda, + 0xb0, 0xee, 0x16, 0x90, 0xf8, 0xb3, 0xa2, 0x9f, 0xed, 0x78, 0x3f, 0x7e, 0xa6, 0x07, 0x2f, 0x3d, + 0xc2, 0x8b, 0x31, 0x8b, 0xbc, 0xc9, 0x22, 0x14, 0xae, 0x55, 0xd3, 0xe9, 0x28, 0x96, 0x25, 0x00, + 0x27, 0x38, 0x68, 0x41, 0xdc, 0x2c, 0xb9, 0x7e, 0xee, 0xa1, 0xd4, 0xcd, 0x52, 0x7e, 0xbe, 0x76, + 0xb5, 0x7c, 0x16, 0x46, 0x55, 0x8a, 0xaf, 0x2a, 0xcf, 0x94, 0x54, 0xe2, 0xb2, 0xd4, 0x4a, 0x52, + 0x8c, 0x75, 0x1c, 0xb4, 0x01, 0x93, 0x11, 0xcf, 0x3f, 0x26, 0xbd, 0x97, 0x84, 0xde, 0xe0, 0x49, + 0xf9, 0xee, 0x5c, 0x33, 0xc1, 0x87, 0xac, 0x88, 0x6f, 0x56, 0xe9, 0xef, 0x94, 0x26, 0x81, 0x5e, + 0x85, 0x09, 0x4f, 0xcf, 0xc3, 0x5c, 0x15, 0x6a, 0x05, 0x65, 0x96, 0x69, 0x64, 0x69, 0xae, 0xe2, + 0x14, 0x36, 0x15, 0x02, 0xf4, 0x12, 0x11, 0x0c, 0xcb, 0xf1, 0x9b, 0x24, 0x12, 0x09, 0x8a, 0x98, + 0x10, 0x70, 0x35, 0x07, 0x07, 0xe7, 0xd6, 0x46, 0x2f, 0xc1, 0x98, 0xfc, 0x7c, 0xcd, 0x9b, 0x2f, + 0x31, 0xfe, 0xd5, 0x60, 0xd8, 0xc0, 0x44, 0xb7, 0xe1, 0xb4, 0xfc, 0xbf, 0x11, 0x3a, 0x5b, 0x5b, + 0x6e, 0x5d, 0x38, 0x53, 0x8e, 0x32, 0x12, 0x8b, 0xd2, 0x13, 0x62, 0x25, 0x0b, 0xe9, 0xf0, 0x60, + 0xee, 0xbc, 0x18, 0xb5, 0x4c, 0x38, 0x9b, 0xc4, 0x6c, 0xfa, 0x68, 0x1d, 0x4e, 0x6d, 0x13, 0xc7, + 0x8b, 0xb7, 0x97, 0xb7, 0x49, 0x7d, 0x47, 0x6e, 0x22, 0xe6, 0x23, 0xa8, 0x99, 0xcc, 0x5e, 0xee, + 0x44, 0xc1, 0x59, 0xf5, 0xd0, 0x5b, 0x50, 0x6e, 0xb5, 0x37, 0x3d, 0x37, 0xda, 0xbe, 0x16, 0xc4, + 0xec, 0xa9, 0x5b, 0x65, 0xc8, 0x12, 0xce, 0x84, 0xca, 0x3f, 0xb2, 0x9a, 0x83, 0x87, 0x73, 0x29, + 0xa0, 0xf7, 0xe0, 0x74, 0x6a, 0x31, 0xf0, 0xa4, 0x6b, 0xc2, 0xe9, 0xf0, 0x89, 0xec, 0xed, 0x94, + 0x51, 0x81, 0xbb, 0xb8, 0x66, 0x82, 0x70, 0x76, 0x13, 0xef, 0xcf, 0x00, 0xe2, 0x5d, 0x5a, 0x59, + 0x93, 0x6e, 0xd0, 0x67, 0x60, 0x4c, 0x5f, 0x45, 0xe2, 0x80, 0x79, 0xac, 0x57, 0xce, 0x71, 0x21, + 0x1b, 0xa9, 0x15, 0xa5, 0xc3, 0xb0, 0x41, 0xd1, 0x26, 0x90, 0xfd, 0x7d, 0xe8, 0x2a, 0x8c, 0xd4, + 0x3d, 0x97, 0xf8, 0xf1, 0x5a, 0xb5, 0x9b, 0x13, 0xfc, 0xb2, 0xc0, 0x11, 0x03, 0x26, 0x62, 0xb1, + 0xf1, 0x32, 0xac, 0x28, 0xd8, 0xbf, 0x5b, 0x80, 0xb9, 0x1e, 0xe1, 0xf8, 0x52, 0x3a, 0x40, 0xab, + 0x2f, 0x1d, 0xe0, 0xa2, 0xcc, 0xf7, 0x75, 0x2d, 0x75, 0xff, 0x4c, 0xe5, 0xf2, 0x4a, 0x6e, 0xa1, + 0x69, 0xfc, 0xbe, 0xed, 0x26, 0x75, 0x35, 0xe2, 0x40, 0x4f, 0x8b, 0x5e, 0xe3, 0xf9, 0x60, 0xb0, + 0x7f, 0x89, 0x3e, 0x57, 0x15, 0x6c, 0x7f, 0xab, 0x00, 0xa7, 0xd5, 0x10, 0xfe, 0xf8, 0x0e, 0xdc, + 0x8d, 0xce, 0x81, 0x3b, 0x06, 0x45, 0xba, 0x7d, 0x1d, 0x86, 0x6a, 0xfb, 0x51, 0x3d, 0xf6, 0xfa, + 0x10, 0x80, 0x1e, 0x35, 0x36, 0x68, 0x72, 0x4c, 0xb3, 0x94, 0x9d, 0x62, 0xbf, 0xda, 0x7f, 0xc9, + 0x82, 0xc9, 0x8d, 0xe5, 0x6a, 0x2d, 0xa8, 0xef, 0x90, 0x78, 0x91, 0xab, 0x89, 0xb0, 0x90, 0x7f, + 0xac, 0x7b, 0x94, 0x6b, 0xb2, 0x24, 0xa6, 0xf3, 0x30, 0xb0, 0x1d, 0x44, 0x71, 0xfa, 0x95, 0xed, + 0x72, 0x10, 0xc5, 0x98, 0x41, 0xec, 0x3f, 0xb2, 0x60, 0x90, 0x65, 0xa9, 0xec, 0x95, 0xcd, 0xb4, + 0x9f, 0xef, 0x42, 0x2f, 0xc0, 0x10, 0xd9, 0xda, 0x22, 0xf5, 0x58, 0xcc, 0xaa, 0xf4, 0xae, 0x1b, + 0x5a, 0x61, 0xa5, 0xf4, 0xd0, 0x67, 0x8d, 0xf1, 0xbf, 0x58, 0x20, 0xa3, 0x5b, 0x50, 0x8a, 0xdd, + 0x5d, 0xb2, 0xd8, 0x68, 0x88, 0x77, 0x8a, 0x7b, 0x70, 0x66, 0xdc, 0x90, 0x04, 0x70, 0x42, 0xcb, + 0xfe, 0x52, 0x01, 0x20, 0xf1, 0xc0, 0xed, 0xf5, 0x89, 0x4b, 0x1d, 0x09, 0x5b, 0x1f, 0xcb, 0x48, + 0xd8, 0x8a, 0x12, 0x82, 0x19, 0xe9, 0x5a, 0xd5, 0x30, 0x15, 0xfb, 0x1a, 0xa6, 0x81, 0xa3, 0x0c, + 0xd3, 0x32, 0x4c, 0x27, 0x1e, 0xc4, 0x66, 0x38, 0x05, 0x16, 0x8a, 0x7b, 0x23, 0x0d, 0xc4, 0x9d, + 0xf8, 0xf6, 0x17, 0x2c, 0x10, 0xee, 0x06, 0x7d, 0x2c, 0xe6, 0x37, 0x65, 0x6e, 0x45, 0x23, 0x3e, + 0xe8, 0xf9, 0x7c, 0xff, 0x0b, 0x11, 0x15, 0x54, 0x1d, 0x1e, 0x46, 0x2c, 0x50, 0x83, 0x96, 0xfd, + 0xd7, 0x0b, 0x30, 0xca, 0xc1, 0x2c, 0xf6, 0x64, 0x1f, 0xbd, 0x39, 0x52, 0x20, 0x77, 0x96, 0x76, + 0x90, 0x12, 0x56, 0xf1, 0xbe, 0xf5, 0xb4, 0x83, 0x12, 0x80, 0x13, 0x1c, 0xf4, 0x04, 0x0c, 0x47, + 0xed, 0x4d, 0x86, 0x9e, 0x32, 0x6f, 0xaf, 0xf1, 0x62, 0x2c, 0xe1, 0xe8, 0xd3, 0x30, 0xc5, 0xeb, + 0x85, 0x41, 0xcb, 0x69, 0x72, 0xdd, 0xce, 0xa0, 0xf2, 0x37, 0x9b, 0x5a, 0x4f, 0xc1, 0x0e, 0x0f, + 0xe6, 0x66, 0xd2, 0x65, 0x4c, 0x2b, 0xd8, 0x41, 0x85, 0xae, 0xd8, 0xa9, 0xb4, 0x2b, 0x0b, 0xba, + 0x0c, 0x43, 0x9c, 0x19, 0x09, 0xe6, 0xd0, 0xe5, 0xad, 0x47, 0x73, 0x80, 0x61, 0x31, 0xae, 0x05, + 0x3f, 0x13, 0xf5, 0xd1, 0x5b, 0x30, 0xda, 0x08, 0x6e, 0xfb, 0xb7, 0x9d, 0xb0, 0xb1, 0x58, 0x5d, + 0x13, 0xf3, 0x99, 0x29, 0xd3, 0x54, 0x12, 0x34, 0xdd, 0xa9, 0x86, 0xe9, 0x35, 0x13, 0x10, 0xd6, + 0xc9, 0xa1, 0x0d, 0x16, 0x2e, 0x89, 0xe7, 0x05, 0xef, 0x66, 0x0f, 0xa6, 0x52, 0x89, 0x6b, 0x94, + 0xc7, 0x45, 0x4c, 0x25, 0x91, 0x55, 0x3c, 0x21, 0x64, 0x7f, 0xee, 0x14, 0x18, 0xeb, 0xc8, 0x08, + 0xe4, 0x6e, 0x1d, 0x53, 0x20, 0x77, 0x0c, 0x23, 0x64, 0xb7, 0x15, 0xef, 0x57, 0xdc, 0xb0, 0x5b, + 0x06, 0x8f, 0x15, 0x81, 0xd3, 0x49, 0x53, 0x42, 0xb0, 0xa2, 0x93, 0x1d, 0x6d, 0xbf, 0xf8, 0x01, + 0x46, 0xdb, 0x1f, 0x38, 0xc1, 0x68, 0xfb, 0xd7, 0x60, 0xb8, 0xe9, 0xc6, 0x98, 0xb4, 0x02, 0x71, + 0x10, 0x67, 0xae, 0x84, 0x4b, 0x1c, 0xa5, 0x33, 0xfe, 0xb3, 0x00, 0x60, 0x49, 0x04, 0xbd, 0xa6, + 0xf6, 0xc0, 0x50, 0xbe, 0x1c, 0xdb, 0xf9, 0x2c, 0x90, 0xb9, 0x0b, 0x44, 0x74, 0xfd, 0xe1, 0x7b, + 0x8d, 0xae, 0xaf, 0x62, 0xe2, 0x8f, 0xbc, 0xbf, 0x98, 0xf8, 0x46, 0xf6, 0x80, 0xd2, 0xf1, 0x65, + 0x0f, 0xf8, 0x82, 0x05, 0xa7, 0x5b, 0x59, 0x89, 0x34, 0x44, 0x74, 0xfb, 0x17, 0xfa, 0xce, 0x14, + 0x62, 0x34, 0xc8, 0x2e, 0x34, 0x99, 0x68, 0x38, 0xbb, 0x39, 0x3a, 0xd0, 0xe1, 0x66, 0x43, 0x84, + 0xc4, 0x7f, 0x34, 0x27, 0x0d, 0x41, 0x97, 0xe4, 0x03, 0xf7, 0x27, 0x0c, 0x7e, 0x92, 0x8a, 0x60, + 0xfc, 0x7d, 0xa7, 0x22, 0x78, 0x4d, 0xa5, 0x22, 0xe8, 0x12, 0x94, 0x86, 0x27, 0x1a, 0xe8, 0x99, + 0x80, 0x40, 0x4b, 0x22, 0x30, 0x79, 0x1c, 0x49, 0x04, 0xde, 0x36, 0x99, 0x3d, 0x8f, 0x68, 0xff, + 0x54, 0x0f, 0x66, 0x6f, 0xd0, 0xed, 0xce, 0xee, 0x79, 0xc2, 0x84, 0xe9, 0x7b, 0x4a, 0x98, 0x70, + 0x53, 0x4f, 0x45, 0x80, 0x7a, 0xc4, 0xda, 0xa7, 0x48, 0x7d, 0x26, 0x20, 0xb8, 0xa9, 0x1f, 0x41, + 0xa7, 0xf2, 0xe9, 0xaa, 0x93, 0xa6, 0x93, 0x6e, 0xd6, 0x21, 0xd4, 0x99, 0xd8, 0x60, 0xe6, 0x64, + 0x12, 0x1b, 0x9c, 0x3e, 0xf6, 0xc4, 0x06, 0x0f, 0x9c, 0x40, 0x62, 0x83, 0x07, 0x3f, 0xd0, 0xc4, + 0x06, 0xe5, 0xfb, 0x90, 0xd8, 0xe0, 0x5a, 0x92, 0xd8, 0xe0, 0x4c, 0xfe, 0x94, 0x64, 0xd8, 0x8b, + 0xe5, 0xa4, 0x33, 0xb8, 0x09, 0xa5, 0x96, 0xf4, 0x76, 0x2e, 0xcf, 0xe6, 0x4f, 0x49, 0xa6, 0x4b, + 0x34, 0x9f, 0x12, 0x05, 0xc2, 0x09, 0x29, 0x4a, 0x37, 0x49, 0x6f, 0xf0, 0x50, 0x17, 0x95, 0x55, + 0x96, 0x32, 0xa0, 0x4b, 0x52, 0x83, 0xbf, 0x5c, 0x80, 0x73, 0xdd, 0xd7, 0x75, 0xa2, 0x49, 0xa8, + 0x26, 0x9a, 0xef, 0x94, 0x26, 0x81, 0x09, 0x5d, 0x1a, 0x56, 0xdf, 0x21, 0x21, 0x2e, 0xc1, 0xb4, + 0x32, 0x14, 0xf3, 0xdc, 0xfa, 0xbe, 0x96, 0x0d, 0x4d, 0x39, 0xad, 0xd4, 0xd2, 0x08, 0xb8, 0xb3, + 0x0e, 0x5a, 0x84, 0x49, 0xa3, 0x70, 0xad, 0x22, 0x84, 0x7d, 0xa5, 0xba, 0xa8, 0x99, 0x60, 0x9c, + 0xc6, 0xb7, 0xbf, 0x66, 0xc1, 0x83, 0x39, 0x31, 0x8e, 0xfb, 0x8e, 0x78, 0xb0, 0x05, 0x93, 0x2d, + 0xb3, 0x6a, 0x8f, 0xc0, 0x28, 0x46, 0x24, 0x65, 0xd5, 0xd7, 0x14, 0x00, 0xa7, 0x89, 0x2e, 0x5d, + 0xf8, 0xf6, 0xf7, 0xcf, 0x7d, 0xe4, 0x0f, 0xbe, 0x7f, 0xee, 0x23, 0xdf, 0xfb, 0xfe, 0xb9, 0x8f, + 0xfc, 0xf9, 0xbb, 0xe7, 0xac, 0x6f, 0xdf, 0x3d, 0x67, 0xfd, 0xc1, 0xdd, 0x73, 0xd6, 0xf7, 0xee, + 0x9e, 0xb3, 0xfe, 0xf8, 0xee, 0x39, 0xeb, 0x4b, 0x3f, 0x38, 0xf7, 0x91, 0x37, 0x0b, 0x7b, 0xcf, + 0xfe, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xea, 0xa0, 0xb7, 0x43, 0x3c, 0xd5, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/core/v1/generated.proto b/vendor/k8s.io/api/core/v1/generated.proto index 824ecb40..d3653ac6 100644 --- a/vendor/k8s.io/api/core/v1/generated.proto +++ b/vendor/k8s.io/api/core/v1/generated.proto @@ -121,7 +121,7 @@ message AzureDiskVolumeSource { // +optional optional bool readOnly = 5; - // Expected values Shared: mulitple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared + // Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared optional string kind = 6; } @@ -565,7 +565,7 @@ message Container { // Security options the pod should run with. // More info: https://kubernetes.io/docs/concepts/policy/security-context/ - // More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md + // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ // +optional optional SecurityContext securityContext = 15; @@ -1442,7 +1442,7 @@ message LimitRangeList { optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; // Items is a list of LimitRange objects. - // More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md + // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ repeated LimitRange items = 2; } @@ -1593,7 +1593,7 @@ message NamespaceList { // NamespaceSpec describes the attributes on a Namespace. message NamespaceSpec { // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. - // More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers + // More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/ // +optional repeated string finalizers = 1; } @@ -1601,7 +1601,7 @@ message NamespaceSpec { // NamespaceStatus is information about the current status of a Namespace. message NamespaceStatus { // Phase is the current lifecycle phase of the namespace. - // More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#phases + // More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/ // +optional optional string phase = 1; } @@ -2287,7 +2287,7 @@ message PersistentVolumeSource { // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md // +optional - optional RBDVolumeSource rbd = 6; + optional RBDPersistentVolumeSource rbd = 6; // ISCSI represents an ISCSI Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. Provisioned by an admin. @@ -2342,7 +2342,7 @@ message PersistentVolumeSource { // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. // +optional - optional ScaleIOVolumeSource scaleIO = 19; + optional ScaleIOPersistentVolumeSource scaleIO = 19; // Local represents directly-attached storage with node affinity // +optional @@ -2474,7 +2474,7 @@ message PodAffinity { // relative to the given namespace(s)) that this pod should be // co-located (affinity) or not co-located (anti-affinity) with, // where co-located is defined as running on a node whose value of -// the label with key tches that of any node on which +// the label with key matches that of any node on which // a pod of the set of pods is running message PodAffinityTerm { // A label query over a set of resources, in this case pods. @@ -3157,6 +3157,57 @@ message QuobyteVolumeSource { optional string group = 5; } +// Represents a Rados Block Device mount that lasts the lifetime of a pod. +// RBD volumes support ownership management and SELinux relabeling. +message RBDPersistentVolumeSource { + // A collection of Ceph monitors. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + repeated string monitors = 1; + + // The rados image name. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + optional string image = 2; + + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd + // TODO: how do we prevent errors in the filesystem from compromising the machine + // +optional + optional string fsType = 3; + + // The rados pool name. + // Default is rbd. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + optional string pool = 4; + + // The rados user name. + // Default is admin. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + optional string user = 5; + + // Keyring is the path to key ring for RBDUser. + // Default is /etc/ceph/keyring. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + optional string keyring = 6; + + // SecretRef is name of the authentication secret for RBDUser. If provided + // overrides keyring. + // Default is nil. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + optional SecretReference secretRef = 7; + + // ReadOnly here will force the ReadOnly setting in VolumeMounts. + // Defaults to false. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + optional bool readOnly = 8; +} + // Represents a Rados Block Device mount that lasts the lifetime of a pod. // RBD volumes support ownership management and SELinux relabeling. message RBDVolumeSource { @@ -3377,14 +3428,14 @@ message ResourceQuotaList { optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; // Items is a list of ResourceQuota objects. - // More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md + // More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/ repeated ResourceQuota items = 2; } // ResourceQuotaSpec defines the desired hard limits to enforce for Quota. message ResourceQuotaSpec { // Hard is the set of desired hard limits for each named resource. - // More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md + // More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/ // +optional map hard = 1; @@ -3397,7 +3448,7 @@ message ResourceQuotaSpec { // ResourceQuotaStatus defines the enforced hard limits and observed use. message ResourceQuotaStatus { // Hard is the set of enforced hard limits for each named resource. - // More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md + // More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/ // +optional map hard = 1; @@ -3440,6 +3491,50 @@ message SELinuxOptions { optional string level = 4; } +// ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume +message ScaleIOPersistentVolumeSource { + // The host address of the ScaleIO API Gateway. + optional string gateway = 1; + + // The name of the storage system as configured in ScaleIO. + optional string system = 2; + + // SecretRef references to the secret for ScaleIO user and other + // sensitive information. If this is not provided, Login operation will fail. + optional SecretReference secretRef = 3; + + // Flag to enable/disable SSL communication with Gateway, default false + // +optional + optional bool sslEnabled = 4; + + // The name of the ScaleIO Protection Domain for the configured storage. + // +optional + optional string protectionDomain = 5; + + // The ScaleIO Storage Pool associated with the protection domain. + // +optional + optional string storagePool = 6; + + // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. + // +optional + optional string storageMode = 7; + + // The name of a volume already created in the ScaleIO system + // that is associated with this volume source. + optional string volumeName = 8; + + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // +optional + optional string fsType = 9; + + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + optional bool readOnly = 10; +} + // ScaleIOVolumeSource represents a persistent ScaleIO volume message ScaleIOVolumeSource { // The host address of the ScaleIO API Gateway. @@ -3456,15 +3551,15 @@ message ScaleIOVolumeSource { // +optional optional bool sslEnabled = 4; - // The name of the Protection Domain for the configured storage (defaults to "default"). + // The name of the ScaleIO Protection Domain for the configured storage. // +optional optional string protectionDomain = 5; - // The Storage Pool associated with the protection domain (defaults to "default"). + // The ScaleIO Storage Pool associated with the protection domain. // +optional optional string storagePool = 6; - // Indicates whether the storage for a volume should be thick or thin (defaults to "thin"). + // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. // +optional optional string storageMode = 7; diff --git a/vendor/k8s.io/api/core/v1/types.go b/vendor/k8s.io/api/core/v1/types.go index d1a8f89c..3c369858 100644 --- a/vendor/k8s.io/api/core/v1/types.go +++ b/vendor/k8s.io/api/core/v1/types.go @@ -398,7 +398,7 @@ type PersistentVolumeSource struct { // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md // +optional - RBD *RBDVolumeSource `json:"rbd,omitempty" protobuf:"bytes,6,opt,name=rbd"` + RBD *RBDPersistentVolumeSource `json:"rbd,omitempty" protobuf:"bytes,6,opt,name=rbd"` // ISCSI represents an ISCSI Disk resource that is attached to a // kubelet's host machine and then exposed to the pod. Provisioned by an admin. // +optional @@ -440,7 +440,7 @@ type PersistentVolumeSource struct { PortworxVolume *PortworxVolumeSource `json:"portworxVolume,omitempty" protobuf:"bytes,18,opt,name=portworxVolume"` // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. // +optional - ScaleIO *ScaleIOVolumeSource `json:"scaleIO,omitempty" protobuf:"bytes,19,opt,name=scaleIO"` + ScaleIO *ScaleIOPersistentVolumeSource `json:"scaleIO,omitempty" protobuf:"bytes,19,opt,name=scaleIO"` // Local represents directly-attached storage with node affinity // +optional Local *LocalVolumeSource `json:"local,omitempty" protobuf:"bytes,20,opt,name=local"` @@ -838,6 +838,50 @@ type RBDVolumeSource struct { ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,8,opt,name=readOnly"` } +// Represents a Rados Block Device mount that lasts the lifetime of a pod. +// RBD volumes support ownership management and SELinux relabeling. +type RBDPersistentVolumeSource struct { + // A collection of Ceph monitors. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + CephMonitors []string `json:"monitors" protobuf:"bytes,1,rep,name=monitors"` + // The rados image name. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + RBDImage string `json:"image" protobuf:"bytes,2,opt,name=image"` + // Filesystem type of the volume that you want to mount. + // Tip: Ensure that the filesystem type is supported by the host operating system. + // Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd + // TODO: how do we prevent errors in the filesystem from compromising the machine + // +optional + FSType string `json:"fsType,omitempty" protobuf:"bytes,3,opt,name=fsType"` + // The rados pool name. + // Default is rbd. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + RBDPool string `json:"pool,omitempty" protobuf:"bytes,4,opt,name=pool"` + // The rados user name. + // Default is admin. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + RadosUser string `json:"user,omitempty" protobuf:"bytes,5,opt,name=user"` + // Keyring is the path to key ring for RBDUser. + // Default is /etc/ceph/keyring. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + Keyring string `json:"keyring,omitempty" protobuf:"bytes,6,opt,name=keyring"` + // SecretRef is name of the authentication secret for RBDUser. If provided + // overrides keyring. + // Default is nil. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + SecretRef *SecretReference `json:"secretRef,omitempty" protobuf:"bytes,7,opt,name=secretRef"` + // ReadOnly here will force the ReadOnly setting in VolumeMounts. + // Defaults to false. + // More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it + // +optional + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,8,opt,name=readOnly"` +} + // Represents a cinder volume resource in Openstack. // A Cinder volume must exist before mounting to a container. // The volume must also be in the same region as the kubelet. @@ -1322,7 +1366,7 @@ type AzureDiskVolumeSource struct { // the ReadOnly setting in VolumeMounts. // +optional ReadOnly *bool `json:"readOnly,omitempty" protobuf:"varint,5,opt,name=readOnly"` - // Expected values Shared: mulitple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared + // Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared Kind *AzureDataDiskKind `json:"kind,omitempty" protobuf:"bytes,6,opt,name=kind,casttype=AzureDataDiskKind"` } @@ -1352,13 +1396,48 @@ type ScaleIOVolumeSource struct { // Flag to enable/disable SSL communication with Gateway, default false // +optional SSLEnabled bool `json:"sslEnabled,omitempty" protobuf:"varint,4,opt,name=sslEnabled"` - // The name of the Protection Domain for the configured storage (defaults to "default"). + // The name of the ScaleIO Protection Domain for the configured storage. // +optional ProtectionDomain string `json:"protectionDomain,omitempty" protobuf:"bytes,5,opt,name=protectionDomain"` - // The Storage Pool associated with the protection domain (defaults to "default"). + // The ScaleIO Storage Pool associated with the protection domain. // +optional StoragePool string `json:"storagePool,omitempty" protobuf:"bytes,6,opt,name=storagePool"` - // Indicates whether the storage for a volume should be thick or thin (defaults to "thin"). + // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. + // +optional + StorageMode string `json:"storageMode,omitempty" protobuf:"bytes,7,opt,name=storageMode"` + // The name of a volume already created in the ScaleIO system + // that is associated with this volume source. + VolumeName string `json:"volumeName,omitempty" protobuf:"bytes,8,opt,name=volumeName"` + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // +optional + FSType string `json:"fsType,omitempty" protobuf:"bytes,9,opt,name=fsType"` + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,10,opt,name=readOnly"` +} + +// ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume +type ScaleIOPersistentVolumeSource struct { + // The host address of the ScaleIO API Gateway. + Gateway string `json:"gateway" protobuf:"bytes,1,opt,name=gateway"` + // The name of the storage system as configured in ScaleIO. + System string `json:"system" protobuf:"bytes,2,opt,name=system"` + // SecretRef references to the secret for ScaleIO user and other + // sensitive information. If this is not provided, Login operation will fail. + SecretRef *SecretReference `json:"secretRef" protobuf:"bytes,3,opt,name=secretRef"` + // Flag to enable/disable SSL communication with Gateway, default false + // +optional + SSLEnabled bool `json:"sslEnabled,omitempty" protobuf:"varint,4,opt,name=sslEnabled"` + // The name of the ScaleIO Protection Domain for the configured storage. + // +optional + ProtectionDomain string `json:"protectionDomain,omitempty" protobuf:"bytes,5,opt,name=protectionDomain"` + // The ScaleIO Storage Pool associated with the protection domain. + // +optional + StoragePool string `json:"storagePool,omitempty" protobuf:"bytes,6,opt,name=storagePool"` + // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. // +optional StorageMode string `json:"storageMode,omitempty" protobuf:"bytes,7,opt,name=storageMode"` // The name of a volume already created in the ScaleIO system @@ -1996,7 +2075,7 @@ type Container struct { ImagePullPolicy PullPolicy `json:"imagePullPolicy,omitempty" protobuf:"bytes,14,opt,name=imagePullPolicy,casttype=PullPolicy"` // Security options the pod should run with. // More info: https://kubernetes.io/docs/concepts/policy/security-context/ - // More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md + // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ // +optional SecurityContext *SecurityContext `json:"securityContext,omitempty" protobuf:"bytes,15,opt,name=securityContext"` @@ -2394,7 +2473,7 @@ type WeightedPodAffinityTerm struct { // relative to the given namespace(s)) that this pod should be // co-located (affinity) or not co-located (anti-affinity) with, // where co-located is defined as running on a node whose value of -// the label with key tches that of any node on which +// the label with key matches that of any node on which // a pod of the set of pods is running type PodAffinityTerm struct { // A label query over a set of resources, in this case pods. @@ -2469,7 +2548,7 @@ type Taint struct { // TimeAdded represents the time at which the taint was added. // It is only written for NoExecute taints. // +optional - TimeAdded metav1.Time `json:"timeAdded,omitempty" protobuf:"bytes,4,opt,name=timeAdded"` + TimeAdded *metav1.Time `json:"timeAdded,omitempty" protobuf:"bytes,4,opt,name=timeAdded"` } type TaintEffect string @@ -3825,7 +3904,7 @@ const ( // NamespaceSpec describes the attributes on a Namespace. type NamespaceSpec struct { // Finalizers is an opaque list of values that must be empty to permanently remove object from storage. - // More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers + // More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/ // +optional Finalizers []FinalizerName `json:"finalizers,omitempty" protobuf:"bytes,1,rep,name=finalizers,casttype=FinalizerName"` } @@ -3833,7 +3912,7 @@ type NamespaceSpec struct { // NamespaceStatus is information about the current status of a Namespace. type NamespaceStatus struct { // Phase is the current lifecycle phase of the namespace. - // More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#phases + // More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/ // +optional Phase NamespacePhase `json:"phase,omitempty" protobuf:"bytes,1,opt,name=phase,casttype=NamespacePhase"` } @@ -4376,7 +4455,7 @@ type LimitRangeList struct { metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is a list of LimitRange objects. - // More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md + // More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ Items []LimitRange `json:"items" protobuf:"bytes,2,rep,name=items"` } @@ -4433,7 +4512,7 @@ const ( // ResourceQuotaSpec defines the desired hard limits to enforce for Quota. type ResourceQuotaSpec struct { // Hard is the set of desired hard limits for each named resource. - // More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md + // More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/ // +optional Hard ResourceList `json:"hard,omitempty" protobuf:"bytes,1,rep,name=hard,casttype=ResourceList,castkey=ResourceName"` // A collection of filters that must match each object tracked by a quota. @@ -4445,7 +4524,7 @@ type ResourceQuotaSpec struct { // ResourceQuotaStatus defines the enforced hard limits and observed use. type ResourceQuotaStatus struct { // Hard is the set of enforced hard limits for each named resource. - // More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md + // More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/ // +optional Hard ResourceList `json:"hard,omitempty" protobuf:"bytes,1,rep,name=hard,casttype=ResourceList,castkey=ResourceName"` // Used is the current observed total usage of the resource in the namespace. @@ -4486,7 +4565,7 @@ type ResourceQuotaList struct { metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` // Items is a list of ResourceQuota objects. - // More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md + // More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/ Items []ResourceQuota `json:"items" protobuf:"bytes,2,rep,name=items"` } 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 4fc4deaa..d8176d2f 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 @@ -76,7 +76,7 @@ var map_AzureDiskVolumeSource = map[string]string{ "cachingMode": "Host Caching mode: None, Read Only, Read Write.", "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", - "kind": "Expected values Shared: mulitple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared", + "kind": "Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared", } func (AzureDiskVolumeSource) SwaggerDoc() map[string]string { @@ -284,7 +284,7 @@ var map_Container = map[string]string{ "terminationMessagePath": "Optional: Path at which the file to which the container's termination message will be written is mounted into the container's filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.", "terminationMessagePolicy": "Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.", "imagePullPolicy": "Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: https://kubernetes.io/docs/concepts/containers/images#updating-images", - "securityContext": "Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md", + "securityContext": "Security options the pod should run with. More info: https://kubernetes.io/docs/concepts/policy/security-context/ More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", "stdin": "Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.", "stdinOnce": "Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false", "tty": "Whether this container should allocate a TTY for itself, also requires 'stdin' to be true. Default is false.", @@ -765,7 +765,7 @@ func (LimitRangeItem) SwaggerDoc() map[string]string { var map_LimitRangeList = map[string]string{ "": "LimitRangeList is a list of LimitRange items.", "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "items": "Items is a list of LimitRange objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_limit_range.md", + "items": "Items is a list of LimitRange objects. More info: https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/", } func (LimitRangeList) SwaggerDoc() map[string]string { @@ -866,7 +866,7 @@ func (NamespaceList) SwaggerDoc() map[string]string { var map_NamespaceSpec = map[string]string{ "": "NamespaceSpec describes the attributes on a Namespace.", - "finalizers": "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#finalizers", + "finalizers": "Finalizers is an opaque list of values that must be empty to permanently remove object from storage. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", } func (NamespaceSpec) SwaggerDoc() map[string]string { @@ -875,7 +875,7 @@ func (NamespaceSpec) SwaggerDoc() map[string]string { var map_NamespaceStatus = map[string]string{ "": "NamespaceStatus is information about the current status of a Namespace.", - "phase": "Phase is the current lifecycle phase of the namespace. More info: https://git.k8s.io/community/contributors/design-proposals/namespaces.md#phases", + "phase": "Phase is the current lifecycle phase of the namespace. More info: https://kubernetes.io/docs/tasks/administer-cluster/namespaces/", } func (NamespaceStatus) SwaggerDoc() map[string]string { @@ -1275,7 +1275,7 @@ func (PodAffinity) SwaggerDoc() map[string]string { } var map_PodAffinityTerm = map[string]string{ - "": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key tches that of any node on which a pod of the set of pods is running", + "": "Defines a set of pods (namely those matching the labelSelector relative to the given namespace(s)) that this pod should be co-located (affinity) or not co-located (anti-affinity) with, where co-located is defined as running on a node whose value of the label with key matches that of any node on which a pod of the set of pods is running", "labelSelector": "A label query over a set of resources, in this case pods.", "namespaces": "namespaces specifies which namespaces the labelSelector applies to (matches against); null or empty list means \"this pod's namespace\"", "topologyKey": "This pod should be co-located (affinity) or not co-located (anti-affinity) with the pods matching the labelSelector in the specified namespaces, where co-located is defined as running on a node whose value of the label with key topologyKey matches that of any node on which any of the selected pods is running. For PreferredDuringScheduling pod anti-affinity, empty topologyKey is interpreted as \"all topologies\" (\"all topologies\" here means all the topologyKeys indicated by scheduler command-line argument --failure-domains); for affinity and for RequiredDuringScheduling pod anti-affinity, empty topologyKey is not allowed.", @@ -1571,6 +1571,22 @@ func (QuobyteVolumeSource) SwaggerDoc() map[string]string { return map_QuobyteVolumeSource } +var map_RBDPersistentVolumeSource = map[string]string{ + "": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", + "monitors": "A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "image": "The rados image name. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "fsType": "Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified. More info: https://kubernetes.io/docs/concepts/storage/volumes#rbd", + "pool": "The rados pool name. Default is rbd. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "user": "The rados user name. Default is admin. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "keyring": "Keyring is the path to key ring for RBDUser. Default is /etc/ceph/keyring. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "secretRef": "SecretRef is name of the authentication secret for RBDUser. If provided overrides keyring. Default is nil. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", + "readOnly": "ReadOnly here will force the ReadOnly setting in VolumeMounts. Defaults to false. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", +} + +func (RBDPersistentVolumeSource) SwaggerDoc() map[string]string { + return map_RBDPersistentVolumeSource +} + var map_RBDVolumeSource = map[string]string{ "": "Represents a Rados Block Device mount that lasts the lifetime of a pod. RBD volumes support ownership management and SELinux relabeling.", "monitors": "A collection of Ceph monitors. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md#how-to-use-it", @@ -1683,7 +1699,7 @@ func (ResourceQuota) SwaggerDoc() map[string]string { var map_ResourceQuotaList = map[string]string{ "": "ResourceQuotaList is a list of ResourceQuota items.", "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", - "items": "Items is a list of ResourceQuota objects. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md", + "items": "Items is a list of ResourceQuota objects. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", } func (ResourceQuotaList) SwaggerDoc() map[string]string { @@ -1692,7 +1708,7 @@ func (ResourceQuotaList) SwaggerDoc() map[string]string { var map_ResourceQuotaSpec = map[string]string{ "": "ResourceQuotaSpec defines the desired hard limits to enforce for Quota.", - "hard": "Hard is the set of desired hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md", + "hard": "Hard is the set of desired hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", "scopes": "A collection of filters that must match each object tracked by a quota. If not specified, the quota matches all objects.", } @@ -1702,7 +1718,7 @@ func (ResourceQuotaSpec) SwaggerDoc() map[string]string { var map_ResourceQuotaStatus = map[string]string{ "": "ResourceQuotaStatus defines the enforced hard limits and observed use.", - "hard": "Hard is the set of enforced hard limits for each named resource. More info: https://git.k8s.io/community/contributors/design-proposals/admission_control_resource_quota.md", + "hard": "Hard is the set of enforced hard limits for each named resource. More info: https://kubernetes.io/docs/concepts/policy/resource-quotas/", "used": "Used is the current observed total usage of the resource in the namespace.", } @@ -1732,15 +1748,33 @@ func (SELinuxOptions) SwaggerDoc() map[string]string { return map_SELinuxOptions } +var map_ScaleIOPersistentVolumeSource = map[string]string{ + "": "ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume", + "gateway": "The host address of the ScaleIO API Gateway.", + "system": "The name of the storage system as configured in ScaleIO.", + "secretRef": "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.", + "sslEnabled": "Flag to enable/disable SSL communication with Gateway, default false", + "protectionDomain": "The name of the ScaleIO Protection Domain for the configured storage.", + "storagePool": "The ScaleIO Storage Pool associated with the protection domain.", + "storageMode": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.", + "volumeName": "The name of a volume already created in the ScaleIO system that is associated with this volume source.", + "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", +} + +func (ScaleIOPersistentVolumeSource) SwaggerDoc() map[string]string { + return map_ScaleIOPersistentVolumeSource +} + var map_ScaleIOVolumeSource = map[string]string{ "": "ScaleIOVolumeSource represents a persistent ScaleIO volume", "gateway": "The host address of the ScaleIO API Gateway.", "system": "The name of the storage system as configured in ScaleIO.", "secretRef": "SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.", "sslEnabled": "Flag to enable/disable SSL communication with Gateway, default false", - "protectionDomain": "The name of the Protection Domain for the configured storage (defaults to \"default\").", - "storagePool": "The Storage Pool associated with the protection domain (defaults to \"default\").", - "storageMode": "Indicates whether the storage for a volume should be thick or thin (defaults to \"thin\").", + "protectionDomain": "The name of the ScaleIO Protection Domain for the configured storage.", + "storagePool": "The ScaleIO Storage Pool associated with the protection domain.", + "storageMode": "Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned.", "volumeName": "The name of a volume already created in the ScaleIO system that is associated with this volume source.", "fsType": "Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\", \"ntfs\". Implicitly inferred to be \"ext4\" if unspecified.", "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", 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 66d4e8e1..8263ba0c 100644 --- a/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -571,6 +571,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { in.(*QuobyteVolumeSource).DeepCopyInto(out.(*QuobyteVolumeSource)) return nil }, InType: reflect.TypeOf(&QuobyteVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*RBDPersistentVolumeSource).DeepCopyInto(out.(*RBDPersistentVolumeSource)) + return nil + }, InType: reflect.TypeOf(&RBDPersistentVolumeSource{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*RBDVolumeSource).DeepCopyInto(out.(*RBDVolumeSource)) return nil @@ -627,6 +631,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { in.(*SELinuxOptions).DeepCopyInto(out.(*SELinuxOptions)) return nil }, InType: reflect.TypeOf(&SELinuxOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*ScaleIOPersistentVolumeSource).DeepCopyInto(out.(*ScaleIOPersistentVolumeSource)) + return nil + }, InType: reflect.TypeOf(&ScaleIOPersistentVolumeSource{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*ScaleIOVolumeSource).DeepCopyInto(out.(*ScaleIOVolumeSource)) return nil @@ -3733,7 +3741,7 @@ func (in *PersistentVolumeSource) DeepCopyInto(out *PersistentVolumeSource) { if *in == nil { *out = nil } else { - *out = new(RBDVolumeSource) + *out = new(RBDPersistentVolumeSource) (*in).DeepCopyInto(*out) } } @@ -3850,7 +3858,7 @@ func (in *PersistentVolumeSource) DeepCopyInto(out *PersistentVolumeSource) { if *in == nil { *out = nil } else { - *out = new(ScaleIOVolumeSource) + *out = new(ScaleIOPersistentVolumeSource) (*in).DeepCopyInto(*out) } } @@ -4801,6 +4809,36 @@ func (in *QuobyteVolumeSource) DeepCopy() *QuobyteVolumeSource { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RBDPersistentVolumeSource) DeepCopyInto(out *RBDPersistentVolumeSource) { + *out = *in + if in.CephMonitors != nil { + in, out := &in.CephMonitors, &out.CephMonitors + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + if *in == nil { + *out = nil + } else { + *out = new(SecretReference) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RBDPersistentVolumeSource. +func (in *RBDPersistentVolumeSource) DeepCopy() *RBDPersistentVolumeSource { + if in == nil { + return nil + } + out := new(RBDPersistentVolumeSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RBDVolumeSource) DeepCopyInto(out *RBDVolumeSource) { *out = *in @@ -5191,6 +5229,31 @@ func (in *SELinuxOptions) DeepCopy() *SELinuxOptions { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ScaleIOPersistentVolumeSource) DeepCopyInto(out *ScaleIOPersistentVolumeSource) { + *out = *in + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + if *in == nil { + *out = nil + } else { + *out = new(SecretReference) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScaleIOPersistentVolumeSource. +func (in *ScaleIOPersistentVolumeSource) DeepCopy() *ScaleIOPersistentVolumeSource { + if in == nil { + return nil + } + out := new(ScaleIOPersistentVolumeSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ScaleIOVolumeSource) DeepCopyInto(out *ScaleIOVolumeSource) { *out = *in @@ -5905,7 +5968,15 @@ func (in *TCPSocketAction) DeepCopy() *TCPSocketAction { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Taint) DeepCopyInto(out *Taint) { *out = *in - in.TimeAdded.DeepCopyInto(&out.TimeAdded) + if in.TimeAdded != nil { + in, out := &in.TimeAdded, &out.TimeAdded + if *in == nil { + *out = nil + } else { + *out = new(meta_v1.Time) + (*in).DeepCopyInto(*out) + } + } return } diff --git a/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go b/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go index 63d492fc..d508216a 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go +++ b/vendor/k8s.io/api/extensions/v1beta1/generated.pb.go @@ -2175,16 +2175,18 @@ func (m *PodSecurityPolicySpec) MarshalTo(dAtA []byte) (int, error) { } i++ } - dAtA[i] = 0x80 - i++ - dAtA[i] = 0x1 - i++ - if m.AllowPrivilegeEscalation { - dAtA[i] = 1 - } else { - dAtA[i] = 0 + if m.AllowPrivilegeEscalation != nil { + dAtA[i] = 0x80 + i++ + dAtA[i] = 0x1 + i++ + if *m.AllowPrivilegeEscalation { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ } - i++ if len(m.AllowedHostPaths) > 0 { for _, msg := range m.AllowedHostPaths { dAtA[i] = 0x8a @@ -3520,7 +3522,9 @@ func (m *PodSecurityPolicySpec) Size() (n int) { if m.DefaultAllowPrivilegeEscalation != nil { n += 2 } - n += 3 + if m.AllowPrivilegeEscalation != nil { + n += 3 + } if len(m.AllowedHostPaths) > 0 { for _, e := range m.AllowedHostPaths { l = e.Size() @@ -4297,7 +4301,7 @@ func (this *PodSecurityPolicySpec) String() string { `FSGroup:` + strings.Replace(strings.Replace(this.FSGroup.String(), "FSGroupStrategyOptions", "FSGroupStrategyOptions", 1), `&`, ``, 1) + `,`, `ReadOnlyRootFilesystem:` + fmt.Sprintf("%v", this.ReadOnlyRootFilesystem) + `,`, `DefaultAllowPrivilegeEscalation:` + valueToStringGenerated(this.DefaultAllowPrivilegeEscalation) + `,`, - `AllowPrivilegeEscalation:` + fmt.Sprintf("%v", this.AllowPrivilegeEscalation) + `,`, + `AllowPrivilegeEscalation:` + valueToStringGenerated(this.AllowPrivilegeEscalation) + `,`, `AllowedHostPaths:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.AllowedHostPaths), "AllowedHostPath", "AllowedHostPath", 1), `&`, ``, 1) + `,`, `}`, }, "") @@ -10170,7 +10174,8 @@ func (m *PodSecurityPolicySpec) Unmarshal(dAtA []byte) error { break } } - m.AllowPrivilegeEscalation = bool(v != 0) + b := bool(v != 0) + m.AllowPrivilegeEscalation = &b case 17: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field AllowedHostPaths", wireType) @@ -12654,233 +12659,232 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 3634 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0xcd, 0x6f, 0x23, 0xc9, - 0x75, 0x9f, 0xe6, 0x87, 0x48, 0x3d, 0x8d, 0xbe, 0x4a, 0xb3, 0x12, 0xad, 0xdd, 0x11, 0xe5, 0x5e, - 0x60, 0x32, 0xbb, 0xd9, 0x25, 0x77, 0xb4, 0x3b, 0xeb, 0xcd, 0x2e, 0x62, 0x47, 0x94, 0xe6, 0x43, - 0x8e, 0x3e, 0xb8, 0x45, 0x4a, 0x4e, 0x16, 0x1e, 0x67, 0x5b, 0x64, 0x89, 0xea, 0x51, 0xb3, 0xbb, - 0xdd, 0x5d, 0x2d, 0x8b, 0x97, 0x20, 0x87, 0xc0, 0x40, 0x80, 0x04, 0x49, 0x0e, 0x0e, 0x1c, 0x20, - 0x87, 0xf8, 0x92, 0x53, 0x82, 0xf8, 0x96, 0x1c, 0x0c, 0x03, 0x01, 0x1c, 0x60, 0x10, 0x38, 0x81, - 0x4f, 0x89, 0x4f, 0x42, 0x56, 0x3e, 0xe6, 0x1f, 0x08, 0xe6, 0x10, 0x04, 0x55, 0x5d, 0xfd, 0xdd, - 0x2d, 0x92, 0xda, 0x91, 0x10, 0xe4, 0xc6, 0xae, 0xf7, 0xde, 0xef, 0xbd, 0x7a, 0x55, 0xf5, 0xde, - 0xab, 0x0f, 0xc2, 0xe3, 0x93, 0x8f, 0xec, 0x9a, 0x6a, 0xd4, 0x4f, 0x9c, 0x43, 0x62, 0xe9, 0x84, - 0x12, 0xbb, 0x7e, 0x4a, 0xf4, 0xae, 0x61, 0xd5, 0x05, 0x41, 0x31, 0xd5, 0x3a, 0x39, 0xa3, 0x44, - 0xb7, 0x55, 0x43, 0xb7, 0xeb, 0xa7, 0x0f, 0x0e, 0x09, 0x55, 0x1e, 0xd4, 0x7b, 0x44, 0x27, 0x96, - 0x42, 0x49, 0xb7, 0x66, 0x5a, 0x06, 0x35, 0xd0, 0x5d, 0x97, 0xbd, 0xa6, 0x98, 0x6a, 0x2d, 0x60, - 0xaf, 0x09, 0xf6, 0xe5, 0x77, 0x7b, 0x2a, 0x3d, 0x76, 0x0e, 0x6b, 0x1d, 0xa3, 0x5f, 0xef, 0x19, - 0x3d, 0xa3, 0xce, 0xa5, 0x0e, 0x9d, 0x23, 0xfe, 0xc5, 0x3f, 0xf8, 0x2f, 0x17, 0x6d, 0x59, 0x0e, - 0x29, 0xef, 0x18, 0x16, 0xa9, 0x9f, 0x26, 0x34, 0x2e, 0xbf, 0x15, 0xe2, 0x31, 0x0d, 0x4d, 0xed, - 0x0c, 0xb2, 0x8c, 0x5b, 0xfe, 0x20, 0x60, 0xed, 0x2b, 0x9d, 0x63, 0x55, 0x27, 0xd6, 0xa0, 0x6e, - 0x9e, 0xf4, 0xb8, 0xac, 0x45, 0x6c, 0xc3, 0xb1, 0x3a, 0x64, 0x2c, 0x29, 0xbb, 0xde, 0x27, 0x54, - 0x49, 0x33, 0xab, 0x9e, 0x25, 0x65, 0x39, 0x3a, 0x55, 0xfb, 0x49, 0x35, 0x1f, 0x0e, 0x13, 0xb0, - 0x3b, 0xc7, 0xa4, 0xaf, 0x24, 0xe4, 0xde, 0xcf, 0x92, 0x73, 0xa8, 0xaa, 0xd5, 0x55, 0x9d, 0xda, - 0xd4, 0x8a, 0x0b, 0xc9, 0x35, 0x80, 0xf5, 0xe6, 0xd6, 0x01, 0xb1, 0xd8, 0xf0, 0xa0, 0x55, 0x28, - 0xe8, 0x4a, 0x9f, 0x54, 0xa4, 0x55, 0xe9, 0xfe, 0x64, 0xe3, 0xf6, 0x8b, 0xf3, 0xea, 0xad, 0x8b, - 0xf3, 0x6a, 0x61, 0x57, 0xe9, 0x13, 0xcc, 0x29, 0xf2, 0x23, 0x98, 0x5d, 0xd7, 0x34, 0xe3, 0x7b, - 0xa4, 0xfb, 0xd4, 0xb0, 0x69, 0x53, 0xa1, 0xc7, 0x68, 0x0d, 0xc0, 0x54, 0xe8, 0x71, 0xd3, 0x22, - 0x47, 0xea, 0x99, 0x10, 0x45, 0x42, 0x14, 0x9a, 0x3e, 0x05, 0x87, 0xb8, 0xe4, 0xbf, 0x94, 0xe0, - 0x2b, 0x1b, 0x8e, 0x4d, 0x8d, 0xfe, 0x0e, 0xa1, 0x96, 0xda, 0xd9, 0x70, 0x2c, 0x8b, 0xe8, 0xb4, - 0x45, 0x15, 0xea, 0xd8, 0xc3, 0xcd, 0x40, 0x9f, 0x41, 0xf1, 0x54, 0xd1, 0x1c, 0x52, 0xc9, 0xad, - 0x4a, 0xf7, 0xa7, 0xd6, 0x6a, 0xb5, 0x60, 0xb6, 0xf9, 0x7d, 0xaf, 0x99, 0x27, 0x3d, 0x3e, 0xfd, - 0xbc, 0x01, 0xad, 0x7d, 0xea, 0x28, 0x3a, 0x55, 0xe9, 0xa0, 0x71, 0x47, 0x40, 0xde, 0x16, 0x7a, - 0x0f, 0x18, 0x16, 0x76, 0x21, 0xe5, 0xdf, 0x87, 0xbb, 0x99, 0xa6, 0x6d, 0xab, 0x36, 0x45, 0xcf, - 0xa0, 0xa8, 0x52, 0xd2, 0xb7, 0x2b, 0xd2, 0x6a, 0xfe, 0xfe, 0xd4, 0xda, 0x47, 0xb5, 0x4b, 0xa7, - 0x7a, 0x2d, 0x13, 0xac, 0x31, 0x2d, 0xcc, 0x28, 0x6e, 0x31, 0x38, 0xec, 0xa2, 0xca, 0x7f, 0x2e, - 0x01, 0x0a, 0xcb, 0xb4, 0x15, 0xab, 0x47, 0xe8, 0x08, 0x4e, 0xf9, 0xdd, 0x2f, 0xe7, 0x94, 0x05, - 0x01, 0x39, 0xe5, 0x2a, 0x8c, 0xf8, 0xc4, 0x84, 0xc5, 0xa4, 0x49, 0xdc, 0x19, 0x07, 0x51, 0x67, - 0x3c, 0x18, 0xc3, 0x19, 0x2e, 0x4a, 0x86, 0x17, 0x7e, 0x90, 0x83, 0xc9, 0x4d, 0x85, 0xf4, 0x0d, - 0xbd, 0x45, 0x28, 0xfa, 0x1c, 0xca, 0x6c, 0x7d, 0x75, 0x15, 0xaa, 0x70, 0x07, 0x4c, 0xad, 0xbd, - 0x77, 0x59, 0xef, 0xec, 0x1a, 0xe3, 0xae, 0x9d, 0x3e, 0xa8, 0xed, 0x1d, 0x3e, 0x27, 0x1d, 0xba, - 0x43, 0xa8, 0x12, 0xcc, 0xc9, 0xa0, 0x0d, 0xfb, 0xa8, 0x68, 0x17, 0x0a, 0xb6, 0x49, 0x3a, 0xc2, - 0x77, 0xef, 0x0c, 0xe9, 0x86, 0x6f, 0x59, 0xcb, 0x24, 0x9d, 0x60, 0x30, 0xd8, 0x17, 0xe6, 0x38, - 0xe8, 0x00, 0x26, 0x6c, 0x3e, 0xca, 0x95, 0x7c, 0x62, 0x34, 0x2e, 0x47, 0x74, 0xe7, 0xc6, 0x8c, - 0xc0, 0x9c, 0x70, 0xbf, 0xb1, 0x40, 0x93, 0x7f, 0x22, 0xc1, 0xb4, 0xcf, 0xcb, 0x47, 0xe0, 0xdb, - 0x09, 0xdf, 0xd4, 0x46, 0xf3, 0x0d, 0x93, 0xe6, 0x9e, 0x99, 0x13, 0xba, 0xca, 0x5e, 0x4b, 0xc8, - 0x2f, 0x3b, 0xde, 0xf8, 0xe6, 0xf8, 0xf8, 0xde, 0x1f, 0xb5, 0x1b, 0x19, 0xc3, 0xfa, 0x17, 0x85, - 0x90, 0xf9, 0xcc, 0x5d, 0xe8, 0x19, 0x94, 0x6d, 0xa2, 0x91, 0x0e, 0x35, 0x2c, 0x61, 0xfe, 0xfb, - 0x23, 0x9a, 0xaf, 0x1c, 0x12, 0xad, 0x25, 0x44, 0x1b, 0xb7, 0x99, 0xfd, 0xde, 0x17, 0xf6, 0x21, - 0xd1, 0xa7, 0x50, 0xa6, 0xa4, 0x6f, 0x6a, 0x0a, 0xf5, 0xd6, 0xc5, 0x9b, 0xe1, 0x2e, 0xb0, 0x64, - 0xc2, 0xc0, 0x9a, 0x46, 0xb7, 0x2d, 0xd8, 0xf8, 0x90, 0xfa, 0x2e, 0xf1, 0x5a, 0xb1, 0x0f, 0x83, - 0x4e, 0x61, 0xc6, 0x31, 0xbb, 0x8c, 0x93, 0xb2, 0x50, 0xda, 0x1b, 0x88, 0x21, 0xfe, 0x70, 0x54, - 0xdf, 0xec, 0x47, 0xa4, 0x1b, 0x8b, 0x42, 0xd7, 0x4c, 0xb4, 0x1d, 0xc7, 0xb4, 0xa0, 0x75, 0x98, - 0xed, 0xab, 0x3a, 0x26, 0x4a, 0x77, 0xd0, 0x22, 0x1d, 0x43, 0xef, 0xda, 0x95, 0xc2, 0xaa, 0x74, - 0xbf, 0xd8, 0x58, 0x12, 0x00, 0xb3, 0x3b, 0x51, 0x32, 0x8e, 0xf3, 0xa3, 0x6f, 0x02, 0xf2, 0xba, - 0xf1, 0xc4, 0xcd, 0x04, 0xaa, 0xa1, 0x57, 0x8a, 0xab, 0xd2, 0xfd, 0x7c, 0x63, 0x59, 0xa0, 0xa0, - 0x76, 0x82, 0x03, 0xa7, 0x48, 0xa1, 0x6d, 0xb8, 0x63, 0x91, 0x53, 0x95, 0xf5, 0xf1, 0xa9, 0x6a, - 0x53, 0xc3, 0x1a, 0x6c, 0xab, 0x7d, 0x95, 0x56, 0x26, 0xb8, 0x4d, 0x95, 0x8b, 0xf3, 0xea, 0x1d, - 0x9c, 0x42, 0xc7, 0xa9, 0x52, 0xf2, 0x8f, 0x8b, 0x30, 0x1b, 0x5b, 0x03, 0xe8, 0x00, 0x16, 0x3b, - 0x6e, 0xc0, 0xdc, 0x75, 0xfa, 0x87, 0xc4, 0x6a, 0x75, 0x8e, 0x49, 0xd7, 0xd1, 0x48, 0x97, 0x4f, - 0x94, 0x62, 0x63, 0x45, 0x58, 0xbc, 0xb8, 0x91, 0xca, 0x85, 0x33, 0xa4, 0x99, 0x17, 0x74, 0xde, - 0xb4, 0xa3, 0xda, 0xb6, 0x8f, 0x99, 0xe3, 0x98, 0xbe, 0x17, 0x76, 0x13, 0x1c, 0x38, 0x45, 0x8a, - 0xd9, 0xd8, 0x25, 0xb6, 0x6a, 0x91, 0x6e, 0xdc, 0xc6, 0x7c, 0xd4, 0xc6, 0xcd, 0x54, 0x2e, 0x9c, - 0x21, 0x8d, 0x1e, 0xc2, 0x94, 0xab, 0x8d, 0x8f, 0x9f, 0x18, 0x68, 0x3f, 0x44, 0xef, 0x06, 0x24, - 0x1c, 0xe6, 0x63, 0x5d, 0x33, 0x0e, 0x6d, 0x62, 0x9d, 0x92, 0x6e, 0xf6, 0x00, 0xef, 0x25, 0x38, - 0x70, 0x8a, 0x14, 0xeb, 0x9a, 0x3b, 0x03, 0x13, 0x5d, 0x9b, 0x88, 0x76, 0x6d, 0x3f, 0x95, 0x0b, - 0x67, 0x48, 0xb3, 0x79, 0xec, 0x9a, 0xbc, 0x7e, 0xaa, 0xa8, 0x9a, 0x72, 0xa8, 0x91, 0x4a, 0x29, - 0x3a, 0x8f, 0x77, 0xa3, 0x64, 0x1c, 0xe7, 0x47, 0x4f, 0x60, 0xde, 0x6d, 0xda, 0xd7, 0x15, 0x1f, - 0xa4, 0xcc, 0x41, 0xbe, 0x22, 0x40, 0xe6, 0x77, 0xe3, 0x0c, 0x38, 0x29, 0x83, 0x3e, 0x86, 0x99, - 0x8e, 0xa1, 0x69, 0x7c, 0x3e, 0x6e, 0x18, 0x8e, 0x4e, 0x2b, 0x93, 0x1c, 0x05, 0xb1, 0xf5, 0xb8, - 0x11, 0xa1, 0xe0, 0x18, 0xa7, 0xfc, 0x2f, 0x12, 0x2c, 0x65, 0xac, 0x69, 0xf4, 0x0d, 0x28, 0xd0, - 0x81, 0xe9, 0x65, 0xeb, 0x5f, 0xf7, 0x12, 0x44, 0x7b, 0x60, 0x92, 0x97, 0xe7, 0xd5, 0xd7, 0x33, + // 3632 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0xcd, 0x6f, 0x24, 0xc7, + 0x75, 0xdf, 0x9e, 0x0f, 0xce, 0xf0, 0x71, 0xf9, 0x55, 0x5c, 0x91, 0x63, 0x4a, 0xcb, 0x59, 0xb7, + 0x80, 0xcd, 0x4a, 0x91, 0x66, 0xb4, 0x94, 0x56, 0x56, 0x24, 0xc4, 0x0e, 0x87, 0xdc, 0x0f, 0x3a, + 0xfc, 0x18, 0xd5, 0x0c, 0x69, 0x67, 0x91, 0x75, 0xd4, 0x9c, 0x29, 0x0e, 0x7b, 0xd9, 0xd3, 0xdd, + 0xee, 0xae, 0xa6, 0x39, 0x97, 0x20, 0x87, 0xc0, 0x40, 0x80, 0x04, 0x49, 0x0e, 0x0e, 0x94, 0x5b, + 0x7c, 0xc9, 0x29, 0x41, 0x7c, 0x4b, 0x0e, 0x86, 0x81, 0x00, 0x0e, 0xb0, 0x08, 0x9c, 0xc0, 0xa7, + 0xc4, 0x27, 0x22, 0xa2, 0x8e, 0xf9, 0x07, 0x82, 0x3d, 0x04, 0x41, 0x55, 0x57, 0x7f, 0x77, 0x73, + 0x66, 0xa8, 0x25, 0x11, 0xf8, 0x36, 0x5d, 0xef, 0xbd, 0xdf, 0x7b, 0xf5, 0xaa, 0xea, 0xbd, 0x57, + 0x1f, 0x03, 0x8f, 0x8e, 0x3f, 0xb2, 0x6b, 0xaa, 0x51, 0x3f, 0x76, 0x0e, 0x88, 0xa5, 0x13, 0x4a, + 0xec, 0xfa, 0x09, 0xd1, 0xbb, 0x86, 0x55, 0x17, 0x04, 0xc5, 0x54, 0xeb, 0xe4, 0x94, 0x12, 0xdd, + 0x56, 0x0d, 0xdd, 0xae, 0x9f, 0xdc, 0x3f, 0x20, 0x54, 0xb9, 0x5f, 0xef, 0x11, 0x9d, 0x58, 0x0a, + 0x25, 0xdd, 0x9a, 0x69, 0x19, 0xd4, 0x40, 0xb7, 0x5d, 0xf6, 0x9a, 0x62, 0xaa, 0xb5, 0x80, 0xbd, + 0x26, 0xd8, 0x97, 0xdf, 0xed, 0xa9, 0xf4, 0xc8, 0x39, 0xa8, 0x75, 0x8c, 0x7e, 0xbd, 0x67, 0xf4, + 0x8c, 0x3a, 0x97, 0x3a, 0x70, 0x0e, 0xf9, 0x17, 0xff, 0xe0, 0xbf, 0x5c, 0xb4, 0x65, 0x39, 0xa4, + 0xbc, 0x63, 0x58, 0xa4, 0x7e, 0x92, 0xd0, 0xb8, 0xfc, 0x56, 0x88, 0xc7, 0x34, 0x34, 0xb5, 0x33, + 0xc8, 0x32, 0x6e, 0xf9, 0x83, 0x80, 0xb5, 0xaf, 0x74, 0x8e, 0x54, 0x9d, 0x58, 0x83, 0xba, 0x79, + 0xdc, 0xe3, 0xb2, 0x16, 0xb1, 0x0d, 0xc7, 0xea, 0x90, 0xb1, 0xa4, 0xec, 0x7a, 0x9f, 0x50, 0x25, + 0xcd, 0xac, 0x7a, 0x96, 0x94, 0xe5, 0xe8, 0x54, 0xed, 0x27, 0xd5, 0x7c, 0x38, 0x4c, 0xc0, 0xee, + 0x1c, 0x91, 0xbe, 0x92, 0x90, 0x7b, 0x3f, 0x4b, 0xce, 0xa1, 0xaa, 0x56, 0x57, 0x75, 0x6a, 0x53, + 0x2b, 0x2e, 0x24, 0xd7, 0x00, 0xd6, 0x9a, 0x9b, 0xfb, 0xc4, 0x62, 0xc3, 0x83, 0xee, 0x40, 0x41, + 0x57, 0xfa, 0xa4, 0x22, 0xdd, 0x91, 0xee, 0x4d, 0x36, 0x6e, 0xbe, 0x38, 0xab, 0xde, 0x38, 0x3f, + 0xab, 0x16, 0x76, 0x94, 0x3e, 0xc1, 0x9c, 0x22, 0x3f, 0x84, 0xd9, 0x35, 0x4d, 0x33, 0x7e, 0x40, + 0xba, 0x4f, 0x0c, 0x9b, 0x36, 0x15, 0x7a, 0x84, 0x56, 0x01, 0x4c, 0x85, 0x1e, 0x35, 0x2d, 0x72, + 0xa8, 0x9e, 0x0a, 0x51, 0x24, 0x44, 0xa1, 0xe9, 0x53, 0x70, 0x88, 0x4b, 0xfe, 0x6b, 0x09, 0xbe, + 0xb6, 0xee, 0xd8, 0xd4, 0xe8, 0x6f, 0x13, 0x6a, 0xa9, 0x9d, 0x75, 0xc7, 0xb2, 0x88, 0x4e, 0x5b, + 0x54, 0xa1, 0x8e, 0x3d, 0xdc, 0x0c, 0xf4, 0x14, 0x8a, 0x27, 0x8a, 0xe6, 0x90, 0x4a, 0xee, 0x8e, + 0x74, 0x6f, 0x6a, 0xb5, 0x56, 0x0b, 0x66, 0x9b, 0xdf, 0xf7, 0x9a, 0x79, 0xdc, 0xe3, 0xd3, 0xcf, + 0x1b, 0xd0, 0xda, 0xa7, 0x8e, 0xa2, 0x53, 0x95, 0x0e, 0x1a, 0xb7, 0x04, 0xe4, 0x4d, 0xa1, 0x77, + 0x9f, 0x61, 0x61, 0x17, 0x52, 0xfe, 0x43, 0xb8, 0x9d, 0x69, 0xda, 0x96, 0x6a, 0x53, 0xf4, 0x0c, + 0x8a, 0x2a, 0x25, 0x7d, 0xbb, 0x22, 0xdd, 0xc9, 0xdf, 0x9b, 0x5a, 0xfd, 0xa8, 0x76, 0xe1, 0x54, + 0xaf, 0x65, 0x82, 0x35, 0xa6, 0x85, 0x19, 0xc5, 0x4d, 0x06, 0x87, 0x5d, 0x54, 0xf9, 0x2f, 0x25, + 0x40, 0x61, 0x99, 0xb6, 0x62, 0xf5, 0x08, 0x1d, 0xc1, 0x29, 0xbf, 0xf7, 0xd5, 0x9c, 0xb2, 0x20, + 0x20, 0xa7, 0x5c, 0x85, 0x11, 0x9f, 0x98, 0xb0, 0x98, 0x34, 0x89, 0x3b, 0x63, 0x3f, 0xea, 0x8c, + 0xfb, 0x63, 0x38, 0xc3, 0x45, 0xc9, 0xf0, 0xc2, 0x8f, 0x72, 0x30, 0xb9, 0xa1, 0x90, 0xbe, 0xa1, + 0xb7, 0x08, 0x45, 0x9f, 0x41, 0x99, 0xad, 0xaf, 0xae, 0x42, 0x15, 0xee, 0x80, 0xa9, 0xd5, 0xf7, + 0x2e, 0xea, 0x9d, 0x5d, 0x63, 0xdc, 0xb5, 0x93, 0xfb, 0xb5, 0xdd, 0x83, 0xe7, 0xa4, 0x43, 0xb7, + 0x09, 0x55, 0x82, 0x39, 0x19, 0xb4, 0x61, 0x1f, 0x15, 0xed, 0x40, 0xc1, 0x36, 0x49, 0x47, 0xf8, + 0xee, 0x9d, 0x21, 0xdd, 0xf0, 0x2d, 0x6b, 0x99, 0xa4, 0x13, 0x0c, 0x06, 0xfb, 0xc2, 0x1c, 0x07, + 0xed, 0xc3, 0x84, 0xcd, 0x47, 0xb9, 0x92, 0x4f, 0x8c, 0xc6, 0xc5, 0x88, 0xee, 0xdc, 0x98, 0x11, + 0x98, 0x13, 0xee, 0x37, 0x16, 0x68, 0xf2, 0x4f, 0x25, 0x98, 0xf6, 0x79, 0xf9, 0x08, 0xfc, 0x7e, + 0xc2, 0x37, 0xb5, 0xd1, 0x7c, 0xc3, 0xa4, 0xb9, 0x67, 0xe6, 0x84, 0xae, 0xb2, 0xd7, 0x12, 0xf2, + 0xcb, 0xb6, 0x37, 0xbe, 0x39, 0x3e, 0xbe, 0xf7, 0x46, 0xed, 0x46, 0xc6, 0xb0, 0xfe, 0x55, 0x21, + 0x64, 0x3e, 0x73, 0x17, 0x7a, 0x06, 0x65, 0x9b, 0x68, 0xa4, 0x43, 0x0d, 0x4b, 0x98, 0xff, 0xfe, + 0x88, 0xe6, 0x2b, 0x07, 0x44, 0x6b, 0x09, 0xd1, 0xc6, 0x4d, 0x66, 0xbf, 0xf7, 0x85, 0x7d, 0x48, + 0xf4, 0x29, 0x94, 0x29, 0xe9, 0x9b, 0x9a, 0x42, 0xbd, 0x75, 0xf1, 0x66, 0xb8, 0x0b, 0x2c, 0x99, + 0x30, 0xb0, 0xa6, 0xd1, 0x6d, 0x0b, 0x36, 0x3e, 0xa4, 0xbe, 0x4b, 0xbc, 0x56, 0xec, 0xc3, 0xa0, + 0x13, 0x98, 0x71, 0xcc, 0x2e, 0xe3, 0xa4, 0x2c, 0x94, 0xf6, 0x06, 0x62, 0x88, 0x3f, 0x1c, 0xd5, + 0x37, 0x7b, 0x11, 0xe9, 0xc6, 0xa2, 0xd0, 0x35, 0x13, 0x6d, 0xc7, 0x31, 0x2d, 0x68, 0x0d, 0x66, + 0xfb, 0xaa, 0x8e, 0x89, 0xd2, 0x1d, 0xb4, 0x48, 0xc7, 0xd0, 0xbb, 0x76, 0xa5, 0x70, 0x47, 0xba, + 0x57, 0x6c, 0x2c, 0x09, 0x80, 0xd9, 0xed, 0x28, 0x19, 0xc7, 0xf9, 0xd1, 0xb7, 0x01, 0x79, 0xdd, + 0x78, 0xec, 0x66, 0x02, 0xd5, 0xd0, 0x2b, 0xc5, 0x3b, 0xd2, 0xbd, 0x7c, 0x63, 0x59, 0xa0, 0xa0, + 0x76, 0x82, 0x03, 0xa7, 0x48, 0xa1, 0x2d, 0xb8, 0x65, 0x91, 0x13, 0x95, 0xf5, 0xf1, 0x89, 0x6a, + 0x53, 0xc3, 0x1a, 0x6c, 0xa9, 0x7d, 0x95, 0x56, 0x26, 0xb8, 0x4d, 0x95, 0xf3, 0xb3, 0xea, 0x2d, + 0x9c, 0x42, 0xc7, 0xa9, 0x52, 0xf2, 0x4f, 0x8a, 0x30, 0x1b, 0x5b, 0x03, 0x68, 0x1f, 0x16, 0x3b, + 0x6e, 0xc0, 0xdc, 0x71, 0xfa, 0x07, 0xc4, 0x6a, 0x75, 0x8e, 0x48, 0xd7, 0xd1, 0x48, 0x97, 0x4f, + 0x94, 0x62, 0x63, 0x45, 0x58, 0xbc, 0xb8, 0x9e, 0xca, 0x85, 0x33, 0xa4, 0x99, 0x17, 0x74, 0xde, + 0xb4, 0xad, 0xda, 0xb6, 0x8f, 0x99, 0xe3, 0x98, 0xbe, 0x17, 0x76, 0x12, 0x1c, 0x38, 0x45, 0x8a, + 0xd9, 0xd8, 0x25, 0xb6, 0x6a, 0x91, 0x6e, 0xdc, 0xc6, 0x7c, 0xd4, 0xc6, 0x8d, 0x54, 0x2e, 0x9c, + 0x21, 0x8d, 0x1e, 0xc0, 0x94, 0xab, 0x8d, 0x8f, 0x9f, 0x18, 0x68, 0x3f, 0x44, 0xef, 0x04, 0x24, + 0x1c, 0xe6, 0x63, 0x5d, 0x33, 0x0e, 0x6c, 0x62, 0x9d, 0x90, 0x6e, 0xf6, 0x00, 0xef, 0x26, 0x38, + 0x70, 0x8a, 0x14, 0xeb, 0x9a, 0x3b, 0x03, 0x13, 0x5d, 0x9b, 0x88, 0x76, 0x6d, 0x2f, 0x95, 0x0b, + 0x67, 0x48, 0xb3, 0x79, 0xec, 0x9a, 0xbc, 0x76, 0xa2, 0xa8, 0x9a, 0x72, 0xa0, 0x91, 0x4a, 0x29, + 0x3a, 0x8f, 0x77, 0xa2, 0x64, 0x1c, 0xe7, 0x47, 0x8f, 0x61, 0xde, 0x6d, 0xda, 0xd3, 0x15, 0x1f, + 0xa4, 0xcc, 0x41, 0xbe, 0x26, 0x40, 0xe6, 0x77, 0xe2, 0x0c, 0x38, 0x29, 0x83, 0x3e, 0x86, 0x99, + 0x8e, 0xa1, 0x69, 0x7c, 0x3e, 0xae, 0x1b, 0x8e, 0x4e, 0x2b, 0x93, 0x1c, 0x05, 0xb1, 0xf5, 0xb8, + 0x1e, 0xa1, 0xe0, 0x18, 0xa7, 0xfc, 0xaf, 0x12, 0x2c, 0x65, 0xac, 0x69, 0xf4, 0x2d, 0x28, 0xd0, + 0x81, 0xe9, 0x65, 0xeb, 0xdf, 0xf4, 0x12, 0x44, 0x7b, 0x60, 0x92, 0x97, 0x67, 0xd5, 0xd7, 0x33, 0xc4, 0x18, 0x19, 0x73, 0x41, 0xa4, 0xc3, 0xb4, 0xc5, 0xd4, 0xe9, 0x3d, 0x97, 0x45, 0x04, 0xaf, - 0x87, 0x43, 0x62, 0x0c, 0x0e, 0xcb, 0x04, 0xc1, 0x78, 0xfe, 0xe2, 0xbc, 0x3a, 0x1d, 0xa1, 0xe1, - 0x28, 0xbc, 0xfc, 0xc3, 0x1c, 0xc0, 0x26, 0x31, 0x35, 0x63, 0xd0, 0x27, 0xfa, 0x4d, 0x24, 0xdc, - 0xbd, 0x48, 0xc2, 0x7d, 0x77, 0x58, 0xec, 0xf4, 0x4d, 0xcb, 0xcc, 0xb8, 0xdf, 0x8a, 0x65, 0xdc, - 0xfa, 0xe8, 0x90, 0x97, 0xa7, 0xdc, 0xff, 0xc8, 0xc3, 0x42, 0xc0, 0xbc, 0x61, 0xe8, 0x5d, 0x95, - 0xaf, 0x8f, 0x4f, 0x22, 0x63, 0xfc, 0x6b, 0xb1, 0x31, 0x5e, 0x4a, 0x11, 0x09, 0x8d, 0xef, 0xb6, - 0x6f, 0x6d, 0x8e, 0x8b, 0x7f, 0x10, 0x55, 0xfe, 0xf2, 0xbc, 0x9a, 0xb2, 0xe7, 0xa9, 0xf9, 0x48, - 0x51, 0x13, 0xd1, 0x3d, 0x98, 0xb0, 0x88, 0x62, 0x1b, 0x3a, 0x0f, 0x14, 0x93, 0x41, 0x57, 0x30, - 0x6f, 0xc5, 0x82, 0x8a, 0xde, 0x82, 0x52, 0x9f, 0xd8, 0xb6, 0xd2, 0x23, 0x3c, 0x26, 0x4c, 0x36, - 0x66, 0x05, 0x63, 0x69, 0xc7, 0x6d, 0xc6, 0x1e, 0x1d, 0x3d, 0x87, 0x19, 0x4d, 0xb1, 0xc5, 0x04, - 0x6d, 0xab, 0x7d, 0xc2, 0x57, 0xfd, 0xd4, 0xda, 0xdb, 0xa3, 0xcd, 0x03, 0x26, 0x11, 0x64, 0xb6, - 0xed, 0x08, 0x12, 0x8e, 0x21, 0xa3, 0x53, 0x40, 0xac, 0xa5, 0x6d, 0x29, 0xba, 0xed, 0x3a, 0x8a, - 0xe9, 0x2b, 0x8d, 0xad, 0xcf, 0x8f, 0x70, 0xdb, 0x09, 0x34, 0x9c, 0xa2, 0x41, 0xfe, 0xa9, 0x04, - 0x33, 0xc1, 0x30, 0xdd, 0x40, 0x35, 0xb5, 0x1b, 0xad, 0xa6, 0xde, 0x1a, 0x79, 0x8a, 0x66, 0x94, - 0x53, 0xff, 0x9d, 0x03, 0x14, 0x30, 0xb1, 0x05, 0x7e, 0xa8, 0x74, 0x4e, 0x46, 0xd8, 0x2b, 0xfc, - 0x40, 0x02, 0x24, 0xc2, 0xf3, 0xba, 0xae, 0x1b, 0x94, 0x47, 0x7c, 0xcf, 0xac, 0xad, 0x91, 0xcd, - 0xf2, 0x34, 0xd6, 0xf6, 0x13, 0x58, 0x8f, 0x74, 0x6a, 0x0d, 0x82, 0x11, 0x49, 0x32, 0xe0, 0x14, - 0x03, 0x90, 0x02, 0x60, 0x09, 0xcc, 0xb6, 0x21, 0x16, 0xf2, 0xbb, 0x23, 0xc4, 0x3c, 0x26, 0xb0, - 0x61, 0xe8, 0x47, 0x6a, 0x2f, 0x08, 0x3b, 0xd8, 0x07, 0xc2, 0x21, 0xd0, 0xe5, 0x47, 0xb0, 0x94, - 0x61, 0x2d, 0x9a, 0x83, 0xfc, 0x09, 0x19, 0xb8, 0x6e, 0xc3, 0xec, 0x27, 0xba, 0x13, 0xde, 0x53, - 0x4d, 0x8a, 0xed, 0xd0, 0xc7, 0xb9, 0x8f, 0x24, 0xf9, 0x27, 0xc5, 0xf0, 0xdc, 0xe1, 0xa5, 0xec, - 0x7d, 0x28, 0x5b, 0xc4, 0xd4, 0xd4, 0x8e, 0x62, 0x8b, 0x0a, 0x85, 0x57, 0xa5, 0x58, 0xb4, 0x61, - 0x9f, 0x1a, 0x29, 0x7a, 0x73, 0xd7, 0x5b, 0xf4, 0xe6, 0x5f, 0x4d, 0xd1, 0xfb, 0x7b, 0x50, 0xb6, - 0xbd, 0x72, 0xb7, 0xc0, 0x21, 0x1f, 0x8c, 0x11, 0x5f, 0x45, 0xa5, 0xeb, 0x2b, 0xf0, 0x6b, 0x5c, - 0x1f, 0x34, 0xad, 0xba, 0x2d, 0x8e, 0x59, 0xdd, 0xbe, 0xd2, 0x8a, 0x94, 0xc5, 0x54, 0x53, 0x71, - 0x6c, 0xd2, 0xe5, 0x81, 0xa8, 0x1c, 0xc4, 0xd4, 0x26, 0x6f, 0xc5, 0x82, 0x8a, 0x9e, 0x45, 0xa6, - 0x6c, 0xf9, 0x2a, 0x53, 0x76, 0x26, 0x7b, 0xba, 0xa2, 0x7d, 0x58, 0x32, 0x2d, 0xa3, 0x67, 0x11, - 0xdb, 0xde, 0x24, 0x4a, 0x57, 0x53, 0x75, 0xe2, 0xf9, 0xc7, 0x2d, 0x55, 0x5e, 0xbf, 0x38, 0xaf, - 0x2e, 0x35, 0xd3, 0x59, 0x70, 0x96, 0xac, 0xfc, 0xa2, 0x00, 0x73, 0xf1, 0x0c, 0x98, 0x51, 0x3d, - 0x4a, 0x57, 0xaa, 0x1e, 0xdf, 0x09, 0x2d, 0x06, 0xb7, 0xb4, 0xf6, 0x47, 0x3f, 0x65, 0x41, 0xac, - 0xc3, 0xac, 0x88, 0x06, 0x1e, 0x51, 0xd4, 0xcf, 0xfe, 0xe8, 0xef, 0x47, 0xc9, 0x38, 0xce, 0xcf, - 0x6a, 0xc2, 0xa0, 0xd4, 0xf3, 0x40, 0x0a, 0xd1, 0x9a, 0x70, 0x3d, 0xce, 0x80, 0x93, 0x32, 0x68, - 0x07, 0x16, 0x1c, 0x3d, 0x09, 0xe5, 0xce, 0xc6, 0xd7, 0x05, 0xd4, 0xc2, 0x7e, 0x92, 0x05, 0xa7, - 0xc9, 0xa1, 0x23, 0x80, 0x8e, 0x97, 0xb6, 0xed, 0xca, 0x04, 0x8f, 0xb0, 0x6b, 0x23, 0xaf, 0x1d, - 0x3f, 0xe3, 0x07, 0x71, 0xcd, 0x6f, 0xb2, 0x71, 0x08, 0x19, 0x7d, 0x02, 0xd3, 0x16, 0xdf, 0x10, - 0x78, 0x06, 0xbb, 0x45, 0xf5, 0x6b, 0x42, 0x6c, 0x1a, 0x87, 0x89, 0x38, 0xca, 0x9b, 0x52, 0x07, - 0x97, 0x47, 0xae, 0x83, 0xff, 0x49, 0x0a, 0x27, 0x21, 0xbf, 0x04, 0xfe, 0x38, 0x52, 0x1e, 0xdd, - 0x8b, 0x95, 0x47, 0x8b, 0x49, 0x89, 0x50, 0x75, 0x64, 0xa4, 0x57, 0xbf, 0x1f, 0x8e, 0x55, 0xfd, - 0x06, 0xc9, 0x73, 0x78, 0xf9, 0xfb, 0x23, 0x09, 0x16, 0x1f, 0xb7, 0x9e, 0x58, 0x86, 0x63, 0x7a, - 0xe6, 0xec, 0x99, 0xae, 0x5f, 0xbf, 0x06, 0x05, 0xcb, 0xd1, 0xbc, 0x7e, 0xbc, 0xe9, 0xf5, 0x03, - 0x3b, 0x1a, 0xeb, 0xc7, 0x42, 0x4c, 0xca, 0xed, 0x04, 0x13, 0x40, 0xbb, 0x30, 0x61, 0x29, 0x7a, - 0x8f, 0x78, 0x69, 0xf5, 0xde, 0x10, 0xeb, 0xb7, 0x36, 0x31, 0x63, 0x0f, 0x15, 0x6f, 0x5c, 0x1a, - 0x0b, 0x14, 0xf9, 0x4f, 0x24, 0x98, 0x7d, 0xda, 0x6e, 0x37, 0xb7, 0x74, 0xbe, 0xa2, 0xf9, 0xe1, - 0xeb, 0x2a, 0x14, 0x4c, 0x85, 0x1e, 0xc7, 0x33, 0x3d, 0xa3, 0x61, 0x4e, 0x41, 0xbf, 0x03, 0x25, - 0x16, 0x49, 0x88, 0xde, 0x1d, 0xb1, 0xd4, 0x16, 0xf0, 0x0d, 0x57, 0x28, 0xa8, 0x10, 0x45, 0x03, - 0xf6, 0xe0, 0xe4, 0x13, 0xb8, 0x13, 0x32, 0x87, 0xf9, 0x83, 0x9f, 0x19, 0xa2, 0x16, 0x14, 0x99, - 0x66, 0xef, 0x48, 0x70, 0xd8, 0xc9, 0x57, 0xac, 0x4b, 0x41, 0xa5, 0xc3, 0xbe, 0x6c, 0xec, 0x62, - 0xc9, 0x3b, 0x30, 0xcd, 0x4f, 0x9c, 0x0d, 0x8b, 0x72, 0xb7, 0xa0, 0xbb, 0x90, 0xef, 0xab, 0xba, - 0xc8, 0xb3, 0x53, 0x42, 0x26, 0xcf, 0x72, 0x04, 0x6b, 0xe7, 0x64, 0xe5, 0x4c, 0x44, 0x9e, 0x80, - 0xac, 0x9c, 0x61, 0xd6, 0x2e, 0x3f, 0x81, 0x92, 0x70, 0x77, 0x18, 0x28, 0x7f, 0x39, 0x50, 0x3e, - 0x05, 0x68, 0x0f, 0x4a, 0x5b, 0xcd, 0x86, 0x66, 0xb8, 0x55, 0x57, 0x47, 0xed, 0x5a, 0xf1, 0xb1, - 0xd8, 0xd8, 0xda, 0xc4, 0x98, 0x53, 0x90, 0x0c, 0x13, 0xe4, 0xac, 0x43, 0x4c, 0xca, 0x67, 0xc4, - 0x64, 0x03, 0xd8, 0x28, 0x3f, 0xe2, 0x2d, 0x58, 0x50, 0xe4, 0x3f, 0xcd, 0x41, 0x49, 0xb8, 0xe3, - 0x06, 0x76, 0x61, 0xdb, 0x91, 0x5d, 0xd8, 0xdb, 0xa3, 0x4d, 0x8d, 0xcc, 0x2d, 0x58, 0x3b, 0xb6, - 0x05, 0x7b, 0x67, 0x44, 0xbc, 0xcb, 0xf7, 0x5f, 0x3f, 0x96, 0x60, 0x26, 0x3a, 0x29, 0xd1, 0x43, - 0x98, 0x62, 0x09, 0x47, 0xed, 0x90, 0xdd, 0xa0, 0xce, 0xf5, 0x4f, 0x47, 0x5a, 0x01, 0x09, 0x87, - 0xf9, 0x50, 0xcf, 0x17, 0x63, 0xf3, 0x48, 0x74, 0x3a, 0xdb, 0xa5, 0x0e, 0x55, 0xb5, 0x9a, 0x7b, - 0x71, 0x52, 0xdb, 0xd2, 0xe9, 0x9e, 0xd5, 0xa2, 0x96, 0xaa, 0xf7, 0x12, 0x8a, 0xf8, 0xa4, 0x0c, - 0x23, 0xcb, 0xff, 0x28, 0xc1, 0x94, 0x30, 0xf9, 0x06, 0x76, 0x15, 0xbf, 0x1d, 0xdd, 0x55, 0xdc, - 0x1b, 0x71, 0x81, 0xa7, 0x6f, 0x29, 0xfe, 0x26, 0x30, 0x9d, 0x2d, 0x69, 0x36, 0xab, 0x8f, 0x0d, - 0x9b, 0xc6, 0x67, 0x35, 0x5b, 0x8c, 0x98, 0x53, 0x90, 0x03, 0x73, 0x6a, 0x2c, 0x06, 0x08, 0xd7, - 0xd6, 0x47, 0xb3, 0xc4, 0x17, 0x6b, 0x54, 0x04, 0xfc, 0x5c, 0x9c, 0x82, 0x13, 0x2a, 0x64, 0x02, - 0x09, 0x2e, 0xf4, 0x29, 0x14, 0x8e, 0x29, 0x35, 0x53, 0x0e, 0x92, 0x87, 0x44, 0x9e, 0xc0, 0x84, - 0x32, 0xef, 0x5d, 0xbb, 0xdd, 0xc4, 0x1c, 0x4a, 0xfe, 0x9f, 0xc0, 0x1f, 0x2d, 0x77, 0x8e, 0xfb, - 0xf1, 0x54, 0xba, 0x4a, 0x3c, 0x9d, 0x4a, 0x8b, 0xa5, 0xe8, 0x29, 0xe4, 0xa9, 0x36, 0xea, 0xb6, - 0x50, 0x20, 0xb6, 0xb7, 0x5b, 0x41, 0x40, 0x6a, 0x6f, 0xb7, 0x30, 0x83, 0x40, 0x7b, 0x50, 0x64, - 0xd9, 0x87, 0x2d, 0xc1, 0xfc, 0xe8, 0x4b, 0x9a, 0xf5, 0x3f, 0x98, 0x10, 0xec, 0xcb, 0xc6, 0x2e, - 0x8e, 0xfc, 0x5d, 0x98, 0x8e, 0xac, 0x53, 0xf4, 0x39, 0xdc, 0xd6, 0x0c, 0xa5, 0xdb, 0x50, 0x34, - 0x45, 0xef, 0x10, 0xef, 0xd4, 0xfe, 0x5e, 0xda, 0x0e, 0x63, 0x3b, 0xc4, 0x27, 0x56, 0xb9, 0x7f, - 0xf7, 0x16, 0xa6, 0xe1, 0x08, 0xa2, 0xac, 0x00, 0x04, 0x7d, 0x44, 0x55, 0x28, 0xb2, 0x79, 0xe6, - 0xe6, 0x93, 0xc9, 0xc6, 0x24, 0xb3, 0x90, 0x4d, 0x3f, 0x1b, 0xbb, 0xed, 0x68, 0x0d, 0xc0, 0x26, - 0x1d, 0x8b, 0x50, 0x1e, 0x0c, 0x72, 0xd1, 0x1b, 0xc8, 0x96, 0x4f, 0xc1, 0x21, 0x2e, 0xf9, 0x9f, - 0x25, 0x98, 0xde, 0x25, 0xf4, 0x7b, 0x86, 0x75, 0xd2, 0xe4, 0x97, 0xc5, 0x37, 0x10, 0x6c, 0x71, - 0x24, 0xd8, 0xbe, 0x37, 0x64, 0x64, 0x22, 0xd6, 0x65, 0x85, 0x5c, 0xf9, 0xa7, 0x12, 0x2c, 0x45, - 0x38, 0x1f, 0x05, 0x4b, 0x77, 0x1f, 0x8a, 0xa6, 0x61, 0x51, 0x2f, 0x11, 0x8f, 0xa5, 0x90, 0x85, - 0xb1, 0x50, 0x2a, 0x66, 0x30, 0xd8, 0x45, 0x43, 0xdb, 0x90, 0xa3, 0x86, 0x98, 0xaa, 0xe3, 0x61, - 0x12, 0x62, 0x35, 0x40, 0x60, 0xe6, 0xda, 0x06, 0xce, 0x51, 0x83, 0x0d, 0x44, 0x25, 0xc2, 0x15, - 0x0e, 0x3e, 0xd7, 0xd4, 0x03, 0x0c, 0x85, 0x23, 0xcb, 0xe8, 0x5f, 0xb9, 0x0f, 0xfe, 0x40, 0x3c, - 0xb6, 0x8c, 0x3e, 0xe6, 0x58, 0xf2, 0xcf, 0x24, 0x98, 0x8f, 0x70, 0xde, 0x40, 0xe0, 0xff, 0x34, - 0x1a, 0xf8, 0xdf, 0x19, 0xa7, 0x23, 0x19, 0xe1, 0xff, 0x67, 0xb9, 0x58, 0x37, 0x58, 0x87, 0xd1, - 0x11, 0x4c, 0x99, 0x46, 0xb7, 0xf5, 0x0a, 0xee, 0xe9, 0x66, 0x59, 0xde, 0x6c, 0x06, 0x58, 0x38, - 0x0c, 0x8c, 0xce, 0x60, 0x5e, 0x57, 0xfa, 0xc4, 0x36, 0x95, 0x0e, 0x69, 0xbd, 0x82, 0x03, 0x92, - 0xd7, 0xf8, 0x45, 0x40, 0x1c, 0x11, 0x27, 0x95, 0xa0, 0x1d, 0x28, 0xa9, 0x26, 0xaf, 0xe3, 0x44, - 0xed, 0x32, 0x34, 0x8b, 0xba, 0x55, 0x9f, 0x1b, 0xcf, 0xc5, 0x07, 0xf6, 0x30, 0xe4, 0xbf, 0x8d, - 0xcf, 0x06, 0x36, 0xff, 0xd0, 0x13, 0x28, 0xf3, 0x67, 0x17, 0x1d, 0x43, 0xf3, 0x6e, 0x06, 0xd8, - 0xc8, 0x36, 0x45, 0xdb, 0xcb, 0xf3, 0xea, 0xeb, 0x29, 0x87, 0xbe, 0x1e, 0x19, 0xfb, 0xc2, 0x68, - 0x17, 0x0a, 0xe6, 0x97, 0xa9, 0x60, 0x78, 0x92, 0xe3, 0x65, 0x0b, 0xc7, 0x91, 0xff, 0x30, 0x1f, - 0x33, 0x97, 0xa7, 0xba, 0xe7, 0xaf, 0x6c, 0xd4, 0xfd, 0x8a, 0x29, 0x73, 0xe4, 0x0f, 0xa1, 0x24, - 0x32, 0xbc, 0x98, 0xcc, 0x5f, 0x1b, 0x67, 0x32, 0x87, 0xb3, 0x98, 0xbf, 0x61, 0xf1, 0x1a, 0x3d, - 0x60, 0xf4, 0x1d, 0x98, 0x20, 0xae, 0x0a, 0x37, 0x37, 0x7e, 0x38, 0x8e, 0x8a, 0x20, 0xae, 0x06, - 0x85, 0xaa, 0x68, 0x13, 0xa8, 0xe8, 0x1b, 0xcc, 0x5f, 0x8c, 0x97, 0x6d, 0x02, 0xed, 0x4a, 0x81, - 0xa7, 0xab, 0xbb, 0x6e, 0xb7, 0xfd, 0xe6, 0x97, 0xe7, 0x55, 0x08, 0x3e, 0x71, 0x58, 0x42, 0xfe, - 0x57, 0x09, 0xe6, 0xb9, 0x87, 0x3a, 0x8e, 0xa5, 0xd2, 0xc1, 0x8d, 0x25, 0xa6, 0x83, 0x48, 0x62, - 0xfa, 0x60, 0x88, 0x5b, 0x12, 0x16, 0x66, 0x26, 0xa7, 0x9f, 0x4b, 0xf0, 0x5a, 0x82, 0xfb, 0x06, - 0xe2, 0xe2, 0x7e, 0x34, 0x2e, 0xbe, 0x37, 0x6e, 0x87, 0x32, 0x62, 0xe3, 0x5f, 0xdd, 0x4e, 0xe9, - 0x0e, 0x5f, 0x29, 0x6b, 0x00, 0xa6, 0xa5, 0x9e, 0xaa, 0x1a, 0xe9, 0x89, 0xdb, 0xe9, 0x72, 0xe8, - 0x0d, 0x94, 0x4f, 0xc1, 0x21, 0x2e, 0x64, 0xc3, 0x62, 0x97, 0x1c, 0x29, 0x8e, 0x46, 0xd7, 0xbb, - 0xdd, 0x0d, 0xc5, 0x54, 0x0e, 0x55, 0x4d, 0xa5, 0xaa, 0x38, 0x2e, 0x98, 0x6c, 0x7c, 0xe2, 0xde, - 0x1a, 0xa7, 0x71, 0xbc, 0x3c, 0xaf, 0xde, 0x4d, 0xbb, 0x1d, 0xf2, 0x58, 0x06, 0x38, 0x03, 0x1a, - 0x0d, 0xa0, 0x62, 0x91, 0xef, 0x3a, 0xaa, 0x45, 0xba, 0x9b, 0x96, 0x61, 0x46, 0xd4, 0xe6, 0xb9, - 0xda, 0xdf, 0xbc, 0x38, 0xaf, 0x56, 0x70, 0x06, 0xcf, 0x70, 0xc5, 0x99, 0xf0, 0xe8, 0x39, 0x2c, - 0x28, 0xee, 0xd3, 0xb1, 0x88, 0x56, 0x77, 0x95, 0x7c, 0x74, 0x71, 0x5e, 0x5d, 0x58, 0x4f, 0x92, - 0x87, 0x2b, 0x4c, 0x03, 0x45, 0x75, 0x28, 0x9d, 0x1a, 0x9a, 0xd3, 0x27, 0x76, 0xa5, 0xc8, 0xf1, - 0x59, 0x22, 0x28, 0x1d, 0xb8, 0x4d, 0x2f, 0xcf, 0xab, 0x13, 0x8f, 0x5b, 0x7c, 0xf5, 0x79, 0x5c, - 0x6c, 0x43, 0xc9, 0x6a, 0x49, 0xb1, 0xe2, 0xf9, 0x89, 0x71, 0x39, 0x88, 0x5a, 0x4f, 0x03, 0x12, - 0x0e, 0xf3, 0xa1, 0x67, 0x30, 0x79, 0x2c, 0x4e, 0x25, 0xec, 0x4a, 0x69, 0xa4, 0x24, 0x1c, 0x39, - 0xc5, 0x68, 0xcc, 0x0b, 0x15, 0x93, 0x5e, 0xb3, 0x8d, 0x03, 0x44, 0xf4, 0x16, 0x94, 0xf8, 0xc7, - 0xd6, 0x26, 0x3f, 0x8e, 0x2b, 0x07, 0xb1, 0xed, 0xa9, 0xdb, 0x8c, 0x3d, 0xba, 0xc7, 0xba, 0xd5, - 0xdc, 0xe0, 0xc7, 0xc2, 0x31, 0xd6, 0xad, 0xe6, 0x06, 0xf6, 0xe8, 0xe8, 0x73, 0x28, 0xd9, 0x64, - 0x5b, 0xd5, 0x9d, 0xb3, 0x0a, 0x8c, 0x74, 0xa9, 0xdc, 0x7a, 0xc4, 0xb9, 0x63, 0x07, 0x63, 0x81, - 0x06, 0x41, 0xc7, 0x1e, 0x2c, 0x3a, 0x86, 0x49, 0xcb, 0xd1, 0xd7, 0xed, 0x7d, 0x9b, 0x58, 0x95, - 0x29, 0xae, 0x63, 0x58, 0x38, 0xc7, 0x1e, 0x7f, 0x5c, 0x8b, 0xef, 0x21, 0x9f, 0x03, 0x07, 0xe0, - 0xe8, 0x8f, 0x25, 0x40, 0xb6, 0x63, 0x9a, 0x1a, 0xe9, 0x13, 0x9d, 0x2a, 0x1a, 0x3f, 0x8b, 0xb3, - 0x2b, 0xb7, 0xb9, 0xce, 0xdf, 0x1a, 0xd6, 0xaf, 0x84, 0x60, 0x5c, 0xb9, 0x7f, 0xe8, 0x9d, 0x64, - 0xc5, 0x29, 0x7a, 0x99, 0x6b, 0x8f, 0x6c, 0xfe, 0xbb, 0x32, 0x3d, 0x92, 0x6b, 0xd3, 0xcf, 0x1c, - 0x03, 0xd7, 0x0a, 0x3a, 0xf6, 0x60, 0xd1, 0x01, 0x2c, 0x5a, 0x44, 0xe9, 0xee, 0xe9, 0xda, 0x00, - 0x1b, 0x06, 0x7d, 0xac, 0x6a, 0xc4, 0x1e, 0xd8, 0x94, 0xf4, 0x2b, 0x33, 0x7c, 0xd8, 0xfd, 0x47, - 0x19, 0x38, 0x95, 0x0b, 0x67, 0x48, 0xa3, 0x3e, 0x54, 0xbd, 0x90, 0xc1, 0xd6, 0x93, 0x1f, 0xb3, - 0x1e, 0xd9, 0x1d, 0x45, 0x73, 0xef, 0x01, 0x66, 0xb9, 0x82, 0x37, 0x2f, 0xce, 0xab, 0xd5, 0xcd, - 0xcb, 0x59, 0xf1, 0x30, 0x2c, 0xf4, 0x6d, 0xa8, 0x28, 0x59, 0x7a, 0xe6, 0xb8, 0x9e, 0x55, 0xd1, - 0x91, 0x4a, 0xa6, 0x92, 0x4c, 0x04, 0x44, 0x61, 0x4e, 0x89, 0xbe, 0x52, 0xb5, 0x2b, 0xf3, 0x23, - 0x1d, 0x46, 0xc6, 0x1e, 0xb7, 0x06, 0x07, 0x12, 0x31, 0x82, 0x8d, 0x13, 0x1a, 0xf8, 0x13, 0x0a, - 0x71, 0xa0, 0x7e, 0x33, 0x6f, 0x16, 0xc7, 0x7b, 0x42, 0x11, 0x98, 0xf6, 0xca, 0x9e, 0x50, 0x84, - 0x20, 0x2f, 0x3f, 0xc2, 0xfb, 0xaf, 0x1c, 0x2c, 0x04, 0xcc, 0x23, 0x3f, 0xa1, 0x48, 0x11, 0xb9, - 0xb6, 0x27, 0x14, 0xe9, 0x6f, 0x10, 0xf2, 0xd7, 0xfd, 0x06, 0xe1, 0x1a, 0x9e, 0x6e, 0xf0, 0x67, - 0x0d, 0x81, 0xeb, 0xfe, 0xef, 0x3d, 0x6b, 0x08, 0x6c, 0xcb, 0x28, 0xb4, 0xfe, 0x3e, 0x17, 0xee, - 0xc0, 0xff, 0xfb, 0xbb, 0xf5, 0x2f, 0xff, 0xb0, 0x53, 0xfe, 0x79, 0x1e, 0xe6, 0xe2, 0xab, 0x31, - 0x72, 0x05, 0x2b, 0x0d, 0xbd, 0x82, 0x6d, 0xc2, 0x9d, 0x23, 0x47, 0xd3, 0x06, 0xdc, 0x0d, 0xa1, - 0x7b, 0x58, 0xf7, 0x0a, 0xe5, 0x0d, 0x21, 0x79, 0xe7, 0x71, 0x0a, 0x0f, 0x4e, 0x95, 0xcc, 0xb8, - 0x4e, 0xce, 0x5f, 0xe9, 0x3a, 0x39, 0x71, 0xbb, 0x59, 0x18, 0xe3, 0x76, 0x33, 0xf5, 0x6a, 0xb8, - 0x78, 0x85, 0xab, 0xe1, 0xab, 0xdc, 0xe5, 0xa6, 0x04, 0xb1, 0x61, 0x77, 0xb9, 0xf2, 0x1b, 0xb0, - 0x2c, 0xc4, 0x28, 0xbf, 0x66, 0xd5, 0xa9, 0x65, 0x68, 0x1a, 0xb1, 0x36, 0x9d, 0x7e, 0x7f, 0x20, - 0x7f, 0x1d, 0x66, 0xa2, 0x0f, 0x08, 0xdc, 0x91, 0x76, 0xdf, 0x30, 0x88, 0x8b, 0xac, 0xd0, 0x48, - 0xbb, 0xed, 0xd8, 0xe7, 0x90, 0xbf, 0x2f, 0xc1, 0x62, 0xfa, 0x43, 0x41, 0xa4, 0xc1, 0x4c, 0x5f, - 0x39, 0x0b, 0xbf, 0xaa, 0x94, 0xae, 0x78, 0xc4, 0xc0, 0x6f, 0x8e, 0x77, 0x22, 0x58, 0x38, 0x86, - 0x2d, 0xff, 0x4a, 0x82, 0xa5, 0x8c, 0x3b, 0xdb, 0x9b, 0xb5, 0x04, 0x7d, 0x06, 0xe5, 0xbe, 0x72, - 0xd6, 0x72, 0xac, 0x1e, 0xb9, 0xf2, 0xa1, 0x0a, 0x8f, 0x18, 0x3b, 0x02, 0x05, 0xfb, 0x78, 0xf2, - 0x8f, 0x24, 0xa8, 0x64, 0x95, 0xb7, 0xe8, 0x61, 0xe4, 0x76, 0xf9, 0xab, 0xb1, 0xdb, 0xe5, 0xf9, - 0x84, 0xdc, 0x35, 0xdd, 0x2d, 0xff, 0x9d, 0x04, 0x8b, 0xe9, 0x65, 0x3e, 0x7a, 0x3f, 0x62, 0x61, - 0x35, 0x66, 0xe1, 0x6c, 0x4c, 0x4a, 0xd8, 0xf7, 0x1d, 0x98, 0x11, 0x9b, 0x01, 0x01, 0x23, 0xbc, - 0x2a, 0xa7, 0xc5, 0x4a, 0x01, 0xe1, 0x15, 0xbf, 0x7c, 0xbc, 0xa2, 0x6d, 0x38, 0x86, 0x26, 0xff, - 0x51, 0x0e, 0x8a, 0xad, 0x8e, 0xa2, 0x91, 0x1b, 0x28, 0xb3, 0xbe, 0x19, 0x29, 0xb3, 0x86, 0xfd, - 0x03, 0x82, 0x5b, 0x95, 0x59, 0x61, 0xe1, 0x58, 0x85, 0xf5, 0xf6, 0x48, 0x68, 0x97, 0x17, 0x57, - 0xbf, 0x01, 0x93, 0xbe, 0xd2, 0xf1, 0x62, 0xbe, 0xfc, 0xd7, 0x39, 0x98, 0x0a, 0xa9, 0x18, 0x33, - 0x63, 0x1c, 0x45, 0x32, 0xed, 0x28, 0xff, 0x85, 0x0a, 0xe9, 0xaa, 0x79, 0xb9, 0xd5, 0x7d, 0x28, - 0x18, 0x3c, 0x0d, 0x4b, 0xa6, 0xdc, 0xaf, 0xc3, 0x0c, 0xe5, 0xff, 0x15, 0xf2, 0x8f, 0x22, 0xf3, - 0x7c, 0x2e, 0xfa, 0xcf, 0x4b, 0xdb, 0x11, 0x2a, 0x8e, 0x71, 0x2f, 0x7f, 0x02, 0xd3, 0x11, 0x65, - 0x63, 0xbd, 0xf3, 0xfb, 0x07, 0x09, 0xbe, 0x3a, 0x74, 0xa3, 0x88, 0x1a, 0x91, 0x45, 0x52, 0x8b, - 0x2d, 0x92, 0x95, 0x6c, 0x80, 0x6b, 0x7c, 0x2f, 0xf2, 0xfd, 0x1c, 0xa0, 0xf6, 0xb1, 0x6a, 0x75, - 0x9b, 0x8a, 0x45, 0x07, 0x58, 0xfc, 0xe1, 0xeb, 0x06, 0x16, 0xcc, 0x43, 0x98, 0xea, 0x12, 0xbb, - 0x63, 0xa9, 0xdc, 0x39, 0xa2, 0x3a, 0xf7, 0x0f, 0x53, 0x36, 0x03, 0x12, 0x0e, 0xf3, 0xa1, 0x6f, - 0x41, 0xf9, 0xd4, 0xfd, 0x23, 0xa2, 0x77, 0x40, 0x3b, 0xac, 0x90, 0x0c, 0xfe, 0xba, 0x18, 0xcc, - 0x1f, 0xd1, 0x60, 0x63, 0x1f, 0x4c, 0xfe, 0xa1, 0x04, 0x8b, 0x49, 0x47, 0x6c, 0x32, 0x53, 0xaf, - 0xdf, 0x19, 0x6f, 0x40, 0x81, 0xa3, 0x33, 0x2f, 0xdc, 0x76, 0x0f, 0xde, 0x99, 0x66, 0xcc, 0x5b, - 0xe5, 0x7f, 0x97, 0x60, 0x39, 0xdd, 0xb4, 0x1b, 0x28, 0xdb, 0x3f, 0x8b, 0x96, 0xed, 0xc3, 0xce, - 0x2a, 0xd2, 0xed, 0xcc, 0x28, 0xe1, 0xff, 0x2d, 0xd5, 0xe7, 0x37, 0xd0, 0xa9, 0x83, 0x68, 0xa7, - 0x1e, 0x8c, 0xdd, 0xa9, 0xf4, 0x0e, 0x35, 0xde, 0x7d, 0xf1, 0xc5, 0xca, 0xad, 0x5f, 0x7c, 0xb1, - 0x72, 0xeb, 0x97, 0x5f, 0xac, 0xdc, 0xfa, 0x83, 0x8b, 0x15, 0xe9, 0xc5, 0xc5, 0x8a, 0xf4, 0x8b, - 0x8b, 0x15, 0xe9, 0x97, 0x17, 0x2b, 0xd2, 0x7f, 0x5e, 0xac, 0x48, 0x7f, 0xf6, 0xab, 0x95, 0x5b, - 0x9f, 0x95, 0x04, 0xee, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x57, 0xe8, 0x50, 0x1c, 0x48, 0x3d, - 0x00, 0x00, + 0x07, 0x43, 0x62, 0x0c, 0x0e, 0xcb, 0x04, 0xc1, 0x78, 0xfe, 0xfc, 0xac, 0x3a, 0x1d, 0xa1, 0xe1, + 0x28, 0xbc, 0xfc, 0x79, 0x0e, 0x60, 0x83, 0x98, 0x9a, 0x31, 0xe8, 0x13, 0xfd, 0x3a, 0x12, 0xee, + 0x6e, 0x24, 0xe1, 0xbe, 0x3b, 0x2c, 0x76, 0xfa, 0xa6, 0x65, 0x66, 0xdc, 0xef, 0xc4, 0x32, 0x6e, + 0x7d, 0x74, 0xc8, 0x8b, 0x53, 0xee, 0x7f, 0xe6, 0x61, 0x21, 0x60, 0x5e, 0x37, 0xf4, 0xae, 0xca, + 0xd7, 0xc7, 0x27, 0x91, 0x31, 0xfe, 0x8d, 0xd8, 0x18, 0x2f, 0xa5, 0x88, 0x84, 0xc6, 0x77, 0xcb, + 0xb7, 0x36, 0xc7, 0xc5, 0x3f, 0x88, 0x2a, 0x7f, 0x79, 0x56, 0x4d, 0xd9, 0xf3, 0xd4, 0x7c, 0xa4, + 0xa8, 0x89, 0xe8, 0x2e, 0x4c, 0x58, 0x44, 0xb1, 0x0d, 0x9d, 0x07, 0x8a, 0xc9, 0xa0, 0x2b, 0x98, + 0xb7, 0x62, 0x41, 0x45, 0x6f, 0x41, 0xa9, 0x4f, 0x6c, 0x5b, 0xe9, 0x11, 0x1e, 0x13, 0x26, 0x1b, + 0xb3, 0x82, 0xb1, 0xb4, 0xed, 0x36, 0x63, 0x8f, 0x8e, 0x9e, 0xc3, 0x8c, 0xa6, 0xd8, 0x62, 0x82, + 0xb6, 0xd5, 0x3e, 0xe1, 0xab, 0x7e, 0x6a, 0xf5, 0xed, 0xd1, 0xe6, 0x01, 0x93, 0x08, 0x32, 0xdb, + 0x56, 0x04, 0x09, 0xc7, 0x90, 0xd1, 0x09, 0x20, 0xd6, 0xd2, 0xb6, 0x14, 0xdd, 0x76, 0x1d, 0xc5, + 0xf4, 0x95, 0xc6, 0xd6, 0xe7, 0x47, 0xb8, 0xad, 0x04, 0x1a, 0x4e, 0xd1, 0x20, 0xff, 0x4c, 0x82, + 0x99, 0x60, 0x98, 0xae, 0xa1, 0x9a, 0xda, 0x89, 0x56, 0x53, 0x6f, 0x8d, 0x3c, 0x45, 0x33, 0xca, + 0xa9, 0xff, 0xc9, 0x01, 0x0a, 0x98, 0xd8, 0x02, 0x3f, 0x50, 0x3a, 0xc7, 0x23, 0xec, 0x15, 0x7e, + 0x24, 0x01, 0x12, 0xe1, 0x79, 0x4d, 0xd7, 0x0d, 0xca, 0x23, 0xbe, 0x67, 0xd6, 0xe6, 0xc8, 0x66, + 0x79, 0x1a, 0x6b, 0x7b, 0x09, 0xac, 0x87, 0x3a, 0xb5, 0x06, 0xc1, 0x88, 0x24, 0x19, 0x70, 0x8a, + 0x01, 0x48, 0x01, 0xb0, 0x04, 0x66, 0xdb, 0x10, 0x0b, 0xf9, 0xdd, 0x11, 0x62, 0x1e, 0x13, 0x58, + 0x37, 0xf4, 0x43, 0xb5, 0x17, 0x84, 0x1d, 0xec, 0x03, 0xe1, 0x10, 0xe8, 0xf2, 0x43, 0x58, 0xca, + 0xb0, 0x16, 0xcd, 0x41, 0xfe, 0x98, 0x0c, 0x5c, 0xb7, 0x61, 0xf6, 0x13, 0xdd, 0x0a, 0xef, 0xa9, + 0x26, 0xc5, 0x76, 0xe8, 0xe3, 0xdc, 0x47, 0x92, 0xfc, 0xd3, 0x62, 0x78, 0xee, 0xf0, 0x52, 0xf6, + 0x1e, 0x94, 0x2d, 0x62, 0x6a, 0x6a, 0x47, 0xb1, 0x45, 0x85, 0xc2, 0xab, 0x52, 0x2c, 0xda, 0xb0, + 0x4f, 0x8d, 0x14, 0xbd, 0xb9, 0xab, 0x2d, 0x7a, 0xf3, 0xaf, 0xa6, 0xe8, 0xfd, 0x03, 0x28, 0xdb, + 0x5e, 0xb9, 0x5b, 0xe0, 0x90, 0xf7, 0xc7, 0x88, 0xaf, 0xa2, 0xd2, 0xf5, 0x15, 0xf8, 0x35, 0xae, + 0x0f, 0x9a, 0x56, 0xdd, 0x16, 0xc7, 0xac, 0x6e, 0x5f, 0x69, 0x45, 0xca, 0x62, 0xaa, 0xa9, 0x38, + 0x36, 0xe9, 0xf2, 0x40, 0x54, 0x0e, 0x62, 0x6a, 0x93, 0xb7, 0x62, 0x41, 0x45, 0xcf, 0x22, 0x53, + 0xb6, 0x7c, 0x99, 0x29, 0x3b, 0x93, 0x3d, 0x5d, 0xd1, 0x1e, 0x2c, 0x99, 0x96, 0xd1, 0xb3, 0x88, + 0x6d, 0x6f, 0x10, 0xa5, 0xab, 0xa9, 0x3a, 0xf1, 0xfc, 0xe3, 0x96, 0x2a, 0xaf, 0x9f, 0x9f, 0x55, + 0x97, 0x9a, 0xe9, 0x2c, 0x38, 0x4b, 0x56, 0x7e, 0x51, 0x80, 0xb9, 0x78, 0x06, 0xcc, 0xa8, 0x1e, + 0xa5, 0x4b, 0x55, 0x8f, 0xef, 0x84, 0x16, 0x83, 0x5b, 0x5a, 0xfb, 0xa3, 0x9f, 0xb2, 0x20, 0xd6, + 0x60, 0x56, 0x44, 0x03, 0x8f, 0x28, 0xea, 0x67, 0x7f, 0xf4, 0xf7, 0xa2, 0x64, 0x1c, 0xe7, 0x67, + 0x35, 0x61, 0x50, 0xea, 0x79, 0x20, 0x85, 0x68, 0x4d, 0xb8, 0x16, 0x67, 0xc0, 0x49, 0x19, 0xb4, + 0x0d, 0x0b, 0x8e, 0x9e, 0x84, 0x72, 0x67, 0xe3, 0xeb, 0x02, 0x6a, 0x61, 0x2f, 0xc9, 0x82, 0xd3, + 0xe4, 0xd0, 0x21, 0x40, 0xc7, 0x4b, 0xdb, 0x76, 0x65, 0x82, 0x47, 0xd8, 0xd5, 0x91, 0xd7, 0x8e, + 0x9f, 0xf1, 0x83, 0xb8, 0xe6, 0x37, 0xd9, 0x38, 0x84, 0x8c, 0x3e, 0x81, 0x69, 0x8b, 0x6f, 0x08, + 0x3c, 0x83, 0xdd, 0xa2, 0xfa, 0x35, 0x21, 0x36, 0x8d, 0xc3, 0x44, 0x1c, 0xe5, 0x4d, 0xa9, 0x83, + 0xcb, 0x23, 0xd7, 0xc1, 0xff, 0x2c, 0x85, 0x93, 0x90, 0x5f, 0x02, 0x7f, 0x1c, 0x29, 0x8f, 0xee, + 0xc6, 0xca, 0xa3, 0xc5, 0xa4, 0x44, 0xa8, 0x3a, 0x32, 0xd2, 0xab, 0xdf, 0x0f, 0xc7, 0xaa, 0x7e, + 0x83, 0xe4, 0x39, 0xbc, 0xfc, 0xfd, 0xb1, 0x04, 0x8b, 0x8f, 0x5a, 0x8f, 0x2d, 0xc3, 0x31, 0x3d, + 0x73, 0x76, 0x4d, 0xd7, 0xaf, 0xdf, 0x80, 0x82, 0xe5, 0x68, 0x5e, 0x3f, 0xde, 0xf4, 0xfa, 0x81, + 0x1d, 0x8d, 0xf5, 0x63, 0x21, 0x26, 0xe5, 0x76, 0x82, 0x09, 0xa0, 0x1d, 0x98, 0xb0, 0x14, 0xbd, + 0x47, 0xbc, 0xb4, 0x7a, 0x77, 0x88, 0xf5, 0x9b, 0x1b, 0x98, 0xb1, 0x87, 0x8a, 0x37, 0x2e, 0x8d, + 0x05, 0x8a, 0xfc, 0x67, 0x12, 0xcc, 0x3e, 0x69, 0xb7, 0x9b, 0x9b, 0x3a, 0x5f, 0xd1, 0xfc, 0xf0, + 0xf5, 0x0e, 0x14, 0x4c, 0x85, 0x1e, 0xc5, 0x33, 0x3d, 0xa3, 0x61, 0x4e, 0x41, 0xdf, 0x85, 0x12, + 0x8b, 0x24, 0x44, 0xef, 0x8e, 0x58, 0x6a, 0x0b, 0xf8, 0x86, 0x2b, 0x14, 0x54, 0x88, 0xa2, 0x01, + 0x7b, 0x70, 0xf2, 0x31, 0xdc, 0x0a, 0x99, 0xc3, 0xfc, 0xc1, 0xcf, 0x0c, 0x51, 0x0b, 0x8a, 0x4c, + 0xb3, 0x77, 0x24, 0x38, 0xec, 0xe4, 0x2b, 0xd6, 0xa5, 0xa0, 0xd2, 0x61, 0x5f, 0x36, 0x76, 0xb1, + 0xe4, 0x6d, 0x98, 0xe6, 0x27, 0xce, 0x86, 0x45, 0xb9, 0x5b, 0xd0, 0x6d, 0xc8, 0xf7, 0x55, 0x5d, + 0xe4, 0xd9, 0x29, 0x21, 0x93, 0x67, 0x39, 0x82, 0xb5, 0x73, 0xb2, 0x72, 0x2a, 0x22, 0x4f, 0x40, + 0x56, 0x4e, 0x31, 0x6b, 0x97, 0x1f, 0x43, 0x49, 0xb8, 0x3b, 0x0c, 0x94, 0xbf, 0x18, 0x28, 0x9f, + 0x02, 0xb4, 0x0b, 0xa5, 0xcd, 0x66, 0x43, 0x33, 0xdc, 0xaa, 0xab, 0xa3, 0x76, 0xad, 0xf8, 0x58, + 0xac, 0x6f, 0x6e, 0x60, 0xcc, 0x29, 0x48, 0x86, 0x09, 0x72, 0xda, 0x21, 0x26, 0xe5, 0x33, 0x62, + 0xb2, 0x01, 0x6c, 0x94, 0x1f, 0xf2, 0x16, 0x2c, 0x28, 0xf2, 0x9f, 0xe7, 0xa0, 0x24, 0xdc, 0x71, + 0x0d, 0xbb, 0xb0, 0xad, 0xc8, 0x2e, 0xec, 0xed, 0xd1, 0xa6, 0x46, 0xe6, 0x16, 0xac, 0x1d, 0xdb, + 0x82, 0xbd, 0x33, 0x22, 0xde, 0xc5, 0xfb, 0xaf, 0x9f, 0x48, 0x30, 0x13, 0x9d, 0x94, 0xe8, 0x01, + 0x4c, 0xb1, 0x84, 0xa3, 0x76, 0xc8, 0x4e, 0x50, 0xe7, 0xfa, 0xa7, 0x23, 0xad, 0x80, 0x84, 0xc3, + 0x7c, 0xa8, 0xe7, 0x8b, 0xb1, 0x79, 0x24, 0x3a, 0x9d, 0xed, 0x52, 0x87, 0xaa, 0x5a, 0xcd, 0xbd, + 0x38, 0xa9, 0x6d, 0xea, 0x74, 0xd7, 0x6a, 0x51, 0x4b, 0xd5, 0x7b, 0x09, 0x45, 0x7c, 0x52, 0x86, + 0x91, 0xe5, 0x7f, 0x92, 0x60, 0x4a, 0x98, 0x7c, 0x0d, 0xbb, 0x8a, 0xdf, 0x8d, 0xee, 0x2a, 0xee, + 0x8e, 0xb8, 0xc0, 0xd3, 0xb7, 0x14, 0x7f, 0x1b, 0x98, 0xce, 0x96, 0x34, 0x9b, 0xd5, 0x47, 0x86, + 0x4d, 0xe3, 0xb3, 0x9a, 0x2d, 0x46, 0xcc, 0x29, 0xc8, 0x81, 0x39, 0x35, 0x16, 0x03, 0x84, 0x6b, + 0xeb, 0xa3, 0x59, 0xe2, 0x8b, 0x35, 0x2a, 0x02, 0x7e, 0x2e, 0x4e, 0xc1, 0x09, 0x15, 0x32, 0x81, + 0x04, 0x17, 0xfa, 0x14, 0x0a, 0x47, 0x94, 0x9a, 0x29, 0x07, 0xc9, 0x43, 0x22, 0x4f, 0x60, 0x42, + 0x99, 0xf7, 0xae, 0xdd, 0x6e, 0x62, 0x0e, 0x25, 0xff, 0x6f, 0xe0, 0x8f, 0x96, 0x3b, 0xc7, 0xfd, + 0x78, 0x2a, 0x5d, 0x26, 0x9e, 0x4e, 0xa5, 0xc5, 0x52, 0xf4, 0x04, 0xf2, 0x54, 0x1b, 0x75, 0x5b, + 0x28, 0x10, 0xdb, 0x5b, 0xad, 0x20, 0x20, 0xb5, 0xb7, 0x5a, 0x98, 0x41, 0xa0, 0x5d, 0x28, 0xb2, + 0xec, 0xc3, 0x96, 0x60, 0x7e, 0xf4, 0x25, 0xcd, 0xfa, 0x1f, 0x4c, 0x08, 0xf6, 0x65, 0x63, 0x17, + 0x47, 0xfe, 0x3e, 0x4c, 0x47, 0xd6, 0x29, 0xfa, 0x0c, 0x6e, 0x6a, 0x86, 0xd2, 0x6d, 0x28, 0x9a, + 0xa2, 0x77, 0x88, 0x77, 0x6a, 0x7f, 0x37, 0x6d, 0x87, 0xb1, 0x15, 0xe2, 0x13, 0xab, 0xdc, 0xbf, + 0x7b, 0x0b, 0xd3, 0x70, 0x04, 0x51, 0x56, 0x00, 0x82, 0x3e, 0xa2, 0x2a, 0x14, 0xd9, 0x3c, 0x73, + 0xf3, 0xc9, 0x64, 0x63, 0x92, 0x59, 0xc8, 0xa6, 0x9f, 0x8d, 0xdd, 0x76, 0xb4, 0x0a, 0x60, 0x93, + 0x8e, 0x45, 0x28, 0x0f, 0x06, 0xb9, 0xe8, 0x0d, 0x64, 0xcb, 0xa7, 0xe0, 0x10, 0x97, 0xfc, 0x2f, + 0x12, 0x4c, 0xef, 0x10, 0xfa, 0x03, 0xc3, 0x3a, 0x6e, 0xf2, 0xcb, 0xe2, 0x6b, 0x08, 0xb6, 0x38, + 0x12, 0x6c, 0xdf, 0x1b, 0x32, 0x32, 0x11, 0xeb, 0xb2, 0x42, 0xae, 0xfc, 0x33, 0x09, 0x96, 0x22, + 0x9c, 0x0f, 0x83, 0xa5, 0xbb, 0x07, 0x45, 0xd3, 0xb0, 0xa8, 0x97, 0x88, 0xc7, 0x52, 0xc8, 0xc2, + 0x58, 0x28, 0x15, 0x33, 0x18, 0xec, 0xa2, 0xa1, 0x2d, 0xc8, 0x51, 0x43, 0x4c, 0xd5, 0xf1, 0x30, + 0x09, 0xb1, 0x1a, 0x20, 0x30, 0x73, 0x6d, 0x03, 0xe7, 0xa8, 0xc1, 0x06, 0xa2, 0x12, 0xe1, 0x0a, + 0x07, 0x9f, 0x2b, 0xea, 0x01, 0x86, 0xc2, 0xa1, 0x65, 0xf4, 0x2f, 0xdd, 0x07, 0x7f, 0x20, 0x1e, + 0x59, 0x46, 0x1f, 0x73, 0x2c, 0xf9, 0xe7, 0x12, 0xcc, 0x47, 0x38, 0xaf, 0x21, 0xf0, 0x7f, 0x1a, + 0x0d, 0xfc, 0xef, 0x8c, 0xd3, 0x91, 0x8c, 0xf0, 0xff, 0xf3, 0x5c, 0xac, 0x1b, 0xac, 0xc3, 0xe8, + 0x10, 0xa6, 0x4c, 0xa3, 0xdb, 0x7a, 0x05, 0xf7, 0x74, 0xb3, 0x2c, 0x6f, 0x36, 0x03, 0x2c, 0x1c, + 0x06, 0x46, 0xa7, 0x30, 0xaf, 0x2b, 0x7d, 0x62, 0x9b, 0x4a, 0x87, 0xb4, 0x5e, 0xc1, 0x01, 0xc9, + 0x6b, 0xfc, 0x22, 0x20, 0x8e, 0x88, 0x93, 0x4a, 0xd0, 0x36, 0x94, 0x54, 0x93, 0xd7, 0x71, 0xa2, + 0x76, 0x19, 0x9a, 0x45, 0xdd, 0xaa, 0xcf, 0x8d, 0xe7, 0xe2, 0x03, 0x7b, 0x18, 0xf2, 0xdf, 0xc5, + 0x67, 0x03, 0x9b, 0x7f, 0xe8, 0x31, 0x94, 0xf9, 0xb3, 0x8b, 0x8e, 0xa1, 0x79, 0x37, 0x03, 0x6c, + 0x64, 0x9b, 0xa2, 0xed, 0xe5, 0x59, 0xf5, 0xf5, 0x94, 0x43, 0x5f, 0x8f, 0x8c, 0x7d, 0x61, 0xb4, + 0x03, 0x05, 0xf3, 0xab, 0x54, 0x30, 0x3c, 0xc9, 0xf1, 0xb2, 0x85, 0xe3, 0xc8, 0x7f, 0x9c, 0x8f, + 0x99, 0xcb, 0x53, 0xdd, 0xf3, 0x57, 0x36, 0xea, 0x7e, 0xc5, 0x94, 0x39, 0xf2, 0x07, 0x50, 0x12, + 0x19, 0x5e, 0x4c, 0xe6, 0x6f, 0x8c, 0x33, 0x99, 0xc3, 0x59, 0xcc, 0xdf, 0xb0, 0x78, 0x8d, 0x1e, + 0x30, 0xfa, 0x1e, 0x4c, 0x10, 0x57, 0x85, 0x9b, 0x1b, 0x3f, 0x1c, 0x47, 0x45, 0x10, 0x57, 0x83, + 0x42, 0x55, 0xb4, 0x09, 0x54, 0xf4, 0x2d, 0xe6, 0x2f, 0xc6, 0xcb, 0x36, 0x81, 0x76, 0xa5, 0xc0, + 0xd3, 0xd5, 0x6d, 0xb7, 0xdb, 0x7e, 0xf3, 0xcb, 0xb3, 0x2a, 0x04, 0x9f, 0x38, 0x2c, 0x21, 0xff, + 0x9b, 0x04, 0xf3, 0xdc, 0x43, 0x1d, 0xc7, 0x52, 0xe9, 0xe0, 0xda, 0x12, 0xd3, 0x7e, 0x24, 0x31, + 0x7d, 0x30, 0xc4, 0x2d, 0x09, 0x0b, 0x33, 0x93, 0xd3, 0x2f, 0x24, 0x78, 0x2d, 0xc1, 0x7d, 0x0d, + 0x71, 0x71, 0x2f, 0x1a, 0x17, 0xdf, 0x1b, 0xb7, 0x43, 0x19, 0xb1, 0xf1, 0xf3, 0x9b, 0x29, 0xdd, + 0xe1, 0x2b, 0x65, 0x15, 0xc0, 0xb4, 0xd4, 0x13, 0x55, 0x23, 0x3d, 0x71, 0x3b, 0x5d, 0x0e, 0xbd, + 0x81, 0xf2, 0x29, 0x38, 0xc4, 0x85, 0x6c, 0x58, 0xec, 0x92, 0x43, 0xc5, 0xd1, 0xe8, 0x5a, 0xb7, + 0xbb, 0xae, 0x98, 0xca, 0x81, 0xaa, 0xa9, 0x54, 0x15, 0xc7, 0x05, 0x93, 0x8d, 0x4f, 0xdc, 0x5b, + 0xe3, 0x34, 0x8e, 0x97, 0x67, 0xd5, 0xdb, 0x69, 0xb7, 0x43, 0x1e, 0xcb, 0x00, 0x67, 0x40, 0xa3, + 0x01, 0x54, 0x2c, 0xf2, 0x7d, 0x47, 0xb5, 0x48, 0x77, 0xc3, 0x32, 0xcc, 0x88, 0xda, 0x3c, 0x57, + 0xfb, 0xdb, 0xe7, 0x67, 0xd5, 0x0a, 0xce, 0xe0, 0x19, 0xae, 0x38, 0x13, 0x1e, 0x3d, 0x87, 0x05, + 0xc5, 0x7d, 0x3a, 0x16, 0xd1, 0xea, 0xae, 0x92, 0x8f, 0xce, 0xcf, 0xaa, 0x0b, 0x6b, 0x49, 0xf2, + 0x70, 0x85, 0x69, 0xa0, 0xa8, 0x0e, 0xa5, 0x13, 0x43, 0x73, 0xfa, 0xc4, 0xae, 0x14, 0x39, 0x3e, + 0x4b, 0x04, 0xa5, 0x7d, 0xb7, 0xe9, 0xe5, 0x59, 0x75, 0xe2, 0x51, 0x8b, 0xaf, 0x3e, 0x8f, 0x8b, + 0x6d, 0x28, 0x59, 0x2d, 0x29, 0x56, 0x3c, 0x3f, 0x31, 0x2e, 0x07, 0x51, 0xeb, 0x49, 0x40, 0xc2, + 0x61, 0x3e, 0xf4, 0x0c, 0x26, 0x8f, 0xc4, 0xa9, 0x84, 0x5d, 0x29, 0x8d, 0x94, 0x84, 0x23, 0xa7, + 0x18, 0x8d, 0x79, 0xa1, 0x62, 0xd2, 0x6b, 0xb6, 0x71, 0x80, 0x88, 0xde, 0x82, 0x12, 0xff, 0xd8, + 0xdc, 0xe0, 0xc7, 0x71, 0xe5, 0x20, 0xb6, 0x3d, 0x71, 0x9b, 0xb1, 0x47, 0xf7, 0x58, 0x37, 0x9b, + 0xeb, 0xfc, 0x58, 0x38, 0xc6, 0xba, 0xd9, 0x5c, 0xc7, 0x1e, 0x1d, 0x7d, 0x06, 0x25, 0x9b, 0x6c, + 0xa9, 0xba, 0x73, 0x5a, 0x81, 0x91, 0x2e, 0x95, 0x5b, 0x0f, 0x39, 0x77, 0xec, 0x60, 0x2c, 0xd0, + 0x20, 0xe8, 0xd8, 0x83, 0x45, 0x47, 0x30, 0x69, 0x39, 0xfa, 0x9a, 0xbd, 0x67, 0x13, 0xab, 0x32, + 0xc5, 0x75, 0x0c, 0x0b, 0xe7, 0xd8, 0xe3, 0x8f, 0x6b, 0xf1, 0x3d, 0xe4, 0x73, 0xe0, 0x00, 0x1c, + 0xfd, 0xa9, 0x04, 0xc8, 0x76, 0x4c, 0x53, 0x23, 0x7d, 0xa2, 0x53, 0x45, 0xe3, 0x67, 0x71, 0x76, + 0xe5, 0x26, 0xd7, 0xf9, 0x3b, 0xc3, 0xfa, 0x95, 0x10, 0x8c, 0x2b, 0xf7, 0x0f, 0xbd, 0x93, 0xac, + 0x38, 0x45, 0x2f, 0x73, 0xed, 0xa1, 0xcd, 0x7f, 0x57, 0xa6, 0x47, 0x72, 0x6d, 0xfa, 0x99, 0x63, + 0xe0, 0x5a, 0x41, 0xc7, 0x1e, 0x2c, 0xda, 0x87, 0x45, 0x8b, 0x28, 0xdd, 0x5d, 0x5d, 0x1b, 0x60, + 0xc3, 0xa0, 0x8f, 0x54, 0x8d, 0xd8, 0x03, 0x9b, 0x92, 0x7e, 0x65, 0x86, 0x0f, 0xbb, 0xff, 0x28, + 0x03, 0xa7, 0x72, 0xe1, 0x0c, 0x69, 0xd4, 0x87, 0xaa, 0x17, 0x32, 0xd8, 0x7a, 0xf2, 0x63, 0xd6, + 0x43, 0xbb, 0xa3, 0x68, 0xee, 0x3d, 0xc0, 0x2c, 0x57, 0xf0, 0xe6, 0xf9, 0x59, 0xb5, 0xba, 0x71, + 0x31, 0x2b, 0x1e, 0x86, 0x85, 0xbe, 0x0b, 0x15, 0x25, 0x4b, 0xcf, 0x1c, 0xd7, 0xf3, 0x06, 0x8b, + 0x43, 0x99, 0x0a, 0x32, 0xa5, 0x11, 0x85, 0x39, 0x25, 0xfa, 0x42, 0xd5, 0xae, 0xcc, 0x8f, 0x74, + 0x10, 0x19, 0x7b, 0xd8, 0x1a, 0x1c, 0x46, 0xc4, 0x08, 0x36, 0x4e, 0x68, 0xe0, 0xcf, 0x27, 0xc4, + 0x61, 0xfa, 0xf5, 0xbc, 0x57, 0x1c, 0xef, 0xf9, 0x44, 0x60, 0xda, 0x2b, 0x7b, 0x3e, 0x11, 0x82, + 0xbc, 0xf8, 0xf8, 0xee, 0xbf, 0x73, 0xb0, 0x10, 0x30, 0x8f, 0xfc, 0x7c, 0x22, 0x45, 0xe4, 0xca, + 0x9e, 0x4f, 0xa4, 0xbf, 0x3f, 0xc8, 0x5f, 0xf5, 0xfb, 0x83, 0x2b, 0x78, 0xb6, 0xc1, 0x9f, 0x34, + 0x04, 0xae, 0xfb, 0xff, 0xf7, 0xa4, 0x21, 0xb0, 0x2d, 0xa3, 0xc8, 0xfa, 0x87, 0x5c, 0xb8, 0x03, + 0xbf, 0xf6, 0xf7, 0xea, 0x5f, 0xfd, 0x51, 0xa7, 0xfc, 0x8b, 0x3c, 0xcc, 0xc5, 0x57, 0x63, 0xe4, + 0xfa, 0x55, 0x1a, 0x7a, 0xfd, 0xda, 0x84, 0x5b, 0x87, 0x8e, 0xa6, 0x0d, 0xb8, 0x1b, 0x42, 0x77, + 0xb0, 0xee, 0xf5, 0xc9, 0x1b, 0x42, 0xf2, 0xd6, 0xa3, 0x14, 0x1e, 0x9c, 0x2a, 0x99, 0x71, 0x95, + 0x9c, 0xbf, 0xd4, 0x55, 0x72, 0xe2, 0x66, 0xb3, 0x30, 0xc6, 0xcd, 0x66, 0xea, 0xb5, 0x70, 0xf1, + 0x12, 0xd7, 0xc2, 0x97, 0xb9, 0xc7, 0x4d, 0x09, 0x62, 0xc3, 0xee, 0x71, 0xe5, 0x37, 0x60, 0x59, + 0x88, 0x51, 0x7e, 0xc5, 0xaa, 0x53, 0xcb, 0xd0, 0x34, 0x62, 0x6d, 0x38, 0xfd, 0xfe, 0x40, 0xfe, + 0x26, 0xcc, 0x44, 0x1f, 0x0f, 0xb8, 0x23, 0xed, 0xbe, 0x5f, 0x10, 0x97, 0x58, 0xa1, 0x91, 0x76, + 0xdb, 0xb1, 0xcf, 0x21, 0xff, 0x50, 0x82, 0xc5, 0xf4, 0x47, 0x82, 0x48, 0x83, 0x99, 0xbe, 0x72, + 0x1a, 0x7e, 0x51, 0x29, 0x5d, 0xf2, 0x78, 0x81, 0xdf, 0x1a, 0x6f, 0x47, 0xb0, 0x70, 0x0c, 0x5b, + 0xfe, 0x52, 0x82, 0xa5, 0x8c, 0xfb, 0xda, 0xeb, 0xb5, 0x04, 0x3d, 0x85, 0x72, 0x5f, 0x39, 0x6d, + 0x39, 0x56, 0x8f, 0x5c, 0xfa, 0x40, 0x85, 0x47, 0x8c, 0x6d, 0x81, 0x82, 0x7d, 0x3c, 0xf9, 0xc7, + 0x12, 0x54, 0xb2, 0x4a, 0x5b, 0xf4, 0x20, 0x72, 0xb3, 0xfc, 0xf5, 0xd8, 0xcd, 0xf2, 0x7c, 0x42, + 0xee, 0x8a, 0xee, 0x95, 0xff, 0x5e, 0x82, 0xc5, 0xf4, 0x12, 0x1f, 0xbd, 0x1f, 0xb1, 0xb0, 0x1a, + 0xb3, 0x70, 0x36, 0x26, 0x25, 0xec, 0xfb, 0x1e, 0xcc, 0x88, 0x8d, 0x80, 0x80, 0x11, 0x5e, 0x95, + 0xd3, 0x62, 0xa5, 0x80, 0xf0, 0x0a, 0x5f, 0x3e, 0x5e, 0xd1, 0x36, 0x1c, 0x43, 0x93, 0xff, 0x24, + 0x07, 0xc5, 0x56, 0x47, 0xd1, 0xc8, 0x35, 0x94, 0x59, 0xdf, 0x8e, 0x94, 0x59, 0xc3, 0xfe, 0xfd, + 0xc0, 0xad, 0xca, 0xac, 0xb0, 0x70, 0xac, 0xc2, 0x7a, 0x7b, 0x24, 0xb4, 0x8b, 0x8b, 0xab, 0xdf, + 0x82, 0x49, 0x5f, 0xe9, 0x78, 0x31, 0x5f, 0xfe, 0x9b, 0x1c, 0x4c, 0x85, 0x54, 0x8c, 0x99, 0x31, + 0x0e, 0x23, 0x99, 0x76, 0x94, 0xff, 0x41, 0x85, 0x74, 0xd5, 0xbc, 0xdc, 0xea, 0x3e, 0x12, 0x0c, + 0x9e, 0x85, 0x25, 0x53, 0xee, 0x37, 0x61, 0x86, 0xf2, 0xff, 0x09, 0xf9, 0xc7, 0x90, 0x79, 0x3e, + 0x17, 0xfd, 0xa7, 0xa5, 0xed, 0x08, 0x15, 0xc7, 0xb8, 0x97, 0x3f, 0x81, 0xe9, 0x88, 0xb2, 0xb1, + 0xde, 0xf8, 0xfd, 0xa3, 0x04, 0x5f, 0x1f, 0xba, 0x49, 0x44, 0x8d, 0xc8, 0x22, 0xa9, 0xc5, 0x16, + 0xc9, 0x4a, 0x36, 0xc0, 0x15, 0xbe, 0x15, 0xf9, 0x61, 0x0e, 0x50, 0xfb, 0x48, 0xb5, 0xba, 0x4d, + 0xc5, 0xa2, 0x03, 0x2c, 0xfe, 0xec, 0x75, 0x0d, 0x0b, 0xe6, 0x01, 0x4c, 0x75, 0x89, 0xdd, 0xb1, + 0x54, 0xee, 0x1c, 0x51, 0x9d, 0xfb, 0x07, 0x29, 0x1b, 0x01, 0x09, 0x87, 0xf9, 0xd0, 0x77, 0xa0, + 0x7c, 0xe2, 0xfe, 0x09, 0xd1, 0x3b, 0x9c, 0x1d, 0x56, 0x48, 0x06, 0x7f, 0x5b, 0x0c, 0xe6, 0x8f, + 0x68, 0xb0, 0xb1, 0x0f, 0x26, 0x7f, 0x2e, 0xc1, 0x62, 0xd2, 0x11, 0x1b, 0xcc, 0xd4, 0xab, 0x77, + 0xc6, 0x1b, 0x50, 0xe0, 0xe8, 0xcc, 0x0b, 0x37, 0xdd, 0x43, 0x77, 0xa6, 0x19, 0xf3, 0x56, 0xf9, + 0x3f, 0x24, 0x58, 0x4e, 0x37, 0xed, 0x1a, 0xca, 0xf6, 0xa7, 0xd1, 0xb2, 0x7d, 0xd8, 0x39, 0x45, + 0xba, 0x9d, 0x19, 0x25, 0xfc, 0xbf, 0xa7, 0xfa, 0xfc, 0x1a, 0x3a, 0xb5, 0x1f, 0xed, 0xd4, 0xfd, + 0xb1, 0x3b, 0x95, 0xde, 0xa1, 0xc6, 0xbb, 0x2f, 0xbe, 0x58, 0xb9, 0xf1, 0xcb, 0x2f, 0x56, 0x6e, + 0xfc, 0xea, 0x8b, 0x95, 0x1b, 0x7f, 0x74, 0xbe, 0x22, 0xbd, 0x38, 0x5f, 0x91, 0x7e, 0x79, 0xbe, + 0x22, 0xfd, 0xea, 0x7c, 0x45, 0xfa, 0xaf, 0xf3, 0x15, 0xe9, 0x2f, 0xbe, 0x5c, 0xb9, 0xf1, 0xb4, + 0x24, 0x70, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0x55, 0xc4, 0x0b, 0x53, 0x44, 0x3d, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/extensions/v1beta1/generated.proto b/vendor/k8s.io/api/extensions/v1beta1/generated.proto index ad54b4a4..cd4f2a01 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/generated.proto +++ b/vendor/k8s.io/api/extensions/v1beta1/generated.proto @@ -815,7 +815,7 @@ message PodSecurityPolicySpec { optional bool defaultAllowPrivilegeEscalation = 15; // AllowPrivilegeEscalation determines if a pod can request to allow - // privilege escalation. + // privilege escalation. If unspecified, defaults to true. // +optional optional bool allowPrivilegeEscalation = 16; @@ -826,7 +826,7 @@ message PodSecurityPolicySpec { // DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for // more information. -// ReplicaSet represents the configuration of a ReplicaSet. +// ReplicaSet ensures that a specified number of pod replicas are running at any given time. message ReplicaSet { // If the Labels of a ReplicaSet are empty, they are defaulted to // be the same as the Pod(s) that the ReplicaSet manages. @@ -1016,7 +1016,7 @@ message SELinuxStrategyOptions { optional string rule = 1; // seLinuxOptions required to run as; required for MustRunAs - // More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md + // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ // +optional optional k8s.io.api.core.v1.SELinuxOptions seLinuxOptions = 2; } diff --git a/vendor/k8s.io/api/extensions/v1beta1/types.go b/vendor/k8s.io/api/extensions/v1beta1/types.go index 8b552ae2..d3cff2ab 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/types.go +++ b/vendor/k8s.io/api/extensions/v1beta1/types.go @@ -778,7 +778,7 @@ type IngressBackend struct { // DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for // more information. -// ReplicaSet represents the configuration of a ReplicaSet. +// ReplicaSet ensures that a specified number of pod replicas are running at any given time. type ReplicaSet struct { metav1.TypeMeta `json:",inline"` @@ -975,9 +975,9 @@ type PodSecurityPolicySpec struct { // +optional DefaultAllowPrivilegeEscalation *bool `json:"defaultAllowPrivilegeEscalation,omitempty" protobuf:"varint,15,opt,name=defaultAllowPrivilegeEscalation"` // AllowPrivilegeEscalation determines if a pod can request to allow - // privilege escalation. + // privilege escalation. If unspecified, defaults to true. // +optional - AllowPrivilegeEscalation bool `json:"allowPrivilegeEscalation,omitempty" protobuf:"varint,16,opt,name=allowPrivilegeEscalation"` + AllowPrivilegeEscalation *bool `json:"allowPrivilegeEscalation,omitempty" protobuf:"varint,16,opt,name=allowPrivilegeEscalation"` // is a white list of allowed host paths. Empty indicates that all host paths may be used. // +optional AllowedHostPaths []AllowedHostPath `json:"allowedHostPaths,omitempty" protobuf:"bytes,17,rep,name=allowedHostPaths"` @@ -1038,7 +1038,7 @@ type SELinuxStrategyOptions struct { // type is the strategy that will dictate the allowable labels that may be set. Rule SELinuxStrategy `json:"rule" protobuf:"bytes,1,opt,name=rule,casttype=SELinuxStrategy"` // seLinuxOptions required to run as; required for MustRunAs - // More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md + // More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/ // +optional SELinuxOptions *v1.SELinuxOptions `json:"seLinuxOptions,omitempty" protobuf:"bytes,2,opt,name=seLinuxOptions"` } diff --git a/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go index bcbd54da..f65f895e 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/extensions/v1beta1/types_swagger_doc_generated.go @@ -458,7 +458,7 @@ var map_PodSecurityPolicySpec = map[string]string{ "fsGroup": "FSGroup is the strategy that will dictate what fs group is used by the SecurityContext.", "readOnlyRootFilesystem": "ReadOnlyRootFilesystem when set to true will force containers to run with a read only root file system. If the container specifically requests to run with a non-read only root file system the PSP should deny the pod. If set to false the container may run with a read only root file system if it wishes but it will not be forced to.", "defaultAllowPrivilegeEscalation": "DefaultAllowPrivilegeEscalation controls the default setting for whether a process can gain more privileges than its parent process.", - "allowPrivilegeEscalation": "AllowPrivilegeEscalation determines if a pod can request to allow privilege escalation.", + "allowPrivilegeEscalation": "AllowPrivilegeEscalation determines if a pod can request to allow privilege escalation. If unspecified, defaults to true.", "allowedHostPaths": "is a white list of allowed host paths. Empty indicates that all host paths may be used.", } @@ -467,7 +467,7 @@ func (PodSecurityPolicySpec) SwaggerDoc() map[string]string { } var map_ReplicaSet = map[string]string{ - "": "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet represents the configuration of a ReplicaSet.", + "": "DEPRECATED - This group version of ReplicaSet is deprecated by apps/v1beta2/ReplicaSet. See the release notes for more information. ReplicaSet ensures that a specified number of pod replicas are running at any given time.", "metadata": "If the Labels of a ReplicaSet are empty, they are defaulted to be the same as the Pod(s) that the ReplicaSet manages. Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata", "spec": "Spec defines the specification of the desired behavior of the ReplicaSet. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", "status": "Status is the most recently observed status of the ReplicaSet. This data may be out of date by some window of time. Populated by the system. Read-only. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status", @@ -575,7 +575,7 @@ func (RunAsUserStrategyOptions) SwaggerDoc() map[string]string { var map_SELinuxStrategyOptions = map[string]string{ "": "SELinux Strategy Options defines the strategy type and any options used to create the strategy.", "rule": "type is the strategy that will dictate the allowable labels that may be set.", - "seLinuxOptions": "seLinuxOptions required to run as; required for MustRunAs More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md", + "seLinuxOptions": "seLinuxOptions required to run as; required for MustRunAs More info: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/", } func (SELinuxStrategyOptions) SwaggerDoc() map[string]string { diff --git a/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go index 45b56997..c173b3f4 100644 --- a/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go +++ b/vendor/k8s.io/api/extensions/v1beta1/zz_generated.deepcopy.go @@ -1431,6 +1431,15 @@ func (in *PodSecurityPolicySpec) DeepCopyInto(out *PodSecurityPolicySpec) { **out = **in } } + if in.AllowPrivilegeEscalation != nil { + in, out := &in.AllowPrivilegeEscalation, &out.AllowPrivilegeEscalation + if *in == nil { + *out = nil + } else { + *out = new(bool) + **out = **in + } + } if in.AllowedHostPaths != nil { in, out := &in.AllowedHostPaths, &out.AllowedHostPaths *out = make([]AllowedHostPath, len(*in)) diff --git a/vendor/k8s.io/api/rbac/v1/generated.pb.go b/vendor/k8s.io/api/rbac/v1/generated.pb.go index dba0ec95..1285ac19 100644 --- a/vendor/k8s.io/api/rbac/v1/generated.pb.go +++ b/vendor/k8s.io/api/rbac/v1/generated.pb.go @@ -2504,52 +2504,52 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 751 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x94, 0xcd, 0x6e, 0xd3, 0x4a, - 0x14, 0xc7, 0xe3, 0x7c, 0x28, 0xf1, 0xe4, 0x46, 0xb9, 0xf5, 0x95, 0xee, 0xb5, 0x2a, 0x5d, 0x27, - 0x0a, 0x2c, 0x2a, 0x95, 0xda, 0xb4, 0x20, 0x60, 0x83, 0x04, 0x66, 0x01, 0x55, 0x4b, 0xa8, 0x06, - 0xc1, 0x02, 0xb1, 0x60, 0xe2, 0x4c, 0xd3, 0x21, 0xf1, 0x87, 0x66, 0xc6, 0x91, 0x2a, 0x36, 0x3c, - 0x00, 0x0b, 0x24, 0x5e, 0x83, 0x15, 0x3b, 0x78, 0x82, 0x2c, 0xbb, 0xec, 0x2a, 0xa2, 0xe6, 0x41, - 0x40, 0x33, 0xb6, 0xe3, 0xa4, 0x69, 0xda, 0xac, 0x22, 0x21, 0xb1, 0x4a, 0xe6, 0x9c, 0xdf, 0xf9, - 0x9f, 0x0f, 0xcf, 0x1c, 0xf0, 0xa0, 0x7f, 0x8f, 0x99, 0xc4, 0xb7, 0xfa, 0x61, 0x07, 0x53, 0x0f, - 0x73, 0xcc, 0xac, 0x21, 0xf6, 0xba, 0x3e, 0xb5, 0x12, 0x07, 0x0a, 0x88, 0x45, 0x3b, 0xc8, 0xb1, - 0x86, 0xdb, 0x1d, 0xcc, 0xd1, 0xb6, 0xd5, 0xc3, 0x1e, 0xa6, 0x88, 0xe3, 0xae, 0x19, 0x50, 0x9f, - 0xfb, 0xda, 0x7f, 0x31, 0x68, 0xa2, 0x80, 0x98, 0x02, 0x34, 0x13, 0x70, 0x7d, 0xab, 0x47, 0xf8, - 0x51, 0xd8, 0x31, 0x1d, 0xdf, 0xb5, 0x7a, 0x7e, 0xcf, 0xb7, 0x24, 0xdf, 0x09, 0x0f, 0xe5, 0x49, - 0x1e, 0xe4, 0xbf, 0x58, 0x67, 0xfd, 0x76, 0x96, 0xd0, 0x45, 0xce, 0x11, 0xf1, 0x30, 0x3d, 0xb6, - 0x82, 0x7e, 0x4f, 0x18, 0x98, 0xe5, 0x62, 0x8e, 0xac, 0xe1, 0x5c, 0xf6, 0x75, 0x6b, 0x51, 0x14, - 0x0d, 0x3d, 0x4e, 0x5c, 0x3c, 0x17, 0x70, 0xe7, 0xaa, 0x00, 0xe6, 0x1c, 0x61, 0x17, 0xcd, 0xc5, - 0xdd, 0x5a, 0x14, 0x17, 0x72, 0x32, 0xb0, 0x88, 0xc7, 0x19, 0xa7, 0xe7, 0x83, 0x5a, 0x5f, 0x15, - 0x50, 0x7d, 0x34, 0x08, 0x19, 0xc7, 0x14, 0xfa, 0x03, 0xac, 0xbd, 0x01, 0x15, 0xd1, 0x48, 0x17, - 0x71, 0xa4, 0x2b, 0x4d, 0x65, 0xa3, 0xba, 0x73, 0xd3, 0xcc, 0xc6, 0x37, 0xd1, 0x35, 0x83, 0x7e, - 0x4f, 0x18, 0x98, 0x29, 0x68, 0x73, 0xb8, 0x6d, 0x3e, 0xeb, 0xbc, 0xc5, 0x0e, 0x7f, 0x8a, 0x39, - 0xb2, 0xb5, 0xd1, 0xb8, 0x91, 0x8b, 0xc6, 0x0d, 0x90, 0xd9, 0xe0, 0x44, 0x55, 0x7b, 0x02, 0x4a, - 0x34, 0x1c, 0x60, 0xa6, 0xe7, 0x9b, 0x85, 0x8d, 0xea, 0xce, 0x35, 0x73, 0xc1, 0xd7, 0x31, 0x0f, - 0xfc, 0x01, 0x71, 0x8e, 0x61, 0x38, 0xc0, 0x76, 0x2d, 0x51, 0x2c, 0x89, 0x13, 0x83, 0xb1, 0x40, - 0xeb, 0x53, 0x1e, 0x68, 0x53, 0xb5, 0xdb, 0xc4, 0xeb, 0x12, 0xaf, 0xb7, 0x82, 0x16, 0xda, 0xa0, - 0xc2, 0x42, 0xe9, 0x48, 0xbb, 0x68, 0x2e, 0xec, 0xe2, 0x79, 0x0c, 0xda, 0x7f, 0x27, 0x8a, 0x95, - 0xc4, 0xc0, 0xe0, 0x44, 0x43, 0xdb, 0x03, 0x65, 0xea, 0x0f, 0x30, 0xc4, 0x87, 0x7a, 0x41, 0x16, - 0xbc, 0x58, 0x0e, 0xc6, 0x9c, 0x5d, 0x4f, 0xe4, 0xca, 0x89, 0x01, 0xa6, 0x0a, 0xad, 0x91, 0x02, - 0xfe, 0x9d, 0x9f, 0xca, 0x3e, 0x61, 0x5c, 0x7b, 0x3d, 0x37, 0x19, 0x73, 0xb9, 0xc9, 0x88, 0x68, - 0x39, 0x97, 0x49, 0x17, 0xa9, 0x65, 0x6a, 0x2a, 0x07, 0xa0, 0x44, 0x38, 0x76, 0xd3, 0x91, 0x6c, - 0x2e, 0xec, 0x61, 0xbe, 0xba, 0xec, 0x03, 0xef, 0x0a, 0x05, 0x18, 0x0b, 0xb5, 0xbe, 0x29, 0xa0, - 0x3e, 0x05, 0xaf, 0xa0, 0x87, 0xdd, 0xd9, 0x1e, 0xae, 0x2f, 0xd5, 0xc3, 0xc5, 0xc5, 0xff, 0x54, - 0x00, 0xc8, 0xae, 0xb0, 0xd6, 0x00, 0xa5, 0x21, 0xa6, 0x1d, 0xa6, 0x2b, 0xcd, 0xc2, 0x86, 0x6a, - 0xab, 0x82, 0x7f, 0x29, 0x0c, 0x30, 0xb6, 0x6b, 0x9b, 0x40, 0x45, 0x01, 0x79, 0x4c, 0xfd, 0x30, - 0x88, 0xd3, 0xab, 0x76, 0x2d, 0x1a, 0x37, 0xd4, 0x87, 0x07, 0xbb, 0xb1, 0x11, 0x66, 0x7e, 0x01, - 0x53, 0xcc, 0xfc, 0x90, 0x3a, 0x98, 0xe9, 0x85, 0x0c, 0x86, 0xa9, 0x11, 0x66, 0x7e, 0xed, 0x2e, - 0xa8, 0xa5, 0x87, 0x36, 0x72, 0x31, 0xd3, 0x8b, 0x32, 0x60, 0x2d, 0x1a, 0x37, 0x6a, 0x70, 0xda, - 0x01, 0x67, 0x39, 0xed, 0x3e, 0xa8, 0x7b, 0xbe, 0x97, 0x22, 0x2f, 0xe0, 0x3e, 0xd3, 0x4b, 0x32, - 0xf4, 0x9f, 0x68, 0xdc, 0xa8, 0xb7, 0x67, 0x5d, 0xf0, 0x3c, 0xdb, 0xfa, 0xa2, 0x80, 0xe2, 0x6f, - 0xb7, 0x54, 0x3e, 0xe4, 0x41, 0xf5, 0xcf, 0x36, 0x99, 0x6c, 0x13, 0xf1, 0x04, 0x57, 0xbb, 0x46, - 0x96, 0x7e, 0x82, 0x57, 0xef, 0x8f, 0xcf, 0x0a, 0xa8, 0xac, 0x68, 0x71, 0xd8, 0xb3, 0x55, 0xff, - 0x7f, 0x79, 0xd5, 0x17, 0x97, 0xfb, 0x0e, 0xa4, 0xf3, 0xd7, 0x6e, 0x80, 0x4a, 0xfa, 0xd8, 0x65, - 0xb1, 0x6a, 0x96, 0x3c, 0xdd, 0x07, 0x70, 0x42, 0x68, 0x4d, 0x50, 0xec, 0x13, 0xaf, 0xab, 0xe7, - 0x25, 0xf9, 0x57, 0x42, 0x16, 0xf7, 0x88, 0xd7, 0x85, 0xd2, 0x23, 0x08, 0x0f, 0xb9, 0x58, 0x5e, - 0x88, 0x29, 0x42, 0x3c, 0x73, 0x28, 0x3d, 0x62, 0x56, 0xe5, 0xe4, 0x32, 0x4d, 0xf4, 0x94, 0x85, - 0x7a, 0xd3, 0xf5, 0xe5, 0x97, 0xa9, 0xef, 0xf2, 0xec, 0x9a, 0x05, 0x54, 0xf1, 0xcb, 0x02, 0xe4, - 0x60, 0xbd, 0x28, 0xb1, 0xb5, 0x04, 0x53, 0xdb, 0xa9, 0x03, 0x66, 0x8c, 0xbd, 0x35, 0x3a, 0x33, - 0x72, 0x27, 0x67, 0x46, 0xee, 0xf4, 0xcc, 0xc8, 0xbd, 0x8f, 0x0c, 0x65, 0x14, 0x19, 0xca, 0x49, - 0x64, 0x28, 0xa7, 0x91, 0xa1, 0x7c, 0x8f, 0x0c, 0xe5, 0xe3, 0x0f, 0x23, 0xf7, 0xaa, 0x9c, 0x4c, - 0xfd, 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0x74, 0x24, 0x6a, 0xfa, 0x45, 0x0a, 0x00, 0x00, + // 743 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x94, 0x4f, 0x6b, 0x13, 0x4f, + 0x18, 0xc7, 0x33, 0xf9, 0x43, 0xb3, 0x93, 0x5f, 0xc8, 0xaf, 0x2b, 0xc8, 0x52, 0x61, 0x13, 0x72, + 0x90, 0x80, 0xba, 0x6b, 0xaa, 0xa8, 0x20, 0x3d, 0xb8, 0x15, 0xa5, 0xb4, 0xd6, 0x32, 0xa2, 0x07, + 0xf1, 0xe0, 0x66, 0x33, 0x4d, 0xc7, 0x64, 0xff, 0x30, 0x33, 0x1b, 0x28, 0x5e, 0xc4, 0x9b, 0x37, + 0xdf, 0x85, 0x17, 0xbd, 0xe9, 0x2b, 0xf0, 0xd2, 0x63, 0x8f, 0x3d, 0x05, 0xbb, 0xbe, 0x10, 0x65, + 0x66, 0x77, 0xb3, 0x49, 0x93, 0xd8, 0x9e, 0x02, 0xe2, 0x29, 0x99, 0xe7, 0xf9, 0x7c, 0x9f, 0xf9, + 0xce, 0xb3, 0x33, 0x0f, 0xbc, 0xdf, 0xbf, 0xc7, 0x0c, 0xe2, 0x9b, 0xfd, 0xb0, 0x83, 0xa9, 0x87, + 0x39, 0x66, 0xe6, 0x10, 0x7b, 0x5d, 0x9f, 0x9a, 0x49, 0xc2, 0x0e, 0x88, 0x49, 0x3b, 0xb6, 0x63, + 0x0e, 0xdb, 0x66, 0x0f, 0x7b, 0x98, 0xda, 0x1c, 0x77, 0x8d, 0x80, 0xfa, 0xdc, 0x57, 0xd5, 0x98, + 0x31, 0xec, 0x80, 0x18, 0x82, 0x31, 0x86, 0xed, 0xb5, 0x1b, 0x3d, 0xc2, 0x0f, 0xc2, 0x8e, 0xe1, + 0xf8, 0xae, 0xd9, 0xf3, 0x7b, 0xbe, 0x29, 0xd1, 0x4e, 0xb8, 0x2f, 0x57, 0x72, 0x21, 0xff, 0xc5, + 0x25, 0xd6, 0x6e, 0x67, 0xdb, 0xb8, 0xb6, 0x73, 0x40, 0x3c, 0x4c, 0x0f, 0xcd, 0xa0, 0xdf, 0x13, + 0x01, 0x66, 0xba, 0x98, 0xdb, 0x73, 0x36, 0x5e, 0x33, 0x17, 0xa9, 0x68, 0xe8, 0x71, 0xe2, 0xe2, + 0x19, 0xc1, 0x9d, 0xf3, 0x04, 0xcc, 0x39, 0xc0, 0xae, 0x3d, 0xa3, 0xbb, 0xb5, 0x48, 0x17, 0x72, + 0x32, 0x30, 0x89, 0xc7, 0x19, 0xa7, 0x67, 0x45, 0xcd, 0xaf, 0x00, 0x56, 0x36, 0x07, 0x21, 0xe3, + 0x98, 0x22, 0x7f, 0x80, 0xd5, 0xd7, 0xb0, 0x2c, 0x0e, 0xd2, 0xb5, 0xb9, 0xad, 0x81, 0x06, 0x68, + 0x55, 0xd6, 0x6f, 0x1a, 0x59, 0xe7, 0xc6, 0x75, 0x8d, 0xa0, 0xdf, 0x13, 0x01, 0x66, 0x08, 0xda, + 0x18, 0xb6, 0x8d, 0xa7, 0x9d, 0x37, 0xd8, 0xe1, 0x4f, 0x30, 0xb7, 0x2d, 0xf5, 0x68, 0x54, 0xcf, + 0x45, 0xa3, 0x3a, 0xcc, 0x62, 0x68, 0x5c, 0x55, 0xdd, 0x84, 0x25, 0x1a, 0x0e, 0x30, 0xd3, 0xf2, + 0x8d, 0x42, 0xab, 0xb2, 0xae, 0x1b, 0xb3, 0x1f, 0xc6, 0xd8, 0xf3, 0x07, 0xc4, 0x39, 0x44, 0xe1, + 0x00, 0x5b, 0xd5, 0xa4, 0x58, 0x49, 0xac, 0x18, 0x8a, 0xb5, 0xcd, 0x0f, 0x79, 0xa8, 0x4e, 0xd8, + 0xb6, 0x88, 0xd7, 0x25, 0x5e, 0x6f, 0x09, 0xee, 0xb7, 0x60, 0x99, 0x85, 0x32, 0x91, 0x1e, 0xe0, + 0xca, 0xbc, 0x03, 0x3c, 0x8b, 0x19, 0xeb, 0xff, 0xa4, 0x58, 0x39, 0x09, 0x30, 0x34, 0x96, 0xab, + 0x8f, 0xe0, 0x0a, 0xf5, 0x07, 0x18, 0xe1, 0x7d, 0xad, 0x20, 0xbd, 0xce, 0xad, 0x84, 0x62, 0xc4, + 0xaa, 0x25, 0x95, 0x56, 0x92, 0x00, 0x4a, 0xc5, 0xcd, 0xef, 0x00, 0x5e, 0x9e, 0xed, 0xc5, 0x0e, + 0x61, 0x5c, 0x7d, 0x35, 0xd3, 0x0f, 0xe3, 0x62, 0xfd, 0x10, 0x6a, 0xd9, 0x8d, 0xf1, 0x01, 0xd2, + 0xc8, 0x44, 0x2f, 0xb6, 0x61, 0x89, 0x70, 0xec, 0xa6, 0x8d, 0xb8, 0x3a, 0xcf, 0xfe, 0xac, 0xb1, + 0xec, 0x8b, 0x6e, 0x09, 0x31, 0x8a, 0x6b, 0x34, 0xbf, 0x01, 0x58, 0x9b, 0x80, 0x97, 0x60, 0xff, + 0xe1, 0xb4, 0xfd, 0xfa, 0x79, 0xf6, 0xe7, 0xfb, 0xfe, 0x05, 0x20, 0xcc, 0xae, 0xab, 0x5a, 0x87, + 0xa5, 0x21, 0xa6, 0x1d, 0xa6, 0x81, 0x46, 0xa1, 0xa5, 0x58, 0x8a, 0xe0, 0x5f, 0x88, 0x00, 0x8a, + 0xe3, 0xea, 0x35, 0xa8, 0xd8, 0x01, 0x79, 0x4c, 0xfd, 0x30, 0x88, 0x77, 0x56, 0xac, 0x6a, 0x34, + 0xaa, 0x2b, 0x0f, 0xf6, 0xb6, 0xe2, 0x20, 0xca, 0xf2, 0x02, 0xa6, 0x98, 0xf9, 0x21, 0x75, 0x30, + 0xd3, 0x0a, 0x19, 0x8c, 0xd2, 0x20, 0xca, 0xf2, 0xea, 0x5d, 0x58, 0x4d, 0x17, 0xbb, 0xb6, 0x8b, + 0x99, 0x56, 0x94, 0x82, 0xd5, 0x68, 0x54, 0xaf, 0xa2, 0xc9, 0x04, 0x9a, 0xe6, 0xd4, 0x0d, 0x58, + 0xf3, 0x7c, 0x2f, 0x45, 0x9e, 0xa3, 0x1d, 0xa6, 0x95, 0xa4, 0xf4, 0x52, 0x34, 0xaa, 0xd7, 0x76, + 0xa7, 0x53, 0xe8, 0x2c, 0xdb, 0xfc, 0x02, 0x60, 0xf1, 0x6f, 0x9a, 0x1d, 0xef, 0xf3, 0xb0, 0xf2, + 0xcf, 0x0f, 0x0d, 0xf1, 0xdc, 0x96, 0x3b, 0x2d, 0x2e, 0xf2, 0xdc, 0xce, 0x1f, 0x13, 0x9f, 0x00, + 0x2c, 0x2f, 0x69, 0x3e, 0x6c, 0x4c, 0x1b, 0xd6, 0x16, 0x1a, 0x9e, 0xef, 0xf4, 0x2d, 0x4c, 0xbb, + 0xae, 0x5e, 0x87, 0xe5, 0xf4, 0x4d, 0x4b, 0x9f, 0x4a, 0xb6, 0x6f, 0xfa, 0xec, 0xd1, 0x98, 0x50, + 0x1b, 0xb0, 0xd8, 0x27, 0x5e, 0x57, 0xcb, 0x4b, 0xf2, 0xbf, 0x84, 0x2c, 0x6e, 0x13, 0xaf, 0x8b, + 0x64, 0x46, 0x10, 0x9e, 0xed, 0x62, 0x79, 0x03, 0x26, 0x08, 0xf1, 0x9a, 0x91, 0xcc, 0x34, 0x3f, + 0x03, 0xb8, 0x92, 0xdc, 0x9e, 0x71, 0x3d, 0xb0, 0xb0, 0xde, 0xa4, 0xbf, 0xfc, 0x45, 0xfc, 0xfd, + 0x79, 0x77, 0xd5, 0x84, 0x8a, 0xf8, 0x65, 0x81, 0xed, 0x60, 0xad, 0x28, 0xb1, 0xd5, 0x04, 0x53, + 0x76, 0xd3, 0x04, 0xca, 0x18, 0xab, 0x75, 0x74, 0xaa, 0xe7, 0x8e, 0x4f, 0xf5, 0xdc, 0xc9, 0xa9, + 0x9e, 0x7b, 0x17, 0xe9, 0xe0, 0x28, 0xd2, 0xc1, 0x71, 0xa4, 0x83, 0x93, 0x48, 0x07, 0x3f, 0x22, + 0x1d, 0x7c, 0xfc, 0xa9, 0xe7, 0x5e, 0xe6, 0x87, 0xed, 0xdf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x66, + 0x92, 0x08, 0x1d, 0x04, 0x0a, 0x00, 0x00, } diff --git a/vendor/k8s.io/api/rbac/v1beta1/generated.proto b/vendor/k8s.io/api/rbac/v1beta1/generated.proto index d0d5bcc0..fe92c3c0 100644 --- a/vendor/k8s.io/api/rbac/v1beta1/generated.proto +++ b/vendor/k8s.io/api/rbac/v1beta1/generated.proto @@ -85,7 +85,8 @@ message PolicyRule { // +optional repeated string apiGroups = 2; - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. + // Resources is a list of resources this rule applies to. '*' represents all resources in the specified apiGroups. + // '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups. // +optional repeated string resources = 3; diff --git a/vendor/k8s.io/api/rbac/v1beta1/types.go b/vendor/k8s.io/api/rbac/v1beta1/types.go index 30f95a77..ee3964a3 100644 --- a/vendor/k8s.io/api/rbac/v1beta1/types.go +++ b/vendor/k8s.io/api/rbac/v1beta1/types.go @@ -54,7 +54,8 @@ type PolicyRule struct { // the enumerated resources in any API group will be allowed. // +optional APIGroups []string `json:"apiGroups,omitempty" protobuf:"bytes,2,rep,name=apiGroups"` - // Resources is a list of resources this rule applies to. ResourceAll represents all resources. + // Resources is a list of resources this rule applies to. '*' represents all resources in the specified apiGroups. + // '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups. // +optional Resources []string `json:"resources,omitempty" protobuf:"bytes,3,rep,name=resources"` // ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed. diff --git a/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go index 1463d8fe..16a265c5 100644 --- a/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/api/rbac/v1beta1/types_swagger_doc_generated.go @@ -72,7 +72,7 @@ var map_PolicyRule = map[string]string{ "": "PolicyRule holds information that describes a policy rule, but does not contain information about who the rule applies to or which namespace the rule applies to.", "verbs": "Verbs is a list of Verbs that apply to ALL the ResourceKinds and AttributeRestrictions contained in this rule. VerbAll represents all kinds.", "apiGroups": "APIGroups is the name of the APIGroup that contains the resources. If multiple API groups are specified, any action requested against one of the enumerated resources in any API group will be allowed.", - "resources": "Resources is a list of resources this rule applies to. ResourceAll represents all resources.", + "resources": "Resources is a list of resources this rule applies to. '*' represents all resources in the specified apiGroups. '*/foo' represents the subresource 'foo' for all resources in the specified apiGroups.", "resourceNames": "ResourceNames is an optional white list of names that the rule applies to. An empty set means that everything is allowed.", "nonResourceURLs": "NonResourceURLs is a set of partial urls that a user should have access to. *s are allowed, but only as the full, final step in the path Since non-resource URLs are not namespaced, this field is only applicable for ClusterRoles referenced from a ClusterRoleBinding. Rules can either apply to API resources (such as \"pods\" or \"secrets\") or non-resource URL paths (such as \"/api\"), but not both.", } diff --git a/vendor/k8s.io/apiextensions-apiserver/README.md b/vendor/k8s.io/apiextensions-apiserver/README.md index 17c81915..c9c84bae 100644 --- a/vendor/k8s.io/apiextensions-apiserver/README.md +++ b/vendor/k8s.io/apiextensions-apiserver/README.md @@ -1,6 +1,6 @@ # apiextensions-apiserver -Implements https://github.com/kubernetes/community/blob/master/contributors/design-proposals/thirdpartyresources.md +Implements: https://github.com/kubernetes/community/blob/master/contributors/design-proposals/api-machinery/thirdpartyresources.md It provides an API for registering `CustomResourceDefinitions`. @@ -12,7 +12,7 @@ delegate server inside of `kube-apiserver`. ## Compatibility -HEAD of this repo will match HEAD of k8s.io/apiserver, k8s.io/apimachinvery, and k8s.io/client-go. +HEAD of this repo will match HEAD of k8s.io/apiserver, k8s.io/apimachinery, and k8s.io/client-go. ## Where does it come from? diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto b/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto index 608299da..091d11bd 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto +++ b/vendor/k8s.io/apimachinery/pkg/api/resource/generated.proto @@ -87,6 +87,7 @@ option go_package = "resource"; // +protobuf.embed=string // +protobuf.options.marshal=false // +protobuf.options.(gogoproto.goproto_stringer)=false +// +k8s:deepcopy-gen=true // +k8s:openapi-gen=true message Quantity { optional string string = 1; diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go b/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go index 1839d78a..682ee9aa 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go +++ b/vendor/k8s.io/apimachinery/pkg/api/resource/quantity.go @@ -93,6 +93,7 @@ import ( // +protobuf.embed=string // +protobuf.options.marshal=false // +protobuf.options.(gogoproto.goproto_stringer)=false +// +k8s:deepcopy-gen=true // +k8s:openapi-gen=true type Quantity struct { // i is the quantity in int64 scaled form, if d.Dec == nil @@ -415,7 +416,7 @@ func (_ Quantity) OpenAPIDefinition() openapi.OpenAPIDefinition { // Note about BinarySI: // * If q.Format is set to BinarySI and q.Amount represents a non-zero value between // -1 and +1, it will be emitted as if q.Format were DecimalSI. -// * Otherwise, if q.Format is set to BinarySI, frational parts of q.Amount will be +// * Otherwise, if q.Format is set to BinarySI, fractional parts of q.Amount will be // rounded up. (1.1i becomes 2i.) func (q *Quantity) CanonicalizeBytes(out []byte) (result, suffix []byte) { if q.IsZero() { diff --git a/vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go new file mode 100644 index 00000000..118dfca0 --- /dev/null +++ b/vendor/k8s.io/apimachinery/pkg/api/resource/zz_generated.deepcopy.go @@ -0,0 +1,44 @@ +// +build !ignore_autogenerated + +/* +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. +*/ + +// This file was autogenerated by deepcopy-gen. Do not edit it manually! + +package resource + +import ( + conversion "k8s.io/apimachinery/pkg/conversion" + reflect "reflect" +) + +// GetGeneratedDeepCopyFuncs returns the generated funcs, since we aren't registering them. +// +// Deprecated: deepcopy registration will go away when static deepcopy is fully implemented. +func GetGeneratedDeepCopyFuncs() []conversion.GeneratedDeepCopyFunc { + return []conversion.GeneratedDeepCopyFunc{ + {Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*Quantity).DeepCopyInto(out.(*Quantity)) + return nil + }, InType: reflect.TypeOf(&Quantity{})}, + } +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Quantity) DeepCopyInto(out *Quantity) { + *out = in.DeepCopy() + return +} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go index 4d45f81e..db79fb0c 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go @@ -38,9 +38,6 @@ var ( AddToScheme = localSchemeBuilder.AddToScheme ) -// Copier exposes copying on this scheme. -var Copier runtime.ObjectCopier = scheme - // Codecs provides access to encoding and decoding for the scheme. var Codecs = serializer.NewCodecFactory(scheme) diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go index 7049c9a3..a96f38ee 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/conversion.go @@ -252,7 +252,6 @@ func Convert_map_to_unversioned_LabelSelector(in *map[string]string, out *LabelS if in == nil { return nil } - out = new(LabelSelector) for labelKey, labelValue := range *in { AddLabelToSelector(out, labelKey, labelValue) } diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go index dbe20670..a09d7957 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/micro_time.go @@ -175,10 +175,10 @@ func (t *MicroTime) Fuzz(c fuzz.Continue) { if t == nil { return } - // Allow for about 1000 years of randomness. Leave off nanoseconds - // because JSON doesn't represent them so they can't round-trip - // properly. - t.Time = time.Unix(c.Rand.Int63n(1000*365*24*60*60*1000*1000), 0) + // Allow for about 1000 years of randomness. Accurate to a tenth of + // micro second. Leave off nanoseconds because JSON doesn't + // represent them so they can't round-trip properly. + t.Time = time.Unix(c.Rand.Int63n(1000*365*24*60*60), 1000*c.Rand.Int63n(1000000)) } var _ fuzz.Interface = &MicroTime{} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go index 435f6a8f..0a9f2a37 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/time.go @@ -80,7 +80,13 @@ func (t *Time) Before(u *Time) bool { // Equal reports whether the time instant t is equal to u. func (t *Time) Equal(u *Time) bool { - return t.Time.Equal(u.Time) + if t == nil && u == nil { + return true + } + if t != nil && u != nil { + return t.Time.Equal(u.Time) + } + return false } // Unix returns the local time corresponding to the given Unix time diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go index 588230f4..7213b7a1 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/unstructured.go @@ -145,33 +145,13 @@ func (u *Unstructured) UnmarshalJSON(b []byte) error { return err } -func deepCopyJSON(x interface{}) interface{} { - switch x := x.(type) { - case map[string]interface{}: - clone := make(map[string]interface{}, len(x)) - for k, v := range x { - clone[k] = deepCopyJSON(v) - } - return clone - case []interface{}: - clone := make([]interface{}, len(x)) - for i := range x { - clone[i] = deepCopyJSON(x[i]) - } - return clone - default: - // only non-pointer values (float64, int64, bool, string) are left. These can be copied by-value. - return x - } -} - func (in *Unstructured) DeepCopy() *Unstructured { if in == nil { return nil } out := new(Unstructured) *out = *in - out.Object = deepCopyJSON(in.Object).(map[string]interface{}) + out.Object = unstructured.DeepCopyJSON(in.Object) return out } @@ -181,7 +161,7 @@ func (in *UnstructuredList) DeepCopy() *UnstructuredList { } out := new(UnstructuredList) *out = *in - out.Object = deepCopyJSON(in.Object).(map[string]interface{}) + out.Object = unstructured.DeepCopyJSON(in.Object) out.Items = make([]Unstructured, len(in.Items)) for i := range in.Items { in.Items[i].DeepCopyInto(&out.Items[i]) diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1/types.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1/types.go index 9c3c2a35..1c97414a 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1/types.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1alpha1/types.go @@ -98,7 +98,7 @@ type TableRowCondition struct { type RowConditionType string // These are valid conditions of a row. This list is not exhaustive and new conditions may be -// inculded by other resources. +// included by other resources. const ( // RowCompleted means the underlying resource has reached completion and may be given less // visual priority than other resources. diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go b/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go index 30f717b2..17b36661 100644 --- a/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go +++ b/vendor/k8s.io/apimachinery/pkg/conversion/queryparams/convert.go @@ -90,7 +90,14 @@ func customMarshalValue(value reflect.Value) (reflect.Value, bool) { marshaler, ok := value.Interface().(Marshaler) if !ok { - return reflect.Value{}, false + if !isPointerKind(value.Kind()) && value.CanAddr() { + marshaler, ok = value.Addr().Interface().(Marshaler) + if !ok { + return reflect.Value{}, false + } + } else { + return reflect.Value{}, false + } } // Don't invoke functions on nil pointers diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/unstructured/converter.go b/vendor/k8s.io/apimachinery/pkg/conversion/unstructured/converter.go index 84dca4ac..d0e625d2 100644 --- a/vendor/k8s.io/apimachinery/pkg/conversion/unstructured/converter.go +++ b/vendor/k8s.io/apimachinery/pkg/conversion/unstructured/converter.go @@ -29,6 +29,7 @@ import ( "sync/atomic" apiequality "k8s.io/apimachinery/pkg/api/equality" + "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/json" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -106,6 +107,8 @@ func NewConverter(mismatchDetection bool) Converter { } } +// FromUnstructured converts an object from map[string]interface{} representation into a concrete type. +// It uses encoding/json/Unmarshaler if object implements it or reflection if not. func (c *converterImpl) FromUnstructured(u map[string]interface{}, obj interface{}) error { t := reflect.TypeOf(obj) value := reflect.ValueOf(obj) @@ -388,19 +391,27 @@ func interfaceFromUnstructured(sv, dv reflect.Value) error { return nil } +// ToUnstructured converts an object into map[string]interface{} representation. +// It uses encoding/json/Marshaler if object implements it or reflection if not. func (c *converterImpl) ToUnstructured(obj interface{}) (map[string]interface{}, error) { - t := reflect.TypeOf(obj) - value := reflect.ValueOf(obj) - if t.Kind() != reflect.Ptr || value.IsNil() { - return nil, fmt.Errorf("ToUnstructured requires a non-nil pointer to an object, got %v", t) + var u map[string]interface{} + var err error + if unstr, ok := obj.(runtime.Unstructured); ok { + u = DeepCopyJSON(unstr.UnstructuredContent()) + } else { + t := reflect.TypeOf(obj) + value := reflect.ValueOf(obj) + if t.Kind() != reflect.Ptr || value.IsNil() { + return nil, fmt.Errorf("ToUnstructured requires a non-nil pointer to an object, got %v", t) + } + u = map[string]interface{}{} + err = toUnstructured(value.Elem(), reflect.ValueOf(&u).Elem()) } - u := &map[string]interface{}{} - err := toUnstructured(value.Elem(), reflect.ValueOf(u).Elem()) if c.mismatchDetection { - newUnstr := &map[string]interface{}{} - newErr := toUnstructuredViaJSON(obj, newUnstr) + newUnstr := map[string]interface{}{} + newErr := toUnstructuredViaJSON(obj, &newUnstr) if (err != nil) != (newErr != nil) { - glog.Fatalf("ToUnstructured unexpected error for %v: error: %v", obj, err) + glog.Fatalf("ToUnstructured unexpected error for %v: error: %v; newErr: %v", obj, err, newErr) } if err == nil && !apiequality.Semantic.DeepEqual(u, newUnstr) { glog.Fatalf("ToUnstructured mismatch for %#v, diff: %v", u, diff.ObjectReflectDiff(u, newUnstr)) @@ -409,7 +420,34 @@ func (c *converterImpl) ToUnstructured(obj interface{}) (map[string]interface{}, if err != nil { return nil, err } - return *u, nil + return u, nil +} + +// DeepCopyJSON deep copies the passed value, assuming it is a valid JSON representation i.e. only contains +// types produced by json.Unmarshal(). +func DeepCopyJSON(x map[string]interface{}) map[string]interface{} { + return deepCopyJSON(x).(map[string]interface{}) +} + +func deepCopyJSON(x interface{}) interface{} { + switch x := x.(type) { + case map[string]interface{}: + clone := make(map[string]interface{}, len(x)) + for k, v := range x { + clone[k] = deepCopyJSON(v) + } + return clone + case []interface{}: + clone := make([]interface{}, len(x)) + for i, v := range x { + clone[i] = deepCopyJSON(v) + } + return clone + case string, int64, bool, float64, nil, encodingjson.Number: + return x + default: + panic(fmt.Errorf("cannot deep copy %T", x)) + } } func toUnstructuredViaJSON(obj interface{}, u *map[string]interface{}) error { diff --git a/vendor/k8s.io/apimachinery/pkg/labels/selector.go b/vendor/k8s.io/apimachinery/pkg/labels/selector.go index ac123033..b301b428 100644 --- a/vendor/k8s.io/apimachinery/pkg/labels/selector.go +++ b/vendor/k8s.io/apimachinery/pkg/labels/selector.go @@ -550,7 +550,7 @@ func (p *Parser) lookahead(context ParserContext) (Token, string) { return tok, lit } -// consume returns current token and string. Increments the the position +// consume returns current token and string. Increments the position func (p *Parser) consume(context ParserContext) (Token, string) { p.position++ tok, lit := p.scannedItems[p.position-1].tok, p.scannedItems[p.position-1].literal diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go b/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go index db4c2807..c90eef5a 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/interfaces.go @@ -203,13 +203,6 @@ type ObjectCreater interface { New(kind schema.GroupVersionKind) (out Object, err error) } -// ObjectCopier duplicates an object. -type ObjectCopier interface { - // Copy returns an exact copy of the provided Object, or an error if the - // copy could not be completed. - Copy(Object) (Object, error) -} - // ResourceVersioner provides methods for setting and retrieving // the resource version from an API object. type ResourceVersioner interface { diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go b/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go index c3d4b7f5..c597fcf9 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go @@ -420,20 +420,6 @@ func (s *Scheme) Default(src Object) { } } -// Copy does a deep copy of an API object. -func (s *Scheme) Copy(src Object) (Object, error) { - dst, err := s.DeepCopy(src) - if err != nil { - return nil, err - } - return dst.(Object), nil -} - -// Performs a deep copy of the given object. -func (s *Scheme) DeepCopy(src interface{}) (interface{}, error) { - return s.cloner.DeepCopy(src) -} - // Convert will attempt to convert in into out. Both must be pointers. For easy // testing of conversion functions. Returns an error if the conversion isn't // possible. You can call this with types that haven't been registered (for example, @@ -501,9 +487,9 @@ func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) ( // TODO: when we move to server API versions, we should completely remove the unversioned concept if unversionedKind, ok := s.unversionedTypes[t]; ok { if gvk, ok := target.KindForGroupVersionKinds([]schema.GroupVersionKind{unversionedKind}); ok { - return copyAndSetTargetKind(copy, s, in, gvk) + return copyAndSetTargetKind(copy, in, gvk) } - return copyAndSetTargetKind(copy, s, in, unversionedKind) + return copyAndSetTargetKind(copy, in, unversionedKind) } return nil, NewNotRegisteredErrForTarget(t, target) @@ -512,16 +498,16 @@ func (s *Scheme) convertToVersion(copy bool, in Object, target GroupVersioner) ( // target wants to use the existing type, set kind and return (no conversion necessary) for _, kind := range kinds { if gvk == kind { - return copyAndSetTargetKind(copy, s, in, gvk) + return copyAndSetTargetKind(copy, in, gvk) } } // type is unversioned, no conversion necessary if unversionedKind, ok := s.unversionedTypes[t]; ok { if gvk, ok := target.KindForGroupVersionKinds([]schema.GroupVersionKind{unversionedKind}); ok { - return copyAndSetTargetKind(copy, s, in, gvk) + return copyAndSetTargetKind(copy, in, gvk) } - return copyAndSetTargetKind(copy, s, in, unversionedKind) + return copyAndSetTargetKind(copy, in, unversionedKind) } out, err := s.New(gvk) @@ -549,7 +535,7 @@ func (s *Scheme) generateConvertMeta(in interface{}) (conversion.FieldMatchingFl } // copyAndSetTargetKind performs a conditional copy before returning the object, or an error if copy was not successful. -func copyAndSetTargetKind(copy bool, copier ObjectCopier, obj Object, kind schema.GroupVersionKind) (Object, error) { +func copyAndSetTargetKind(copy bool, obj Object, kind schema.GroupVersionKind) (Object, error) { if copy { obj = obj.DeepCopyObject() } diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go index 74ad84dd..b717fe8f 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go @@ -21,7 +21,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" ) // NewCodecForScheme is a convenience method for callers that are using a scheme. @@ -33,7 +32,7 @@ func NewCodecForScheme( encodeVersion runtime.GroupVersioner, decodeVersion runtime.GroupVersioner, ) runtime.Codec { - return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, scheme, nil, encodeVersion, decodeVersion) + return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, nil, encodeVersion, decodeVersion) } // NewDefaultingCodecForScheme is a convenience method for callers that are using a scheme. @@ -45,7 +44,7 @@ func NewDefaultingCodecForScheme( encodeVersion runtime.GroupVersioner, decodeVersion runtime.GroupVersioner, ) runtime.Codec { - return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, scheme, scheme, encodeVersion, decodeVersion) + return NewCodec(encoder, decoder, runtime.UnsafeObjectConvertor(scheme), scheme, scheme, scheme, encodeVersion, decodeVersion) } // NewCodec takes objects in their internal versions and converts them to external versions before @@ -56,7 +55,6 @@ func NewCodec( decoder runtime.Decoder, convertor runtime.ObjectConvertor, creater runtime.ObjectCreater, - copier runtime.ObjectCopier, typer runtime.ObjectTyper, defaulter runtime.ObjectDefaulter, encodeVersion runtime.GroupVersioner, @@ -67,7 +65,6 @@ func NewCodec( decoder: decoder, convertor: convertor, creater: creater, - copier: copier, typer: typer, defaulter: defaulter, @@ -82,7 +79,6 @@ type codec struct { decoder runtime.Decoder convertor runtime.ObjectConvertor creater runtime.ObjectCreater - copier runtime.ObjectCopier typer runtime.ObjectTyper defaulter runtime.ObjectDefaulter @@ -123,12 +119,7 @@ func (c *codec) Decode(data []byte, defaultGVK *schema.GroupVersionKind, into ru if c.defaulter != nil { // create a copy to ensure defaulting is not applied to the original versioned objects if isVersioned { - copied, err := c.copier.Copy(obj) - if err != nil { - utilruntime.HandleError(err) - copied = obj - } - versioned.Objects = []runtime.Object{copied} + versioned.Objects = []runtime.Object{obj.DeepCopyObject()} } c.defaulter.Default(obj) } else { @@ -151,12 +142,7 @@ func (c *codec) Decode(data []byte, defaultGVK *schema.GroupVersionKind, into ru // Convert if needed. if isVersioned { // create a copy, because ConvertToVersion does not guarantee non-mutation of objects - copied, err := c.copier.Copy(obj) - if err != nil { - utilruntime.HandleError(err) - copied = obj - } - versioned.Objects = []runtime.Object{copied} + versioned.Objects = []runtime.Object{obj.DeepCopyObject()} } // perform defaulting if requested diff --git a/vendor/k8s.io/apimachinery/pkg/util/diff/diff.go b/vendor/k8s.io/apimachinery/pkg/util/diff/diff.go index 0f730875..3d5ec14b 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/diff/diff.go +++ b/vendor/k8s.io/apimachinery/pkg/util/diff/diff.go @@ -142,10 +142,6 @@ func objectReflectDiff(path *field.Path, a, b reflect.Value) []diff { } if sub := objectReflectDiff(path.Child(a.Type().Field(i).Name), a.Field(i), b.Field(i)); len(sub) > 0 { changes = append(changes, sub...) - } else { - if !reflect.DeepEqual(a.Field(i).Interface(), b.Field(i).Interface()) { - changes = append(changes, diff{path: path, a: a.Field(i).Interface(), b: b.Field(i).Interface()}) - } } } return changes @@ -178,21 +174,18 @@ func objectReflectDiff(path *field.Path, a, b reflect.Value) []diff { } return nil } + var diffs []diff for i := 0; i < l; i++ { if !reflect.DeepEqual(a.Index(i), b.Index(i)) { - return objectReflectDiff(path.Index(i), a.Index(i), b.Index(i)) + diffs = append(diffs, objectReflectDiff(path.Index(i), a.Index(i), b.Index(i))...) } } - var diffs []diff for i := l; i < lA; i++ { diffs = append(diffs, diff{path: path.Index(i), a: a.Index(i), b: nil}) } for i := l; i < lB; i++ { diffs = append(diffs, diff{path: path.Index(i), a: nil, b: b.Index(i)}) } - if len(diffs) == 0 { - diffs = append(diffs, diff{path: path, a: a, b: b}) - } return diffs case reflect.Map: if reflect.DeepEqual(a.Interface(), b.Interface()) { diff --git a/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go index 12bef075..d2d3ad8c 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go +++ b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go @@ -110,7 +110,7 @@ func (s *SpdyRoundTripper) Dial(req *http.Request) (net.Conn, error) { func (s *SpdyRoundTripper) dial(req *http.Request) (net.Conn, error) { proxier := s.proxier if proxier == nil { - proxier = http.ProxyFromEnvironment + proxier = utilnet.NewProxierWithNoProxyCIDR(http.ProxyFromEnvironment) } proxyURL, err := proxier(req) if err != nil { diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/http.go b/vendor/k8s.io/apimachinery/pkg/util/net/http.go index 77488388..b544a60a 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/net/http.go +++ b/vendor/k8s.io/apimachinery/pkg/util/net/http.go @@ -26,6 +26,7 @@ import ( "net/http" "net/url" "os" + "path" "strconv" "strings" @@ -33,6 +34,26 @@ import ( "golang.org/x/net/http2" ) +// JoinPreservingTrailingSlash does a path.Join of the specified elements, +// preserving any trailing slash on the last non-empty segment +func JoinPreservingTrailingSlash(elem ...string) string { + // do the basic path join + result := path.Join(elem...) + + // find the last non-empty segment + for i := len(elem) - 1; i >= 0; i-- { + if len(elem[i]) > 0 { + // if the last segment ended in a slash, ensure our result does as well + if strings.HasSuffix(elem[i], "/") && !strings.HasSuffix(result, "/") { + result += "/" + } + break + } + } + + return result +} + // IsProbableEOF returns true if the given error resembles a connection termination // scenario that would justify assuming that the watch is empty. // These errors are what the Go http stack returns back to us which are general @@ -235,8 +256,11 @@ func isDefault(transportProxier func(*http.Request) (*url.URL, error)) bool { // NewProxierWithNoProxyCIDR constructs a Proxier function that respects CIDRs in NO_PROXY and delegates if // no matching CIDRs are found func NewProxierWithNoProxyCIDR(delegate func(req *http.Request) (*url.URL, error)) func(req *http.Request) (*url.URL, error) { - // we wrap the default method, so we only need to perform our check if the NO_PROXY envvar has a CIDR in it + // we wrap the default method, so we only need to perform our check if the NO_PROXY (or no_proxy) envvar has a CIDR in it noProxyEnv := os.Getenv("NO_PROXY") + if noProxyEnv == "" { + noProxyEnv = os.Getenv("no_proxy") + } noProxyRules := strings.Split(noProxyEnv, ",") cidrs := []*net.IPNet{} diff --git a/vendor/k8s.io/apimachinery/pkg/util/rand/rand.go b/vendor/k8s.io/apimachinery/pkg/util/rand/rand.go deleted file mode 100644 index 4c593b3c..00000000 --- a/vendor/k8s.io/apimachinery/pkg/util/rand/rand.go +++ /dev/null @@ -1,95 +0,0 @@ -/* -Copyright 2015 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 rand provides utilities related to randomization. -package rand - -import ( - "math/rand" - "sync" - "time" -) - -var rng = struct { - sync.Mutex - rand *rand.Rand -}{ - rand: rand.New(rand.NewSource(time.Now().UTC().UnixNano())), -} - -// Intn generates an integer in range [0,max). -// By design this should panic if input is invalid, <= 0. -func Intn(max int) int { - rng.Lock() - defer rng.Unlock() - return rng.rand.Intn(max) -} - -// IntnRange generates an integer in range [min,max). -// By design this should panic if input is invalid, <= 0. -func IntnRange(min, max int) int { - rng.Lock() - defer rng.Unlock() - return rng.rand.Intn(max-min) + min -} - -// IntnRange generates an int64 integer in range [min,max). -// By design this should panic if input is invalid, <= 0. -func Int63nRange(min, max int64) int64 { - rng.Lock() - defer rng.Unlock() - return rng.rand.Int63n(max-min) + min -} - -// Seed seeds the rng with the provided seed. -func Seed(seed int64) { - rng.Lock() - defer rng.Unlock() - - rng.rand = rand.New(rand.NewSource(seed)) -} - -// Perm returns, as a slice of n ints, a pseudo-random permutation of the integers [0,n) -// from the default Source. -func Perm(n int) []int { - rng.Lock() - defer rng.Unlock() - return rng.rand.Perm(n) -} - -// We omit vowels from the set of available characters to reduce the chances -// of "bad words" being formed. -var alphanums = []rune("bcdfghjklmnpqrstvwxz2456789") - -// String generates a random alphanumeric string, without vowels, which is n -// characters long. This will panic if n is less than zero. -func String(length int) string { - b := make([]rune, length) - for i := range b { - b[i] = alphanums[Intn(len(alphanums))] - } - return string(b) -} - -// SafeEncodeString encodes s using the same characters as rand.String. This reduces the chances of bad words and -// ensures that strings generated from hash functions appear consistent throughout the API. -func SafeEncodeString(s string) string { - r := make([]rune, len(s)) - for i, b := range []rune(s) { - r[i] = alphanums[(int(b) % len(alphanums))] - } - return string(r) -} diff --git a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go index 748174e1..442dde7d 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go +++ b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go @@ -128,7 +128,9 @@ func (r *rudimentaryErrorBackoff) OnError(error) { r.lastErrorTimeLock.Lock() defer r.lastErrorTimeLock.Unlock() d := time.Since(r.lastErrorTime) - if d < r.minPeriod { + if d < r.minPeriod && d >= 0 { + // If the time moves backwards for any reason, do nothing + // TODO: remove check "d >= 0" after go 1.8 is no longer supported time.Sleep(r.minPeriod - d) } r.lastErrorTime = time.Now() diff --git a/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go b/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go index 8884c738..01014f9d 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go +++ b/vendor/k8s.io/apimachinery/pkg/util/strategicpatch/patch.go @@ -515,6 +515,9 @@ func normalizeSliceOrder(toSort, order []interface{}, mergeKey string, kind refl return nil, err } toSort, toDelete, err = extractToDeleteItems(toSort) + if err != nil { + return nil, err + } } sort.SliceStable(toSort, func(i, j int) bool { @@ -554,7 +557,13 @@ func diffLists(original, modified []interface{}, t reflect.Type, mergeKey string switch kind { case reflect.Map: patchList, deleteList, err = diffListsOfMaps(original, modified, t, mergeKey, diffOptions) + if err != nil { + return nil, nil, nil, err + } patchList, err = normalizeSliceOrder(patchList, modified, mergeKey, kind) + if err != nil { + return nil, nil, nil, err + } orderSame, err := isOrderSame(original, modified, mergeKey) if err != nil { return nil, nil, nil, err @@ -580,6 +589,9 @@ func diffLists(original, modified []interface{}, t reflect.Type, mergeKey string return nil, nil, nil, mergepatch.ErrNoListOfLists default: patchList, deleteList, err = diffListsOfScalars(original, modified, diffOptions) + if err != nil { + return nil, nil, nil, err + } patchList, err = normalizeSliceOrder(patchList, modified, mergeKey, kind) // generate the setElementOrder list when there are content changes or order changes if diffOptions.SetElementOrder && ((!diffOptions.IgnoreDeletions && len(deleteList) > 0) || @@ -1054,7 +1066,7 @@ func applyRetainKeysDirective(original, patch map[string]interface{}, options Me // Then, sort them by the relative order in setElementOrder, patch list and live list. // The precedence is $setElementOrder > order in patch list > order in live list. // This function will delete the item after merging it to prevent process it again in the future. -// Ref: https://git.k8s.io/community/contributors/design-proposals/preserve-order-in-strategic-merge-patch.md +// Ref: https://git.k8s.io/community/contributors/design-proposals/cli/preserve-order-in-strategic-merge-patch.md func mergePatchIntoOriginal(original, patch map[string]interface{}, t reflect.Type, mergeOptions MergeOptions) error { for key, patchV := range patch { // Do nothing if there is no ordering directive diff --git a/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go b/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go index 43c779a1..31705dee 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go +++ b/vendor/k8s.io/apimachinery/pkg/util/validation/field/errors.go @@ -19,6 +19,7 @@ package field import ( "fmt" "reflect" + "strconv" "strings" utilerrors "k8s.io/apimachinery/pkg/util/errors" @@ -175,7 +176,11 @@ func Invalid(field *Path, value interface{}, detail string) *Error { func NotSupported(field *Path, value interface{}, validValues []string) *Error { detail := "" if validValues != nil && len(validValues) > 0 { - detail = "supported values: " + strings.Join(validValues, ", ") + quotedValues := make([]string, len(validValues)) + for i, v := range validValues { + quotedValues[i] = strconv.Quote(v) + } + detail = "supported values: " + strings.Join(quotedValues, ", ") } return &Error{ErrorTypeNotSupported, field.String(), value, detail} } diff --git a/vendor/k8s.io/apiserver/pkg/features/kube_features.go b/vendor/k8s.io/apiserver/pkg/features/kube_features.go index d5b52fd8..57bab8b0 100644 --- a/vendor/k8s.io/apiserver/pkg/features/kube_features.go +++ b/vendor/k8s.io/apiserver/pkg/features/kube_features.go @@ -58,6 +58,7 @@ const ( // owner: @smarterclayton // alpha: v1.8 + // beta: v1.9 // // Allow API clients to retrieve resource lists in chunks rather than // all at once. @@ -76,5 +77,5 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS AdvancedAuditing: {Default: true, PreRelease: utilfeature.Beta}, APIResponseCompression: {Default: false, PreRelease: utilfeature.Alpha}, Initializers: {Default: false, PreRelease: utilfeature.Alpha}, - APIListChunking: {Default: false, PreRelease: utilfeature.Alpha}, + APIListChunking: {Default: true, PreRelease: utilfeature.Beta}, } diff --git a/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go b/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go index ca926d0e..95ca0e77 100644 --- a/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go +++ b/vendor/k8s.io/apiserver/pkg/util/feature/feature_gate.go @@ -22,6 +22,7 @@ import ( "strconv" "strings" "sync" + "sync/atomic" "github.com/golang/glog" "github.com/spf13/pflag" @@ -46,7 +47,7 @@ var ( } // Special handling for a few gates. - specialFeatures = map[Feature]func(f *featureGate, val bool){ + specialFeatures = map[Feature]func(known map[Feature]FeatureSpec, enabled map[Feature]bool, val bool){ allAlphaGate: setUnsetAlphaGates, } @@ -76,6 +77,8 @@ type FeatureGate interface { // 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 // Enabled returns true if the key is enabled. Enabled(key Feature) bool // Add adds features to the featureGate. @@ -86,21 +89,23 @@ type FeatureGate interface { // featureGate implements FeatureGate as well as pflag.Value for flag parsing. type featureGate struct { - lock sync.RWMutex + special map[Feature]func(map[Feature]FeatureSpec, map[Feature]bool, bool) - known map[Feature]FeatureSpec - special map[Feature]func(*featureGate, bool) - enabled map[Feature]bool - - // is set to true when AddFlag is called. Note: initialization is not go-routine safe, lookup is + // 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(f *featureGate, val bool) { - for k, v := range f.known { +func setUnsetAlphaGates(known map[Feature]FeatureSpec, enabled map[Feature]bool, val bool) { + for k, v := range known { if v.PreRelease == Alpha { - if _, found := f.enabled[k]; !found { - f.enabled[k] = val + if _, found := enabled[k]; !found { + enabled[k] = val } } } @@ -110,30 +115,49 @@ func setUnsetAlphaGates(f *featureGate, val bool) { var _ pflag.Value = &featureGate{} func NewFeatureGate() *featureGate { - f := &featureGate{ - known: map[Feature]FeatureSpec{}, - special: specialFeatures, - enabled: map[Feature]bool{}, - } + known := map[Feature]FeatureSpec{} for k, v := range defaultFeatures { - f.known[k] = v + 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 +// 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 { 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 _, s := range strings.Split(value, ",") { if len(s) == 0 { continue } arr := strings.SplitN(s, "=", 2) k := Feature(strings.TrimSpace(arr[0])) - _, ok := f.known[Feature(k)] + _, ok := known[k] if !ok { return fmt.Errorf("unrecognized key: %s", k) } @@ -145,25 +169,62 @@ func (f *featureGate) Set(value string) error { if err != nil { return fmt.Errorf("invalid value of %s: %s, err: %v", k, v, err) } - f.enabled[k] = boolValue + enabled[k] = boolValue // Handle "special" features like "all alpha gates" if fn, found := f.special[k]; found { - fn(f, boolValue) + fn(known, enabled, boolValue) } } + // Persist changes + f.known.Store(known) + f.enabled.Store(enabled) + + glog.Infof("feature gates: %v", enabled) + return nil +} + +// 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) + _, ok := known[k] + if !ok { + return fmt.Errorf("unrecognized key: %s", k) + } + enabled[k] = v + // Handle "special" features like "all alpha gates" + if fn, found := f.special[k]; found { + fn(known, enabled, v) + } + } + + // Persist changes + f.known.Store(known) + f.enabled.Store(enabled) + glog.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 { - f.lock.RLock() - defer f.lock.RUnlock() - pairs := []string{} - for k, v := range f.enabled { + for k, v := range f.enabled.Load().(map[Feature]bool) { pairs = append(pairs, fmt.Sprintf("%s=%t", k, v)) } sort.Strings(pairs) @@ -183,31 +244,35 @@ func (f *featureGate) Add(features map[Feature]FeatureSpec) error { 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 := f.known[name]; found { + if existingSpec, found := known[name]; found { if existingSpec == spec { continue } return fmt.Errorf("feature gate %q with different spec already exists: %v", name, existingSpec) } - f.known[name] = spec + 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 { - f.lock.RLock() - defer f.lock.RUnlock() - - defaultValue := f.known[key].Default - if f.enabled != nil { - if v, ok := f.enabled[key]; ok { - return v - } + if v, ok := f.enabled.Load().(map[Feature]bool)[key]; ok { + return v } - return defaultValue + return f.known.Load().(map[Feature]FeatureSpec)[key].Default } // AddFlag adds a flag for setting global feature gates to the specified FlagSet. @@ -224,10 +289,8 @@ func (f *featureGate) AddFlag(fs *pflag.FlagSet) { // KnownFeatures returns a slice of strings describing the FeatureGate's known features. func (f *featureGate) KnownFeatures() []string { - f.lock.RLock() - defer f.lock.RUnlock() var known []string - for k, v := range f.known { + for k, v := range f.known.Load().(map[Feature]FeatureSpec) { pre := "" if v.PreRelease != GA { pre = fmt.Sprintf("%s - ", v.PreRelease) diff --git a/vendor/k8s.io/client-go/README.md b/vendor/k8s.io/client-go/README.md index afd03ced..ed1b887f 100644 --- a/vendor/k8s.io/client-go/README.md +++ b/vendor/k8s.io/client-go/README.md @@ -17,6 +17,7 @@ will give you head and doesn't handle the dependencies well. - [Compatibility: client-go <-> Kubernetes clusters](#compatibility-client-go---kubernetes-clusters) - [Compatibility matrix](#compatibility-matrix) - [Why do the 1.4 and 1.5 branch contain top-level folder named after the version?](#why-do-the-14-and-15-branch-contain-top-level-folder-named-after-the-version) +- [Kuberentes tags](#kubernetes-tags) - [How to get it](#how-to-get-it) - [How to use it](#how-to-use-it) - [Dependency management](#dependency-management) @@ -80,27 +81,29 @@ We will backport bugfixes--but not new features--into older versions of #### Compatibility matrix -| | Kubernetes 1.3 | Kubernetes 1.4 | Kubernetes 1.5 | Kubernetes 1.6 | Kubernetes 1.7 | +| | Kubernetes 1.4 | Kubernetes 1.5 | Kubernetes 1.6 | Kubernetes 1.7 | Kubernetes 1.8 | |---------------------|----------------|----------------|----------------|----------------|----------------| -| client-go 1.4 | + | ✓ | - | - | - | -| client-go 1.5 | + | + | - | - | - | -| client-go 2.0 | + | + | ✓ | - | - | -| client-go 3.0 | † | † | † | ✓ | - | -| client-go 4.0 | † | † | † | + | ✓ | -| client-go HEAD | † | † | † | + | + | +| client-go 1.4 | ✓ | - | - | - | - | +| client-go 1.5 | + | - | - | - | - | +| client-go 2.0 | +- | ✓ | +- | +- | +- | +| client-go 3.0 | +- | +- | ✓ | - | +- | +| client-go 4.0 | +- | +- | +- | ✓ | +- | +| client-go 5.0 | +- | +- | +- | +- | ✓ | +| client-go HEAD | +- | +- | +- | +- | + | Key: * `✓` Exactly the same features / API objects in both client-go and the Kubernetes version. -* `+` client-go has features or api objects that may not be present in the - Kubernetes cluster, but everything they have in common will work. Please - note that alpha APIs may vanish or change significantly in a single release. -* `†` client-go has new features or api objects, and some APIs running in the - cluster may have been deprecated and removed from client-go. But everything - they share in common (i.e., most APIs) will work. -* `-` The Kubernetes cluster has features the client-go library can't use - (additional API objects, etc). +* `+` client-go has features or API objects that may not be present in the + Kubernetes cluster, either due to that client-go has additional new API, or + that the server has removed old API. However, everything they have in + common (i.e., most APIs) will work. Please note that alpha APIs may vanish or + change significantly in a single release. +* `-` The Kubernetes cluster has features the client-go library can't use, + either due to the server has additional new API, or that client-go has + removed old API. However, everything they share in common (i.e., most APIs) + will work. See the [CHANGELOG](./CHANGELOG.md) for a detailed description of changes between client-go versions. @@ -112,6 +115,7 @@ between client-go versions. | client-go 2.0 | Kubernetes main repo, 1.5 branch | ✓ | | client-go 3.0 | Kubernetes main repo, 1.6 branch | ✓ | | client-go 4.0 | Kubernetes main repo, 1.7 branch | ✓ | +| client-go 5.0 | Kubernetes main repo, 1.8 branch | ✓ | | client-go HEAD | Kubernetes main repo, master branch | ✓ | Key: @@ -134,6 +138,23 @@ separate directories for each minor version. That soon proved to be a mistake. We are keeping the top-level folders in the 1.4 and 1.5 branches so that existing users won't be broken. +### Kubernetes tags + +As of October 2017, client-go is still a mirror of +[k8s.io/kubernetes/staging/src/client-go](https://github.com/kubernetes/kubernetes/tree/master/staging/src/k8s.io/client-go), +the code development is still done in the staging area. Since Kubernetes 1.8 +release, when syncing the code from the staging area, we also sync the Kubernetes +version tags to client-go, prefixed with "kubernetes-". For example, if you check +out the `kubernetes-v1.8.0` tag in client-go, the code you get is exactly the +same as if you check out the `v1.8.0` tag in kubernetes, and change directory to +`staging/src/k8s.io/client-go`. The purpose is to let users quickly find matching +commits among published repos, like +[sample-apiserver](https://github.com/kubernetes/sample-apiserver), +[apiextension-apiserver](https://github.com/kubernetes/apiextensions-apiserver), +etc. The Kubernetes version tag does NOT claim any backwards compatibility +guarantees for client-go. Please check the [semantic versions](#versioning) if +you care about backwards compatibility. + ### How to get it You can use `go get k8s.io/client-go/...` to get client-go, but **you will get diff --git a/vendor/k8s.io/client-go/discovery/discovery_client.go b/vendor/k8s.io/client-go/discovery/discovery_client.go index 59c69680..26319f49 100644 --- a/vendor/k8s.io/client-go/discovery/discovery_client.go +++ b/vendor/k8s.io/client-go/discovery/discovery_client.go @@ -23,11 +23,9 @@ import ( "sort" "strings" - "github.com/emicklei/go-restful-swagger12" "github.com/golang/protobuf/proto" "github.com/googleapis/gnostic/OpenAPIv2" - "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" @@ -48,7 +46,6 @@ type DiscoveryInterface interface { ServerGroupsInterface ServerResourcesInterface ServerVersionInterface - SwaggerSchemaInterface OpenAPISchemaInterface } @@ -92,12 +89,6 @@ type ServerVersionInterface interface { ServerVersion() (*version.Info, error) } -// SwaggerSchemaInterface has a method to retrieve the swagger schema. -type SwaggerSchemaInterface interface { - // SwaggerSchema retrieves and parses the swagger API schema the server supports. - SwaggerSchema(version schema.GroupVersion) (*swagger.ApiDeclaration, error) -} - // OpenAPISchemaInterface has a method to retrieve the open API schema. type OpenAPISchemaInterface interface { // OpenAPISchema retrieves and parses the swagger API schema the server supports. @@ -336,41 +327,6 @@ func (d *DiscoveryClient) ServerVersion() (*version.Info, error) { return &info, nil } -// SwaggerSchema retrieves and parses the swagger API schema the server supports. -// TODO: Replace usages with Open API. Tracked in https://github.com/kubernetes/kubernetes/issues/44589 -func (d *DiscoveryClient) SwaggerSchema(version schema.GroupVersion) (*swagger.ApiDeclaration, error) { - if version.Empty() { - return nil, fmt.Errorf("groupVersion cannot be empty") - } - - groupList, err := d.ServerGroups() - if err != nil { - return nil, err - } - groupVersions := metav1.ExtractGroupVersions(groupList) - // This check also takes care the case that kubectl is newer than the running endpoint - if stringDoesntExistIn(version.String(), groupVersions) { - return nil, fmt.Errorf("API version: %v is not supported by the server. Use one of: %v", version, groupVersions) - } - var path string - if len(d.LegacyPrefix) > 0 && version == v1.SchemeGroupVersion { - path = "/swaggerapi" + d.LegacyPrefix + "/" + version.Version - } else { - path = "/swaggerapi/apis/" + version.Group + "/" + version.Version - } - - body, err := d.restClient.Get().AbsPath(path).Do().Raw() - if err != nil { - return nil, err - } - var schema swagger.ApiDeclaration - err = json.Unmarshal(body, &schema) - if err != nil { - return nil, fmt.Errorf("got '%s': %v", string(body), err) - } - return &schema, nil -} - // OpenAPISchema fetches the open api schema using a rest client and parses the proto. func (d *DiscoveryClient) OpenAPISchema() (*openapi_v2.Document, error) { data, err := d.restClient.Get().AbsPath("/swagger-2.0.0.pb-v1").Do().Raw() diff --git a/vendor/k8s.io/client-go/kubernetes/clientset.go b/vendor/k8s.io/client-go/kubernetes/clientset.go index d0070914..310eb61b 100644 --- a/vendor/k8s.io/client-go/kubernetes/clientset.go +++ b/vendor/k8s.io/client-go/kubernetes/clientset.go @@ -20,6 +20,7 @@ import ( glog "github.com/golang/glog" discovery "k8s.io/client-go/discovery" admissionregistrationv1alpha1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1" + appsv1 "k8s.io/client-go/kubernetes/typed/apps/v1" appsv1beta1 "k8s.io/client-go/kubernetes/typed/apps/v1beta1" appsv1beta2 "k8s.io/client-go/kubernetes/typed/apps/v1beta2" authenticationv1 "k8s.io/client-go/kubernetes/typed/authentication/v1" @@ -54,8 +55,9 @@ type Interface interface { Admissionregistration() admissionregistrationv1alpha1.AdmissionregistrationV1alpha1Interface AppsV1beta1() appsv1beta1.AppsV1beta1Interface AppsV1beta2() appsv1beta2.AppsV1beta2Interface + AppsV1() appsv1.AppsV1Interface // Deprecated: please explicitly pick a version if possible. - Apps() appsv1beta2.AppsV1beta2Interface + Apps() appsv1.AppsV1Interface AuthenticationV1() authenticationv1.AuthenticationV1Interface // Deprecated: please explicitly pick a version if possible. Authentication() authenticationv1.AuthenticationV1Interface @@ -112,6 +114,7 @@ type Clientset struct { admissionregistrationV1alpha1 *admissionregistrationv1alpha1.AdmissionregistrationV1alpha1Client appsV1beta1 *appsv1beta1.AppsV1beta1Client appsV1beta2 *appsv1beta2.AppsV1beta2Client + appsV1 *appsv1.AppsV1Client authenticationV1 *authenticationv1.AuthenticationV1Client authenticationV1beta1 *authenticationv1beta1.AuthenticationV1beta1Client authorizationV1 *authorizationv1.AuthorizationV1Client @@ -156,10 +159,15 @@ func (c *Clientset) AppsV1beta2() appsv1beta2.AppsV1beta2Interface { return c.appsV1beta2 } +// AppsV1 retrieves the AppsV1Client +func (c *Clientset) AppsV1() appsv1.AppsV1Interface { + return c.appsV1 +} + // Deprecated: Apps retrieves the default version of AppsClient. // Please explicitly pick a version. -func (c *Clientset) Apps() appsv1beta2.AppsV1beta2Interface { - return c.appsV1beta2 +func (c *Clientset) Apps() appsv1.AppsV1Interface { + return c.appsV1 } // AuthenticationV1 retrieves the AuthenticationV1Client @@ -373,6 +381,10 @@ func NewForConfig(c *rest.Config) (*Clientset, error) { if err != nil { return nil, err } + cs.appsV1, err = appsv1.NewForConfig(&configShallowCopy) + if err != nil { + return nil, err + } cs.authenticationV1, err = authenticationv1.NewForConfig(&configShallowCopy) if err != nil { return nil, err @@ -473,6 +485,7 @@ func NewForConfigOrDie(c *rest.Config) *Clientset { cs.admissionregistrationV1alpha1 = admissionregistrationv1alpha1.NewForConfigOrDie(c) cs.appsV1beta1 = appsv1beta1.NewForConfigOrDie(c) cs.appsV1beta2 = appsv1beta2.NewForConfigOrDie(c) + cs.appsV1 = appsv1.NewForConfigOrDie(c) cs.authenticationV1 = authenticationv1.NewForConfigOrDie(c) cs.authenticationV1beta1 = authenticationv1beta1.NewForConfigOrDie(c) cs.authorizationV1 = authorizationv1.NewForConfigOrDie(c) @@ -505,6 +518,7 @@ func New(c rest.Interface) *Clientset { cs.admissionregistrationV1alpha1 = admissionregistrationv1alpha1.New(c) cs.appsV1beta1 = appsv1beta1.New(c) cs.appsV1beta2 = appsv1beta2.New(c) + cs.appsV1 = appsv1.New(c) cs.authenticationV1 = authenticationv1.New(c) cs.authenticationV1beta1 = authenticationv1beta1.New(c) cs.authorizationV1 = authorizationv1.New(c) diff --git a/vendor/k8s.io/client-go/kubernetes/doc.go b/vendor/k8s.io/client-go/kubernetes/doc.go index 2af84c66..d8e920a5 100644 --- a/vendor/k8s.io/client-go/kubernetes/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated clientset. package kubernetes diff --git a/vendor/k8s.io/client-go/kubernetes/scheme/doc.go b/vendor/k8s.io/client-go/kubernetes/scheme/doc.go index 5d8ec824..3ec2200d 100644 --- a/vendor/k8s.io/client-go/kubernetes/scheme/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/scheme/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package contains the scheme of the automatically generated clientset. package scheme diff --git a/vendor/k8s.io/client-go/kubernetes/scheme/register.go b/vendor/k8s.io/client-go/kubernetes/scheme/register.go index 0ee26387..984b8bc6 100644 --- a/vendor/k8s.io/client-go/kubernetes/scheme/register.go +++ b/vendor/k8s.io/client-go/kubernetes/scheme/register.go @@ -18,6 +18,7 @@ package scheme import ( admissionregistrationv1alpha1 "k8s.io/api/admissionregistration/v1alpha1" + appsv1 "k8s.io/api/apps/v1" appsv1beta1 "k8s.io/api/apps/v1beta1" appsv1beta2 "k8s.io/api/apps/v1beta2" authenticationv1 "k8s.io/api/authentication/v1" @@ -74,6 +75,7 @@ func AddToScheme(scheme *runtime.Scheme) { admissionregistrationv1alpha1.AddToScheme(scheme) appsv1beta1.AddToScheme(scheme) appsv1beta2.AddToScheme(scheme) + appsv1.AddToScheme(scheme) authenticationv1.AddToScheme(scheme) authenticationv1beta1.AddToScheme(scheme) authorizationv1.AddToScheme(scheme) diff --git a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go index ba8d10d3..cdaaf620 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/admissionregistration/v1alpha1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go new file mode 100644 index 00000000..20a09cd4 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/apps_client.go @@ -0,0 +1,88 @@ +/* +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 v1 + +import ( + v1 "k8s.io/api/apps/v1" + serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +type AppsV1Interface interface { + RESTClient() rest.Interface + DaemonSetsGetter +} + +// AppsV1Client is used to interact with features provided by the apps group. +type AppsV1Client struct { + restClient rest.Interface +} + +func (c *AppsV1Client) DaemonSets(namespace string) DaemonSetInterface { + return newDaemonSets(c, namespace) +} + +// NewForConfig creates a new AppsV1Client for the given config. +func NewForConfig(c *rest.Config) (*AppsV1Client, error) { + config := *c + if err := setConfigDefaults(&config); err != nil { + return nil, err + } + client, err := rest.RESTClientFor(&config) + if err != nil { + return nil, err + } + return &AppsV1Client{client}, nil +} + +// NewForConfigOrDie creates a new AppsV1Client for the given config and +// panics if there is an error in the config. +func NewForConfigOrDie(c *rest.Config) *AppsV1Client { + client, err := NewForConfig(c) + if err != nil { + panic(err) + } + return client +} + +// New creates a new AppsV1Client for the given RESTClient. +func New(c rest.Interface) *AppsV1Client { + return &AppsV1Client{c} +} + +func setConfigDefaults(config *rest.Config) error { + gv := v1.SchemeGroupVersion + config.GroupVersion = &gv + config.APIPath = "/apis" + config.NegotiatedSerializer = serializer.DirectCodecFactory{CodecFactory: scheme.Codecs} + + if config.UserAgent == "" { + config.UserAgent = rest.DefaultKubernetesUserAgent() + } + + return nil +} + +// RESTClient returns a RESTClient that is used to communicate +// with API server by this client implementation. +func (c *AppsV1Client) RESTClient() rest.Interface { + if c == nil { + return nil + } + return c.restClient +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go new file mode 100644 index 00000000..fd38c53c --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/daemonset.go @@ -0,0 +1,172 @@ +/* +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 v1 + +import ( + v1 "k8s.io/api/apps/v1" + meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// DaemonSetsGetter has a method to return a DaemonSetInterface. +// A group's client should implement this interface. +type DaemonSetsGetter interface { + DaemonSets(namespace string) DaemonSetInterface +} + +// DaemonSetInterface has methods to work with DaemonSet resources. +type DaemonSetInterface interface { + Create(*v1.DaemonSet) (*v1.DaemonSet, error) + Update(*v1.DaemonSet) (*v1.DaemonSet, error) + UpdateStatus(*v1.DaemonSet) (*v1.DaemonSet, error) + Delete(name string, options *meta_v1.DeleteOptions) error + DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error + Get(name string, options meta_v1.GetOptions) (*v1.DaemonSet, error) + List(opts meta_v1.ListOptions) (*v1.DaemonSetList, error) + Watch(opts meta_v1.ListOptions) (watch.Interface, error) + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.DaemonSet, err error) + DaemonSetExpansion +} + +// daemonSets implements DaemonSetInterface +type daemonSets struct { + client rest.Interface + ns string +} + +// newDaemonSets returns a DaemonSets +func newDaemonSets(c *AppsV1Client, namespace string) *daemonSets { + return &daemonSets{ + client: c.RESTClient(), + ns: namespace, + } +} + +// Get takes name of the daemonSet, and returns the corresponding daemonSet object, and an error if there is any. +func (c *daemonSets) Get(name string, options meta_v1.GetOptions) (result *v1.DaemonSet, err error) { + result = &v1.DaemonSet{} + err = c.client.Get(). + Namespace(c.ns). + Resource("daemonsets"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// List takes label and field selectors, and returns the list of DaemonSets that match those selectors. +func (c *daemonSets) List(opts meta_v1.ListOptions) (result *v1.DaemonSetList, err error) { + result = &v1.DaemonSetList{} + err = c.client.Get(). + Namespace(c.ns). + Resource("daemonsets"). + VersionedParams(&opts, scheme.ParameterCodec). + Do(). + Into(result) + return +} + +// Watch returns a watch.Interface that watches the requested daemonSets. +func (c *daemonSets) Watch(opts meta_v1.ListOptions) (watch.Interface, error) { + opts.Watch = true + return c.client.Get(). + Namespace(c.ns). + Resource("daemonsets"). + VersionedParams(&opts, scheme.ParameterCodec). + Watch() +} + +// Create takes the representation of a daemonSet and creates it. Returns the server's representation of the daemonSet, and an error, if there is any. +func (c *daemonSets) Create(daemonSet *v1.DaemonSet) (result *v1.DaemonSet, err error) { + result = &v1.DaemonSet{} + err = c.client.Post(). + Namespace(c.ns). + Resource("daemonsets"). + Body(daemonSet). + Do(). + Into(result) + return +} + +// Update takes the representation of a daemonSet and updates it. Returns the server's representation of the daemonSet, and an error, if there is any. +func (c *daemonSets) Update(daemonSet *v1.DaemonSet) (result *v1.DaemonSet, err error) { + result = &v1.DaemonSet{} + err = c.client.Put(). + Namespace(c.ns). + Resource("daemonsets"). + Name(daemonSet.Name). + Body(daemonSet). + Do(). + Into(result) + return +} + +// UpdateStatus was generated because the type contains a Status member. +// Add a +genclient:noStatus comment above the type to avoid generating UpdateStatus(). + +func (c *daemonSets) UpdateStatus(daemonSet *v1.DaemonSet) (result *v1.DaemonSet, err error) { + result = &v1.DaemonSet{} + err = c.client.Put(). + Namespace(c.ns). + Resource("daemonsets"). + Name(daemonSet.Name). + SubResource("status"). + Body(daemonSet). + Do(). + Into(result) + return +} + +// Delete takes name of the daemonSet and deletes it. Returns an error if one occurs. +func (c *daemonSets) Delete(name string, options *meta_v1.DeleteOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("daemonsets"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *daemonSets) DeleteCollection(options *meta_v1.DeleteOptions, listOptions meta_v1.ListOptions) error { + return c.client.Delete(). + Namespace(c.ns). + Resource("daemonsets"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched daemonSet. +func (c *daemonSets) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.DaemonSet, err error) { + result = &v1.DaemonSet{} + err = c.client.Patch(pt). + Namespace(c.ns). + Resource("daemonsets"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + return +} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go new file mode 100644 index 00000000..b6a2a467 --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/doc.go @@ -0,0 +1,18 @@ +/* +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. +*/ + +// This package has the automatically generated typed clients. +package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go new file mode 100644 index 00000000..face4d0b --- /dev/null +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1/generated_expansion.go @@ -0,0 +1,19 @@ +/* +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 v1 + +type DaemonSetExpansion interface{} diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go index 11b52389..1b50aa19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go index 6ecc1bad..e8d65fa2 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/apps/v1beta2/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta2 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go index 54673bfa..b6a2a467 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go index 11b52389..1b50aa19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authentication/v1beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go index 54673bfa..b6a2a467 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go index 11b52389..1b50aa19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/authorization/v1beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go index 54673bfa..b6a2a467 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go index a357dc25..de272bd1 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/autoscaling/v2beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v2beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go index 54673bfa..b6a2a467 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go index 11b52389..1b50aa19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v1beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go index d29bd3f4..7f1ef91b 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/batch/v2alpha1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v2alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go index 11b52389..1b50aa19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/certificates/v1beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go index 54673bfa..b6a2a467 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/core/v1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go index 11b52389..1b50aa19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/extensions/v1beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go index 54673bfa..b6a2a467 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/networking/v1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go index 11b52389..1b50aa19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/policy/v1beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go index 54673bfa..b6a2a467 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go index ba8d10d3..cdaaf620 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1alpha1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go index 11b52389..1b50aa19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/rbac/v1beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go index ba8d10d3..cdaaf620 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/scheduling/v1alpha1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/doc.go index ba8d10d3..cdaaf620 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/settings/v1alpha1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1alpha1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go index 54673bfa..b6a2a467 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1 diff --git a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go index 11b52389..1b50aa19 100644 --- a/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go +++ b/vendor/k8s.io/client-go/kubernetes/typed/storage/v1beta1/doc.go @@ -14,7 +14,5 @@ See the License for the specific language governing permissions and limitations under the License. */ -// This package is generated by client-gen with custom arguments. - // This package has the automatically generated typed clients. package v1beta1 diff --git a/vendor/k8s.io/client-go/pkg/version/base.go b/vendor/k8s.io/client-go/pkg/version/base.go index 54934ff5..c377705f 100644 --- a/vendor/k8s.io/client-go/pkg/version/base.go +++ b/vendor/k8s.io/client-go/pkg/version/base.go @@ -39,8 +39,8 @@ var ( // them irrelevant. (Next we'll take it out, which may muck with // scripts consuming the kubectl version output - but most of // these should be looking at gitVersion already anyways.) - gitMajor string = "1" // major version, always numeric - gitMinor string = "8+" // minor version, numeric possibly followed by "+" + gitMajor string = "" // major version, always numeric + gitMinor string = "" // minor version, numeric possibly followed by "+" // semantic version, derived by build scripts (see // https://github.com/kubernetes/kubernetes/blob/master/docs/design/versioning.md @@ -51,7 +51,7 @@ var ( // semantic version is a git hash, but the version itself is no // longer the direct output of "git describe", but a slight // translation to be semver compliant. - gitVersion string = "v1.8.0-beta.1+$Format:%h$" + gitVersion string = "v0.0.0-master+$Format:%h$" gitCommit string = "$Format:%H$" // sha1 from git, output of $(git rev-parse HEAD) gitTreeState string = "not a git tree" // state of git tree, either "clean" or "dirty" diff --git a/vendor/k8s.io/client-go/rest/config.go b/vendor/k8s.io/client-go/rest/config.go index 57848c8a..038fee94 100644 --- a/vendor/k8s.io/client-go/rest/config.go +++ b/vendor/k8s.io/client-go/rest/config.go @@ -420,5 +420,45 @@ func AnonymousClientConfig(config *Config) *Config { QPS: config.QPS, Burst: config.Burst, Timeout: config.Timeout, + Dial: config.Dial, + } +} + +// CopyConfig returns a copy of the given config +func CopyConfig(config *Config) *Config { + return &Config{ + Host: config.Host, + APIPath: config.APIPath, + Prefix: config.Prefix, + ContentConfig: config.ContentConfig, + Username: config.Username, + Password: config.Password, + BearerToken: config.BearerToken, + CacheDir: config.CacheDir, + Impersonate: ImpersonationConfig{ + Groups: config.Impersonate.Groups, + Extra: config.Impersonate.Extra, + UserName: config.Impersonate.UserName, + }, + AuthProvider: config.AuthProvider, + AuthConfigPersister: config.AuthConfigPersister, + TLSClientConfig: TLSClientConfig{ + Insecure: config.TLSClientConfig.Insecure, + ServerName: config.TLSClientConfig.ServerName, + CertFile: config.TLSClientConfig.CertFile, + KeyFile: config.TLSClientConfig.KeyFile, + CAFile: config.TLSClientConfig.CAFile, + CertData: config.TLSClientConfig.CertData, + KeyData: config.TLSClientConfig.KeyData, + CAData: config.TLSClientConfig.CAData, + }, + UserAgent: config.UserAgent, + Transport: config.Transport, + WrapTransport: config.WrapTransport, + QPS: config.QPS, + Burst: config.Burst, + RateLimiter: config.RateLimiter, + Timeout: config.Timeout, + Dial: config.Dial, } } diff --git a/vendor/k8s.io/client-go/rest/request.go b/vendor/k8s.io/client-go/rest/request.go index 1709824a..97ec03e0 100644 --- a/vendor/k8s.io/client-go/rest/request.go +++ b/vendor/k8s.io/client-go/rest/request.go @@ -823,6 +823,23 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) Resu } } +// truncateBody decides if the body should be truncated, based on the glog Verbosity. +func truncateBody(body string) string { + max := 0 + switch { + case bool(glog.V(9)): + max = 10240 + case bool(glog.V(8)): + max = 1024 + } + + if len(body) <= max { + return body + } + + return body[:max] + fmt.Sprintf(" [truncated %d chars]", len(body)-max) +} + // glogBody logs a body output that could be either JSON or protobuf. It explicitly guards against // allocating a new string for the body output unless necessary. Uses a simple heuristic to determine // whether the body is printable. @@ -831,9 +848,9 @@ func glogBody(prefix string, body []byte) { if bytes.IndexFunc(body, func(r rune) bool { return r < 0x0a }) != -1 { - glog.Infof("%s:\n%s", prefix, hex.Dump(body)) + glog.Infof("%s:\n%s", prefix, truncateBody(hex.Dump(body))) } else { - glog.Infof("%s: %s", prefix, string(body)) + glog.Infof("%s: %s", prefix, truncateBody(string(body))) } } } diff --git a/vendor/k8s.io/client-go/rest/url_utils.go b/vendor/k8s.io/client-go/rest/url_utils.go index 14f94650..a56d1838 100644 --- a/vendor/k8s.io/client-go/rest/url_utils.go +++ b/vendor/k8s.io/client-go/rest/url_utils.go @@ -56,6 +56,14 @@ func DefaultServerURL(host, apiPath string, groupVersion schema.GroupVersion, de // hostURL.Path should be blank. // // versionedAPIPath, a path relative to baseURL.Path, points to a versioned API base + versionedAPIPath := DefaultVersionedAPIPath(apiPath, groupVersion) + + return hostURL, versionedAPIPath, nil +} + +// DefaultVersionedAPIPathFor constructs the default path for the given group version, assuming the given +// API path, following the standard conventions of the Kubernetes API. +func DefaultVersionedAPIPath(apiPath string, groupVersion schema.GroupVersion) string { versionedAPIPath := path.Join("/", apiPath) // Add the version to the end of the path @@ -64,10 +72,9 @@ func DefaultServerURL(host, apiPath string, groupVersion schema.GroupVersion, de } else { versionedAPIPath = path.Join(versionedAPIPath, groupVersion.Version) - } - return hostURL, versionedAPIPath, nil + return versionedAPIPath } // defaultServerUrlFor is shared between IsConfigTransportTLS and RESTClientFor. It diff --git a/vendor/k8s.io/client-go/tools/cache/delta_fifo.go b/vendor/k8s.io/client-go/tools/cache/delta_fifo.go index a71db604..f06d1c5b 100644 --- a/vendor/k8s.io/client-go/tools/cache/delta_fifo.go +++ b/vendor/k8s.io/client-go/tools/cache/delta_fifo.go @@ -539,6 +539,10 @@ func (f *DeltaFIFO) Resync() error { f.lock.Lock() defer f.lock.Unlock() + if f.knownObjects == nil { + return nil + } + keys := f.knownObjects.ListKeys() for _, k := range keys { if err := f.syncKeyLocked(k); err != nil { diff --git a/vendor/k8s.io/client-go/tools/cache/fifo.go b/vendor/k8s.io/client-go/tools/cache/fifo.go index 3f6e2a94..ef70b7ac 100644 --- a/vendor/k8s.io/client-go/tools/cache/fifo.go +++ b/vendor/k8s.io/client-go/tools/cache/fifo.go @@ -169,7 +169,7 @@ func (f *FIFO) AddIfNotPresent(obj interface{}) error { return nil } -// addIfNotPresent assumes the fifo lock is already held and adds the the provided +// addIfNotPresent assumes the fifo lock is already held and adds the provided // item to the queue under id if it does not already exist. func (f *FIFO) addIfNotPresent(id string, obj interface{}) { f.populated = true diff --git a/vendor/k8s.io/client-go/tools/cache/listwatch.go b/vendor/k8s.io/client-go/tools/cache/listwatch.go index 55a90b63..db2329c5 100644 --- a/vendor/k8s.io/client-go/tools/cache/listwatch.go +++ b/vendor/k8s.io/client-go/tools/cache/listwatch.go @@ -25,6 +25,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/fields" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apimachinery/pkg/watch" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/pager" @@ -51,8 +52,7 @@ type WatchFunc func(options metav1.ListOptions) (watch.Interface, error) type ListWatch struct { ListFunc ListFunc WatchFunc WatchFunc - // DisableChunking requests no chunking for this list watcher. It has no effect in Kubernetes 1.8, but in - // 1.9 will allow a controller to opt out of chunking. + // DisableChunking requests no chunking for this list watcher. DisableChunking bool } @@ -93,9 +93,7 @@ func timeoutFromListOptions(options metav1.ListOptions) time.Duration { // List a set of apiserver resources func (lw *ListWatch) List(options metav1.ListOptions) (runtime.Object, error) { - // chunking will become the default for list watchers starting in Kubernetes 1.9, unless - // otherwise disabled. - if false && !lw.DisableChunking { + if !lw.DisableChunking { return pager.New(pager.SimplePageFunc(lw.ListFunc)).List(context.TODO(), options) } return lw.ListFunc(options) @@ -106,6 +104,8 @@ func (lw *ListWatch) Watch(options metav1.ListOptions) (watch.Interface, error) return lw.WatchFunc(options) } +// ListWatchUntil checks the provided conditions against the items returned by the list watcher, returning wait.ErrWaitTimeout +// if timeout is exceeded without all conditions returning true, or an error if an error occurs. // TODO: check for watch expired error and retry watch from latest point? Same issue exists for Until. func ListWatchUntil(timeout time.Duration, lw ListerWatcher, conditions ...watch.ConditionFunc) (*watch.Event, error) { if len(conditions) == 0 { @@ -169,5 +169,10 @@ func ListWatchUntil(timeout time.Duration, lw ListerWatcher, conditions ...watch return nil, err } - return watch.Until(timeout, watchInterface, remainingConditions...) + evt, err := watch.Until(timeout, watchInterface, remainingConditions...) + if err == watch.ErrWatchClosed { + // present a consistent error interface to callers + err = wait.ErrWaitTimeout + } + return evt, err } diff --git a/vendor/k8s.io/client-go/tools/cache/mutation_detector.go b/vendor/k8s.io/client-go/tools/cache/mutation_detector.go index 8c067cab..8e6338a1 100644 --- a/vendor/k8s.io/client-go/tools/cache/mutation_detector.go +++ b/vendor/k8s.io/client-go/tools/cache/mutation_detector.go @@ -26,7 +26,6 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/diff" - "k8s.io/client-go/kubernetes/scheme" ) var mutationDetectionEnabled = false @@ -96,18 +95,13 @@ func (d *defaultCacheMutationDetector) AddObject(obj interface{}) { if _, ok := obj.(DeletedFinalStateUnknown); ok { return } - if _, ok := obj.(runtime.Object); !ok { - return - } + if obj, ok := obj.(runtime.Object); ok { + copiedObj := obj.DeepCopyObject() - copiedObj, err := scheme.Scheme.Copy(obj.(runtime.Object)) - if err != nil { - return + d.lock.Lock() + defer d.lock.Unlock() + d.cachedObjs = append(d.cachedObjs, cacheObj{cached: obj, copied: copiedObj}) } - - d.lock.Lock() - defer d.lock.Unlock() - d.cachedObjs = append(d.cachedObjs, cacheObj{cached: obj, copied: copiedObj}) } func (d *defaultCacheMutationDetector) CompareObjects() { diff --git a/vendor/k8s.io/client-go/tools/cache/shared_informer.go b/vendor/k8s.io/client-go/tools/cache/shared_informer.go index 451ef88a..b11f0ebd 100644 --- a/vendor/k8s.io/client-go/tools/cache/shared_informer.go +++ b/vendor/k8s.io/client-go/tools/cache/shared_informer.go @@ -25,6 +25,7 @@ import ( "k8s.io/apimachinery/pkg/util/clock" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apimachinery/pkg/util/wait" + "k8s.io/client-go/util/buffer" "github.com/golang/glog" ) @@ -92,8 +93,13 @@ func NewSharedIndexInformer(lw ListerWatcher, objType runtime.Object, defaultEve // InformerSynced is a function that can be used to determine if an informer has synced. This is useful for determining if caches have synced. type InformerSynced func() bool -// syncedPollPeriod controls how often you look at the status of your sync funcs -const syncedPollPeriod = 100 * time.Millisecond +const ( + // syncedPollPeriod controls how often you look at the status of your sync funcs + syncedPollPeriod = 100 * time.Millisecond + + // initialBufferSize is the initial number of event notifications that can be buffered. + initialBufferSize = 1024 +) // WaitForCacheSync waits for caches to populate. It returns true if it was successful, false // if the controller should shutdown @@ -313,7 +319,7 @@ func (s *sharedIndexInformer) AddEventHandlerWithResyncPeriod(handler ResourceEv } } - listener := newProcessListener(handler, resyncPeriod, determineResyncPeriod(resyncPeriod, s.resyncCheckPeriod), s.clock.Now()) + listener := newProcessListener(handler, resyncPeriod, determineResyncPeriod(resyncPeriod, s.resyncCheckPeriod), s.clock.Now(), initialBufferSize) if !s.started { s.processor.addListener(listener) @@ -465,6 +471,13 @@ type processorListener struct { handler ResourceEventHandler + // pendingNotifications is an unbounded ring buffer that holds all notifications not yet distributed. + // There is one per listener, but a failing/stalled listener will have infinite pendingNotifications + // added until we OOM. + // TODO: This is no worse than before, since reflectors were backed by unbounded DeltaFIFOs, but + // we should try to do something better. + pendingNotifications buffer.RingGrowing + // requestedResyncPeriod is how frequently the listener wants a full resync from the shared informer requestedResyncPeriod time.Duration // resyncPeriod is how frequently the listener wants a full resync from the shared informer. This @@ -477,11 +490,12 @@ type processorListener struct { resyncLock sync.Mutex } -func newProcessListener(handler ResourceEventHandler, requestedResyncPeriod, resyncPeriod time.Duration, now time.Time) *processorListener { +func newProcessListener(handler ResourceEventHandler, requestedResyncPeriod, resyncPeriod time.Duration, now time.Time, bufferSize int) *processorListener { ret := &processorListener{ nextCh: make(chan interface{}), addCh: make(chan interface{}), handler: handler, + pendingNotifications: *buffer.NewRingGrowing(bufferSize), requestedResyncPeriod: requestedResyncPeriod, resyncPeriod: resyncPeriod, } @@ -499,25 +513,16 @@ func (p *processorListener) pop() { defer utilruntime.HandleCrash() defer close(p.nextCh) // Tell .run() to stop - // pendingNotifications is an unbounded slice that holds all notifications not yet distributed - // there is one per listener, but a failing/stalled listener will have infinite pendingNotifications - // added until we OOM. - // TODO This is no worse than before, since reflectors were backed by unbounded DeltaFIFOs, but - // we should try to do something better - var pendingNotifications []interface{} var nextCh chan<- interface{} var notification interface{} for { select { case nextCh <- notification: // Notification dispatched - if len(pendingNotifications) == 0 { // Nothing to pop + var ok bool + notification, ok = p.pendingNotifications.ReadOne() + if !ok { // Nothing to pop nextCh = nil // Disable this select case - notification = nil - } else { - notification = pendingNotifications[0] - pendingNotifications[0] = nil - pendingNotifications = pendingNotifications[1:] } case notificationToAdd, ok := <-p.addCh: if !ok { @@ -528,7 +533,7 @@ func (p *processorListener) pop() { notification = notificationToAdd nextCh = p.nextCh } else { // There is already a notification waiting to be dispatched - pendingNotifications = append(pendingNotifications, notificationToAdd) + p.pendingNotifications.WriteOne(notificationToAdd) } } } diff --git a/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go b/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go index 4eb350c4..1c201efb 100644 --- a/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go +++ b/vendor/k8s.io/client-go/tools/cache/thread_safe_store.go @@ -241,7 +241,7 @@ func (c *threadSafeMap) AddIndexers(newIndexers Indexers) error { // updateIndices modifies the objects location in the managed indexes, if this is an update, you must provide an oldObj // updateIndices must be called from a function that already has a lock on the cache -func (c *threadSafeMap) updateIndices(oldObj interface{}, newObj interface{}, key string) error { +func (c *threadSafeMap) updateIndices(oldObj interface{}, newObj interface{}, key string) { // if we got an old object, we need to remove it before we add it again if oldObj != nil { c.deleteFromIndices(oldObj, key) @@ -249,7 +249,7 @@ func (c *threadSafeMap) updateIndices(oldObj interface{}, newObj interface{}, ke for name, indexFunc := range c.indexers { indexValues, err := indexFunc(newObj) if err != nil { - return err + panic(fmt.Errorf("unable to calculate an index entry for key %q on index %q: %v", key, name, err)) } index := c.indices[name] if index == nil { @@ -266,16 +266,15 @@ func (c *threadSafeMap) updateIndices(oldObj interface{}, newObj interface{}, ke set.Insert(key) } } - return nil } // deleteFromIndices removes the object from each of the managed indexes // it is intended to be called from a function that already has a lock on the cache -func (c *threadSafeMap) deleteFromIndices(obj interface{}, key string) error { +func (c *threadSafeMap) deleteFromIndices(obj interface{}, key string) { for name, indexFunc := range c.indexers { indexValues, err := indexFunc(obj) if err != nil { - return err + panic(fmt.Errorf("unable to calculate an index entry for key %q on index %q: %v", key, name, err)) } index := c.indices[name] @@ -289,7 +288,6 @@ func (c *threadSafeMap) deleteFromIndices(obj interface{}, key string) error { } } } - return nil } func (c *threadSafeMap) Resync() error { diff --git a/vendor/k8s.io/client-go/util/buffer/ring_growing.go b/vendor/k8s.io/client-go/util/buffer/ring_growing.go new file mode 100644 index 00000000..86965a51 --- /dev/null +++ b/vendor/k8s.io/client-go/util/buffer/ring_growing.go @@ -0,0 +1,72 @@ +/* +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 buffer + +// RingGrowing is a growing ring buffer. +// Not thread safe. +type RingGrowing struct { + data []interface{} + n int // Size of Data + beg int // First available element + readable int // Number of data items available +} + +// NewRingGrowing constructs a new RingGrowing instance with provided parameters. +func NewRingGrowing(initialSize int) *RingGrowing { + return &RingGrowing{ + data: make([]interface{}, initialSize), + n: initialSize, + } +} + +// ReadOne reads (consumes) first item from the buffer if it is available, otherwise returns false. +func (r *RingGrowing) ReadOne() (data interface{}, ok bool) { + if r.readable == 0 { + return nil, false + } + r.readable-- + element := r.data[r.beg] + r.data[r.beg] = nil // Remove reference to the object to help GC + if r.beg == r.n-1 { + // Was the last element + r.beg = 0 + } else { + r.beg++ + } + return element, true +} + +// WriteOne adds an item to the end of the buffer, growing it if it is full. +func (r *RingGrowing) WriteOne(data interface{}) { + if r.readable == r.n { + // Time to grow + newN := r.n * 2 + newData := make([]interface{}, newN) + to := r.beg + r.readable + if to <= r.n { + copy(newData, r.data[r.beg:to]) + } else { + copied := copy(newData, r.data[r.beg:]) + copy(newData[copied:], r.data[:(to%r.n)]) + } + r.beg = 0 + r.data = newData + r.n = newN + } + r.data[(r.readable+r.beg)%r.n] = data + r.readable++ +} diff --git a/vendor/k8s.io/client-go/util/cert/io.go b/vendor/k8s.io/client-go/util/cert/io.go index 487456b6..a41f8054 100644 --- a/vendor/k8s.io/client-go/util/cert/io.go +++ b/vendor/k8s.io/client-go/util/cert/io.go @@ -66,10 +66,7 @@ func WriteCert(certPath string, data []byte) error { if err := os.MkdirAll(filepath.Dir(certPath), os.FileMode(0755)); err != nil { return err } - if err := ioutil.WriteFile(certPath, data, os.FileMode(0644)); err != nil { - return err - } - return nil + return ioutil.WriteFile(certPath, data, os.FileMode(0644)) } // WriteKey writes the pem-encoded key data to keyPath. @@ -80,10 +77,7 @@ func WriteKey(keyPath string, data []byte) error { if err := os.MkdirAll(filepath.Dir(keyPath), os.FileMode(0755)); err != nil { return err } - if err := ioutil.WriteFile(keyPath, data, os.FileMode(0600)); err != nil { - return err - } - return nil + return ioutil.WriteFile(keyPath, data, os.FileMode(0600)) } // LoadOrGenerateKeyFile looks for a key in the file at the given path. If it diff --git a/vendor/k8s.io/kubernetes/README.md b/vendor/k8s.io/kubernetes/README.md index a86767b3..87840067 100644 --- a/vendor/k8s.io/kubernetes/README.md +++ b/vendor/k8s.io/kubernetes/README.md @@ -1,6 +1,6 @@ # Kubernetes -[![Submit Queue Widget]][Submit Queue] [![GoDoc Widget]][GoDoc] +[![Submit Queue Widget]][Submit Queue] [![GoDoc Widget]][GoDoc] [![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/569/badge)](https://bestpractices.coreinfrastructure.org/projects/569) diff --git a/vendor/k8s.io/kubernetes/pkg/api/annotation_key_constants.go b/vendor/k8s.io/kubernetes/pkg/api/annotation_key_constants.go index e9354244..6a6827bb 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/annotation_key_constants.go +++ b/vendor/k8s.io/kubernetes/pkg/api/annotation_key_constants.go @@ -45,12 +45,6 @@ const ( // to one container of a pod. SeccompContainerAnnotationKeyPrefix string = "container.seccomp.security.alpha.kubernetes.io/" - // CreatedByAnnotation represents the key used to store the spec(json) - // used to create the resource. - // This field is deprecated in favor of ControllerRef (see #44407). - // TODO(#50720): Remove this field in v1.9. - CreatedByAnnotation = "kubernetes.io/created-by" - // PreferAvoidPodsAnnotationKey represents the key of preferAvoidPods data (json serialized) // in the Annotations of a Node. PreferAvoidPodsAnnotationKey string = "scheduler.alpha.kubernetes.io/preferAvoidPods" diff --git a/vendor/k8s.io/kubernetes/pkg/api/helper/helpers.go b/vendor/k8s.io/kubernetes/pkg/api/helper/helpers.go index 636d1dda..f352f580 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/helper/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/api/helper/helpers.go @@ -265,6 +265,11 @@ func IsIntegerResourceName(str string) bool { return integerResources.Has(str) || IsExtendedResourceName(api.ResourceName(str)) } +// Extended and HugePages resources +func IsScalarResourceName(name api.ResourceName) bool { + return IsExtendedResourceName(name) || IsHugePageResourceName(name) +} + // this function aims to check if the service's ClusterIP is set or not // the objective is not to perform validation here func IsServiceIPSet(service *api.Service) bool { diff --git a/vendor/k8s.io/kubernetes/pkg/api/install/install.go b/vendor/k8s.io/kubernetes/pkg/api/install/install.go index cd3879cc..5fbffe23 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/install/install.go +++ b/vendor/k8s.io/kubernetes/pkg/api/install/install.go @@ -24,11 +24,12 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/api/v1" ) func init() { - Install(api.GroupFactoryRegistry, api.Registry, api.Scheme) + Install(legacyscheme.GroupFactoryRegistry, legacyscheme.Registry, legacyscheme.Scheme) } // Install registers the API group and adds types to a scheme diff --git a/vendor/k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go b/vendor/k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go new file mode 100644 index 00000000..64c63a36 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/api/legacyscheme/scheme.go @@ -0,0 +1,46 @@ +/* +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 legacyscheme + +import ( + "os" + + "k8s.io/apimachinery/pkg/apimachinery/announced" + "k8s.io/apimachinery/pkg/apimachinery/registered" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/serializer" +) + +// GroupFactoryRegistry is the APIGroupFactoryRegistry (overlaps a bit with Registry, see comments in package for details) +var GroupFactoryRegistry = make(announced.APIGroupFactoryRegistry) + +// Registry is an instance of an API registry. This is an interim step to start removing the idea of a global +// API registry. +var Registry = registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS")) + +// 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) diff --git a/vendor/k8s.io/kubernetes/pkg/api/register.go b/vendor/k8s.io/kubernetes/pkg/api/register.go index 39562e5a..8029a957 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/register.go +++ b/vendor/k8s.io/kubernetes/pkg/api/register.go @@ -17,42 +17,17 @@ limitations under the License. package api import ( - "os" - - "k8s.io/apimachinery/pkg/apimachinery/announced" - "k8s.io/apimachinery/pkg/apimachinery/registered" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/apimachinery/pkg/runtime/serializer" ) -// GroupFactoryRegistry is the APIGroupFactoryRegistry (overlaps a bit with Registry, see comments in package for details) -var GroupFactoryRegistry = make(announced.APIGroupFactoryRegistry) - -// Registry is an instance of an API registry. This is an interim step to start removing the idea of a global -// API registry. -var Registry = registered.NewOrDie(os.Getenv("KUBE_API_VERSIONS")) - -// 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) - // GroupName is the group name use in this package const GroupName = "" // SchemeGroupVersion is group version used to register these objects var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} -// ParameterCodec handles versioning of objects that are converted to query parameters. -var ParameterCodec = runtime.NewParameterCodec(Scheme) - // Kind takes an unqualified kind and returns a Group qualified GroupKind func Kind(kind string) schema.GroupKind { return SchemeGroupVersion.WithKind(kind).GroupKind() diff --git a/vendor/k8s.io/kubernetes/pkg/api/types.go b/vendor/k8s.io/kubernetes/pkg/api/types.go index 92d45de6..f6d7aa89 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/types.go +++ b/vendor/k8s.io/kubernetes/pkg/api/types.go @@ -343,7 +343,7 @@ type PersistentVolumeSource struct { NFS *NFSVolumeSource // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime // +optional - RBD *RBDVolumeSource + RBD *RBDPersistentVolumeSource // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime // +optional Quobyte *QuobyteVolumeSource @@ -383,7 +383,7 @@ type PersistentVolumeSource struct { PortworxVolume *PortworxVolumeSource // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. // +optional - ScaleIO *ScaleIOVolumeSource + ScaleIO *ScaleIOPersistentVolumeSource // Local represents directly-attached storage with node affinity // +optional Local *LocalVolumeSource @@ -1006,6 +1006,37 @@ type RBDVolumeSource struct { ReadOnly bool } +// Represents a Rados Block Device mount that lasts the lifetime of a pod. +// RBD volumes support ownership management and SELinux relabeling. +type RBDPersistentVolumeSource struct { + // Required: CephMonitors is a collection of Ceph monitors + CephMonitors []string + // Required: RBDImage is the rados image name + RBDImage string + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // TODO: how do we prevent errors in the filesystem from compromising the machine + // +optional + FSType string + // Optional: RadosPool is the rados pool name,default is rbd + // +optional + RBDPool string + // Optional: RBDUser is the rados user name, default is admin + // +optional + RadosUser string + // Optional: Keyring is the path to key ring for RBDUser, default is /etc/ceph/keyring + // +optional + Keyring string + // Optional: SecretRef is reference to the authentication secret for User, default is empty. + // +optional + SecretRef *SecretReference + // Optional: Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + ReadOnly bool +} + // Represents a cinder volume resource in Openstack. A Cinder volume // must exist before mounting to a container. The volume must also be // in the same region as the kubelet. Cinder volumes support ownership @@ -1238,7 +1269,7 @@ type AzureDiskVolumeSource struct { // the ReadOnly setting in VolumeMounts. // +optional ReadOnly *bool - // Expected values Shared: mulitple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared + // Expected values Shared: multiple blob disks per storage account Dedicated: single blob disk per storage account Managed: azure managed data disk (only in managed availability set). defaults to shared Kind *AzureDataDiskKind } @@ -1254,13 +1285,13 @@ type ScaleIOVolumeSource struct { // Flag to enable/disable SSL communication with Gateway, default false // +optional SSLEnabled bool - // The name of the Protection Domain for the configured storage (defaults to "default"). + // The name of the ScaleIO Protection Domain for the configured storage. // +optional ProtectionDomain string - // The Storage Pool associated with the protection domain (defaults to "default"). + // The ScaleIO Storage Pool associated with the protection domain. // +optional StoragePool string - // Indicates whether the storage for a volume should be thick or thin (defaults to "thin"). + // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. // +optional StorageMode string // The name of a volume already created in the ScaleIO system @@ -1277,6 +1308,42 @@ type ScaleIOVolumeSource struct { ReadOnly bool } +// ScaleIOPersistentVolumeSource represents a persistent ScaleIO volume that can be defined +// by a an admin via a storage class, for instance. +type ScaleIOPersistentVolumeSource struct { + // The host address of the ScaleIO API Gateway. + Gateway string + // The name of the storage system as configured in ScaleIO. + System string + // SecretRef references to the secret for ScaleIO user and other + // sensitive information. If this is not provided, Login operation will fail. + SecretRef *SecretReference + // Flag to enable/disable SSL communication with Gateway, default false + // +optional + SSLEnabled bool + // The name of the ScaleIO Protection Domain for the configured storage. + // +optional + ProtectionDomain string + // The ScaleIO Storage Pool associated with the protection domain. + // +optional + StoragePool string + // Indicates whether the storage for a volume should be ThickProvisioned or ThinProvisioned. + // +optional + StorageMode string + // The name of a volume created in the ScaleIO system + // that is associated with this volume source. + VolumeName string + // Filesystem type to mount. + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. + // +optional + FSType string + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + ReadOnly bool +} + // Represents a StorageOS persistent volume resource. type StorageOSVolumeSource struct { // VolumeName is the human-readable name of the StorageOS volume. Volume @@ -2229,7 +2296,7 @@ type Taint struct { // TimeAdded represents the time at which the taint was added. // It is only written for NoExecute taints. // +optional - TimeAdded metav1.Time + TimeAdded *metav1.Time } type TaintEffect string @@ -3117,7 +3184,7 @@ type NodeConfigSource struct { type DaemonEndpoint struct { /* The port tag was not properly in quotes in earlier releases, so it must be - uppercased for backwards compat (since it was falling back to var name of + uppercase for backwards compatibility (since it was falling back to var name of 'Port'). */ @@ -4043,7 +4110,7 @@ const ( // BasicAuthPasswordKey is the key of the password or token for SecretTypeBasicAuth secrets BasicAuthPasswordKey = "password" - // SecretTypeSSHAuth contains data needed for SSH authetication. + // SecretTypeSSHAuth contains data needed for SSH authentication. // // Required field: // - Secret.Data["ssh-privatekey"] - private SSH key needed for authentication diff --git a/vendor/k8s.io/kubernetes/pkg/api/util/group_version.go b/vendor/k8s.io/kubernetes/pkg/api/util/group_version.go deleted file mode 100644 index fea2f17f..00000000 --- a/vendor/k8s.io/kubernetes/pkg/api/util/group_version.go +++ /dev/null @@ -1,48 +0,0 @@ -/* -Copyright 2015 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. -*/ - -// TODO: This GetVersion/GetGroup arrangement is temporary and will be replaced -// with a GroupAndVersion type. -package util - -import "strings" - -func GetVersion(groupVersion string) string { - s := strings.Split(groupVersion, "/") - if len(s) != 2 { - // e.g. return "v1" for groupVersion="v1" - return s[len(s)-1] - } - return s[1] -} - -func GetGroup(groupVersion string) string { - s := strings.Split(groupVersion, "/") - if len(s) == 1 { - // e.g. return "" for groupVersion="v1" - return "" - } - return s[0] -} - -// GetGroupVersion returns the "group/version". It returns "version" is if group -// is empty. It returns "group/" if version is empty. -func GetGroupVersion(group, version string) string { - if len(group) == 0 { - return version - } - return group + "/" + version -} diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/conversion.go b/vendor/k8s.io/kubernetes/pkg/api/v1/conversion.go index 3076db9c..c5b962a7 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/conversion.go @@ -235,7 +235,9 @@ func Convert_v1_ReplicationController_to_extensions_ReplicaSet(in *v1.Replicatio func Convert_v1_ReplicationControllerSpec_to_extensions_ReplicaSetSpec(in *v1.ReplicationControllerSpec, out *extensions.ReplicaSetSpec, s conversion.Scope) error { out.Replicas = *in.Replicas + out.MinReadySeconds = in.MinReadySeconds if in.Selector != nil { + out.Selector = new(metav1.LabelSelector) metav1.Convert_map_to_unversioned_LabelSelector(&in.Selector, out.Selector, s) } if in.Template != nil { @@ -252,6 +254,15 @@ func Convert_v1_ReplicationControllerStatus_to_extensions_ReplicaSetStatus(in *v out.ReadyReplicas = in.ReadyReplicas out.AvailableReplicas = in.AvailableReplicas out.ObservedGeneration = in.ObservedGeneration + for _, cond := range in.Conditions { + out.Conditions = append(out.Conditions, extensions.ReplicaSetCondition{ + Type: extensions.ReplicaSetConditionType(cond.Type), + Status: api.ConditionStatus(cond.Status), + LastTransitionTime: cond.LastTransitionTime, + Reason: cond.Reason, + Message: cond.Message, + }) + } return nil } @@ -294,6 +305,15 @@ func Convert_extensions_ReplicaSetStatus_to_v1_ReplicationControllerStatus(in *e out.ReadyReplicas = in.ReadyReplicas out.AvailableReplicas = in.AvailableReplicas out.ObservedGeneration = in.ObservedGeneration + for _, cond := range in.Conditions { + out.Conditions = append(out.Conditions, v1.ReplicationControllerCondition{ + Type: v1.ReplicationControllerConditionType(cond.Type), + Status: v1.ConditionStatus(cond.Status), + LastTransitionTime: cond.LastTransitionTime, + Reason: cond.Reason, + Message: cond.Message, + }) + } return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/defaults.go b/vendor/k8s.io/kubernetes/pkg/api/v1/defaults.go index 9bf082d3..02b1832d 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/defaults.go @@ -368,13 +368,28 @@ func SetDefaults_RBDVolumeSource(obj *v1.RBDVolumeSource) { } } +func SetDefaults_RBDPersistentVolumeSource(obj *v1.RBDPersistentVolumeSource) { + if obj.RBDPool == "" { + obj.RBDPool = "rbd" + } + if obj.RadosUser == "" { + obj.RadosUser = "admin" + } + if obj.Keyring == "" { + obj.Keyring = "/etc/ceph/keyring" + } +} + func SetDefaults_ScaleIOVolumeSource(obj *v1.ScaleIOVolumeSource) { - if obj.ProtectionDomain == "" { - obj.ProtectionDomain = "default" + if obj.StorageMode == "" { + obj.StorageMode = "ThinProvisioned" } - if obj.StoragePool == "" { - obj.StoragePool = "default" + if obj.FSType == "" { + obj.FSType = "xfs" } +} + +func SetDefaults_ScaleIOPersistentVolumeSource(obj *v1.ScaleIOPersistentVolumeSource) { if obj.StorageMode == "" { obj.StorageMode = "ThinProvisioned" } diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/generate.go b/vendor/k8s.io/kubernetes/pkg/api/v1/generate.go deleted file mode 100644 index 5ebe9a0e..00000000 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/generate.go +++ /dev/null @@ -1,65 +0,0 @@ -/* -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 v1 - -import ( - "fmt" - "k8s.io/api/core/v1" - - utilrand "k8s.io/apimachinery/pkg/util/rand" -) - -// NameGenerator generates names for objects. Some backends may have more information -// available to guide selection of new names and this interface hides those details. -type NameGenerator interface { - // GenerateName generates a valid name from the base name, adding a random suffix to the - // the base. If base is valid, the returned name must also be valid. The generator is - // responsible for knowing the maximum valid name length. - GenerateName(base string) string -} - -// GenerateName will resolve the object name of the provided v1.ObjectMeta to a generated version if -// necessary. It expects that validation for v1.ObjectMeta has already completed (that Base is a -// valid name) and that the NameGenerator generates a name that is also valid. -func GenerateName(u NameGenerator, meta *v1.ObjectMeta) { - if len(meta.GenerateName) == 0 || len(meta.Name) != 0 { - return - } - meta.Name = u.GenerateName(meta.GenerateName) -} - -// simpleNameGenerator generates random names. -type simpleNameGenerator struct{} - -// SimpleNameGenerator is a generator that returns the name plus a random suffix of five alphanumerics -// when a name is requested. The string is guaranteed to not exceed the length of a standard Kubernetes -// name (63 characters) -var SimpleNameGenerator NameGenerator = simpleNameGenerator{} - -const ( - // TODO: make this flexible for non-core resources with alternate naming rules. - maxNameLength = 63 - randomLength = 5 - maxGeneratedNameLength = maxNameLength - randomLength -) - -func (simpleNameGenerator) GenerateName(base string) string { - if len(base) > maxGeneratedNameLength { - base = base[:maxGeneratedNameLength] - } - return fmt.Sprintf("%s%s", base, utilrand.String(randomLength)) -} diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/helper/helpers.go b/vendor/k8s.io/kubernetes/pkg/api/v1/helper/helpers.go index 0e6a48d8..92cacf8d 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/helper/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/helper/helpers.go @@ -88,12 +88,18 @@ func OpaqueIntResourceName(name string) v1.ResourceName { var overcommitBlacklist = sets.NewString(string(v1.ResourceNvidiaGPU)) // IsOvercommitAllowed returns true if the resource is in the default -// namespace and not blacklisted. +// namespace and not blacklisted and is not hugepages. func IsOvercommitAllowed(name v1.ResourceName) bool { return IsDefaultNamespaceResource(name) && + !IsHugePageResourceName(name) && !overcommitBlacklist.Has(string(name)) } +// Extended and Hugepages resources +func IsScalarResourceName(name v1.ResourceName) bool { + return IsExtendedResourceName(name) || IsHugePageResourceName(name) +} + // this function aims to check if the service's ClusterIP is set or not // the objective is not to perform validation here func IsServiceIPSet(service *v1.Service) bool { diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go index 716ca05e..e16af3ad 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.conversion.go @@ -305,6 +305,8 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_api_ProjectedVolumeSource_To_v1_ProjectedVolumeSource, Convert_v1_QuobyteVolumeSource_To_api_QuobyteVolumeSource, Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource, + Convert_v1_RBDPersistentVolumeSource_To_api_RBDPersistentVolumeSource, + Convert_api_RBDPersistentVolumeSource_To_v1_RBDPersistentVolumeSource, Convert_v1_RBDVolumeSource_To_api_RBDVolumeSource, Convert_api_RBDVolumeSource_To_v1_RBDVolumeSource, Convert_v1_RangeAllocation_To_api_RangeAllocation, @@ -333,6 +335,8 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_api_ResourceRequirements_To_v1_ResourceRequirements, Convert_v1_SELinuxOptions_To_api_SELinuxOptions, Convert_api_SELinuxOptions_To_v1_SELinuxOptions, + Convert_v1_ScaleIOPersistentVolumeSource_To_api_ScaleIOPersistentVolumeSource, + Convert_api_ScaleIOPersistentVolumeSource_To_v1_ScaleIOPersistentVolumeSource, Convert_v1_ScaleIOVolumeSource_To_api_ScaleIOVolumeSource, Convert_api_ScaleIOVolumeSource_To_v1_ScaleIOVolumeSource, Convert_v1_Secret_To_api_Secret, @@ -3124,7 +3128,7 @@ func autoConvert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource(in *v1. out.HostPath = (*api.HostPathVolumeSource)(unsafe.Pointer(in.HostPath)) out.Glusterfs = (*api.GlusterfsVolumeSource)(unsafe.Pointer(in.Glusterfs)) out.NFS = (*api.NFSVolumeSource)(unsafe.Pointer(in.NFS)) - out.RBD = (*api.RBDVolumeSource)(unsafe.Pointer(in.RBD)) + out.RBD = (*api.RBDPersistentVolumeSource)(unsafe.Pointer(in.RBD)) out.ISCSI = (*api.ISCSIVolumeSource)(unsafe.Pointer(in.ISCSI)) out.Cinder = (*api.CinderVolumeSource)(unsafe.Pointer(in.Cinder)) out.CephFS = (*api.CephFSPersistentVolumeSource)(unsafe.Pointer(in.CephFS)) @@ -3137,7 +3141,7 @@ func autoConvert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource(in *v1. out.AzureDisk = (*api.AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*api.PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) out.PortworxVolume = (*api.PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) - out.ScaleIO = (*api.ScaleIOVolumeSource)(unsafe.Pointer(in.ScaleIO)) + out.ScaleIO = (*api.ScaleIOPersistentVolumeSource)(unsafe.Pointer(in.ScaleIO)) out.Local = (*api.LocalVolumeSource)(unsafe.Pointer(in.Local)) out.StorageOS = (*api.StorageOSPersistentVolumeSource)(unsafe.Pointer(in.StorageOS)) return nil @@ -3154,7 +3158,7 @@ func autoConvert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(in *api out.HostPath = (*v1.HostPathVolumeSource)(unsafe.Pointer(in.HostPath)) out.Glusterfs = (*v1.GlusterfsVolumeSource)(unsafe.Pointer(in.Glusterfs)) out.NFS = (*v1.NFSVolumeSource)(unsafe.Pointer(in.NFS)) - out.RBD = (*v1.RBDVolumeSource)(unsafe.Pointer(in.RBD)) + out.RBD = (*v1.RBDPersistentVolumeSource)(unsafe.Pointer(in.RBD)) out.Quobyte = (*v1.QuobyteVolumeSource)(unsafe.Pointer(in.Quobyte)) out.ISCSI = (*v1.ISCSIVolumeSource)(unsafe.Pointer(in.ISCSI)) out.FlexVolume = (*v1.FlexVolumeSource)(unsafe.Pointer(in.FlexVolume)) @@ -3167,7 +3171,7 @@ func autoConvert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(in *api out.AzureDisk = (*v1.AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*v1.PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) out.PortworxVolume = (*v1.PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) - out.ScaleIO = (*v1.ScaleIOVolumeSource)(unsafe.Pointer(in.ScaleIO)) + out.ScaleIO = (*v1.ScaleIOPersistentVolumeSource)(unsafe.Pointer(in.ScaleIO)) out.Local = (*v1.LocalVolumeSource)(unsafe.Pointer(in.Local)) out.StorageOS = (*v1.StorageOSPersistentVolumeSource)(unsafe.Pointer(in.StorageOS)) return nil @@ -4062,6 +4066,40 @@ func Convert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(in *api.QuobyteVo return autoConvert_api_QuobyteVolumeSource_To_v1_QuobyteVolumeSource(in, out, s) } +func autoConvert_v1_RBDPersistentVolumeSource_To_api_RBDPersistentVolumeSource(in *v1.RBDPersistentVolumeSource, out *api.RBDPersistentVolumeSource, s conversion.Scope) error { + out.CephMonitors = *(*[]string)(unsafe.Pointer(&in.CephMonitors)) + out.RBDImage = in.RBDImage + out.FSType = in.FSType + out.RBDPool = in.RBDPool + out.RadosUser = in.RadosUser + out.Keyring = in.Keyring + out.SecretRef = (*api.SecretReference)(unsafe.Pointer(in.SecretRef)) + out.ReadOnly = in.ReadOnly + return nil +} + +// Convert_v1_RBDPersistentVolumeSource_To_api_RBDPersistentVolumeSource is an autogenerated conversion function. +func Convert_v1_RBDPersistentVolumeSource_To_api_RBDPersistentVolumeSource(in *v1.RBDPersistentVolumeSource, out *api.RBDPersistentVolumeSource, s conversion.Scope) error { + return autoConvert_v1_RBDPersistentVolumeSource_To_api_RBDPersistentVolumeSource(in, out, s) +} + +func autoConvert_api_RBDPersistentVolumeSource_To_v1_RBDPersistentVolumeSource(in *api.RBDPersistentVolumeSource, out *v1.RBDPersistentVolumeSource, s conversion.Scope) error { + out.CephMonitors = *(*[]string)(unsafe.Pointer(&in.CephMonitors)) + out.RBDImage = in.RBDImage + out.FSType = in.FSType + out.RBDPool = in.RBDPool + out.RadosUser = in.RadosUser + out.Keyring = in.Keyring + out.SecretRef = (*v1.SecretReference)(unsafe.Pointer(in.SecretRef)) + out.ReadOnly = in.ReadOnly + return nil +} + +// Convert_api_RBDPersistentVolumeSource_To_v1_RBDPersistentVolumeSource is an autogenerated conversion function. +func Convert_api_RBDPersistentVolumeSource_To_v1_RBDPersistentVolumeSource(in *api.RBDPersistentVolumeSource, out *v1.RBDPersistentVolumeSource, s conversion.Scope) error { + return autoConvert_api_RBDPersistentVolumeSource_To_v1_RBDPersistentVolumeSource(in, out, s) +} + func autoConvert_v1_RBDVolumeSource_To_api_RBDVolumeSource(in *v1.RBDVolumeSource, out *api.RBDVolumeSource, s conversion.Scope) error { out.CephMonitors = *(*[]string)(unsafe.Pointer(&in.CephMonitors)) out.RBDImage = in.RBDImage @@ -4458,6 +4496,44 @@ func Convert_api_SELinuxOptions_To_v1_SELinuxOptions(in *api.SELinuxOptions, out return autoConvert_api_SELinuxOptions_To_v1_SELinuxOptions(in, out, s) } +func autoConvert_v1_ScaleIOPersistentVolumeSource_To_api_ScaleIOPersistentVolumeSource(in *v1.ScaleIOPersistentVolumeSource, out *api.ScaleIOPersistentVolumeSource, s conversion.Scope) error { + out.Gateway = in.Gateway + out.System = in.System + out.SecretRef = (*api.SecretReference)(unsafe.Pointer(in.SecretRef)) + out.SSLEnabled = in.SSLEnabled + out.ProtectionDomain = in.ProtectionDomain + out.StoragePool = in.StoragePool + out.StorageMode = in.StorageMode + out.VolumeName = in.VolumeName + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +// Convert_v1_ScaleIOPersistentVolumeSource_To_api_ScaleIOPersistentVolumeSource is an autogenerated conversion function. +func Convert_v1_ScaleIOPersistentVolumeSource_To_api_ScaleIOPersistentVolumeSource(in *v1.ScaleIOPersistentVolumeSource, out *api.ScaleIOPersistentVolumeSource, s conversion.Scope) error { + return autoConvert_v1_ScaleIOPersistentVolumeSource_To_api_ScaleIOPersistentVolumeSource(in, out, s) +} + +func autoConvert_api_ScaleIOPersistentVolumeSource_To_v1_ScaleIOPersistentVolumeSource(in *api.ScaleIOPersistentVolumeSource, out *v1.ScaleIOPersistentVolumeSource, s conversion.Scope) error { + out.Gateway = in.Gateway + out.System = in.System + out.SecretRef = (*v1.SecretReference)(unsafe.Pointer(in.SecretRef)) + out.SSLEnabled = in.SSLEnabled + out.ProtectionDomain = in.ProtectionDomain + out.StoragePool = in.StoragePool + out.StorageMode = in.StorageMode + out.VolumeName = in.VolumeName + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +// Convert_api_ScaleIOPersistentVolumeSource_To_v1_ScaleIOPersistentVolumeSource is an autogenerated conversion function. +func Convert_api_ScaleIOPersistentVolumeSource_To_v1_ScaleIOPersistentVolumeSource(in *api.ScaleIOPersistentVolumeSource, out *v1.ScaleIOPersistentVolumeSource, s conversion.Scope) error { + return autoConvert_api_ScaleIOPersistentVolumeSource_To_v1_ScaleIOPersistentVolumeSource(in, out, s) +} + func autoConvert_v1_ScaleIOVolumeSource_To_api_ScaleIOVolumeSource(in *v1.ScaleIOVolumeSource, out *api.ScaleIOVolumeSource, s conversion.Scope) error { out.Gateway = in.Gateway out.System = in.System @@ -5101,7 +5177,7 @@ func autoConvert_v1_Taint_To_api_Taint(in *v1.Taint, out *api.Taint, s conversio out.Key = in.Key out.Value = in.Value out.Effect = api.TaintEffect(in.Effect) - out.TimeAdded = in.TimeAdded + out.TimeAdded = (*meta_v1.Time)(unsafe.Pointer(in.TimeAdded)) return nil } @@ -5114,7 +5190,7 @@ func autoConvert_api_Taint_To_v1_Taint(in *api.Taint, out *v1.Taint, s conversio out.Key = in.Key out.Value = in.Value out.Effect = v1.TaintEffect(in.Effect) - out.TimeAdded = in.TimeAdded + out.TimeAdded = (*meta_v1.Time)(unsafe.Pointer(in.TimeAdded)) return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.defaults.go b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.defaults.go index c41d6ae3..9779d2a1 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.defaults.go +++ b/vendor/k8s.io/kubernetes/pkg/api/v1/zz_generated.defaults.go @@ -137,7 +137,7 @@ func SetObjectDefaults_PersistentVolume(in *v1.PersistentVolume) { SetDefaults_HostPathVolumeSource(in.Spec.PersistentVolumeSource.HostPath) } if in.Spec.PersistentVolumeSource.RBD != nil { - SetDefaults_RBDVolumeSource(in.Spec.PersistentVolumeSource.RBD) + SetDefaults_RBDPersistentVolumeSource(in.Spec.PersistentVolumeSource.RBD) } if in.Spec.PersistentVolumeSource.ISCSI != nil { SetDefaults_ISCSIVolumeSource(in.Spec.PersistentVolumeSource.ISCSI) @@ -146,7 +146,7 @@ func SetObjectDefaults_PersistentVolume(in *v1.PersistentVolume) { SetDefaults_AzureDiskVolumeSource(in.Spec.PersistentVolumeSource.AzureDisk) } if in.Spec.PersistentVolumeSource.ScaleIO != nil { - SetDefaults_ScaleIOVolumeSource(in.Spec.PersistentVolumeSource.ScaleIO) + SetDefaults_ScaleIOPersistentVolumeSource(in.Spec.PersistentVolumeSource.ScaleIO) } } diff --git a/vendor/k8s.io/kubernetes/pkg/api/validation/events.go b/vendor/k8s.io/kubernetes/pkg/api/validation/events.go index a255f58e..4aec88d5 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/validation/events.go +++ b/vendor/k8s.io/kubernetes/pkg/api/validation/events.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/util/validation" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" - apiutil "k8s.io/kubernetes/pkg/api/util" + "k8s.io/kubernetes/pkg/api/legacyscheme" ) // ValidateEvent makes sure that the event makes sense. @@ -63,12 +63,16 @@ func ValidateEvent(event *api.Event) field.ErrorList { // Check whether the kind in groupVersion is scoped at the root of the api hierarchy func isNamespacedKind(kind, groupVersion string) (bool, error) { - group := apiutil.GetGroup(groupVersion) - g, err := api.Registry.Group(group) + gv, err := schema.ParseGroupVersion(groupVersion) if err != nil { return false, err } - restMapping, err := g.RESTMapper.RESTMapping(schema.GroupKind{Group: group, Kind: kind}, apiutil.GetVersion(groupVersion)) + g, err := legacyscheme.Registry.Group(gv.Group) + if err != nil { + return false, err + } + + restMapping, err := g.RESTMapper.RESTMapping(schema.GroupKind{Group: gv.Group, Kind: kind}, gv.Version) if err != nil { return false, err } diff --git a/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go b/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go index 3d08bbe5..6ab51788 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go +++ b/vendor/k8s.io/kubernetes/pkg/api/validation/validation.go @@ -45,6 +45,7 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/helper" + "k8s.io/kubernetes/pkg/api/legacyscheme" apiservice "k8s.io/kubernetes/pkg/api/service" k8s_api_v1 "k8s.io/kubernetes/pkg/api/v1" v1helper "k8s.io/kubernetes/pkg/api/v1/helper" @@ -1087,6 +1088,17 @@ func validateRBDVolumeSource(rbd *api.RBDVolumeSource, fldPath *field.Path) fiel return allErrs } +func validateRBDPersistentVolumeSource(rbd *api.RBDPersistentVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(rbd.CephMonitors) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("monitors"), "")) + } + if len(rbd.RBDImage) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("image"), "")) + } + return allErrs +} + func validateCinderVolumeSource(cd *api.CinderVolumeSource, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if len(cd.VolumeID) == 0 { @@ -1233,6 +1245,20 @@ func validateScaleIOVolumeSource(sio *api.ScaleIOVolumeSource, fldPath *field.Pa return allErrs } +func validateScaleIOPersistentVolumeSource(sio *api.ScaleIOPersistentVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if sio.Gateway == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("gateway"), "")) + } + if sio.System == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("system"), "")) + } + if sio.VolumeName == "" { + allErrs = append(allErrs, field.Required(fldPath.Child("volumeName"), "")) + } + return allErrs +} + func validateLocalVolumeSource(ls *api.LocalVolumeSource, fldPath *field.Path) field.ErrorList { allErrs := field.ErrorList{} if ls.Path == "" { @@ -1379,7 +1405,7 @@ func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList { allErrs = append(allErrs, field.Forbidden(specPath.Child("rbd"), "may not specify more than 1 volume type")) } else { numVolumes++ - allErrs = append(allErrs, validateRBDVolumeSource(pv.Spec.RBD, specPath.Child("rbd"))...) + allErrs = append(allErrs, validateRBDPersistentVolumeSource(pv.Spec.RBD, specPath.Child("rbd"))...) } } if pv.Spec.Quobyte != nil { @@ -1477,7 +1503,7 @@ func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList { allErrs = append(allErrs, field.Forbidden(specPath.Child("scaleIO"), "may not specify more than 1 volume type")) } else { numVolumes++ - allErrs = append(allErrs, validateScaleIOVolumeSource(pv.Spec.ScaleIO, specPath.Child("scaleIO"))...) + allErrs = append(allErrs, validateScaleIOPersistentVolumeSource(pv.Spec.ScaleIO, specPath.Child("scaleIO"))...) } } if pv.Spec.Local != nil { @@ -1528,6 +1554,12 @@ func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList { func ValidatePersistentVolumeUpdate(newPv, oldPv *api.PersistentVolume) field.ErrorList { allErrs := field.ErrorList{} allErrs = ValidatePersistentVolume(newPv) + + // PersistentVolumeSource should be immutable after creation. + if !apiequality.Semantic.DeepEqual(newPv.Spec.PersistentVolumeSource, oldPv.Spec.PersistentVolumeSource) { + allErrs = append(allErrs, field.Forbidden(field.NewPath("spec", "persistentvolumesource"), "is immutable after creation")) + } + newPv.Status = oldPv.Status return allErrs } @@ -1755,7 +1787,7 @@ func validateObjectFieldSelector(fs *api.ObjectFieldSelector, expressions *sets. } else if len(fs.FieldPath) == 0 { allErrs = append(allErrs, field.Required(fldPath.Child("fieldPath"), "")) } else { - internalFieldPath, _, err := api.Scheme.ConvertFieldLabel(fs.APIVersion, "Pod", fs.FieldPath, "") + internalFieldPath, _, err := legacyscheme.Scheme.ConvertFieldLabel(fs.APIVersion, "Pod", fs.FieldPath, "") if err != nil { allErrs = append(allErrs, field.Invalid(fldPath.Child("fieldPath"), fs.FieldPath, fmt.Sprintf("error converting fieldPath: %v", err))) } else if !expressions.Has(internalFieldPath) { @@ -1923,7 +1955,11 @@ func ValidateVolumeMounts(mounts []api.VolumeMount, volumes sets.String, contain allErrs = append(allErrs, field.Invalid(idxPath.Child("mountPath"), mnt.MountPath, "must be unique")) } if !path.IsAbs(mnt.MountPath) { - allErrs = append(allErrs, field.Invalid(idxPath.Child("mountPath"), mnt.MountPath, "must be an absolute path")) + // also allow windows absolute path + p := mnt.MountPath + if len(p) < 2 || ((p[0] < 'A' || p[0] > 'Z') && (p[0] < 'a' || p[0] > 'z')) || p[1] != ':' { + allErrs = append(allErrs, field.Invalid(idxPath.Child("mountPath"), mnt.MountPath, "must be an absolute path")) + } } mountpoints.Insert(mnt.MountPath) if len(mnt.SubPath) > 0 { diff --git a/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go index 938b7316..1b5c7962 100644 --- a/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go +++ b/vendor/k8s.io/kubernetes/pkg/api/zz_generated.deepcopy.go @@ -571,6 +571,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { in.(*QuobyteVolumeSource).DeepCopyInto(out.(*QuobyteVolumeSource)) return nil }, InType: reflect.TypeOf(&QuobyteVolumeSource{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*RBDPersistentVolumeSource).DeepCopyInto(out.(*RBDPersistentVolumeSource)) + return nil + }, InType: reflect.TypeOf(&RBDPersistentVolumeSource{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*RBDVolumeSource).DeepCopyInto(out.(*RBDVolumeSource)) return nil @@ -627,6 +631,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { in.(*SELinuxOptions).DeepCopyInto(out.(*SELinuxOptions)) return nil }, InType: reflect.TypeOf(&SELinuxOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { + in.(*ScaleIOPersistentVolumeSource).DeepCopyInto(out.(*ScaleIOPersistentVolumeSource)) + return nil + }, InType: reflect.TypeOf(&ScaleIOPersistentVolumeSource{})}, conversion.GeneratedDeepCopyFunc{Fn: func(in interface{}, out interface{}, c *conversion.Cloner) error { in.(*ScaleIOVolumeSource).DeepCopyInto(out.(*ScaleIOVolumeSource)) return nil @@ -3747,7 +3755,7 @@ func (in *PersistentVolumeSource) DeepCopyInto(out *PersistentVolumeSource) { if *in == nil { *out = nil } else { - *out = new(RBDVolumeSource) + *out = new(RBDPersistentVolumeSource) (*in).DeepCopyInto(*out) } } @@ -3864,7 +3872,7 @@ func (in *PersistentVolumeSource) DeepCopyInto(out *PersistentVolumeSource) { if *in == nil { *out = nil } else { - *out = new(ScaleIOVolumeSource) + *out = new(ScaleIOPersistentVolumeSource) (*in).DeepCopyInto(*out) } } @@ -4815,6 +4823,36 @@ func (in *QuobyteVolumeSource) DeepCopy() *QuobyteVolumeSource { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *RBDPersistentVolumeSource) DeepCopyInto(out *RBDPersistentVolumeSource) { + *out = *in + if in.CephMonitors != nil { + in, out := &in.CephMonitors, &out.CephMonitors + *out = make([]string, len(*in)) + copy(*out, *in) + } + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + if *in == nil { + *out = nil + } else { + *out = new(SecretReference) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RBDPersistentVolumeSource. +func (in *RBDPersistentVolumeSource) DeepCopy() *RBDPersistentVolumeSource { + if in == nil { + return nil + } + out := new(RBDPersistentVolumeSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *RBDVolumeSource) DeepCopyInto(out *RBDVolumeSource) { *out = *in @@ -5196,6 +5234,31 @@ func (in *SELinuxOptions) DeepCopy() *SELinuxOptions { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ScaleIOPersistentVolumeSource) DeepCopyInto(out *ScaleIOPersistentVolumeSource) { + *out = *in + if in.SecretRef != nil { + in, out := &in.SecretRef, &out.SecretRef + if *in == nil { + *out = nil + } else { + *out = new(SecretReference) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScaleIOPersistentVolumeSource. +func (in *ScaleIOPersistentVolumeSource) DeepCopy() *ScaleIOPersistentVolumeSource { + if in == nil { + return nil + } + out := new(ScaleIOPersistentVolumeSource) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ScaleIOVolumeSource) DeepCopyInto(out *ScaleIOVolumeSource) { *out = *in @@ -5903,7 +5966,15 @@ func (in *TCPSocketAction) DeepCopy() *TCPSocketAction { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Taint) DeepCopyInto(out *Taint) { *out = *in - in.TimeAdded.DeepCopyInto(&out.TimeAdded) + if in.TimeAdded != nil { + in, out := &in.TimeAdded, &out.TimeAdded + if *in == nil { + *out = nil + } else { + *out = new(v1.Time) + (*in).DeepCopyInto(*out) + } + } return } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go index 780f58dc..7db398c6 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/register.go @@ -43,7 +43,7 @@ var ( AddToScheme = SchemeBuilder.AddToScheme ) -// Adds the list of known types to api.Scheme. +// Adds the list of known types to the given scheme. func addKnownTypes(scheme *runtime.Scheme) error { // TODO this gets cleaned up when the types are fixed scheme.AddKnownTypes(SchemeGroupVersion, diff --git a/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go b/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go index 875db603..de4bbe37 100644 --- a/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go +++ b/vendor/k8s.io/kubernetes/pkg/apis/extensions/types.go @@ -759,7 +759,7 @@ type IngressBackend struct { // +genclient:method=UpdateScale,verb=update,subresource=scale,input=Scale,result=Scale // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// ReplicaSet represents the configuration of a replica set. +// ReplicaSet ensures that a specified number of pod replicas are running at any given time. type ReplicaSet struct { metav1.TypeMeta // +optional @@ -1010,7 +1010,7 @@ type SELinuxStrategyOptions struct { // Rule is the strategy that will dictate the allowable labels that may be set. Rule SELinuxStrategy // seLinuxOptions required to run as; required for MustRunAs - // More info: https://git.k8s.io/community/contributors/design-proposals/security_context.md + // More info: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#selinux // +optional SELinuxOptions *api.SELinuxOptions } diff --git a/vendor/k8s.io/kubernetes/pkg/cloudprovider/README.md b/vendor/k8s.io/kubernetes/pkg/cloudprovider/README.md index ada36662..868a37ee 100644 --- a/vendor/k8s.io/kubernetes/pkg/cloudprovider/README.md +++ b/vendor/k8s.io/kubernetes/pkg/cloudprovider/README.md @@ -4,7 +4,7 @@ The mechanism for supporting cloud providers is currently in transition: the original method of implementing cloud provider-specific functionality within the main kubernetes tree (here) is no longer advised; however, the proposed solution is still in development. #### Guidance for potential cloud providers: -* Support for cloud providers is currently in a state of flux. Background information on motivation and the proposal for improving is in the github [proposal](https://git.k8s.io/community/contributors/design-proposals/cloud-provider-refactoring.md). +* Support for cloud providers is currently in a state of flux. Background information on motivation and the proposal for improving is in the github [proposal](https://git.k8s.io/community/contributors/design-proposals/cloud-provider/cloud-provider-refactoring.md). * In support of this plan, a new cloud-controller-manager binary was added in 1.6. This was the first of several steps (see the proposal for more information). * Attempts to contribute new cloud providers or (to a lesser extent) persistent volumes to the core repo will likely meet with some pushback from reviewers/approvers. * It is understood that this is an unfortunate situation in which 'the old way is no longer supported but the new way is not ready yet', but the initial path is unsustainable, and contributors are encouraged to participate in the implementation of the proposed long-term solution, as there is risk that PRs for new cloud providers here will not be approved. @@ -13,4 +13,4 @@ The mechanism for supporting cloud providers is currently in transition: the or #### Some additional context on status / direction: * 1.6 added a new cloud-controller-manager binary that may be used for testing the new out-of-core cloudprovider flow. * Setting cloud-provider=external allows for creation of a separate controller-manager binary -* 1.7 adds [extensible admission control](https://git.k8s.io/community/contributors/design-proposals/admission_control_extension.md), further enabling topology customization. +* 1.7 adds [extensible admission control](https://git.k8s.io/community/contributors/design-proposals/api-machinery/admission_control_extension.md), further enabling topology customization. diff --git a/vendor/k8s.io/kubernetes/pkg/cloudprovider/cloud.go b/vendor/k8s.io/kubernetes/pkg/cloudprovider/cloud.go index 9a60e549..00479e9c 100644 --- a/vendor/k8s.io/kubernetes/pkg/cloudprovider/cloud.go +++ b/vendor/k8s.io/kubernetes/pkg/cloudprovider/cloud.go @@ -176,6 +176,7 @@ type Routes interface { var ( InstanceNotFound = errors.New("instance not found") DiskNotFound = errors.New("disk is not found") + NotImplemented = errors.New("unimplemented") ) // Zone represents the location of a particular machine. diff --git a/vendor/k8s.io/kubernetes/pkg/controller/client_builder.go b/vendor/k8s.io/kubernetes/pkg/controller/client_builder.go index df873fb3..cb8121f6 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/client_builder.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/client_builder.go @@ -35,6 +35,7 @@ import ( restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/cache" "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/legacyscheme" "k8s.io/kubernetes/pkg/serviceaccount" "github.com/golang/glog" @@ -237,7 +238,7 @@ func (b SAControllerClientBuilder) getAuthenticatedConfig(sa *v1.ServiceAccount, // If we couldn't run the token review, the API might be disabled or we might not have permission. // Try to make a request to /apis with the token. If we get a 401 we should consider the token invalid. clientConfigCopy := *clientConfig - clientConfigCopy.NegotiatedSerializer = api.Codecs + clientConfigCopy.NegotiatedSerializer = legacyscheme.Codecs client, err := restclient.UnversionedRESTClientFor(&clientConfigCopy) if err != nil { return nil, false, err diff --git a/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go b/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go index 360f2091..3eb1aa84 100644 --- a/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go +++ b/vendor/k8s.io/kubernetes/pkg/controller/controller_utils.go @@ -38,10 +38,8 @@ import ( "k8s.io/apimachinery/pkg/util/strategicpatch" "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" - "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/tools/cache" "k8s.io/client-go/tools/record" - ref "k8s.io/client-go/tools/reference" "k8s.io/client-go/util/integer" clientretry "k8s.io/client-go/util/retry" _ "k8s.io/kubernetes/pkg/api/install" @@ -474,29 +472,12 @@ func getPodsFinalizers(template *v1.PodTemplateSpec) []string { return desiredFinalizers } -func getPodsAnnotationSet(template *v1.PodTemplateSpec, object runtime.Object) (labels.Set, error) { +func getPodsAnnotationSet(template *v1.PodTemplateSpec) labels.Set { desiredAnnotations := make(labels.Set) for k, v := range template.Annotations { desiredAnnotations[k] = v } - createdByRef, err := ref.GetReference(scheme.Scheme, object) - if err != nil { - return desiredAnnotations, fmt.Errorf("unable to get controller reference: %v", err) - } - - // TODO: this code was not safe previously - as soon as new code came along that switched to v2, old clients - // would be broken upon reading it. This is explicitly hardcoded to v1 to guarantee predictable deployment. - // We need to consistently handle this case of annotation versioning. - codec := scheme.Codecs.LegacyCodec(v1.SchemeGroupVersion) - - createdByRefJson, err := runtime.Encode(codec, &v1.SerializedReference{ - Reference: *createdByRef, - }) - if err != nil { - return desiredAnnotations, fmt.Errorf("unable to serialize controller reference: %v", err) - } - desiredAnnotations[v1.CreatedByAnnotation] = string(createdByRefJson) - return desiredAnnotations, nil + return desiredAnnotations } func getPodsPrefix(controllerName string) string { @@ -546,17 +527,14 @@ func (r RealPodControl) CreatePodsOnNode(nodeName, namespace string, template *v } func (r RealPodControl) PatchPod(namespace, name string, data []byte) error { - _, err := r.KubeClient.Core().Pods(namespace).Patch(name, types.StrategicMergePatchType, data) + _, err := r.KubeClient.CoreV1().Pods(namespace).Patch(name, types.StrategicMergePatchType, data) return err } func GetPodFromTemplate(template *v1.PodTemplateSpec, parentObject runtime.Object, controllerRef *metav1.OwnerReference) (*v1.Pod, error) { desiredLabels := getPodsLabelSet(template) desiredFinalizers := getPodsFinalizers(template) - desiredAnnotations, err := getPodsAnnotationSet(template, parentObject) - if err != nil { - return nil, err - } + desiredAnnotations := getPodsAnnotationSet(template) accessor, err := meta.Accessor(parentObject) if err != nil { return nil, fmt.Errorf("parentObject does not have ObjectMeta, %v", err) @@ -589,7 +567,7 @@ func (r RealPodControl) createPods(nodeName, namespace string, template *v1.PodT if labels.Set(pod.Labels).AsSelectorPreValidated().Empty() { return fmt.Errorf("unable to create pods, no labels") } - if newPod, err := r.KubeClient.Core().Pods(namespace).Create(pod); err != nil { + if newPod, err := r.KubeClient.CoreV1().Pods(namespace).Create(pod); err != nil { r.Recorder.Eventf(object, v1.EventTypeWarning, FailedCreatePodReason, "Error creating: %v", err) return err } else { @@ -610,7 +588,7 @@ func (r RealPodControl) DeletePod(namespace string, podID string, object runtime return fmt.Errorf("object does not have ObjectMeta, %v", err) } glog.V(2).Infof("Controller %v deleting pod %v/%v", accessor.GetName(), namespace, podID) - if err := r.KubeClient.Core().Pods(namespace).Delete(podID, nil); err != nil { + if err := r.KubeClient.CoreV1().Pods(namespace).Delete(podID, nil); err != nil { r.Recorder.Eventf(object, v1.EventTypeWarning, FailedDeletePodReason, "Error deleting: %v", err) return fmt.Errorf("unable to delete pods: %v", err) } else { @@ -925,10 +903,10 @@ func AddOrUpdateTaintOnNode(c clientset.Interface, nodeName string, taints ...*v // First we try getting node from the API server cache, as it's cheaper. If it fails // we get it from etcd to be sure to have fresh data. if firstTry { - oldNode, err = c.Core().Nodes().Get(nodeName, metav1.GetOptions{ResourceVersion: "0"}) + oldNode, err = c.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{ResourceVersion: "0"}) firstTry = false } else { - oldNode, err = c.Core().Nodes().Get(nodeName, metav1.GetOptions{}) + oldNode, err = c.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{}) } if err != nil { return err @@ -982,10 +960,10 @@ func RemoveTaintOffNode(c clientset.Interface, nodeName string, node *v1.Node, t // First we try getting node from the API server cache, as it's cheaper. If it fails // we get it from etcd to be sure to have fresh data. if firstTry { - oldNode, err = c.Core().Nodes().Get(nodeName, metav1.GetOptions{ResourceVersion: "0"}) + oldNode, err = c.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{ResourceVersion: "0"}) firstTry = false } else { - oldNode, err = c.Core().Nodes().Get(nodeName, metav1.GetOptions{}) + oldNode, err = c.CoreV1().Nodes().Get(nodeName, metav1.GetOptions{}) } if err != nil { return err @@ -1030,7 +1008,7 @@ func PatchNodeTaints(c clientset.Interface, nodeName string, oldNode *v1.Node, n return fmt.Errorf("failed to create patch for node %q: %v", nodeName, err) } - _, err = c.Core().Nodes().Patch(string(nodeName), types.StrategicMergePatchType, patchBytes) + _, err = c.CoreV1().Nodes().Patch(string(nodeName), types.StrategicMergePatchType, patchBytes) return err } diff --git a/vendor/k8s.io/kubernetes/pkg/features/kube_features.go b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go index 35a90a1a..197397c4 100644 --- a/vendor/k8s.io/kubernetes/pkg/features/kube_features.go +++ b/vendor/k8s.io/kubernetes/pkg/features/kube_features.go @@ -163,6 +163,12 @@ const ( // // Enable pods to consume pre-allocated huge pages of varying page sizes HugePages utilfeature.Feature = "HugePages" + + // owner @brendandburns + // alpha: v1.8 + // + // Enable nodes to exclude themselves from service load balancers + ServiceNodeExclusion utilfeature.Feature = "ServiceNodeExclusion" ) func init() { @@ -194,6 +200,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS MountPropagation: {Default: false, PreRelease: utilfeature.Alpha}, ExpandPersistentVolumes: {Default: false, PreRelease: utilfeature.Alpha}, CPUManager: {Default: false, PreRelease: utilfeature.Alpha}, + ServiceNodeExclusion: {Default: false, PreRelease: utilfeature.Alpha}, // inherited features from generic apiserver, relisted here to get a conflict if it is changed // unintentionally on either side: @@ -201,7 +208,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS genericfeatures.AdvancedAuditing: {Default: true, PreRelease: utilfeature.Beta}, genericfeatures.APIResponseCompression: {Default: false, PreRelease: utilfeature.Alpha}, genericfeatures.Initializers: {Default: false, PreRelease: utilfeature.Alpha}, - genericfeatures.APIListChunking: {Default: false, PreRelease: utilfeature.Alpha}, + genericfeatures.APIListChunking: {Default: true, PreRelease: utilfeature.Beta}, // inherited features from apiextensions-apiserver, relisted here to get a conflict if it is changed // unintentionally on either side: diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.pb.go b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.pb.go index 4571e1f4..f0b41f00 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.pb.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.pb.go @@ -860,6 +860,8 @@ func (*RemovePodSandboxResponse) Descriptor() ([]byte, []int) { return fileDescr type PodSandboxStatusRequest struct { // ID of the PodSandbox for which to retrieve status. PodSandboxId string `protobuf:"bytes,1,opt,name=pod_sandbox_id,json=podSandboxId,proto3" json:"pod_sandbox_id,omitempty"` + // Verbose indicates whether to return extra information about the pod sandbox. + Verbose bool `protobuf:"varint,2,opt,name=verbose,proto3" json:"verbose,omitempty"` } func (m *PodSandboxStatusRequest) Reset() { *m = PodSandboxStatusRequest{} } @@ -873,6 +875,13 @@ func (m *PodSandboxStatusRequest) GetPodSandboxId() string { return "" } +func (m *PodSandboxStatusRequest) GetVerbose() bool { + if m != nil { + return m.Verbose + } + return false +} + // PodSandboxNetworkStatus is the status of the network for a PodSandbox. type PodSandboxNetworkStatus struct { // IP address of the PodSandbox. @@ -1010,6 +1019,11 @@ func (m *PodSandboxStatus) GetAnnotations() map[string]string { type PodSandboxStatusResponse struct { // Status of the PodSandbox. Status *PodSandboxStatus `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` + // Info is extra information of the PodSandbox. The key could be abitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. network namespace for linux container based container runtime. + // It should only be returned non-empty when Verbose is true. + Info map[string]string `protobuf:"bytes,2,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (m *PodSandboxStatusResponse) Reset() { *m = PodSandboxStatusResponse{} } @@ -1023,6 +1037,13 @@ func (m *PodSandboxStatusResponse) GetStatus() *PodSandboxStatus { return nil } +func (m *PodSandboxStatusResponse) GetInfo() map[string]string { + if m != nil { + return m.Info + } + return nil +} + // PodSandboxStateValue is the wrapper of PodSandboxState. type PodSandboxStateValue struct { // State of the sandbox. @@ -1397,6 +1418,7 @@ type LinuxContainerSecurityContext struct { SupplementalGroups []int64 `protobuf:"varint,8,rep,packed,name=supplemental_groups,json=supplementalGroups" json:"supplemental_groups,omitempty"` // AppArmor profile for the container, candidate values are: // * runtime/default: equivalent to not specifying a profile. + // * unconfined: no profiles are loaded // * localhost/: profile loaded on the node // (localhost) by name. The possible profile names are detailed at // http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference @@ -2087,6 +2109,8 @@ func (m *ListContainersResponse) GetContainers() []*Container { type ContainerStatusRequest struct { // ID of the container for which to retrieve status. ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` + // Verbose indicates whether to return extra information about the container. + Verbose bool `protobuf:"varint,2,opt,name=verbose,proto3" json:"verbose,omitempty"` } func (m *ContainerStatusRequest) Reset() { *m = ContainerStatusRequest{} } @@ -2100,6 +2124,13 @@ func (m *ContainerStatusRequest) GetContainerId() string { return "" } +func (m *ContainerStatusRequest) GetVerbose() bool { + if m != nil { + return m.Verbose + } + return false +} + // ContainerStatus represents the status of a container. type ContainerStatus struct { // ID of the container. @@ -2251,6 +2282,11 @@ func (m *ContainerStatus) GetLogPath() string { type ContainerStatusResponse struct { // Status of the container. Status *ContainerStatus `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` + // Info is extra information of the Container. The key could be abitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. pid for linux container based container runtime. + // It should only be returned non-empty when Verbose is true. + Info map[string]string `protobuf:"bytes,2,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (m *ContainerStatusResponse) Reset() { *m = ContainerStatusResponse{} } @@ -2264,6 +2300,13 @@ func (m *ContainerStatusResponse) GetStatus() *ContainerStatus { return nil } +func (m *ContainerStatusResponse) GetInfo() map[string]string { + if m != nil { + return m.Info + } + return nil +} + type UpdateContainerResourcesRequest struct { // ID of the container to update. ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` @@ -2376,7 +2419,17 @@ type ExecRequest struct { // Whether to exec the command in a TTY. Tty bool `protobuf:"varint,3,opt,name=tty,proto3" json:"tty,omitempty"` // Whether to stream stdin. + // One of `stdin`, `stdout`, and `stderr` MUST be true. Stdin bool `protobuf:"varint,4,opt,name=stdin,proto3" json:"stdin,omitempty"` + // Whether to stream stdout. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + Stdout bool `protobuf:"varint,5,opt,name=stdout,proto3" json:"stdout,omitempty"` + // Whether to stream stderr. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported + // in this case. The output of stdout and stderr will be combined to a + // single stream. + Stderr bool `protobuf:"varint,6,opt,name=stderr,proto3" json:"stderr,omitempty"` } func (m *ExecRequest) Reset() { *m = ExecRequest{} } @@ -2411,6 +2464,20 @@ func (m *ExecRequest) GetStdin() bool { return false } +func (m *ExecRequest) GetStdout() bool { + if m != nil { + return m.Stdout + } + return false +} + +func (m *ExecRequest) GetStderr() bool { + if m != nil { + return m.Stderr + } + return false +} + type ExecResponse struct { // Fully qualified URL of the exec streaming server. Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` @@ -2431,10 +2498,20 @@ type AttachRequest struct { // ID of the container to which to attach. ContainerId string `protobuf:"bytes,1,opt,name=container_id,json=containerId,proto3" json:"container_id,omitempty"` // Whether to stream stdin. + // One of `stdin`, `stdout`, and `stderr` MUST be true. Stdin bool `protobuf:"varint,2,opt,name=stdin,proto3" json:"stdin,omitempty"` // Whether the process being attached is running in a TTY. // This must match the TTY setting in the ContainerConfig. Tty bool `protobuf:"varint,3,opt,name=tty,proto3" json:"tty,omitempty"` + // Whether to stream stdout. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + Stdout bool `protobuf:"varint,4,opt,name=stdout,proto3" json:"stdout,omitempty"` + // Whether to stream stderr. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported + // in this case. The output of stdout and stderr will be combined to a + // single stream. + Stderr bool `protobuf:"varint,5,opt,name=stderr,proto3" json:"stderr,omitempty"` } func (m *AttachRequest) Reset() { *m = AttachRequest{} } @@ -2462,6 +2539,20 @@ func (m *AttachRequest) GetTty() bool { return false } +func (m *AttachRequest) GetStdout() bool { + if m != nil { + return m.Stdout + } + return false +} + +func (m *AttachRequest) GetStderr() bool { + if m != nil { + return m.Stderr + } + return false +} + type AttachResponse struct { // Fully qualified URL of the attach streaming server. Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` @@ -2635,6 +2726,8 @@ func (m *ListImagesResponse) GetImages() []*Image { type ImageStatusRequest struct { // Spec of the image. Image *ImageSpec `protobuf:"bytes,1,opt,name=image" json:"image,omitempty"` + // Verbose indicates whether to return extra information about the image. + Verbose bool `protobuf:"varint,2,opt,name=verbose,proto3" json:"verbose,omitempty"` } func (m *ImageStatusRequest) Reset() { *m = ImageStatusRequest{} } @@ -2648,9 +2741,21 @@ func (m *ImageStatusRequest) GetImage() *ImageSpec { return nil } +func (m *ImageStatusRequest) GetVerbose() bool { + if m != nil { + return m.Verbose + } + return false +} + type ImageStatusResponse struct { // Status of the image. Image *Image `protobuf:"bytes,1,opt,name=image" json:"image,omitempty"` + // Info is extra information of the Image. The key could be abitrary string, and + // value should be in json format. The information could include anything useful + // for debug, e.g. image config for oci image based container runtime. + // It should only be returned non-empty when Verbose is true. + Info map[string]string `protobuf:"bytes,2,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (m *ImageStatusResponse) Reset() { *m = ImageStatusResponse{} } @@ -2664,6 +2769,13 @@ func (m *ImageStatusResponse) GetImage() *Image { return nil } +func (m *ImageStatusResponse) GetInfo() map[string]string { + if m != nil { + return m.Info + } + return nil +} + // AuthConfig contains authorization information for connecting to a registry. type AuthConfig struct { Username string `protobuf:"bytes,1,opt,name=username,proto3" json:"username,omitempty"` @@ -2924,15 +3036,29 @@ func (m *RuntimeStatus) GetConditions() []*RuntimeCondition { } type StatusRequest struct { + // Verbose indicates whether to return extra information about the runtime. + Verbose bool `protobuf:"varint,1,opt,name=verbose,proto3" json:"verbose,omitempty"` } func (m *StatusRequest) Reset() { *m = StatusRequest{} } func (*StatusRequest) ProtoMessage() {} func (*StatusRequest) Descriptor() ([]byte, []int) { return fileDescriptorApi, []int{81} } +func (m *StatusRequest) GetVerbose() bool { + if m != nil { + return m.Verbose + } + return false +} + type StatusResponse struct { // Status of the Runtime. Status *RuntimeStatus `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` + // Info is extra information of the Runtime. The key could be abitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. plugins used by the container runtime. + // It should only be returned non-empty when Verbose is true. + Info map[string]string `protobuf:"bytes,2,rep,name=info" json:"info,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` } func (m *StatusResponse) Reset() { *m = StatusResponse{} } @@ -2946,6 +3072,13 @@ func (m *StatusResponse) GetStatus() *RuntimeStatus { return nil } +func (m *StatusResponse) GetInfo() map[string]string { + if m != nil { + return m.Info + } + return nil +} + type ImageFsInfoRequest struct { } @@ -5171,6 +5304,16 @@ func (m *PodSandboxStatusRequest) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintApi(dAtA, i, uint64(len(m.PodSandboxId))) i += copy(dAtA[i:], m.PodSandboxId) } + if m.Verbose { + dAtA[i] = 0x10 + i++ + if m.Verbose { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } @@ -5377,6 +5520,23 @@ func (m *PodSandboxStatusResponse) MarshalTo(dAtA []byte) (int, error) { } i += n16 } + if len(m.Info) > 0 { + for k := range m.Info { + dAtA[i] = 0x12 + i++ + v := m.Info[k] + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } return i, nil } @@ -6664,6 +6824,16 @@ func (m *ContainerStatusRequest) MarshalTo(dAtA []byte) (int, error) { i = encodeVarintApi(dAtA, i, uint64(len(m.ContainerId))) i += copy(dAtA[i:], m.ContainerId) } + if m.Verbose { + dAtA[i] = 0x10 + i++ + if m.Verbose { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } @@ -6831,6 +7001,23 @@ func (m *ContainerStatusResponse) MarshalTo(dAtA []byte) (int, error) { } i += n39 } + if len(m.Info) > 0 { + for k := range m.Info { + dAtA[i] = 0x12 + i++ + v := m.Info[k] + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } return i, nil } @@ -7021,6 +7208,26 @@ func (m *ExecRequest) MarshalTo(dAtA []byte) (int, error) { } i++ } + if m.Stdout { + dAtA[i] = 0x28 + i++ + if m.Stdout { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if m.Stderr { + dAtA[i] = 0x30 + i++ + if m.Stderr { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } @@ -7089,6 +7296,26 @@ func (m *AttachRequest) MarshalTo(dAtA []byte) (int, error) { } i++ } + if m.Stdout { + dAtA[i] = 0x20 + i++ + if m.Stdout { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } + if m.Stderr { + dAtA[i] = 0x28 + i++ + if m.Stderr { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } @@ -7368,6 +7595,16 @@ func (m *ImageStatusRequest) MarshalTo(dAtA []byte) (int, error) { } i += n46 } + if m.Verbose { + dAtA[i] = 0x10 + i++ + if m.Verbose { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } @@ -7396,6 +7633,23 @@ func (m *ImageStatusResponse) MarshalTo(dAtA []byte) (int, error) { } i += n47 } + if len(m.Info) > 0 { + for k := range m.Info { + dAtA[i] = 0x12 + i++ + v := m.Info[k] + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } return i, nil } @@ -7760,6 +8014,16 @@ func (m *StatusRequest) MarshalTo(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Verbose { + dAtA[i] = 0x8 + i++ + if m.Verbose { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + } return i, nil } @@ -7788,6 +8052,23 @@ func (m *StatusResponse) MarshalTo(dAtA []byte) (int, error) { } i += n54 } + if len(m.Info) > 0 { + for k := range m.Info { + dAtA[i] = 0x12 + i++ + v := m.Info[k] + mapSize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + i = encodeVarintApi(dAtA, i, uint64(mapSize)) + dAtA[i] = 0xa + i++ + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i += copy(dAtA[i:], k) + dAtA[i] = 0x12 + i++ + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i += copy(dAtA[i:], v) + } + } return i, nil } @@ -8622,6 +8903,9 @@ func (m *PodSandboxStatusRequest) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if m.Verbose { + n += 2 + } return n } @@ -8706,6 +8990,14 @@ func (m *PodSandboxStatusResponse) Size() (n int) { l = m.Status.Size() n += 1 + l + sovApi(uint64(l)) } + if len(m.Info) > 0 { + for k, v := range m.Info { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) + } + } return n } @@ -9258,6 +9550,9 @@ func (m *ContainerStatusRequest) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if m.Verbose { + n += 2 + } return n } @@ -9339,6 +9634,14 @@ func (m *ContainerStatusResponse) Size() (n int) { l = m.Status.Size() n += 1 + l + sovApi(uint64(l)) } + if len(m.Info) > 0 { + for k, v := range m.Info { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) + } + } return n } @@ -9417,6 +9720,12 @@ func (m *ExecRequest) Size() (n int) { if m.Stdin { n += 2 } + if m.Stdout { + n += 2 + } + if m.Stderr { + n += 2 + } return n } @@ -9443,6 +9752,12 @@ func (m *AttachRequest) Size() (n int) { if m.Tty { n += 2 } + if m.Stdout { + n += 2 + } + if m.Stderr { + n += 2 + } return n } @@ -9555,6 +9870,9 @@ func (m *ImageStatusRequest) Size() (n int) { l = m.Image.Size() n += 1 + l + sovApi(uint64(l)) } + if m.Verbose { + n += 2 + } return n } @@ -9565,6 +9883,14 @@ func (m *ImageStatusResponse) Size() (n int) { l = m.Image.Size() n += 1 + l + sovApi(uint64(l)) } + if len(m.Info) > 0 { + for k, v := range m.Info { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) + } + } return n } @@ -9714,6 +10040,9 @@ func (m *RuntimeStatus) Size() (n int) { func (m *StatusRequest) Size() (n int) { var l int _ = l + if m.Verbose { + n += 2 + } return n } @@ -9724,6 +10053,14 @@ func (m *StatusResponse) Size() (n int) { l = m.Status.Size() n += 1 + l + sovApi(uint64(l)) } + if len(m.Info) > 0 { + for k, v := range m.Info { + _ = k + _ = v + mapEntrySize := 1 + len(k) + sovApi(uint64(len(k))) + 1 + len(v) + sovApi(uint64(len(v))) + n += mapEntrySize + 1 + sovApi(uint64(mapEntrySize)) + } + } return n } @@ -10176,6 +10513,7 @@ func (this *PodSandboxStatusRequest) String() string { } s := strings.Join([]string{`&PodSandboxStatusRequest{`, `PodSandboxId:` + fmt.Sprintf("%v", this.PodSandboxId) + `,`, + `Verbose:` + fmt.Sprintf("%v", this.Verbose) + `,`, `}`, }, "") return s @@ -10251,8 +10589,19 @@ func (this *PodSandboxStatusResponse) String() string { if this == nil { return "nil" } + keysForInfo := make([]string, 0, len(this.Info)) + for k := range this.Info { + keysForInfo = append(keysForInfo, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForInfo) + mapStringForInfo := "map[string]string{" + for _, k := range keysForInfo { + mapStringForInfo += fmt.Sprintf("%v: %v,", k, this.Info[k]) + } + mapStringForInfo += "}" s := strings.Join([]string{`&PodSandboxStatusResponse{`, `Status:` + strings.Replace(fmt.Sprintf("%v", this.Status), "PodSandboxStatus", "PodSandboxStatus", 1) + `,`, + `Info:` + mapStringForInfo + `,`, `}`, }, "") return s @@ -10680,6 +11029,7 @@ func (this *ContainerStatusRequest) String() string { } s := strings.Join([]string{`&ContainerStatusRequest{`, `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, + `Verbose:` + fmt.Sprintf("%v", this.Verbose) + `,`, `}`, }, "") return s @@ -10732,8 +11082,19 @@ func (this *ContainerStatusResponse) String() string { if this == nil { return "nil" } + keysForInfo := make([]string, 0, len(this.Info)) + for k := range this.Info { + keysForInfo = append(keysForInfo, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForInfo) + mapStringForInfo := "map[string]string{" + for _, k := range keysForInfo { + mapStringForInfo += fmt.Sprintf("%v: %v,", k, this.Info[k]) + } + mapStringForInfo += "}" s := strings.Join([]string{`&ContainerStatusResponse{`, `Status:` + strings.Replace(fmt.Sprintf("%v", this.Status), "ContainerStatus", "ContainerStatus", 1) + `,`, + `Info:` + mapStringForInfo + `,`, `}`, }, "") return s @@ -10791,6 +11152,8 @@ func (this *ExecRequest) String() string { `Cmd:` + fmt.Sprintf("%v", this.Cmd) + `,`, `Tty:` + fmt.Sprintf("%v", this.Tty) + `,`, `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, + `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, + `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, `}`, }, "") return s @@ -10813,6 +11176,8 @@ func (this *AttachRequest) String() string { `ContainerId:` + fmt.Sprintf("%v", this.ContainerId) + `,`, `Stdin:` + fmt.Sprintf("%v", this.Stdin) + `,`, `Tty:` + fmt.Sprintf("%v", this.Tty) + `,`, + `Stdout:` + fmt.Sprintf("%v", this.Stdout) + `,`, + `Stderr:` + fmt.Sprintf("%v", this.Stderr) + `,`, `}`, }, "") return s @@ -10899,6 +11264,7 @@ func (this *ImageStatusRequest) String() string { } s := strings.Join([]string{`&ImageStatusRequest{`, `Image:` + strings.Replace(fmt.Sprintf("%v", this.Image), "ImageSpec", "ImageSpec", 1) + `,`, + `Verbose:` + fmt.Sprintf("%v", this.Verbose) + `,`, `}`, }, "") return s @@ -10907,8 +11273,19 @@ func (this *ImageStatusResponse) String() string { if this == nil { return "nil" } + keysForInfo := make([]string, 0, len(this.Info)) + for k := range this.Info { + keysForInfo = append(keysForInfo, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForInfo) + mapStringForInfo := "map[string]string{" + for _, k := range keysForInfo { + mapStringForInfo += fmt.Sprintf("%v: %v,", k, this.Info[k]) + } + mapStringForInfo += "}" s := strings.Join([]string{`&ImageStatusResponse{`, `Image:` + strings.Replace(fmt.Sprintf("%v", this.Image), "Image", "Image", 1) + `,`, + `Info:` + mapStringForInfo + `,`, `}`, }, "") return s @@ -11036,6 +11413,7 @@ func (this *StatusRequest) String() string { return "nil" } s := strings.Join([]string{`&StatusRequest{`, + `Verbose:` + fmt.Sprintf("%v", this.Verbose) + `,`, `}`, }, "") return s @@ -11044,8 +11422,19 @@ func (this *StatusResponse) String() string { if this == nil { return "nil" } + keysForInfo := make([]string, 0, len(this.Info)) + for k := range this.Info { + keysForInfo = append(keysForInfo, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForInfo) + mapStringForInfo := "map[string]string{" + for _, k := range keysForInfo { + mapStringForInfo += fmt.Sprintf("%v: %v,", k, this.Info[k]) + } + mapStringForInfo += "}" s := strings.Join([]string{`&StatusResponse{`, `Status:` + strings.Replace(fmt.Sprintf("%v", this.Status), "RuntimeStatus", "RuntimeStatus", 1) + `,`, + `Info:` + mapStringForInfo + `,`, `}`, }, "") return s @@ -13716,6 +14105,26 @@ func (m *PodSandboxStatusRequest) Unmarshal(dAtA []byte) error { } m.PodSandboxId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Verbose", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Verbose = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -14492,6 +14901,122 @@ func (m *PodSandboxStatusResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Info == nil { + m.Info = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Info[mapkey] = mapvalue + } else { + var mapvalue string + m.Info[mapkey] = mapvalue + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -19063,6 +19588,26 @@ func (m *ContainerStatusRequest) Unmarshal(dAtA []byte) error { } m.ContainerId = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Verbose", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Verbose = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -19765,6 +20310,122 @@ func (m *ContainerStatusResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Info == nil { + m.Info = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Info[mapkey] = mapvalue + } else { + var mapvalue string + m.Info[mapkey] = mapvalue + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -20333,6 +20994,46 @@ func (m *ExecRequest) Unmarshal(dAtA []byte) error { } } m.Stdin = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stdout", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stdout = bool(v != 0) + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stderr", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stderr = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -20531,6 +21232,46 @@ func (m *AttachRequest) Unmarshal(dAtA []byte) error { } } m.Tty = bool(v != 0) + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stdout", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stdout = bool(v != 0) + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Stderr", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Stderr = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -21378,6 +22119,26 @@ func (m *ImageStatusRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Verbose", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Verbose = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -21461,6 +22222,122 @@ func (m *ImageStatusResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Info == nil { + m.Info = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Info[mapkey] = mapvalue + } else { + var mapvalue string + m.Info[mapkey] = mapvalue + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -22629,6 +23506,26 @@ func (m *StatusRequest) Unmarshal(dAtA []byte) error { return fmt.Errorf("proto: StatusRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Verbose", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.Verbose = bool(v != 0) default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -22712,6 +23609,122 @@ func (m *StatusResponse) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthApi + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + var keykey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + keykey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + 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 ErrInvalidLengthApi + } + postStringIndexmapkey := iNdEx + intStringLenmapkey + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey := string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + if m.Info == nil { + m.Info = make(map[string]string) + } + if iNdEx < postIndex { + var valuekey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + valuekey |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + var stringLenmapvalue uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLenmapvalue |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLenmapvalue := int(stringLenmapvalue) + if intStringLenmapvalue < 0 { + return ErrInvalidLengthApi + } + postStringIndexmapvalue := iNdEx + intStringLenmapvalue + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue := string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + m.Info[mapkey] = mapvalue + } else { + var mapvalue string + m.Info[mapkey] = mapvalue + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -24568,273 +25581,280 @@ var ( func init() { proto.RegisterFile("api.proto", fileDescriptorApi) } var fileDescriptorApi = []byte{ - // 4276 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x3b, 0x4d, 0x6f, 0x1b, 0x49, - 0x76, 0x22, 0xa9, 0x0f, 0xf2, 0x51, 0xa4, 0xa8, 0x92, 0x2c, 0x51, 0xb4, 0x2d, 0xcb, 0xed, 0xf1, - 0x8c, 0xed, 0x5d, 0x7b, 0x3c, 0x9a, 0x1d, 0x4f, 0xc6, 0xf3, 0x65, 0x8e, 0x24, 0x3b, 0x1a, 0xdb, - 0x94, 0xb6, 0x29, 0xcd, 0xee, 0x66, 0x03, 0x74, 0x5a, 0xec, 0x12, 0xd5, 0x33, 0x64, 0x77, 0x4f, - 0x77, 0xb5, 0x6d, 0x05, 0x39, 0x24, 0x97, 0x20, 0x97, 0x00, 0x9b, 0x63, 0x6e, 0x39, 0x04, 0x58, - 0xe4, 0x92, 0x43, 0x0e, 0x41, 0x7e, 0x41, 0xb0, 0x97, 0x05, 0x02, 0x04, 0x08, 0x92, 0x5b, 0xd6, - 0x39, 0xe4, 0x10, 0x20, 0xbf, 0x61, 0x51, 0x5f, 0xdd, 0xd5, 0x5f, 0xb4, 0xe4, 0x19, 0xec, 0xfa, - 0xc4, 0xae, 0x57, 0xaf, 0x5e, 0xbd, 0x7a, 0xef, 0xd5, 0xab, 0xf7, 0x5e, 0x15, 0xa1, 0x66, 0x7a, - 0xf6, 0x1d, 0xcf, 0x77, 0x89, 0x8b, 0xe6, 0xfc, 0xd0, 0x21, 0xf6, 0x18, 0x77, 0x6e, 0x0f, 0x6d, - 0x72, 0x12, 0x1e, 0xdd, 0x19, 0xb8, 0xe3, 0x77, 0x87, 0xee, 0xd0, 0x7d, 0x97, 0xf5, 0x1f, 0x85, - 0xc7, 0xac, 0xc5, 0x1a, 0xec, 0x8b, 0x8f, 0xd3, 0x6e, 0x41, 0xf3, 0x2b, 0xec, 0x07, 0xb6, 0xeb, - 0xe8, 0xf8, 0xdb, 0x10, 0x07, 0x04, 0xb5, 0x61, 0xee, 0x19, 0x87, 0xb4, 0x4b, 0x1b, 0xa5, 0x1b, - 0x35, 0x5d, 0x36, 0xb5, 0x5f, 0x96, 0x60, 0x21, 0x42, 0x0e, 0x3c, 0xd7, 0x09, 0x70, 0x31, 0x36, - 0xba, 0x0a, 0xf3, 0x82, 0x27, 0xc3, 0x31, 0xc7, 0xb8, 0x5d, 0x66, 0xdd, 0x75, 0x01, 0xeb, 0x99, - 0x63, 0x8c, 0xde, 0x81, 0x05, 0x89, 0x22, 0x89, 0x54, 0x18, 0x56, 0x53, 0x80, 0xc5, 0x6c, 0xe8, - 0x0e, 0x2c, 0x49, 0x44, 0xd3, 0xb3, 0x23, 0xe4, 0x69, 0x86, 0xbc, 0x28, 0xba, 0xba, 0x9e, 0x2d, - 0xf0, 0xb5, 0x9f, 0x43, 0x6d, 0xbb, 0xd7, 0xdf, 0x72, 0x9d, 0x63, 0x7b, 0x48, 0x59, 0x0c, 0xb0, - 0x4f, 0xc7, 0xb4, 0x4b, 0x1b, 0x15, 0xca, 0xa2, 0x68, 0xa2, 0x0e, 0x54, 0x03, 0x6c, 0xfa, 0x83, - 0x13, 0x1c, 0xb4, 0xcb, 0xac, 0x2b, 0x6a, 0xd3, 0x51, 0xae, 0x47, 0x6c, 0xd7, 0x09, 0xda, 0x15, - 0x3e, 0x4a, 0x34, 0xb5, 0xbf, 0x2d, 0x41, 0x7d, 0xdf, 0xf5, 0xc9, 0x53, 0xd3, 0xf3, 0x6c, 0x67, - 0x88, 0x6e, 0x43, 0x95, 0xc9, 0x72, 0xe0, 0x8e, 0x98, 0x0c, 0x9a, 0x9b, 0x8b, 0x77, 0x04, 0x4b, - 0x77, 0xf6, 0x45, 0x87, 0x1e, 0xa1, 0xa0, 0xeb, 0xd0, 0x1c, 0xb8, 0x0e, 0x31, 0x6d, 0x07, 0xfb, - 0x86, 0xe7, 0xfa, 0x84, 0x49, 0x66, 0x46, 0x6f, 0x44, 0x50, 0x4a, 0x1c, 0x5d, 0x84, 0xda, 0x89, - 0x1b, 0x10, 0x8e, 0x51, 0x61, 0x18, 0x55, 0x0a, 0x60, 0x9d, 0xab, 0x30, 0xc7, 0x3a, 0x6d, 0x4f, - 0xc8, 0x60, 0x96, 0x36, 0x77, 0x3d, 0xed, 0xd7, 0x25, 0x98, 0x79, 0xea, 0x86, 0x0e, 0x49, 0x4d, - 0x63, 0x92, 0x13, 0xa1, 0x1f, 0x65, 0x1a, 0x93, 0x9c, 0xc4, 0xd3, 0x50, 0x0c, 0xae, 0x22, 0x3e, - 0x0d, 0xed, 0xec, 0x40, 0xd5, 0xc7, 0xa6, 0xe5, 0x3a, 0xa3, 0x53, 0xc6, 0x42, 0x55, 0x8f, 0xda, - 0x54, 0x77, 0x01, 0x1e, 0xd9, 0x4e, 0xf8, 0xc2, 0xf0, 0xf1, 0xc8, 0x3c, 0xc2, 0x23, 0xc6, 0x4a, - 0x55, 0x6f, 0x0a, 0xb0, 0xce, 0xa1, 0xe8, 0x63, 0xa8, 0x7b, 0xbe, 0xeb, 0x99, 0x43, 0x93, 0x8a, - 0xaf, 0x3d, 0xc3, 0x24, 0xb4, 0x16, 0x49, 0x88, 0x71, 0xbb, 0x1f, 0x23, 0xe8, 0x2a, 0xb6, 0xf6, - 0x35, 0x2c, 0x50, 0x4b, 0x09, 0x3c, 0x73, 0x80, 0xf7, 0x98, 0xfc, 0xa9, 0x5d, 0x31, 0x8e, 0x1d, - 0x4c, 0x9e, 0xbb, 0xfe, 0x37, 0x6c, 0x59, 0x55, 0xbd, 0x4e, 0x61, 0x3d, 0x0e, 0x42, 0x6b, 0x50, - 0xe5, 0x8b, 0xb2, 0x2d, 0xb6, 0xa6, 0xaa, 0xce, 0xc4, 0xb5, 0x6f, 0x5b, 0x51, 0x97, 0xed, 0x0d, - 0xc4, 0x92, 0xe6, 0xb8, 0xe8, 0x06, 0x9a, 0x06, 0xb0, 0xeb, 0x90, 0x7b, 0x3f, 0xfa, 0xca, 0x1c, - 0x85, 0x18, 0x2d, 0xc3, 0xcc, 0x33, 0xfa, 0xc1, 0xe8, 0x57, 0x74, 0xde, 0xd0, 0xfe, 0xb2, 0x02, - 0x17, 0x9f, 0xd0, 0xd5, 0xf5, 0x4d, 0xc7, 0x3a, 0x72, 0x5f, 0xf4, 0xf1, 0x20, 0xf4, 0x6d, 0x72, - 0xba, 0xe5, 0x3a, 0x04, 0xbf, 0x20, 0x68, 0x07, 0x16, 0x1d, 0xc9, 0xaf, 0x21, 0xed, 0x87, 0x52, - 0xa8, 0x6f, 0xb6, 0xa3, 0x25, 0xa7, 0x56, 0xa4, 0xb7, 0x9c, 0x24, 0x20, 0x40, 0x9f, 0xc7, 0xc2, - 0x95, 0x44, 0xca, 0x8c, 0xc8, 0x4a, 0x44, 0xa4, 0xbf, 0xc3, 0xf8, 0x10, 0x24, 0xa4, 0xd0, 0x25, - 0x81, 0xf7, 0x81, 0x6e, 0x34, 0xc3, 0x0c, 0x8c, 0x30, 0xc0, 0x3e, 0x5b, 0x69, 0x7d, 0x73, 0x29, - 0x1a, 0x1c, 0xaf, 0x53, 0xaf, 0xf9, 0xa1, 0xd3, 0x0d, 0x0e, 0x03, 0xec, 0xb3, 0xed, 0x28, 0xd4, - 0x6b, 0xf8, 0xae, 0x4b, 0x8e, 0x03, 0xa9, 0x52, 0x09, 0xd6, 0x19, 0x14, 0xbd, 0x0b, 0x4b, 0x41, - 0xe8, 0x79, 0x23, 0x3c, 0xc6, 0x0e, 0x31, 0x47, 0xc6, 0xd0, 0x77, 0x43, 0x2f, 0x68, 0xcf, 0x6c, - 0x54, 0x6e, 0x54, 0x74, 0xa4, 0x76, 0x3d, 0x62, 0x3d, 0x68, 0x1d, 0xc0, 0xf3, 0xed, 0x67, 0xf6, - 0x08, 0x0f, 0xb1, 0xd5, 0x9e, 0x65, 0x44, 0x15, 0x08, 0xba, 0x0b, 0xcb, 0x01, 0x1e, 0x0c, 0xdc, - 0xb1, 0x67, 0x78, 0xbe, 0x7b, 0x6c, 0x8f, 0x30, 0x37, 0xc8, 0x39, 0x66, 0x90, 0x48, 0xf4, 0xed, - 0xf3, 0x2e, 0x6a, 0x9a, 0xda, 0x2f, 0xca, 0x70, 0x81, 0x09, 0x60, 0xdf, 0xb5, 0x84, 0x2e, 0xc4, - 0x76, 0xbf, 0x06, 0x8d, 0x01, 0x63, 0xc8, 0xf0, 0x4c, 0x1f, 0x3b, 0x44, 0xd8, 0xfd, 0x3c, 0x07, - 0xee, 0x33, 0x18, 0xda, 0x83, 0x56, 0x20, 0x54, 0x67, 0x0c, 0xb8, 0xee, 0x84, 0x84, 0xdf, 0x8a, - 0x84, 0x34, 0x41, 0xcf, 0xfa, 0x42, 0x90, 0x51, 0xfc, 0x5c, 0x70, 0x1a, 0x0c, 0xc8, 0x88, 0xbb, - 0x8b, 0xfa, 0xe6, 0x0f, 0x92, 0x74, 0xd2, 0x6c, 0xde, 0xe9, 0x73, 0xec, 0x1d, 0x87, 0xf8, 0xa7, - 0xba, 0x1c, 0xdb, 0xb9, 0x0f, 0xf3, 0x6a, 0x07, 0x6a, 0x41, 0xe5, 0x1b, 0x7c, 0x2a, 0x96, 0x40, - 0x3f, 0x63, 0xbb, 0xe4, 0x9b, 0x95, 0x37, 0xee, 0x97, 0xff, 0xa0, 0xa4, 0xf9, 0x80, 0xe2, 0x59, - 0x9e, 0x62, 0x62, 0x5a, 0x26, 0x31, 0x11, 0x82, 0x69, 0xe6, 0x7e, 0x39, 0x09, 0xf6, 0x4d, 0xa9, - 0x86, 0x62, 0x6b, 0xd4, 0x74, 0xfa, 0x89, 0x2e, 0x41, 0x2d, 0x32, 0x42, 0xe1, 0x83, 0x63, 0x00, - 0xf5, 0x85, 0x26, 0x21, 0x78, 0xec, 0x11, 0x66, 0x10, 0x0d, 0x5d, 0x36, 0xb5, 0x7f, 0x99, 0x86, - 0x56, 0x46, 0x03, 0x1f, 0x42, 0x75, 0x2c, 0xa6, 0x17, 0xb6, 0x7f, 0x31, 0x76, 0x88, 0x19, 0x0e, - 0xf5, 0x08, 0x99, 0xfa, 0x1b, 0xba, 0x19, 0x95, 0xe3, 0x22, 0x6a, 0x53, 0xb5, 0x8e, 0xdc, 0xa1, - 0x61, 0xd9, 0x3e, 0x1e, 0x10, 0xd7, 0x3f, 0x15, 0x5c, 0xce, 0x8f, 0xdc, 0xe1, 0xb6, 0x84, 0xa1, - 0xf7, 0x00, 0x2c, 0x27, 0xa0, 0x1a, 0x3d, 0xb6, 0x87, 0x8c, 0xd7, 0xfa, 0x26, 0x8a, 0xe6, 0x8e, - 0x8e, 0x04, 0xbd, 0x66, 0x39, 0x81, 0x60, 0xf6, 0x23, 0x68, 0x50, 0x17, 0x6b, 0x8c, 0xb9, 0x37, - 0xe7, 0x56, 0x5c, 0xdf, 0x5c, 0x56, 0x38, 0x8e, 0x5c, 0xbd, 0x3e, 0xef, 0xc5, 0x8d, 0x00, 0x7d, - 0x0a, 0xb3, 0xcc, 0xc5, 0x05, 0xed, 0x59, 0x36, 0xe6, 0x7a, 0xce, 0x2a, 0x85, 0xb6, 0x9f, 0x30, - 0x3c, 0xae, 0x6c, 0x31, 0x08, 0x3d, 0x81, 0xba, 0xe9, 0x38, 0x2e, 0x31, 0xf9, 0x06, 0x9f, 0x63, - 0x34, 0x6e, 0x15, 0xd3, 0xe8, 0xc6, 0xc8, 0x9c, 0x90, 0x3a, 0x1c, 0xfd, 0x08, 0x66, 0x98, 0x07, - 0x68, 0x57, 0xd9, 0xaa, 0xd7, 0x27, 0x9b, 0x9f, 0xce, 0x91, 0x3b, 0x1f, 0x41, 0x5d, 0x61, 0xed, - 0x3c, 0xe6, 0xd6, 0xf9, 0x0c, 0x5a, 0x69, 0x8e, 0xce, 0x65, 0xae, 0xbb, 0xb0, 0xac, 0x87, 0x4e, - 0xcc, 0x98, 0x8c, 0x3f, 0xde, 0x83, 0x59, 0xa1, 0x3f, 0x6e, 0x3b, 0x6b, 0x85, 0x12, 0xd1, 0x05, - 0xa2, 0xf6, 0x29, 0x5c, 0x48, 0x91, 0x12, 0xd1, 0xc9, 0x5b, 0xd0, 0xf4, 0x5c, 0xcb, 0x08, 0x38, - 0xd8, 0xb0, 0x2d, 0xe9, 0x0c, 0xbc, 0x08, 0x77, 0xd7, 0xa2, 0xc3, 0xfb, 0xc4, 0xf5, 0xb2, 0xac, - 0x9c, 0x6d, 0x78, 0x1b, 0x56, 0xd2, 0xc3, 0xf9, 0xf4, 0xda, 0xe7, 0xb0, 0xaa, 0xe3, 0xb1, 0xfb, - 0x0c, 0xbf, 0x2e, 0xe9, 0x0e, 0xb4, 0xb3, 0x04, 0x62, 0xe2, 0x31, 0xb4, 0x4f, 0x4c, 0x12, 0x06, - 0xe7, 0x23, 0x7e, 0x53, 0x25, 0x20, 0x8e, 0x4e, 0x4e, 0x07, 0x35, 0xa1, 0x6c, 0x7b, 0x62, 0x50, - 0xd9, 0xf6, 0xb4, 0xcf, 0xa1, 0x16, 0x1d, 0x5a, 0x68, 0x33, 0x8e, 0x8c, 0xca, 0xaf, 0x38, 0xd9, - 0xa2, 0x98, 0xe9, 0x71, 0xc6, 0x5b, 0x8b, 0x99, 0x36, 0x01, 0x22, 0x3f, 0x23, 0x4f, 0x4a, 0x94, - 0xa5, 0xa7, 0x2b, 0x58, 0xda, 0xdf, 0x27, 0x9c, 0x8e, 0xc2, 0xb2, 0x15, 0xb1, 0x6c, 0x25, 0x9c, - 0x50, 0xf9, 0x3c, 0x4e, 0xe8, 0x0e, 0xcc, 0x04, 0xc4, 0x24, 0xdc, 0x0d, 0x36, 0x95, 0xc5, 0x25, - 0xa7, 0xc4, 0x3a, 0x47, 0x43, 0x97, 0x01, 0x06, 0x3e, 0x36, 0x09, 0xb6, 0x0c, 0x93, 0xfb, 0xc7, - 0x8a, 0x5e, 0x13, 0x90, 0x2e, 0x41, 0xf7, 0x61, 0x4e, 0x46, 0x2a, 0x33, 0x8c, 0x8d, 0x8d, 0x1c, - 0x82, 0x09, 0xe9, 0xeb, 0x72, 0x40, 0xbc, 0xa7, 0x67, 0x27, 0xef, 0x69, 0x31, 0x8e, 0x23, 0x2b, - 0x6e, 0x69, 0xae, 0xd0, 0x2d, 0xf1, 0x11, 0x67, 0x71, 0x4b, 0xd5, 0x42, 0xb7, 0x24, 0x68, 0x4c, - 0x74, 0x4b, 0xbf, 0x4f, 0x07, 0xf3, 0x14, 0xda, 0xd9, 0x0d, 0x22, 0x1c, 0xc3, 0x7b, 0x30, 0x1b, - 0x30, 0xc8, 0x04, 0x27, 0x23, 0x86, 0x08, 0x44, 0xed, 0x21, 0x2c, 0xa7, 0x2c, 0x80, 0x07, 0x8a, - 0x91, 0xbd, 0x94, 0xce, 0x64, 0x2f, 0xda, 0xff, 0x97, 0x54, 0xeb, 0x7d, 0x68, 0x8f, 0x08, 0xf6, - 0x33, 0xd6, 0xfb, 0xbe, 0x24, 0xca, 0x4d, 0xf7, 0x72, 0x11, 0x51, 0x1e, 0xc3, 0x09, 0x4b, 0xec, - 0x43, 0x93, 0xe9, 0xd0, 0x08, 0xf0, 0x88, 0x1d, 0x88, 0x22, 0x14, 0xf9, 0x61, 0xce, 0x68, 0x3e, - 0x2f, 0x37, 0x80, 0xbe, 0x40, 0xe7, 0xea, 0x6b, 0x8c, 0x54, 0x58, 0xe7, 0x01, 0xa0, 0x2c, 0xd2, - 0xb9, 0xf4, 0xf0, 0x25, 0xdd, 0xfb, 0x34, 0x71, 0xc9, 0xf1, 0xf4, 0xc7, 0x8c, 0x8d, 0x09, 0x4a, - 0xe0, 0x7c, 0xea, 0x02, 0x51, 0xfb, 0xbb, 0x0a, 0x40, 0xdc, 0xf9, 0xc6, 0x6e, 0xfa, 0x0f, 0xa3, - 0x2d, 0xc8, 0xa3, 0x89, 0x2b, 0x39, 0xf4, 0x72, 0x37, 0xdf, 0xc3, 0xe4, 0xe6, 0xe3, 0x71, 0xc5, - 0x5b, 0x79, 0xa3, 0xdf, 0xd8, 0x6d, 0xb7, 0x05, 0x2b, 0x69, 0x75, 0x8b, 0x4d, 0x77, 0x13, 0x66, - 0x6c, 0x82, 0xc7, 0x3c, 0x0d, 0x57, 0xd3, 0x11, 0x05, 0x97, 0x63, 0x68, 0x57, 0xa1, 0xb6, 0x3b, - 0x36, 0x87, 0xb8, 0xef, 0xe1, 0x01, 0x9d, 0xcb, 0xa6, 0x0d, 0x31, 0x3f, 0x6f, 0x68, 0x9b, 0x50, - 0x7d, 0x8c, 0x4f, 0xf9, 0x1e, 0x3c, 0x23, 0x7f, 0xda, 0x5f, 0x97, 0x61, 0x95, 0xf9, 0xce, 0x2d, - 0x99, 0x04, 0xeb, 0x38, 0x70, 0x43, 0x7f, 0x80, 0x03, 0xa6, 0x52, 0x2f, 0x34, 0x3c, 0xec, 0xdb, - 0xae, 0x25, 0xb2, 0xbe, 0xda, 0xc0, 0x0b, 0xf7, 0x19, 0x80, 0x26, 0xca, 0xb4, 0xfb, 0xdb, 0xd0, - 0x15, 0xb6, 0x55, 0xd1, 0xab, 0x03, 0x2f, 0xfc, 0x31, 0x6d, 0xcb, 0xb1, 0xc1, 0x89, 0xe9, 0xe3, - 0x80, 0xd9, 0x10, 0x1f, 0xdb, 0x67, 0x00, 0xf4, 0x1e, 0x5c, 0x18, 0xe3, 0xb1, 0xeb, 0x9f, 0x1a, - 0x23, 0x7b, 0x6c, 0x13, 0xc3, 0x76, 0x8c, 0xa3, 0x53, 0x82, 0x03, 0x61, 0x38, 0x88, 0x77, 0x3e, - 0xa1, 0x7d, 0xbb, 0xce, 0x17, 0xb4, 0x07, 0x69, 0xd0, 0x70, 0xdd, 0xb1, 0x11, 0x0c, 0x5c, 0x1f, - 0x1b, 0xa6, 0xf5, 0x35, 0x3b, 0x3c, 0x2a, 0x7a, 0xdd, 0x75, 0xc7, 0x7d, 0x0a, 0xeb, 0x5a, 0x5f, - 0xa3, 0x2b, 0x50, 0x1f, 0x78, 0x61, 0x80, 0x89, 0x41, 0x7f, 0xd8, 0x21, 0x51, 0xd3, 0x81, 0x83, - 0xb6, 0xbc, 0x30, 0x50, 0x10, 0xc6, 0x54, 0xec, 0x73, 0x2a, 0xc2, 0x53, 0x2a, 0x66, 0x13, 0x1a, - 0x89, 0x3c, 0x92, 0x66, 0x0b, 0x2c, 0x61, 0x14, 0xd9, 0x02, 0xfd, 0xa6, 0x30, 0xdf, 0x1d, 0x49, - 0x49, 0xb2, 0x6f, 0x0a, 0x23, 0xa7, 0x9e, 0x4c, 0x15, 0xd8, 0x37, 0x15, 0xf9, 0x08, 0x3f, 0x13, - 0x75, 0x80, 0x9a, 0xce, 0x1b, 0x9a, 0x05, 0xb0, 0x65, 0x7a, 0xe6, 0x91, 0x3d, 0xb2, 0xc9, 0x29, - 0xba, 0x09, 0x2d, 0xd3, 0xb2, 0x8c, 0x81, 0x84, 0xd8, 0x58, 0x16, 0x65, 0x16, 0x4c, 0xcb, 0xda, - 0x52, 0xc0, 0xe8, 0x07, 0xb0, 0x68, 0xf9, 0xae, 0x97, 0xc4, 0xe5, 0x55, 0x9a, 0x16, 0xed, 0x50, - 0x91, 0xb5, 0x7f, 0x9e, 0x86, 0xcb, 0x49, 0xc5, 0xa6, 0x33, 0xf3, 0x0f, 0x61, 0x3e, 0x35, 0x6b, - 0x32, 0x25, 0x8e, 0x99, 0xd4, 0x13, 0x88, 0xa9, 0xdc, 0xb5, 0x9c, 0xc9, 0x5d, 0x73, 0x53, 0xfe, - 0xca, 0xf7, 0x91, 0xf2, 0x4f, 0x7f, 0x97, 0x94, 0x7f, 0xe6, 0x4c, 0x29, 0xff, 0xdb, 0xac, 0x02, - 0x27, 0x07, 0xb1, 0xc4, 0x8b, 0x9b, 0x51, 0x23, 0xc2, 0x71, 0x64, 0xa5, 0x2e, 0x55, 0x1a, 0x98, - 0x3b, 0x4f, 0x69, 0xa0, 0x5a, 0x58, 0x1a, 0xa0, 0x16, 0xe1, 0x79, 0xa6, 0x3f, 0x76, 0x7d, 0x99, - 0xfb, 0xb7, 0x6b, 0x8c, 0x85, 0x05, 0x09, 0x17, 0x79, 0x7f, 0x61, 0x95, 0x00, 0x8a, 0xaa, 0x04, - 0x68, 0x03, 0xe6, 0x1d, 0xd7, 0x70, 0xf0, 0x73, 0x83, 0x2a, 0x2c, 0x68, 0xd7, 0xb9, 0xf6, 0x1c, - 0xb7, 0x87, 0x9f, 0xef, 0x53, 0x88, 0xf6, 0x0f, 0x25, 0x58, 0x4e, 0x1a, 0x8e, 0xc8, 0x0b, 0x3f, - 0x83, 0x9a, 0x2f, 0x7d, 0x83, 0x30, 0x96, 0x8d, 0x64, 0xfc, 0x95, 0xf5, 0x21, 0x7a, 0x3c, 0x04, - 0xfd, 0xb8, 0xb0, 0xc2, 0xf0, 0x76, 0x01, 0x99, 0x57, 0xd5, 0x18, 0xb4, 0x2e, 0x2c, 0x46, 0xc8, - 0x13, 0xf3, 0x7b, 0x25, 0x5f, 0x2f, 0x27, 0xf3, 0x75, 0x07, 0x66, 0xb7, 0xf1, 0x33, 0x7b, 0x80, - 0xbf, 0x97, 0xfa, 0xe0, 0x06, 0xd4, 0x3d, 0xec, 0x8f, 0xed, 0x20, 0x88, 0x8c, 0xbe, 0xa6, 0xab, - 0x20, 0xed, 0xbf, 0x66, 0x60, 0x21, 0x2d, 0xd9, 0x7b, 0x99, 0xf2, 0x40, 0x27, 0xde, 0x85, 0xe9, - 0xf5, 0x29, 0x67, 0xf4, 0x0d, 0x79, 0x0c, 0x94, 0x53, 0x59, 0x42, 0x74, 0x52, 0x88, 0xa3, 0x81, - 0xae, 0x7f, 0xe0, 0x8e, 0xc7, 0xa6, 0x63, 0xc9, 0xda, 0xad, 0x68, 0x52, 0x69, 0x99, 0xfe, 0x90, - 0x6e, 0x2d, 0x0a, 0x66, 0xdf, 0xd4, 0x4b, 0xd2, 0x68, 0xdb, 0x76, 0x58, 0x75, 0x81, 0x6d, 0x9c, - 0x9a, 0x0e, 0x02, 0xb4, 0x6d, 0xfb, 0xe8, 0x3a, 0x4c, 0x63, 0xe7, 0x99, 0x3c, 0x8d, 0xe3, 0xe2, - 0xae, 0x3c, 0x7e, 0x74, 0xd6, 0x8d, 0xde, 0x86, 0xd9, 0xb1, 0x1b, 0x3a, 0x44, 0xc6, 0xdd, 0xcd, - 0x64, 0x8d, 0x53, 0x17, 0xbd, 0xe8, 0x26, 0xcc, 0x59, 0x4c, 0x07, 0x32, 0xb8, 0x5e, 0x88, 0x2b, - 0x14, 0x0c, 0xae, 0xcb, 0x7e, 0xf4, 0x49, 0x14, 0x47, 0xd4, 0x52, 0x91, 0x40, 0x4a, 0xa8, 0xb9, - 0xc1, 0xc4, 0xe3, 0x64, 0x30, 0x01, 0x8c, 0xc4, 0xcd, 0x42, 0x12, 0x93, 0xeb, 0x0b, 0x6b, 0x50, - 0x1d, 0xb9, 0x43, 0x6e, 0x07, 0x75, 0x5e, 0xe9, 0x1f, 0xb9, 0x43, 0x66, 0x06, 0xcb, 0x34, 0x78, - 0xb2, 0x6c, 0xa7, 0x3d, 0xcf, 0xb6, 0x17, 0x6f, 0xd0, 0x33, 0x91, 0x7d, 0x18, 0xae, 0x33, 0xc0, - 0xed, 0x06, 0xeb, 0xaa, 0x31, 0xc8, 0x9e, 0x33, 0x60, 0x47, 0x36, 0x21, 0xa7, 0xed, 0x26, 0x83, - 0xd3, 0x4f, 0x1a, 0xf3, 0xf2, 0x6c, 0x67, 0x21, 0x15, 0xf3, 0xe6, 0xed, 0xcf, 0x37, 0xa0, 0x80, - 0xf1, 0x4f, 0x25, 0x58, 0xd9, 0x62, 0x21, 0x9f, 0xe2, 0x09, 0xce, 0x91, 0x80, 0xa3, 0xbb, 0x51, - 0xa5, 0x23, 0x9d, 0x47, 0xa7, 0x17, 0x2b, 0xf0, 0xd0, 0x03, 0x68, 0x4a, 0x9a, 0x62, 0x64, 0xe5, - 0x55, 0x35, 0x92, 0x46, 0xa0, 0x36, 0xb5, 0x4f, 0x60, 0x35, 0xc3, 0xb3, 0x08, 0xcf, 0xae, 0xc2, - 0x7c, 0xec, 0x11, 0x22, 0x96, 0xeb, 0x11, 0x6c, 0xd7, 0xd2, 0xee, 0xc3, 0x85, 0x3e, 0x31, 0x7d, - 0x92, 0x59, 0xf0, 0x19, 0xc6, 0xb2, 0x32, 0x49, 0x72, 0xac, 0xa8, 0x64, 0xf4, 0x61, 0xb9, 0x4f, - 0x5c, 0xef, 0x35, 0x88, 0xd2, 0x9d, 0x4e, 0x97, 0xed, 0x86, 0x44, 0xc4, 0x64, 0xb2, 0xa9, 0xad, - 0xf2, 0xa2, 0x4e, 0x76, 0xb6, 0x8f, 0x61, 0x85, 0xd7, 0x54, 0x5e, 0x67, 0x11, 0x6b, 0xb2, 0xa2, - 0x93, 0xa5, 0xbb, 0x0d, 0x4b, 0xb1, 0x2b, 0x8f, 0xd3, 0xc3, 0xdb, 0xc9, 0xf4, 0x70, 0x35, 0xab, - 0xe3, 0x44, 0x76, 0xf8, 0x37, 0x65, 0xc5, 0x61, 0x16, 0x24, 0x87, 0x9b, 0xc9, 0xe4, 0xf0, 0x52, - 0x01, 0xc9, 0x44, 0x6e, 0x98, 0xb5, 0xc8, 0x4a, 0x8e, 0x45, 0xea, 0x99, 0x0c, 0x72, 0x3a, 0x55, - 0xcc, 0x4e, 0xf1, 0xf6, 0x3b, 0x49, 0x20, 0x77, 0x79, 0x02, 0x19, 0x4d, 0x1d, 0xd5, 0xb9, 0xee, - 0xa6, 0x12, 0xc8, 0x76, 0x11, 0x9b, 0x51, 0xfe, 0xf8, 0x57, 0xd3, 0x50, 0x8b, 0xfa, 0x32, 0x82, - 0xcd, 0x0a, 0xa9, 0x9c, 0x23, 0x24, 0xf5, 0xfc, 0xaa, 0xbc, 0xce, 0xf9, 0x35, 0xfd, 0xaa, 0xf3, - 0xeb, 0x22, 0xd4, 0xd8, 0x87, 0xe1, 0xe3, 0x63, 0x71, 0x1e, 0x55, 0x19, 0x40, 0xc7, 0xc7, 0xb1, - 0x41, 0xcd, 0x9e, 0xc5, 0xa0, 0x52, 0x99, 0xea, 0x5c, 0x3a, 0x53, 0xbd, 0x17, 0x9d, 0x30, 0xfc, - 0x2c, 0x5a, 0xcf, 0x92, 0xcb, 0x3d, 0x5b, 0x76, 0x92, 0x67, 0x0b, 0x3f, 0x9e, 0xae, 0xe5, 0x0c, - 0x7e, 0x63, 0xf3, 0xd4, 0x27, 0x3c, 0x4f, 0x55, 0xad, 0x4a, 0x38, 0xc2, 0x4d, 0x80, 0x68, 0xcf, - 0xcb, 0x64, 0x15, 0x65, 0x97, 0xa6, 0x2b, 0x58, 0xd4, 0xab, 0x24, 0xe4, 0x1f, 0x17, 0x63, 0xcf, - 0xe0, 0x55, 0xfe, 0x55, 0x8d, 0x92, 0x0a, 0xea, 0x99, 0xf7, 0x32, 0xa5, 0x8d, 0xb3, 0x59, 0xdd, - 0xed, 0x64, 0x65, 0xe3, 0x7c, 0xe6, 0x92, 0x29, 0x6c, 0xb0, 0x43, 0xdd, 0xf4, 0x45, 0x37, 0xcf, - 0x49, 0x6b, 0x02, 0xd2, 0x25, 0x34, 0x94, 0x3a, 0xb6, 0x1d, 0x3b, 0x38, 0xe1, 0xfd, 0xb3, 0xac, - 0x1f, 0x24, 0xa8, 0xcb, 0x6e, 0xb5, 0xf1, 0x0b, 0x9b, 0x18, 0x03, 0xd7, 0xc2, 0xcc, 0x18, 0x67, - 0xf4, 0x2a, 0x05, 0x6c, 0xb9, 0x16, 0x8e, 0x37, 0x48, 0xf5, 0x5c, 0x1b, 0xa4, 0x96, 0xda, 0x20, - 0x2b, 0x30, 0xeb, 0x63, 0x33, 0x70, 0x1d, 0x91, 0x18, 0x88, 0x16, 0x3d, 0x2b, 0xc6, 0x38, 0x08, - 0xe8, 0x04, 0x22, 0x80, 0x11, 0x4d, 0x25, 0xcc, 0x9a, 0x2f, 0x0a, 0xb3, 0x26, 0x14, 0x4c, 0x53, - 0x61, 0x56, 0xa3, 0x28, 0xcc, 0x3a, 0x4b, 0xbd, 0x54, 0x09, 0x22, 0x9b, 0x13, 0x83, 0x48, 0x35, - 0x1c, 0x5b, 0x48, 0x84, 0x63, 0xbf, 0xcf, 0x3d, 0xf5, 0x18, 0x56, 0x33, 0xbb, 0x40, 0x6c, 0xaa, - 0xbb, 0xa9, 0x8a, 0x6b, 0xbb, 0x48, 0x40, 0x51, 0xc1, 0xf5, 0xcf, 0xe0, 0xca, 0xa1, 0x67, 0xa5, - 0x42, 0x15, 0x91, 0x68, 0x9d, 0x3d, 0x42, 0xb8, 0x27, 0xa3, 0xca, 0xf2, 0x19, 0x73, 0x38, 0x8e, - 0xae, 0x69, 0xb0, 0x51, 0x3c, 0xbb, 0x38, 0xf2, 0xff, 0x04, 0x16, 0x76, 0x5e, 0xe0, 0x41, 0xff, - 0xd4, 0x19, 0x9c, 0x83, 0xa3, 0x16, 0x54, 0x06, 0x63, 0x4b, 0x94, 0x32, 0xe8, 0xa7, 0x1a, 0xc5, - 0x54, 0x92, 0x51, 0x8c, 0x01, 0xad, 0x78, 0x06, 0x21, 0xc9, 0x15, 0x2a, 0x49, 0x8b, 0x22, 0x53, - 0xe2, 0xf3, 0xba, 0x68, 0x09, 0x38, 0xf6, 0x7d, 0xb6, 0x54, 0x0e, 0xc7, 0xbe, 0x9f, 0xdc, 0x73, - 0x95, 0xe4, 0x9e, 0xd3, 0xbe, 0x86, 0x3a, 0x9d, 0xe0, 0x3b, 0xb1, 0x2f, 0x42, 0xf9, 0x4a, 0x1c, - 0xca, 0x47, 0x19, 0xc1, 0xb4, 0x92, 0x11, 0x68, 0x1b, 0x30, 0xcf, 0xe7, 0x12, 0x0b, 0x69, 0x41, - 0x25, 0xf4, 0x47, 0xd2, 0xb2, 0x42, 0x7f, 0xa4, 0xfd, 0x11, 0x34, 0xba, 0x84, 0x98, 0x83, 0x93, - 0x73, 0xf0, 0x13, 0xcd, 0x55, 0x56, 0xb3, 0x8f, 0x0c, 0x4f, 0x9a, 0x06, 0x4d, 0x49, 0xbb, 0x70, - 0xfe, 0x1e, 0xa0, 0x7d, 0xd7, 0x27, 0x0f, 0x5d, 0xff, 0xb9, 0xe9, 0x5b, 0xe7, 0x8b, 0xe6, 0x11, - 0x4c, 0x8b, 0xd7, 0x3c, 0x95, 0x1b, 0x33, 0x3a, 0xfb, 0xd6, 0xde, 0x81, 0xa5, 0x04, 0xbd, 0xc2, - 0x89, 0x3f, 0x84, 0x3a, 0x73, 0x72, 0x22, 0xe2, 0xbb, 0xa1, 0x56, 0x3c, 0x27, 0x79, 0x42, 0xad, - 0x0b, 0x8b, 0xf4, 0x14, 0x63, 0xf0, 0x68, 0x5b, 0xfc, 0x30, 0x15, 0x17, 0x2d, 0x27, 0xc7, 0xa7, - 0x62, 0xa2, 0x7f, 0x2c, 0xc1, 0x0c, 0x83, 0x67, 0xce, 0x9c, 0x8b, 0x50, 0xf3, 0xb1, 0xe7, 0x1a, - 0xc4, 0x1c, 0x46, 0x0f, 0xa4, 0x28, 0xe0, 0xc0, 0x1c, 0x06, 0xec, 0x7d, 0x17, 0xed, 0xb4, 0xec, - 0x21, 0x0e, 0x88, 0x7c, 0x25, 0x55, 0xa7, 0xb0, 0x6d, 0x0e, 0xa2, 0x22, 0x09, 0xec, 0x3f, 0xe5, - 0x01, 0xcf, 0xb4, 0xce, 0xbe, 0xd1, 0x75, 0xfe, 0xf6, 0x60, 0x42, 0x79, 0x8a, 0x3d, 0x48, 0xe8, - 0x40, 0x35, 0x55, 0x91, 0x8a, 0xda, 0xda, 0x27, 0x80, 0xd4, 0x35, 0x0b, 0xa1, 0xbe, 0x0d, 0xb3, - 0x4c, 0x24, 0xf2, 0xc4, 0x6e, 0x26, 0x17, 0xad, 0x8b, 0x5e, 0xed, 0x33, 0x40, 0x5c, 0x8a, 0x89, - 0x53, 0xfa, 0xec, 0x12, 0xff, 0x18, 0x96, 0x12, 0xe3, 0xa3, 0xab, 0xe6, 0x04, 0x81, 0xf4, 0xec, - 0x62, 0xf0, 0xaf, 0x4b, 0x00, 0xdd, 0x90, 0x9c, 0x88, 0x52, 0x88, 0xba, 0xca, 0x52, 0x72, 0x95, - 0xb4, 0xcf, 0x33, 0x83, 0xe0, 0xb9, 0xeb, 0xcb, 0x30, 0x34, 0x6a, 0xb3, 0x32, 0x46, 0x48, 0x4e, - 0x64, 0xf9, 0x95, 0x7e, 0xa3, 0xeb, 0xd0, 0xe4, 0xef, 0xda, 0x0c, 0xd3, 0xb2, 0x7c, 0x1c, 0x04, - 0xa2, 0x0e, 0xdb, 0xe0, 0xd0, 0x2e, 0x07, 0x52, 0x34, 0xdb, 0xc2, 0x0e, 0xb1, 0xc9, 0xa9, 0x41, - 0xdc, 0x6f, 0xb0, 0x23, 0x02, 0xcc, 0x86, 0x84, 0x1e, 0x50, 0x20, 0x45, 0xf3, 0xf1, 0xd0, 0x0e, - 0x88, 0x2f, 0xd1, 0x64, 0x5d, 0x50, 0x40, 0x19, 0x9a, 0xf6, 0xcb, 0x12, 0xb4, 0xf6, 0xc3, 0xd1, - 0x88, 0x2f, 0xf2, 0xbc, 0xb2, 0x44, 0xef, 0x88, 0x75, 0x94, 0x53, 0xd6, 0x10, 0x8b, 0x48, 0x2c, - 0xee, 0xbb, 0x27, 0xbe, 0x77, 0x61, 0x51, 0x61, 0x54, 0x28, 0x2d, 0x11, 0x47, 0x94, 0x92, 0x71, - 0x04, 0x35, 0x14, 0x9e, 0xeb, 0xbd, 0xde, 0xe2, 0xb4, 0x0b, 0xb0, 0x94, 0x18, 0x2f, 0x0e, 0x8d, - 0x5b, 0xd0, 0x10, 0xd7, 0xbd, 0xc2, 0x08, 0xd6, 0xa0, 0x4a, 0xdd, 0xcb, 0xc0, 0xb6, 0x64, 0xdd, - 0x7d, 0xce, 0x73, 0xad, 0x2d, 0xdb, 0xf2, 0xb5, 0x1e, 0x34, 0x74, 0x4e, 0x5e, 0xe0, 0x7e, 0x0a, - 0x4d, 0x71, 0x39, 0x6c, 0x24, 0x1e, 0x49, 0xc4, 0x45, 0xe2, 0x04, 0x6d, 0xbd, 0xe1, 0xa8, 0x4d, - 0xed, 0xe7, 0xd0, 0xe1, 0x87, 0x5a, 0x82, 0xaa, 0x5c, 0xda, 0xa7, 0x20, 0xdf, 0x5d, 0x16, 0x11, - 0x4f, 0x0e, 0x6b, 0xf8, 0x6a, 0x53, 0xbb, 0x0c, 0x17, 0x73, 0x89, 0x8b, 0x75, 0x7b, 0xd0, 0x8a, - 0x3b, 0x2c, 0x5b, 0x5e, 0x37, 0xb0, 0x6b, 0x84, 0x92, 0x72, 0x8d, 0xb0, 0x12, 0x05, 0x0a, 0xdc, - 0xa1, 0x8b, 0x96, 0x12, 0xd6, 0x55, 0x8a, 0xc2, 0xba, 0xe9, 0x44, 0x58, 0xa7, 0x7d, 0x19, 0x49, - 0x4f, 0xc4, 0xd4, 0x1f, 0xb1, 0xc0, 0x9e, 0xcf, 0x2d, 0xdd, 0xc4, 0x5a, 0xce, 0xe2, 0x38, 0x86, - 0xae, 0x20, 0x6b, 0x0b, 0xd0, 0x48, 0x38, 0x0c, 0xed, 0x01, 0x34, 0x53, 0x1e, 0xe0, 0x4e, 0x2a, - 0xc2, 0xc9, 0x88, 0x2d, 0x15, 0xdf, 0x2c, 0x0b, 0x47, 0xf4, 0x30, 0xd8, 0x75, 0x8e, 0x5d, 0x49, - 0xf7, 0x1a, 0xd4, 0x0f, 0x8b, 0x9e, 0x21, 0x4e, 0xcb, 0x7b, 0xac, 0x77, 0x60, 0xb1, 0x4f, 0x5c, - 0xdf, 0x1c, 0xe2, 0x5d, 0xb6, 0x6b, 0x8f, 0x6d, 0x7e, 0x4f, 0x13, 0x86, 0x91, 0xff, 0x66, 0xdf, - 0xda, 0x7f, 0x94, 0x60, 0xe1, 0xa1, 0x3d, 0xc2, 0xc1, 0x69, 0x40, 0xf0, 0xf8, 0x90, 0x45, 0xbb, - 0x97, 0xa0, 0x46, 0xb9, 0x09, 0x88, 0x39, 0xf6, 0xe4, 0x3d, 0x57, 0x04, 0xa0, 0x32, 0x0a, 0x38, - 0x69, 0x99, 0xff, 0xaa, 0x99, 0x46, 0x66, 0x56, 0x1a, 0xfd, 0x0b, 0x10, 0x7a, 0x1f, 0x20, 0x0c, - 0xb0, 0x25, 0xee, 0xb6, 0x2a, 0xa9, 0xa3, 0xe7, 0x50, 0xbd, 0x81, 0xa0, 0x78, 0xfc, 0xa2, 0xeb, - 0x03, 0xa8, 0xdb, 0x8e, 0x6b, 0x61, 0x76, 0x03, 0x61, 0x89, 0xdc, 0x38, 0x7f, 0x14, 0x70, 0xc4, - 0xc3, 0x00, 0x5b, 0xda, 0x1f, 0x0b, 0x2f, 0x2c, 0x85, 0x27, 0x74, 0xb0, 0x03, 0x8b, 0x7c, 0x43, - 0x1f, 0x47, 0x8b, 0x96, 0x8a, 0x8e, 0x03, 0xce, 0x94, 0x40, 0xf4, 0x96, 0x2d, 0x4e, 0x45, 0x39, - 0x42, 0xbb, 0x0f, 0x17, 0x12, 0x51, 0xe9, 0x79, 0x92, 0xb9, 0x47, 0xa9, 0x4c, 0x30, 0x36, 0x10, - 0x91, 0x8a, 0x49, 0xfb, 0x28, 0x48, 0xc5, 0x02, 0x9e, 0x8a, 0x05, 0x9a, 0x0e, 0x6b, 0x89, 0x04, - 0x35, 0xc1, 0xc8, 0x07, 0xa9, 0x23, 0xfe, 0x72, 0x01, 0xb1, 0xd4, 0x59, 0xff, 0xbf, 0x25, 0x58, - 0xce, 0x43, 0x78, 0xcd, 0x52, 0xc8, 0x4f, 0x0a, 0x5e, 0x1c, 0xdc, 0x9d, 0xc8, 0xcd, 0xef, 0xa4, - 0x68, 0xf4, 0x18, 0x3a, 0x79, 0xd2, 0xcb, 0xaa, 0xa2, 0x72, 0x06, 0x55, 0xfc, 0x5f, 0x59, 0x29, - 0xee, 0x75, 0x09, 0xf1, 0xed, 0xa3, 0x90, 0x1a, 0xef, 0xf7, 0x95, 0xa4, 0x3f, 0x88, 0x12, 0x50, - 0x2e, 0xbf, 0x1b, 0xd9, 0x51, 0xf1, 0xac, 0xb9, 0x49, 0xe8, 0x5e, 0x32, 0x09, 0xe5, 0x65, 0xbb, - 0xdb, 0x13, 0xc9, 0xbc, 0xb1, 0x95, 0x99, 0x97, 0x25, 0x68, 0x26, 0xf5, 0x80, 0x3e, 0x01, 0x30, - 0x23, 0xce, 0x85, 0xc9, 0x5f, 0x9a, 0xb4, 0x3a, 0x5d, 0xc1, 0x47, 0xd7, 0xa0, 0x32, 0xf0, 0x42, - 0xa1, 0x91, 0xf8, 0xfe, 0x66, 0xcb, 0x0b, 0xb9, 0x03, 0xa0, 0xbd, 0x34, 0x68, 0xe6, 0xf7, 0xf0, - 0x19, 0xcf, 0xf5, 0x94, 0x81, 0x39, 0xaa, 0xc0, 0x41, 0x9f, 0x43, 0xf3, 0xb9, 0x6f, 0x13, 0xf3, - 0x68, 0x84, 0x8d, 0x91, 0x79, 0x8a, 0x7d, 0xe1, 0xb9, 0x8a, 0xbd, 0x4c, 0x43, 0xe2, 0x3f, 0xa1, - 0xe8, 0x5a, 0x08, 0x55, 0x39, 0xff, 0x2b, 0x3c, 0xf2, 0x63, 0x58, 0x0d, 0x29, 0x9a, 0xc1, 0xde, - 0x02, 0x38, 0xa6, 0xe3, 0x1a, 0x01, 0xa6, 0x47, 0x93, 0x7c, 0x7f, 0x97, 0xef, 0x2d, 0x97, 0xd9, - 0xa0, 0x2d, 0xd7, 0xc7, 0x3d, 0xd3, 0x71, 0xfb, 0x7c, 0x84, 0x36, 0x86, 0xba, 0xb2, 0x9c, 0x57, - 0xcc, 0xfc, 0x00, 0x16, 0xe5, 0xcd, 0x58, 0x80, 0x89, 0xf0, 0xeb, 0x93, 0xe6, 0x5c, 0x10, 0xe8, - 0x7d, 0x4c, 0x98, 0x77, 0xbf, 0x75, 0x09, 0xaa, 0xf2, 0x2f, 0x10, 0x68, 0x0e, 0x2a, 0x07, 0x5b, - 0xfb, 0xad, 0x29, 0xfa, 0x71, 0xb8, 0xbd, 0xdf, 0x2a, 0xdd, 0x1a, 0x43, 0x2b, 0xfd, 0xfc, 0x1f, - 0xad, 0xc2, 0xd2, 0xbe, 0xbe, 0xb7, 0xdf, 0x7d, 0xd4, 0x3d, 0xd8, 0xdd, 0xeb, 0x19, 0xfb, 0xfa, - 0xee, 0x57, 0xdd, 0x83, 0x9d, 0xd6, 0x14, 0xba, 0x0a, 0x97, 0xd5, 0x8e, 0x3f, 0xdc, 0xeb, 0x1f, - 0x18, 0x07, 0x7b, 0xc6, 0xd6, 0x5e, 0xef, 0xa0, 0xbb, 0xdb, 0xdb, 0xd1, 0x5b, 0x25, 0x74, 0x19, - 0xd6, 0x54, 0x94, 0x2f, 0x76, 0xb7, 0x77, 0xf5, 0x9d, 0x2d, 0xfa, 0xdd, 0x7d, 0xd2, 0x2a, 0xdf, - 0xba, 0x0f, 0x0b, 0xa9, 0xe7, 0x3c, 0x68, 0x11, 0x1a, 0xfd, 0x6e, 0x6f, 0xfb, 0x8b, 0xbd, 0x9f, - 0x1a, 0xfa, 0x4e, 0x77, 0xfb, 0x67, 0xad, 0x29, 0xb4, 0x0c, 0x2d, 0x09, 0xea, 0xed, 0x1d, 0x70, - 0x68, 0xe9, 0xd6, 0x37, 0x29, 0x93, 0xc4, 0xe8, 0x02, 0x2c, 0x46, 0x73, 0x1b, 0x5b, 0xfa, 0x4e, - 0xf7, 0x60, 0x67, 0xbb, 0x35, 0x95, 0x04, 0xeb, 0x87, 0xbd, 0xde, 0x6e, 0xef, 0x51, 0xab, 0x44, - 0xa9, 0xc6, 0xe0, 0x9d, 0x9f, 0xee, 0x52, 0xe4, 0x72, 0x12, 0xf9, 0xb0, 0xf7, 0xb8, 0xb7, 0xf7, - 0x93, 0x5e, 0xab, 0xb2, 0xf9, 0xef, 0x0d, 0x68, 0xca, 0x98, 0x01, 0xfb, 0xec, 0xba, 0xf6, 0x33, - 0x98, 0x93, 0x7f, 0x86, 0x89, 0x9d, 0x55, 0xf2, 0x9f, 0x3b, 0x9d, 0x76, 0xb6, 0x43, 0xc4, 0x5e, - 0x53, 0x68, 0x9f, 0xc5, 0x42, 0xca, 0xd3, 0xa9, 0xcb, 0x6a, 0x74, 0x92, 0x79, 0x9b, 0xd5, 0x59, - 0x2f, 0xea, 0x8e, 0x28, 0xf6, 0x69, 0x00, 0xa4, 0x3e, 0x7b, 0x45, 0xeb, 0x6a, 0x98, 0x90, 0x7d, - 0x4e, 0xdb, 0xb9, 0x52, 0xd8, 0x1f, 0x11, 0xfd, 0x19, 0xb4, 0xd2, 0x0f, 0x5e, 0x51, 0x5c, 0xb2, - 0x29, 0x78, 0x4c, 0xdb, 0xb9, 0x3a, 0x01, 0x43, 0x25, 0x9d, 0x79, 0x34, 0xba, 0x51, 0xfc, 0xec, - 0x2f, 0x43, 0xba, 0xe8, 0x2d, 0x21, 0x17, 0x45, 0xf2, 0xc9, 0x13, 0x52, 0x9f, 0x6a, 0xe6, 0x3c, - 0x7d, 0x53, 0x44, 0x91, 0xff, 0x56, 0x4a, 0x9b, 0x42, 0x5f, 0xc1, 0x42, 0xea, 0xa6, 0x0e, 0xc5, - 0xa3, 0xf2, 0xef, 0x1d, 0x3b, 0x1b, 0xc5, 0x08, 0x49, 0xbd, 0xa9, 0xf7, 0x70, 0x09, 0xbd, 0xe5, - 0x5c, 0xee, 0x25, 0xf4, 0x96, 0x7b, 0x81, 0xc7, 0xcc, 0x2b, 0x71, 0xdb, 0xa6, 0x98, 0x57, 0xde, - 0xd5, 0x5e, 0x67, 0xbd, 0xa8, 0x5b, 0x5d, 0x7e, 0xea, 0xa6, 0x4d, 0x59, 0x7e, 0xfe, 0x05, 0x5e, - 0x67, 0xa3, 0x18, 0x21, 0xad, 0xab, 0xb8, 0xec, 0x9f, 0xd2, 0x55, 0xe6, 0x96, 0x29, 0xa5, 0xab, - 0xec, 0x7d, 0x81, 0xd0, 0x55, 0xaa, 0x7e, 0x7f, 0xa5, 0xb0, 0xbe, 0x99, 0xd5, 0x55, 0x7e, 0xc9, - 0x54, 0x9b, 0x42, 0xdf, 0x42, 0xbb, 0xa8, 0x08, 0x89, 0xe2, 0x18, 0xe1, 0x15, 0x55, 0xd2, 0xce, - 0xcd, 0x33, 0x60, 0x46, 0x53, 0x76, 0xa1, 0x2a, 0x2b, 0x8e, 0x28, 0x76, 0x28, 0xa9, 0x32, 0x67, - 0x67, 0x2d, 0xa7, 0x27, 0x22, 0xf1, 0x01, 0x4c, 0x53, 0x28, 0x5a, 0x4e, 0x20, 0xc9, 0xa1, 0x17, - 0x52, 0xd0, 0x68, 0xd8, 0xc7, 0x30, 0xcb, 0x0b, 0x74, 0x28, 0xce, 0x9c, 0x12, 0xd5, 0xc0, 0xce, - 0x6a, 0x06, 0x1e, 0x0d, 0xfe, 0x92, 0xff, 0x27, 0x4f, 0x54, 0xda, 0xd0, 0xc5, 0xc4, 0xdf, 0x37, - 0x92, 0xf5, 0xbc, 0xce, 0xa5, 0xfc, 0x4e, 0xd5, 0x44, 0x52, 0xe1, 0xc7, 0x7a, 0x51, 0x7c, 0x98, - 0x31, 0x91, 0xfc, 0x78, 0x53, 0x9b, 0x42, 0x06, 0x2f, 0x5a, 0xa5, 0x08, 0x6b, 0xf9, 0xb6, 0x95, - 0x20, 0x7e, 0x6d, 0x22, 0x4e, 0x34, 0xc1, 0x11, 0x2c, 0xe5, 0xa4, 0xdf, 0xe8, 0x5a, 0x4a, 0xf9, - 0x79, 0x99, 0x7f, 0xe7, 0xad, 0xc9, 0x48, 0xaa, 0x8a, 0x84, 0x79, 0xaf, 0xa8, 0x3e, 0x41, 0xb1, - 0xea, 0xd5, 0x0c, 0x5c, 0x0e, 0xde, 0xfc, 0x8b, 0x0a, 0xcc, 0xf3, 0x22, 0x89, 0x38, 0xd3, 0x1e, - 0x01, 0xc4, 0x75, 0x3c, 0xd4, 0x49, 0x2c, 0x33, 0x51, 0xd0, 0xec, 0x5c, 0xcc, 0xed, 0x53, 0x95, - 0xaf, 0x94, 0xe4, 0x14, 0xe5, 0x67, 0x0b, 0x7d, 0x8a, 0xf2, 0x73, 0xaa, 0x78, 0xda, 0x14, 0xda, - 0x86, 0x5a, 0x54, 0x27, 0x42, 0x4a, 0x79, 0x29, 0x55, 0xe4, 0xea, 0x74, 0xf2, 0xba, 0x54, 0x8e, - 0x94, 0xda, 0x8f, 0xc2, 0x51, 0xb6, 0xa2, 0xa4, 0x70, 0x94, 0x57, 0x2e, 0x8a, 0x57, 0xc7, 0x53, - 0xdd, 0xf4, 0xea, 0x12, 0xd5, 0x83, 0xf4, 0xea, 0x92, 0xd9, 0xb1, 0x36, 0xf5, 0xc5, 0xa5, 0x5f, - 0xfd, 0x66, 0xbd, 0xf4, 0x9f, 0xbf, 0x59, 0x9f, 0xfa, 0xf3, 0x97, 0xeb, 0xa5, 0x5f, 0xbd, 0x5c, - 0x2f, 0xfd, 0xdb, 0xcb, 0xf5, 0xd2, 0x7f, 0xbf, 0x5c, 0x2f, 0xfd, 0xe2, 0x7f, 0xd6, 0xa7, 0x8e, - 0x66, 0xd9, 0x9f, 0x54, 0xdf, 0xff, 0x6d, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xa9, 0xc0, 0x61, - 0x58, 0x3c, 0x00, 0x00, + // 4392 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x5b, 0xcd, 0x6f, 0x1c, 0x47, + 0x76, 0xe7, 0xcc, 0xf0, 0x63, 0xe6, 0x0d, 0x67, 0x38, 0x2c, 0x51, 0xe4, 0x70, 0x24, 0x51, 0x54, + 0xcb, 0x92, 0x25, 0xed, 0x4a, 0x96, 0xe9, 0xb5, 0x14, 0xcb, 0xb6, 0xe4, 0x31, 0x49, 0x29, 0xb4, + 0x24, 0x92, 0xdb, 0x43, 0x7a, 0x6d, 0x6c, 0x80, 0x4e, 0x73, 0xba, 0x38, 0x6c, 0x7b, 0xa6, 0xab, + 0xdd, 0x1f, 0x92, 0x18, 0xe4, 0x90, 0x5c, 0x82, 0x20, 0x40, 0x80, 0xcd, 0x31, 0x39, 0xe5, 0x10, + 0x60, 0x91, 0x4b, 0x10, 0xe4, 0x10, 0xe4, 0x0f, 0x08, 0x92, 0xbd, 0x2c, 0x10, 0x20, 0x40, 0x90, + 0xdc, 0xb2, 0xca, 0x21, 0x87, 0x00, 0xf9, 0x1b, 0x16, 0xf5, 0xd5, 0x5d, 0xfd, 0x35, 0x22, 0x65, + 0xef, 0x5a, 0xa7, 0xe9, 0x7a, 0xf5, 0xea, 0xd5, 0xab, 0xaa, 0x57, 0xaf, 0xde, 0xfb, 0x55, 0x0d, + 0xd4, 0x4c, 0xd7, 0xbe, 0xe5, 0x7a, 0x24, 0x20, 0x68, 0xc6, 0x0b, 0x9d, 0xc0, 0x1e, 0xe1, 0xce, + 0xcd, 0x81, 0x1d, 0x1c, 0x85, 0x07, 0xb7, 0xfa, 0x64, 0xf4, 0xce, 0x80, 0x0c, 0xc8, 0x3b, 0xac, + 0xfe, 0x20, 0x3c, 0x64, 0x25, 0x56, 0x60, 0x5f, 0xbc, 0x9d, 0x76, 0x03, 0x9a, 0x9f, 0x63, 0xcf, + 0xb7, 0x89, 0xa3, 0xe3, 0x6f, 0x42, 0xec, 0x07, 0xa8, 0x0d, 0x33, 0xcf, 0x38, 0xa5, 0x5d, 0x5a, + 0x2d, 0x5d, 0xab, 0xe9, 0xb2, 0xa8, 0xfd, 0xbc, 0x04, 0x73, 0x11, 0xb3, 0xef, 0x12, 0xc7, 0xc7, + 0xc5, 0xdc, 0xe8, 0x12, 0xcc, 0x0a, 0x9d, 0x0c, 0xc7, 0x1c, 0xe1, 0x76, 0x99, 0x55, 0xd7, 0x05, + 0x6d, 0xdb, 0x1c, 0x61, 0xf4, 0x36, 0xcc, 0x49, 0x16, 0x29, 0xa4, 0xc2, 0xb8, 0x9a, 0x82, 0x2c, + 0x7a, 0x43, 0xb7, 0xe0, 0x8c, 0x64, 0x34, 0x5d, 0x3b, 0x62, 0x9e, 0x64, 0xcc, 0xf3, 0xa2, 0xaa, + 0xeb, 0xda, 0x82, 0x5f, 0xfb, 0x29, 0xd4, 0x36, 0xb6, 0x7b, 0xeb, 0xc4, 0x39, 0xb4, 0x07, 0x54, + 0x45, 0x1f, 0x7b, 0xb4, 0x4d, 0xbb, 0xb4, 0x5a, 0xa1, 0x2a, 0x8a, 0x22, 0xea, 0x40, 0xd5, 0xc7, + 0xa6, 0xd7, 0x3f, 0xc2, 0x7e, 0xbb, 0xcc, 0xaa, 0xa2, 0x32, 0x6d, 0x45, 0xdc, 0xc0, 0x26, 0x8e, + 0xdf, 0xae, 0xf0, 0x56, 0xa2, 0xa8, 0xfd, 0x65, 0x09, 0xea, 0xbb, 0xc4, 0x0b, 0x9e, 0x9a, 0xae, + 0x6b, 0x3b, 0x03, 0x74, 0x13, 0xaa, 0x6c, 0x2e, 0xfb, 0x64, 0xc8, 0xe6, 0xa0, 0xb9, 0x36, 0x7f, + 0x4b, 0xa8, 0x74, 0x6b, 0x57, 0x54, 0xe8, 0x11, 0x0b, 0xba, 0x02, 0xcd, 0x3e, 0x71, 0x02, 0xd3, + 0x76, 0xb0, 0x67, 0xb8, 0xc4, 0x0b, 0xd8, 0xcc, 0x4c, 0xe9, 0x8d, 0x88, 0x4a, 0x85, 0xa3, 0x73, + 0x50, 0x3b, 0x22, 0x7e, 0xc0, 0x39, 0x2a, 0x8c, 0xa3, 0x4a, 0x09, 0xac, 0x72, 0x09, 0x66, 0x58, + 0xa5, 0xed, 0x8a, 0x39, 0x98, 0xa6, 0xc5, 0x2d, 0x57, 0xfb, 0x65, 0x09, 0xa6, 0x9e, 0x92, 0xd0, + 0x09, 0x52, 0xdd, 0x98, 0xc1, 0x91, 0x58, 0x1f, 0xa5, 0x1b, 0x33, 0x38, 0x8a, 0xbb, 0xa1, 0x1c, + 0x7c, 0x89, 0x78, 0x37, 0xb4, 0xb2, 0x03, 0x55, 0x0f, 0x9b, 0x16, 0x71, 0x86, 0xc7, 0x4c, 0x85, + 0xaa, 0x1e, 0x95, 0xe9, 0xda, 0xf9, 0x78, 0x68, 0x3b, 0xe1, 0x0b, 0xc3, 0xc3, 0x43, 0xf3, 0x00, + 0x0f, 0x99, 0x2a, 0x55, 0xbd, 0x29, 0xc8, 0x3a, 0xa7, 0xa2, 0x0f, 0xa1, 0xee, 0x7a, 0xc4, 0x35, + 0x07, 0x26, 0x9d, 0xbe, 0xf6, 0x14, 0x9b, 0xa1, 0xe5, 0x68, 0x86, 0x98, 0xb6, 0xbb, 0x31, 0x83, + 0xae, 0x72, 0x6b, 0x5f, 0xc1, 0x1c, 0xb5, 0x14, 0xdf, 0x35, 0xfb, 0x78, 0x87, 0xcd, 0x3f, 0xb5, + 0x2b, 0xa6, 0xb1, 0x83, 0x83, 0xe7, 0xc4, 0xfb, 0x9a, 0x0d, 0xab, 0xaa, 0xd7, 0x29, 0x6d, 0x9b, + 0x93, 0xd0, 0x32, 0x54, 0xf9, 0xa0, 0x6c, 0x8b, 0x8d, 0xa9, 0xaa, 0xb3, 0xe9, 0xda, 0xb5, 0xad, + 0xa8, 0xca, 0x76, 0xfb, 0x62, 0x48, 0x33, 0x7c, 0xea, 0xfa, 0x9a, 0x06, 0xb0, 0xe5, 0x04, 0x77, + 0x7e, 0xf4, 0xb9, 0x39, 0x0c, 0x31, 0x5a, 0x80, 0xa9, 0x67, 0xf4, 0x83, 0xc9, 0xaf, 0xe8, 0xbc, + 0xa0, 0xfd, 0x49, 0x05, 0xce, 0x3d, 0xa1, 0xa3, 0xeb, 0x99, 0x8e, 0x75, 0x40, 0x5e, 0xf4, 0x70, + 0x3f, 0xf4, 0xec, 0xe0, 0x78, 0x9d, 0x38, 0x01, 0x7e, 0x11, 0xa0, 0x4d, 0x98, 0x77, 0xa4, 0xbe, + 0x86, 0xb4, 0x1f, 0x2a, 0xa1, 0xbe, 0xd6, 0x8e, 0x86, 0x9c, 0x1a, 0x91, 0xde, 0x72, 0x92, 0x04, + 0x1f, 0x3d, 0x88, 0x27, 0x57, 0x0a, 0x29, 0x33, 0x21, 0x8b, 0x91, 0x90, 0xde, 0x26, 0xd3, 0x43, + 0x88, 0x90, 0x93, 0x2e, 0x05, 0xbc, 0x07, 0x74, 0xa3, 0x19, 0xa6, 0x6f, 0x84, 0x3e, 0xf6, 0xd8, + 0x48, 0xeb, 0x6b, 0x67, 0xa2, 0xc6, 0xf1, 0x38, 0xf5, 0x9a, 0x17, 0x3a, 0x5d, 0x7f, 0xdf, 0xc7, + 0x1e, 0xdb, 0x8e, 0x62, 0x79, 0x0d, 0x8f, 0x90, 0xe0, 0xd0, 0x97, 0x4b, 0x2a, 0xc9, 0x3a, 0xa3, + 0xa2, 0x77, 0xe0, 0x8c, 0x1f, 0xba, 0xee, 0x10, 0x8f, 0xb0, 0x13, 0x98, 0x43, 0x63, 0xe0, 0x91, + 0xd0, 0xf5, 0xdb, 0x53, 0xab, 0x95, 0x6b, 0x15, 0x1d, 0xa9, 0x55, 0x8f, 0x58, 0x0d, 0x5a, 0x01, + 0x70, 0x3d, 0xfb, 0x99, 0x3d, 0xc4, 0x03, 0x6c, 0xb5, 0xa7, 0x99, 0x50, 0x85, 0x82, 0x6e, 0xc3, + 0x82, 0x8f, 0xfb, 0x7d, 0x32, 0x72, 0x0d, 0xd7, 0x23, 0x87, 0xf6, 0x10, 0x73, 0x83, 0x9c, 0x61, + 0x06, 0x89, 0x44, 0xdd, 0x2e, 0xaf, 0xa2, 0xa6, 0xa9, 0xfd, 0xac, 0x0c, 0x67, 0xd9, 0x04, 0xec, + 0x12, 0x4b, 0xac, 0x85, 0xd8, 0xee, 0x97, 0xa1, 0xd1, 0x67, 0x0a, 0x19, 0xae, 0xe9, 0x61, 0x27, + 0x10, 0x76, 0x3f, 0xcb, 0x89, 0xbb, 0x8c, 0x86, 0x76, 0xa0, 0xe5, 0x8b, 0xa5, 0x33, 0xfa, 0x7c, + 0xed, 0xc4, 0x0c, 0xbf, 0x15, 0x4d, 0xd2, 0x98, 0x75, 0xd6, 0xe7, 0xfc, 0xcc, 0xc2, 0xcf, 0xf8, + 0xc7, 0x7e, 0x3f, 0x18, 0x72, 0x77, 0x51, 0x5f, 0xfb, 0x41, 0x52, 0x4e, 0x5a, 0xcd, 0x5b, 0x3d, + 0xce, 0xbd, 0xe9, 0x04, 0xde, 0xb1, 0x2e, 0xdb, 0x76, 0xee, 0xc1, 0xac, 0x5a, 0x81, 0x5a, 0x50, + 0xf9, 0x1a, 0x1f, 0x8b, 0x21, 0xd0, 0xcf, 0xd8, 0x2e, 0xf9, 0x66, 0xe5, 0x85, 0x7b, 0xe5, 0xdf, + 0x29, 0x69, 0x1e, 0xa0, 0xb8, 0x97, 0xa7, 0x38, 0x30, 0x2d, 0x33, 0x30, 0x11, 0x82, 0x49, 0xe6, + 0x7e, 0xb9, 0x08, 0xf6, 0x4d, 0xa5, 0x86, 0x62, 0x6b, 0xd4, 0x74, 0xfa, 0x89, 0xce, 0x43, 0x2d, + 0x32, 0x42, 0xe1, 0x83, 0x63, 0x02, 0xf5, 0x85, 0x66, 0x10, 0xe0, 0x91, 0x1b, 0x30, 0x83, 0x68, + 0xe8, 0xb2, 0xa8, 0xfd, 0xd3, 0x24, 0xb4, 0x32, 0x2b, 0x70, 0x17, 0xaa, 0x23, 0xd1, 0xbd, 0xb0, + 0xfd, 0x73, 0xb1, 0x43, 0xcc, 0x68, 0xa8, 0x47, 0xcc, 0xd4, 0xdf, 0xd0, 0xcd, 0xa8, 0x1c, 0x17, + 0x51, 0x99, 0x2e, 0xeb, 0x90, 0x0c, 0x0c, 0xcb, 0xf6, 0x70, 0x3f, 0x20, 0xde, 0xb1, 0xd0, 0x72, + 0x76, 0x48, 0x06, 0x1b, 0x92, 0x86, 0xde, 0x05, 0xb0, 0x1c, 0x9f, 0xae, 0xe8, 0xa1, 0x3d, 0x60, + 0xba, 0xd6, 0xd7, 0x50, 0xd4, 0x77, 0x74, 0x24, 0xe8, 0x35, 0xcb, 0xf1, 0x85, 0xb2, 0x1f, 0x40, + 0x83, 0xba, 0x58, 0x63, 0xc4, 0xbd, 0x39, 0xb7, 0xe2, 0xfa, 0xda, 0x82, 0xa2, 0x71, 0xe4, 0xea, + 0xf5, 0x59, 0x37, 0x2e, 0xf8, 0xe8, 0x63, 0x98, 0x66, 0x2e, 0xce, 0x6f, 0x4f, 0xb3, 0x36, 0x57, + 0x72, 0x46, 0x29, 0x56, 0xfb, 0x09, 0xe3, 0xe3, 0x8b, 0x2d, 0x1a, 0xa1, 0x27, 0x50, 0x37, 0x1d, + 0x87, 0x04, 0x26, 0xdf, 0xe0, 0x33, 0x4c, 0xc6, 0x8d, 0x62, 0x19, 0xdd, 0x98, 0x99, 0x0b, 0x52, + 0x9b, 0xa3, 0x1f, 0xc1, 0x14, 0xf3, 0x00, 0xed, 0x2a, 0x1b, 0xf5, 0xca, 0x78, 0xf3, 0xd3, 0x39, + 0x73, 0xe7, 0x03, 0xa8, 0x2b, 0xaa, 0x9d, 0xc6, 0xdc, 0x3a, 0xf7, 0xa1, 0x95, 0xd6, 0xe8, 0x54, + 0xe6, 0xba, 0x05, 0x0b, 0x7a, 0xe8, 0xc4, 0x8a, 0xc9, 0xf8, 0xe3, 0x5d, 0x98, 0x16, 0xeb, 0xc7, + 0x6d, 0x67, 0xb9, 0x70, 0x46, 0x74, 0xc1, 0xa8, 0x7d, 0x0c, 0x67, 0x53, 0xa2, 0x44, 0x74, 0xf2, + 0x16, 0x34, 0x5d, 0x62, 0x19, 0x3e, 0x27, 0x1b, 0xb6, 0x25, 0x9d, 0x81, 0x1b, 0xf1, 0x6e, 0x59, + 0xb4, 0x79, 0x2f, 0x20, 0x6e, 0x56, 0x95, 0x93, 0x35, 0x6f, 0xc3, 0x62, 0xba, 0x39, 0xef, 0x5e, + 0x7b, 0x00, 0x4b, 0x3a, 0x1e, 0x91, 0x67, 0xf8, 0x75, 0x45, 0x77, 0xa0, 0x9d, 0x15, 0x20, 0x84, + 0x7f, 0x09, 0x4b, 0x31, 0xb5, 0x17, 0x98, 0x41, 0xe8, 0x9f, 0x4a, 0xb8, 0x08, 0xdd, 0x0e, 0x88, + 0x8f, 0xe5, 0x21, 0x29, 0x8a, 0xda, 0x75, 0x55, 0xb4, 0x38, 0x54, 0x79, 0x0f, 0xa8, 0x09, 0x65, + 0xdb, 0x15, 0xe2, 0xca, 0xb6, 0xab, 0x3d, 0x80, 0x5a, 0x74, 0x9c, 0xa1, 0xb5, 0x38, 0x66, 0x2a, + 0xbf, 0xe2, 0xcc, 0x8b, 0xa2, 0xa9, 0xc7, 0x19, 0x3f, 0x2e, 0x7a, 0x5a, 0x03, 0x88, 0x3c, 0x90, + 0x3c, 0x43, 0x51, 0x56, 0x9e, 0xae, 0x70, 0x69, 0x7f, 0x93, 0x70, 0x47, 0x8a, 0xca, 0x56, 0xa4, + 0xb2, 0x95, 0x70, 0x4f, 0xe5, 0xd3, 0xb8, 0xa7, 0x5b, 0x30, 0xe5, 0x07, 0x66, 0xc0, 0x1d, 0x64, + 0x53, 0x19, 0x5c, 0xb2, 0x4b, 0xac, 0x73, 0x36, 0x74, 0x01, 0xa0, 0xef, 0x61, 0x33, 0xc0, 0x96, + 0x61, 0x72, 0xcf, 0x59, 0xd1, 0x6b, 0x82, 0xd2, 0x0d, 0xd0, 0x3d, 0x98, 0x91, 0x31, 0xcc, 0x14, + 0x53, 0x63, 0x35, 0x47, 0x60, 0x62, 0xf6, 0x75, 0xd9, 0x20, 0xde, 0xed, 0xd3, 0xe3, 0x77, 0xbb, + 0x68, 0xc7, 0x99, 0x15, 0x87, 0x35, 0x53, 0xe8, 0xb0, 0x78, 0x8b, 0x93, 0x38, 0xac, 0x6a, 0xa1, + 0xc3, 0x12, 0x32, 0xc6, 0x3a, 0xac, 0xef, 0xd3, 0xf5, 0xfc, 0x6b, 0x09, 0xda, 0xd9, 0xbd, 0x23, + 0x7c, 0xc6, 0xbb, 0x30, 0xed, 0x33, 0xca, 0x18, 0xff, 0x23, 0x9a, 0x08, 0x46, 0xf4, 0x00, 0x26, + 0x6d, 0xe7, 0x90, 0xb0, 0x1c, 0x42, 0x3d, 0xf9, 0x8b, 0xfa, 0xb8, 0xb5, 0xe5, 0x1c, 0x12, 0x3e, + 0x25, 0xac, 0x61, 0xe7, 0x2e, 0xd4, 0x22, 0xd2, 0xa9, 0x46, 0xf2, 0x10, 0x16, 0x52, 0xc6, 0xc7, + 0xa3, 0xd7, 0xc8, 0x54, 0x4b, 0x27, 0x32, 0x55, 0xed, 0xff, 0x4b, 0xea, 0xc6, 0x79, 0x68, 0x0f, + 0x03, 0xec, 0x65, 0x36, 0xce, 0x7b, 0x52, 0x28, 0xdf, 0x35, 0x17, 0x8a, 0x84, 0xf2, 0xc0, 0x52, + 0x6c, 0x82, 0x1e, 0x34, 0x99, 0xf9, 0x18, 0x3e, 0x1e, 0xb2, 0x53, 0x5a, 0xc4, 0x47, 0x3f, 0xcc, + 0x69, 0xcd, 0xfb, 0xe5, 0xb6, 0xd7, 0x13, 0xec, 0x7c, 0x9a, 0x1a, 0x43, 0x95, 0xd6, 0xf9, 0x04, + 0x50, 0x96, 0xe9, 0x54, 0x13, 0xf7, 0x19, 0x75, 0x3b, 0x34, 0x9b, 0xca, 0x39, 0x7e, 0x0e, 0x99, + 0x1a, 0x63, 0x96, 0x9f, 0xeb, 0xa9, 0x0b, 0x46, 0xed, 0xaf, 0x2b, 0x00, 0x71, 0xe5, 0x1b, 0xeb, + 0x6f, 0xee, 0x46, 0xbb, 0x9f, 0x87, 0x38, 0x17, 0x73, 0xe4, 0xe5, 0xee, 0xfb, 0x87, 0xc9, 0x7d, + 0xcf, 0x83, 0x9d, 0xb7, 0xf2, 0x5a, 0xbf, 0xb1, 0x3b, 0x7e, 0x1d, 0x16, 0xd3, 0xcb, 0x2d, 0xb6, + 0xfb, 0x75, 0x98, 0xb2, 0x03, 0x3c, 0xe2, 0xd8, 0x80, 0x9a, 0x23, 0x29, 0xbc, 0x9c, 0x43, 0xbb, + 0x04, 0xb5, 0xad, 0x91, 0x39, 0xc0, 0x3d, 0x17, 0xf7, 0x69, 0x5f, 0x36, 0x2d, 0x88, 0xfe, 0x79, + 0x41, 0x5b, 0x83, 0xea, 0x63, 0x7c, 0xcc, 0xf7, 0xe0, 0x09, 0xf5, 0xd3, 0xfe, 0xbc, 0x0c, 0x4b, + 0xcc, 0x6d, 0xaf, 0xcb, 0xcc, 0x5c, 0xc7, 0x3e, 0x09, 0xbd, 0x3e, 0xf6, 0xd9, 0x92, 0xba, 0xa1, + 0xe1, 0x62, 0xcf, 0x26, 0x96, 0x48, 0x45, 0x6b, 0x7d, 0x37, 0xdc, 0x65, 0x04, 0x9a, 0xbd, 0xd3, + 0xea, 0x6f, 0x42, 0x22, 0x6c, 0xab, 0xa2, 0x57, 0xfb, 0x6e, 0xf8, 0x63, 0x5a, 0x96, 0x6d, 0xfd, + 0x23, 0xd3, 0xc3, 0x3e, 0xb3, 0x21, 0xde, 0xb6, 0xc7, 0x08, 0xe8, 0x5d, 0x38, 0x3b, 0xc2, 0x23, + 0xe2, 0x1d, 0x1b, 0x43, 0x7b, 0x64, 0x07, 0x86, 0xed, 0x18, 0x07, 0xc7, 0x01, 0xf6, 0x85, 0xe1, + 0x20, 0x5e, 0xf9, 0x84, 0xd6, 0x6d, 0x39, 0x9f, 0xd2, 0x1a, 0xa4, 0x41, 0x83, 0x90, 0x91, 0xe1, + 0xf7, 0x89, 0x87, 0x0d, 0xd3, 0xfa, 0x8a, 0x9d, 0x5b, 0x15, 0xbd, 0x4e, 0xc8, 0xa8, 0x47, 0x69, + 0x5d, 0xeb, 0x2b, 0x74, 0x11, 0xea, 0x7d, 0x37, 0xf4, 0x71, 0x60, 0xd0, 0x1f, 0x76, 0x3e, 0xd5, + 0x74, 0xe0, 0xa4, 0x75, 0x37, 0xf4, 0x15, 0x86, 0x11, 0x9d, 0xf6, 0x19, 0x95, 0xe1, 0x29, 0x9d, + 0x66, 0x13, 0x1a, 0x89, 0xe4, 0x96, 0xa6, 0x30, 0x2c, 0x8b, 0x15, 0x29, 0x0c, 0xfd, 0xa6, 0x34, + 0x8f, 0x0c, 0xe5, 0x4c, 0xb2, 0x6f, 0x4a, 0x0b, 0x8e, 0x5d, 0x99, 0xbf, 0xb0, 0x6f, 0x3a, 0xe5, + 0x43, 0xfc, 0x4c, 0x80, 0x13, 0x35, 0x9d, 0x17, 0x34, 0x0b, 0x60, 0xdd, 0x74, 0xcd, 0x03, 0x7b, + 0x68, 0x07, 0xc7, 0xe8, 0x3a, 0xb4, 0x4c, 0xcb, 0x32, 0xfa, 0x92, 0x62, 0x63, 0x89, 0x14, 0xcd, + 0x99, 0x96, 0xb5, 0xae, 0x90, 0xd1, 0x0f, 0x60, 0xde, 0xf2, 0x88, 0x9b, 0xe4, 0xe5, 0xd0, 0x51, + 0x8b, 0x56, 0xa8, 0xcc, 0xda, 0x3f, 0x4e, 0xc2, 0x85, 0xe4, 0xc2, 0xa6, 0xe1, 0x82, 0xbb, 0x30, + 0x9b, 0xea, 0x35, 0x99, 0xa7, 0xc7, 0x4a, 0xea, 0x09, 0xc6, 0x54, 0x42, 0x5d, 0xce, 0x24, 0xd4, + 0xb9, 0x38, 0x44, 0xe5, 0xbb, 0xc0, 0x21, 0x26, 0xbf, 0x0d, 0x0e, 0x31, 0x75, 0x22, 0x1c, 0xe2, + 0x2a, 0x83, 0x05, 0x65, 0x23, 0x96, 0x0d, 0x72, 0x33, 0x6a, 0x44, 0x3c, 0x8e, 0x84, 0x0f, 0x53, + 0x78, 0xc5, 0xcc, 0x69, 0xf0, 0x8a, 0x6a, 0x21, 0x5e, 0x41, 0x2d, 0xc2, 0x75, 0x4d, 0x6f, 0x44, + 0x3c, 0x09, 0x48, 0xb4, 0x6b, 0x4c, 0x85, 0x39, 0x49, 0x17, 0x60, 0x44, 0x21, 0x74, 0x01, 0x45, + 0xd0, 0x05, 0x5a, 0x85, 0x59, 0x87, 0x18, 0x0e, 0x7e, 0x6e, 0xd0, 0x05, 0xf3, 0xdb, 0x75, 0xbe, + 0x7a, 0x0e, 0xd9, 0xc6, 0xcf, 0x77, 0x29, 0x45, 0xfb, 0xdb, 0x12, 0x2c, 0x24, 0x0d, 0x47, 0x24, + 0xab, 0xf7, 0xa1, 0xe6, 0x49, 0xdf, 0x20, 0x8c, 0x65, 0x35, 0x19, 0xfa, 0x65, 0x7d, 0x88, 0x1e, + 0x37, 0x41, 0x3f, 0x2e, 0x84, 0x3d, 0xae, 0x16, 0x88, 0x79, 0x15, 0xf0, 0xa1, 0x75, 0x61, 0x3e, + 0x62, 0x1e, 0x0b, 0x3a, 0x28, 0x20, 0x42, 0x39, 0x09, 0x22, 0x38, 0x30, 0xbd, 0x81, 0x9f, 0xd9, + 0x7d, 0xfc, 0x9d, 0x80, 0x96, 0xab, 0x50, 0x77, 0xb1, 0x37, 0xb2, 0x7d, 0x3f, 0x32, 0xfa, 0x9a, + 0xae, 0x92, 0xb4, 0xff, 0x9a, 0x82, 0xb9, 0xf4, 0xcc, 0xde, 0xc9, 0x60, 0x16, 0x9d, 0x78, 0x17, + 0xa6, 0xc7, 0xa7, 0x9c, 0xd1, 0xd7, 0xe4, 0x31, 0x50, 0x4e, 0x25, 0x28, 0xd1, 0x49, 0x21, 0x8e, + 0x06, 0x3a, 0xfe, 0x3e, 0x19, 0x8d, 0x4c, 0xc7, 0x92, 0x80, 0xb2, 0x28, 0xd2, 0xd9, 0x32, 0xbd, + 0x01, 0xdd, 0x5a, 0x94, 0xcc, 0xbe, 0xa9, 0x97, 0xa4, 0x81, 0xbe, 0xed, 0x30, 0xc8, 0x83, 0x6d, + 0x9c, 0x9a, 0x0e, 0x82, 0xb4, 0x61, 0x7b, 0xe8, 0x0a, 0x4c, 0x62, 0xe7, 0x99, 0x3c, 0x8d, 0x63, + 0xc4, 0x59, 0x1e, 0x3f, 0x3a, 0xab, 0x46, 0x57, 0x61, 0x7a, 0x44, 0x42, 0x27, 0x90, 0x21, 0x7f, + 0x33, 0x09, 0xbc, 0xea, 0xa2, 0x16, 0x5d, 0x87, 0x19, 0x8b, 0xad, 0x81, 0x8c, 0xeb, 0xe7, 0x62, + 0xd8, 0x84, 0xd1, 0x75, 0x59, 0x8f, 0x3e, 0x8a, 0xe2, 0x88, 0x5a, 0x2a, 0x12, 0x48, 0x4d, 0x6a, + 0x6e, 0x30, 0xf1, 0x38, 0x19, 0x4c, 0x00, 0x13, 0x71, 0xbd, 0x50, 0xc4, 0x78, 0xd0, 0x63, 0x19, + 0xaa, 0x43, 0x32, 0xe0, 0x76, 0x50, 0xe7, 0xd7, 0x0f, 0x43, 0x32, 0x60, 0x66, 0xb0, 0x40, 0x83, + 0x27, 0xcb, 0x76, 0xda, 0xb3, 0x6c, 0x7b, 0xf1, 0x02, 0x3d, 0x13, 0xd9, 0x87, 0x41, 0x9c, 0x3e, + 0x6e, 0x37, 0x58, 0x55, 0x8d, 0x51, 0x76, 0x9c, 0x3e, 0x3b, 0xb2, 0x83, 0xe0, 0xb8, 0xdd, 0x64, + 0x74, 0xfa, 0x49, 0x63, 0x5e, 0x9e, 0x68, 0xcd, 0xa5, 0x62, 0xde, 0xbc, 0xfd, 0xf9, 0x06, 0xa0, + 0x2a, 0xff, 0x50, 0x82, 0xc5, 0x75, 0x16, 0xf2, 0x29, 0x9e, 0xe0, 0x34, 0xa8, 0xc0, 0xed, 0x08, + 0x7e, 0x49, 0xa7, 0xf0, 0xe9, 0xc1, 0x0a, 0x3e, 0xf4, 0x09, 0x34, 0xa5, 0x4c, 0xd1, 0xb2, 0xf2, + 0x2a, 0xe0, 0xa6, 0xe1, 0xab, 0x45, 0xed, 0x23, 0x58, 0xca, 0xe8, 0x2c, 0xc2, 0xb3, 0x4b, 0x30, + 0x1b, 0x7b, 0x84, 0x48, 0xe5, 0x7a, 0x44, 0xdb, 0xb2, 0xb4, 0x7b, 0x70, 0xb6, 0x17, 0x98, 0x5e, + 0x90, 0x19, 0xf0, 0x09, 0xda, 0x32, 0xec, 0x26, 0xd9, 0x56, 0xc0, 0x2b, 0x3d, 0x58, 0xe8, 0x05, + 0xc4, 0x7d, 0x0d, 0xa1, 0x74, 0xa7, 0xd3, 0x61, 0x93, 0x30, 0x10, 0x31, 0x99, 0x2c, 0x6a, 0x4b, + 0x1c, 0x69, 0xca, 0xf6, 0xf6, 0x21, 0x2c, 0x72, 0xa0, 0xe7, 0x75, 0x06, 0xb1, 0x2c, 0x61, 0xa6, + 0xac, 0xdc, 0x0d, 0x38, 0x13, 0xbb, 0xf2, 0x38, 0x3d, 0xbc, 0x99, 0x4c, 0x0f, 0x97, 0xb2, 0x6b, + 0x9c, 0xc8, 0x0e, 0xff, 0xa2, 0xac, 0x38, 0xcc, 0x82, 0xe4, 0x70, 0x2d, 0x99, 0x1c, 0x9e, 0x2f, + 0x10, 0x99, 0xc8, 0x0d, 0xb3, 0x16, 0x59, 0xc9, 0xb1, 0x48, 0x3d, 0x93, 0x41, 0x4e, 0xa6, 0xf2, + 0xec, 0x94, 0x6e, 0xbf, 0x95, 0x04, 0x72, 0x8b, 0x27, 0x90, 0x51, 0xd7, 0x11, 0xf8, 0x76, 0x3b, + 0x95, 0x40, 0xb6, 0x8b, 0xd4, 0x8c, 0xf2, 0xc7, 0x3f, 0x9d, 0x84, 0x5a, 0x54, 0x97, 0x99, 0xd8, + 0xec, 0x24, 0x95, 0x73, 0x26, 0x49, 0x3d, 0xbf, 0x2a, 0xaf, 0x73, 0x7e, 0x4d, 0xbe, 0xea, 0xfc, + 0x3a, 0x07, 0x35, 0xf6, 0x61, 0x78, 0xf8, 0x50, 0x9c, 0x47, 0x55, 0x46, 0xd0, 0xf1, 0x61, 0x6c, + 0x50, 0xd3, 0x27, 0x31, 0xa8, 0x54, 0xa6, 0x3a, 0x93, 0xce, 0x54, 0xef, 0x44, 0x27, 0x0c, 0x3f, + 0x8b, 0x56, 0xb2, 0xe2, 0x72, 0xcf, 0x96, 0xcd, 0xe4, 0xd9, 0xc2, 0x8f, 0xa7, 0xcb, 0x39, 0x8d, + 0xdf, 0xd8, 0x3c, 0xf5, 0x09, 0xcf, 0x53, 0x55, 0xab, 0x12, 0x8e, 0x70, 0x0d, 0x20, 0xda, 0xf3, + 0x32, 0x59, 0x45, 0xd9, 0xa1, 0xe9, 0x0a, 0x97, 0xb6, 0x0f, 0x8b, 0x89, 0xf9, 0x8f, 0x11, 0xe2, + 0x93, 0x79, 0xb1, 0x02, 0x78, 0xf8, 0x5f, 0xd4, 0xf8, 0xa9, 0x00, 0x64, 0xbd, 0x93, 0x01, 0x3d, + 0x4e, 0x66, 0x8f, 0x37, 0x93, 0x98, 0xc7, 0xe9, 0x0c, 0x29, 0x03, 0x79, 0xb0, 0xe3, 0xde, 0xf4, + 0x44, 0x35, 0xcf, 0x56, 0x6b, 0x82, 0xd2, 0x0d, 0x68, 0x90, 0x75, 0x68, 0x3b, 0xb6, 0x7f, 0xc4, + 0xeb, 0xa7, 0x59, 0x3d, 0x48, 0x52, 0x97, 0x5d, 0xc2, 0xe3, 0x17, 0x76, 0x60, 0xf4, 0x89, 0x85, + 0x99, 0x99, 0x4e, 0xe9, 0x55, 0x4a, 0x58, 0x27, 0x16, 0x8e, 0xb7, 0x4e, 0xf5, 0x54, 0x5b, 0xa7, + 0x96, 0xda, 0x3a, 0x8b, 0x30, 0xed, 0x61, 0xd3, 0x27, 0x8e, 0x48, 0x19, 0x44, 0x89, 0xce, 0xff, + 0x08, 0xfb, 0x3e, 0xed, 0x40, 0x84, 0x36, 0xa2, 0xa8, 0x04, 0x60, 0xb3, 0x45, 0x01, 0xd8, 0x18, + 0x14, 0x37, 0x15, 0x80, 0x35, 0x8a, 0x02, 0xb0, 0x93, 0x80, 0xb8, 0x4a, 0x78, 0xd9, 0x1c, 0x1b, + 0x5e, 0xaa, 0x81, 0xda, 0x5c, 0x22, 0x50, 0xfb, 0x3e, 0x77, 0xdb, 0x3f, 0x97, 0x60, 0x29, 0xb3, + 0x41, 0xc4, 0x7e, 0xbb, 0x9d, 0x82, 0x81, 0xdb, 0x45, 0x33, 0x14, 0xa1, 0xc0, 0xf7, 0x13, 0x28, + 0xf0, 0x8d, 0x42, 0xfe, 0xef, 0x1c, 0x04, 0xfe, 0x43, 0xb8, 0xb8, 0xef, 0x5a, 0xa9, 0xf0, 0x49, + 0x24, 0x7f, 0x27, 0xdf, 0xef, 0x77, 0x64, 0xa4, 0x5b, 0x3e, 0x61, 0x5e, 0xc9, 0xd9, 0x35, 0x0d, + 0x56, 0x8b, 0x7b, 0x17, 0x61, 0xc8, 0xef, 0xc3, 0xdc, 0xe6, 0x0b, 0xdc, 0xef, 0x1d, 0x3b, 0xfd, + 0x53, 0x68, 0xd4, 0x82, 0x4a, 0x7f, 0x64, 0x09, 0x78, 0x85, 0x7e, 0xaa, 0x91, 0x55, 0x25, 0x19, + 0x59, 0x19, 0xd0, 0x8a, 0x7b, 0x10, 0x4b, 0xb8, 0x48, 0x97, 0xd0, 0xa2, 0xcc, 0x54, 0xf8, 0xac, + 0x2e, 0x4a, 0x82, 0x8e, 0x3d, 0x8f, 0x0d, 0x95, 0xd3, 0xb1, 0xe7, 0x25, 0x77, 0x7b, 0x25, 0xb9, + 0xdb, 0xb5, 0xbf, 0x2a, 0x41, 0x9d, 0xf6, 0xf0, 0xad, 0xf4, 0x17, 0xf9, 0x45, 0x25, 0xce, 0x2f, + 0xa2, 0x34, 0x65, 0x52, 0x4d, 0x53, 0x62, 0xcd, 0xa7, 0x18, 0x39, 0xab, 0xf9, 0x74, 0x44, 0xc7, + 0x9e, 0xa7, 0xad, 0xc2, 0x2c, 0xd7, 0x4d, 0x8c, 0xbc, 0x05, 0x95, 0xd0, 0x1b, 0x4a, 0xeb, 0x09, + 0xbd, 0xa1, 0xf6, 0x67, 0x25, 0x68, 0x74, 0x83, 0xc0, 0xec, 0x1f, 0x9d, 0x62, 0x00, 0x91, 0x72, + 0x65, 0x55, 0xb9, 0xec, 0x20, 0x62, 0x75, 0x27, 0x0b, 0xd4, 0x9d, 0x4a, 0xa8, 0xab, 0x41, 0x53, + 0xea, 0x52, 0xa8, 0xf0, 0x36, 0xa0, 0x5d, 0xe2, 0x05, 0x0f, 0x89, 0xf7, 0xdc, 0xf4, 0xac, 0xd3, + 0xe5, 0x30, 0x08, 0x26, 0xc5, 0xc3, 0xaa, 0xca, 0xb5, 0x29, 0x9d, 0x7d, 0x6b, 0x6f, 0xc3, 0x99, + 0x84, 0xbc, 0xc2, 0x8e, 0xef, 0x42, 0x9d, 0x39, 0x70, 0x11, 0xe7, 0x5e, 0x53, 0x71, 0xde, 0x71, + 0x5e, 0x5e, 0xeb, 0xc2, 0x3c, 0x3d, 0xbb, 0x19, 0x3d, 0xda, 0x78, 0x3f, 0x4c, 0x45, 0x83, 0x0b, + 0xc9, 0xf6, 0xa9, 0x48, 0xf0, 0xef, 0x4a, 0x30, 0xc5, 0xe8, 0x99, 0xf3, 0xf4, 0x1c, 0xd4, 0x3c, + 0xec, 0x12, 0x23, 0x30, 0x07, 0xd1, 0x5b, 0x35, 0x4a, 0xd8, 0x33, 0x07, 0x3e, 0x7b, 0x6a, 0x47, + 0x2b, 0x2d, 0x7b, 0x80, 0xfd, 0x40, 0x3e, 0x58, 0xab, 0x53, 0xda, 0x06, 0x27, 0xd1, 0x29, 0xf1, + 0xed, 0x3f, 0xe0, 0x61, 0xde, 0xa4, 0xce, 0xbe, 0xd1, 0x15, 0xfe, 0x0c, 0x64, 0x0c, 0x28, 0xc7, + 0xde, 0x86, 0x74, 0xa0, 0x9a, 0xc2, 0xe1, 0xa2, 0xb2, 0xf6, 0x11, 0x20, 0x75, 0xcc, 0x62, 0x52, + 0xaf, 0xc2, 0x34, 0x9b, 0x12, 0x19, 0xa7, 0x34, 0x93, 0x83, 0xd6, 0x45, 0xad, 0xf6, 0x05, 0x20, + 0x3e, 0x8b, 0x89, 0xd8, 0xe4, 0xc4, 0x33, 0x3e, 0x26, 0x44, 0xf9, 0xfb, 0x12, 0x9c, 0x49, 0x88, + 0x8e, 0x1e, 0x04, 0x24, 0x64, 0xa7, 0x15, 0x13, 0x72, 0xef, 0x25, 0x3c, 0xf9, 0xd5, 0x94, 0x02, + 0xbf, 0x21, 0x2f, 0xfe, 0xcb, 0x12, 0x40, 0x37, 0x0c, 0x8e, 0x04, 0x20, 0xa5, 0xce, 0x7a, 0x29, + 0x39, 0xeb, 0xb4, 0xce, 0x35, 0x7d, 0xff, 0x39, 0xf1, 0x64, 0x32, 0x10, 0x95, 0x19, 0x98, 0x14, + 0x06, 0x47, 0x12, 0x04, 0xa7, 0xdf, 0xe8, 0x0a, 0x34, 0xf9, 0x93, 0x47, 0xc3, 0xb4, 0x2c, 0x0f, + 0xfb, 0xbe, 0x40, 0xc3, 0x1b, 0x9c, 0xda, 0xe5, 0x44, 0xca, 0x66, 0x5b, 0xd8, 0x09, 0xec, 0xe0, + 0xd8, 0x08, 0xc8, 0xd7, 0xd8, 0x11, 0x61, 0x7e, 0x43, 0x52, 0xf7, 0x28, 0x91, 0xb2, 0x79, 0x78, + 0x60, 0xfb, 0x81, 0x27, 0xd9, 0x24, 0x3a, 0x2b, 0xa8, 0x8c, 0x4d, 0xfb, 0x79, 0x09, 0x5a, 0xbb, + 0xe1, 0x70, 0xc8, 0x67, 0xf6, 0xd4, 0x6b, 0xfb, 0xb6, 0x18, 0x47, 0x39, 0x65, 0x9d, 0xf1, 0x14, + 0x89, 0xc1, 0x7d, 0x7b, 0xf8, 0xe1, 0x36, 0xcc, 0x2b, 0x8a, 0x0a, 0x4b, 0x49, 0xc4, 0x6c, 0xa5, + 0x64, 0xcc, 0xa6, 0xdd, 0x07, 0xc4, 0x33, 0xee, 0xd7, 0x1b, 0x9c, 0x76, 0x16, 0xce, 0x24, 0xda, + 0x8b, 0x63, 0xf2, 0x06, 0x34, 0xc4, 0x7d, 0xbf, 0x30, 0x82, 0x65, 0xa8, 0x52, 0x77, 0xd7, 0xb7, + 0x2d, 0x79, 0xfb, 0x31, 0xe3, 0x12, 0x6b, 0xdd, 0xb6, 0x3c, 0x6d, 0x1b, 0x1a, 0x3a, 0x17, 0x2f, + 0x78, 0x3f, 0x86, 0xa6, 0x78, 0x1d, 0x60, 0x24, 0xde, 0xcf, 0xc4, 0x50, 0x7d, 0x42, 0xb6, 0xde, + 0x70, 0xd4, 0xa2, 0xf6, 0x53, 0xe8, 0xf0, 0x63, 0x3c, 0x21, 0x55, 0x0e, 0xed, 0x63, 0x90, 0x4f, + 0x72, 0x8b, 0x84, 0x27, 0x9b, 0x35, 0x3c, 0xb5, 0xa8, 0x5d, 0x80, 0x73, 0xb9, 0xc2, 0xc5, 0xb8, + 0x5d, 0x68, 0xc5, 0x15, 0x96, 0x2d, 0x2f, 0x7d, 0xd8, 0x65, 0x4e, 0x49, 0xb9, 0xcc, 0x59, 0x8c, + 0x62, 0xb2, 0xb2, 0x3c, 0x4f, 0x58, 0xe4, 0x15, 0x87, 0xd0, 0x95, 0xa2, 0x10, 0x7a, 0x32, 0x11, + 0x42, 0x6b, 0x9f, 0x45, 0xb3, 0x27, 0xf2, 0x97, 0x0f, 0x58, 0x7a, 0xc5, 0xfb, 0x96, 0x6e, 0x6b, + 0x39, 0x67, 0x70, 0x9c, 0x43, 0x57, 0x98, 0xb5, 0xeb, 0xd0, 0x48, 0x3a, 0x30, 0xc5, 0x2d, 0x95, + 0x32, 0x6e, 0xa9, 0x99, 0xf2, 0x48, 0xb7, 0x52, 0x71, 0x66, 0x66, 0x46, 0x53, 0x51, 0xe6, 0xfb, + 0x09, 0xdf, 0x74, 0x29, 0xbe, 0x87, 0xf9, 0x0d, 0xb9, 0xa5, 0x05, 0xe1, 0xa3, 0x1f, 0xfa, 0xb4, + 0xbd, 0x18, 0xa2, 0x76, 0x19, 0xea, 0xfb, 0x45, 0x8f, 0x65, 0x27, 0xe5, 0xc5, 0xe6, 0xdb, 0x30, + 0xdf, 0x0b, 0x88, 0x67, 0x0e, 0xf0, 0x16, 0x73, 0x20, 0x87, 0x36, 0xbf, 0xb8, 0x0b, 0xc3, 0xe8, + 0x68, 0x63, 0xdf, 0xda, 0x7f, 0x94, 0x60, 0xee, 0xa1, 0x3d, 0xc4, 0xfe, 0xb1, 0x1f, 0xe0, 0xd1, + 0x3e, 0x4b, 0x72, 0xce, 0x43, 0x8d, 0x8e, 0xcb, 0x0f, 0xcc, 0x91, 0x2b, 0x2f, 0x3e, 0x23, 0x02, + 0x5d, 0x2e, 0x9f, 0x8b, 0x96, 0x80, 0x88, 0x9a, 0x60, 0x66, 0x7a, 0xa5, 0x49, 0x9f, 0x20, 0xa1, + 0xf7, 0x00, 0x42, 0x1f, 0x5b, 0xe2, 0xb2, 0xb3, 0x92, 0x3a, 0x95, 0xf7, 0xd5, 0x2b, 0x29, 0xca, + 0xc7, 0x6f, 0x3e, 0xdf, 0x87, 0xba, 0xed, 0x10, 0x0b, 0xb3, 0x2b, 0x29, 0x4b, 0x80, 0x25, 0xf9, + 0xad, 0x80, 0x33, 0xee, 0xfb, 0xd8, 0xd2, 0x7e, 0x4f, 0x9c, 0x42, 0x72, 0xf2, 0xc4, 0x9a, 0x6f, + 0xc2, 0x3c, 0xf7, 0x2d, 0x87, 0xd1, 0xa0, 0xa5, 0xcd, 0xc5, 0x69, 0x46, 0x6a, 0x42, 0xf4, 0x96, + 0x2d, 0x02, 0x06, 0xd9, 0x42, 0xbb, 0x07, 0x67, 0x13, 0xb9, 0xc5, 0x29, 0xa2, 0x7d, 0xed, 0x51, + 0x0a, 0x1a, 0x88, 0x0d, 0x52, 0x64, 0xe0, 0xd2, 0x1e, 0x0b, 0x32, 0x70, 0x9f, 0x67, 0xe0, 0xbe, + 0xa6, 0xc3, 0x72, 0x02, 0xb1, 0x48, 0x28, 0xf2, 0x7e, 0x2a, 0xfa, 0xb9, 0x50, 0x20, 0x2c, 0x15, + 0x06, 0xfd, 0x6f, 0x09, 0x16, 0xf2, 0x18, 0x5e, 0x13, 0x1b, 0xfb, 0x49, 0xc1, 0x13, 0x94, 0xdb, + 0x63, 0xb5, 0xf9, 0xad, 0xa0, 0x88, 0x8f, 0xa1, 0x93, 0x37, 0x7b, 0xd9, 0xa5, 0xa8, 0x9c, 0x60, + 0x29, 0xfe, 0xaf, 0xac, 0xa0, 0xbd, 0xdd, 0x20, 0xf0, 0xec, 0x83, 0x90, 0x1a, 0xef, 0x77, 0x85, + 0xcd, 0x7c, 0x12, 0xe1, 0x0e, 0x7c, 0xfe, 0xae, 0x65, 0x5b, 0xc5, 0xbd, 0xe6, 0x62, 0x0f, 0x3b, + 0x49, 0xec, 0x81, 0xe3, 0xb8, 0x37, 0xc7, 0x8a, 0x79, 0x63, 0xa1, 0xba, 0x97, 0x25, 0x68, 0x26, + 0xd7, 0x01, 0x7d, 0x04, 0x60, 0x46, 0x9a, 0x0b, 0x93, 0x3f, 0x3f, 0x6e, 0x74, 0xba, 0xc2, 0x8f, + 0x2e, 0x43, 0xa5, 0xef, 0x86, 0x62, 0x45, 0xe2, 0x0b, 0xbd, 0x75, 0x37, 0xe4, 0x0e, 0x80, 0xd6, + 0xd2, 0x7c, 0x82, 0x3f, 0xcc, 0xc8, 0x78, 0xae, 0xa7, 0x8c, 0xcc, 0x59, 0x05, 0x0f, 0x7a, 0x00, + 0xcd, 0xe7, 0x9e, 0x1d, 0x98, 0x07, 0x43, 0x6c, 0x0c, 0xcd, 0x63, 0xec, 0x09, 0xcf, 0x55, 0xec, + 0x65, 0x1a, 0x92, 0xff, 0x09, 0x65, 0xd7, 0x42, 0xa8, 0xca, 0xfe, 0x5f, 0xe1, 0x91, 0x1f, 0xc3, + 0x52, 0x48, 0xd9, 0x0c, 0xf6, 0x38, 0xc4, 0x31, 0x1d, 0x62, 0xf8, 0x98, 0x9e, 0x92, 0xf2, 0x2d, + 0x68, 0xbe, 0xb7, 0x5c, 0x60, 0x8d, 0xd6, 0x89, 0x87, 0xb7, 0x4d, 0x87, 0xf4, 0x78, 0x0b, 0x6d, + 0x04, 0x75, 0x65, 0x38, 0xaf, 0xe8, 0xf9, 0x13, 0x98, 0x97, 0x57, 0xa5, 0x3e, 0x0e, 0x84, 0x5f, + 0x1f, 0xd7, 0xe7, 0x9c, 0x60, 0xef, 0xe1, 0x80, 0x79, 0xf7, 0x1b, 0xe7, 0xa1, 0x2a, 0xff, 0xa8, + 0x83, 0x66, 0xa0, 0xb2, 0xb7, 0xbe, 0xdb, 0x9a, 0xa0, 0x1f, 0xfb, 0x1b, 0xbb, 0xad, 0xd2, 0x8d, + 0x11, 0xb4, 0xd2, 0x7f, 0x52, 0x41, 0x4b, 0x70, 0x66, 0x57, 0xdf, 0xd9, 0xed, 0x3e, 0xea, 0xee, + 0x6d, 0xed, 0x6c, 0x1b, 0xbb, 0xfa, 0xd6, 0xe7, 0xdd, 0xbd, 0xcd, 0xd6, 0x04, 0xba, 0x04, 0x17, + 0xd4, 0x8a, 0xdf, 0xdd, 0xe9, 0xed, 0x19, 0x7b, 0x3b, 0xc6, 0xfa, 0xce, 0xf6, 0x5e, 0x77, 0x6b, + 0x7b, 0x53, 0x6f, 0x95, 0xd0, 0x05, 0x58, 0x56, 0x59, 0x3e, 0xdd, 0xda, 0xd8, 0xd2, 0x37, 0xd7, + 0xe9, 0x77, 0xf7, 0x49, 0xab, 0x7c, 0xe3, 0x1e, 0xcc, 0xa5, 0xde, 0x77, 0xa1, 0x79, 0x68, 0xf4, + 0xba, 0xdb, 0x1b, 0x9f, 0xee, 0x7c, 0x61, 0xe8, 0x9b, 0xdd, 0x8d, 0x2f, 0x5b, 0x13, 0x68, 0x01, + 0x5a, 0x92, 0xb4, 0xbd, 0xb3, 0xc7, 0xa9, 0xa5, 0x1b, 0x5f, 0xa7, 0x4c, 0x12, 0xa3, 0xb3, 0x30, + 0x1f, 0xf5, 0x6d, 0xac, 0xeb, 0x9b, 0xdd, 0xbd, 0xcd, 0x8d, 0xd6, 0x44, 0x92, 0xac, 0xef, 0x6f, + 0x6f, 0x6f, 0x6d, 0x3f, 0x6a, 0x95, 0xa8, 0xd4, 0x98, 0xbc, 0xf9, 0xc5, 0x16, 0x65, 0x2e, 0x27, + 0x99, 0xf7, 0xb7, 0x1f, 0x6f, 0xef, 0xfc, 0x64, 0xbb, 0x55, 0x59, 0xfb, 0xf7, 0x06, 0x34, 0x65, + 0x8c, 0x82, 0x3d, 0x76, 0x7f, 0x7f, 0x1f, 0x66, 0xe4, 0x5f, 0xb6, 0x62, 0x67, 0x95, 0xfc, 0x7f, + 0x59, 0xa7, 0x9d, 0xad, 0x10, 0x61, 0xe0, 0x04, 0xda, 0x65, 0x61, 0x99, 0xf2, 0x96, 0xee, 0x82, + 0x1a, 0x0d, 0x65, 0x1e, 0xeb, 0x75, 0x56, 0x8a, 0xaa, 0x23, 0x89, 0x3d, 0x1a, 0x70, 0xa9, 0x8f, + 0xb3, 0xd1, 0x8a, 0x1a, 0x26, 0x64, 0x1f, 0x7d, 0x77, 0x2e, 0x16, 0xd6, 0x47, 0x42, 0xbf, 0x84, + 0x56, 0xfa, 0x59, 0x36, 0x8a, 0xf1, 0xb2, 0x82, 0x27, 0xdf, 0x9d, 0x4b, 0x63, 0x38, 0x54, 0xd1, + 0x99, 0x07, 0xcc, 0xab, 0x63, 0x1e, 0x94, 0xa6, 0x45, 0x17, 0x3d, 0x39, 0xe5, 0x53, 0x91, 0x7c, + 0x03, 0x87, 0xd4, 0x67, 0xc3, 0x39, 0x6f, 0x21, 0x95, 0xa9, 0xc8, 0x7f, 0x3c, 0xa7, 0x4d, 0xa0, + 0xcf, 0x61, 0x2e, 0x75, 0x75, 0x8b, 0xe2, 0x56, 0xf9, 0x17, 0xd1, 0x9d, 0xd5, 0x62, 0x86, 0xe4, + 0xba, 0xa9, 0x17, 0xb3, 0x89, 0x75, 0xcb, 0xb9, 0xed, 0x4d, 0xac, 0x5b, 0xee, 0x8d, 0x2e, 0x33, + 0xaf, 0xc4, 0xf5, 0xab, 0x62, 0x5e, 0x79, 0x77, 0xbd, 0x9d, 0x95, 0xa2, 0x6a, 0x75, 0xf8, 0xa9, + 0xab, 0x57, 0x65, 0xf8, 0xf9, 0x37, 0xba, 0x9d, 0xd5, 0x62, 0x86, 0xf4, 0x5a, 0xc5, 0xf7, 0x40, + 0xa9, 0xb5, 0xca, 0x5c, 0x3b, 0xa6, 0xd6, 0x2a, 0x7b, 0x81, 0x24, 0xd6, 0x2a, 0x75, 0x6d, 0x73, + 0xb1, 0x18, 0xa5, 0xce, 0xac, 0x55, 0x3e, 0x8c, 0xad, 0x4d, 0xa0, 0x6f, 0xa0, 0x5d, 0x84, 0x00, + 0xa3, 0x38, 0x46, 0x78, 0x05, 0x44, 0xdd, 0xb9, 0x7e, 0x02, 0xce, 0xa8, 0xcb, 0x2e, 0x54, 0x25, + 0xdc, 0x8b, 0x62, 0x87, 0x92, 0xc2, 0x98, 0x3b, 0xcb, 0x39, 0x35, 0x91, 0x88, 0xf7, 0x61, 0x92, + 0x52, 0xd1, 0x42, 0x82, 0x49, 0x36, 0x3d, 0x9b, 0xa2, 0x46, 0xcd, 0x3e, 0x84, 0x69, 0x8e, 0x5d, + 0xa2, 0x38, 0x53, 0x4b, 0x00, 0xab, 0x9d, 0xa5, 0x0c, 0x3d, 0x6a, 0xfc, 0x19, 0xff, 0xe7, 0xa8, + 0x00, 0x21, 0xd1, 0xb9, 0xc4, 0x9f, 0x8c, 0x92, 0x50, 0x67, 0xe7, 0x7c, 0x7e, 0xa5, 0x6a, 0x22, + 0xa9, 0xf0, 0x63, 0xa5, 0x28, 0x3e, 0xcc, 0x98, 0x48, 0x7e, 0xbc, 0xa9, 0x4d, 0x20, 0x83, 0xe3, + 0x79, 0x29, 0xc1, 0x5a, 0xbe, 0x6d, 0x25, 0x84, 0x5f, 0x1e, 0xcb, 0x13, 0x75, 0x70, 0x00, 0x67, + 0x72, 0x90, 0x00, 0x74, 0x39, 0xb5, 0xf8, 0x79, 0x20, 0x44, 0xe7, 0xad, 0xf1, 0x4c, 0xea, 0x12, + 0x09, 0xf3, 0x5e, 0xcc, 0xa4, 0xc7, 0xe9, 0x25, 0x4a, 0x1b, 0xf3, 0xda, 0x1f, 0x57, 0x60, 0x96, + 0xe3, 0x35, 0xe2, 0x4c, 0x7b, 0x04, 0x10, 0x43, 0x9c, 0xa8, 0x93, 0x18, 0x66, 0x02, 0xeb, 0xed, + 0x9c, 0xcb, 0xad, 0x53, 0x17, 0x5f, 0x01, 0x10, 0x95, 0xc5, 0xcf, 0x62, 0xa0, 0xca, 0xe2, 0xe7, + 0x60, 0x8e, 0xda, 0x04, 0xda, 0x80, 0x5a, 0x04, 0x59, 0x21, 0x05, 0xe9, 0x4a, 0xe1, 0x6d, 0x9d, + 0x4e, 0x5e, 0x95, 0xaa, 0x91, 0x02, 0x43, 0x29, 0x1a, 0x65, 0xc1, 0x2d, 0x45, 0xa3, 0x3c, 0xe4, + 0x2a, 0x1e, 0x1d, 0x4f, 0x75, 0xd3, 0xa3, 0x4b, 0xa0, 0x07, 0xe9, 0xd1, 0x25, 0xb3, 0x63, 0x6d, + 0xe2, 0xd3, 0xf3, 0xbf, 0xf8, 0xd5, 0x4a, 0xe9, 0x3f, 0x7f, 0xb5, 0x32, 0xf1, 0x47, 0x2f, 0x57, + 0x4a, 0xbf, 0x78, 0xb9, 0x52, 0xfa, 0xb7, 0x97, 0x2b, 0xa5, 0xff, 0x7e, 0xb9, 0x52, 0xfa, 0xd9, + 0xff, 0xac, 0x4c, 0x1c, 0x4c, 0xb3, 0xbf, 0x52, 0xbf, 0xf7, 0xeb, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xa6, 0x04, 0x77, 0x58, 0xfe, 0x3e, 0x00, 0x00, } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.proto b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.proto index 3e9fccd0..93428edc 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.proto +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/apis/cri/v1alpha1/runtime/api.proto @@ -331,6 +331,8 @@ message RemovePodSandboxResponse {} message PodSandboxStatusRequest { // ID of the PodSandbox for which to retrieve status. string pod_sandbox_id = 1; + // Verbose indicates whether to return extra information about the pod sandbox. + bool verbose = 2; } // PodSandboxNetworkStatus is the status of the network for a PodSandbox. @@ -382,6 +384,11 @@ message PodSandboxStatus { message PodSandboxStatusResponse { // Status of the PodSandbox. PodSandboxStatus status = 1; + // Info is extra information of the PodSandbox. The key could be abitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. network namespace for linux container based container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; } // PodSandboxStateValue is the wrapper of PodSandboxState. @@ -523,6 +530,7 @@ message LinuxContainerSecurityContext { repeated int64 supplemental_groups = 8; // AppArmor profile for the container, candidate values are: // * runtime/default: equivalent to not specifying a profile. + // * unconfined: no profiles are loaded // * localhost/: profile loaded on the node // (localhost) by name. The possible profile names are detailed at // http://wiki.apparmor.net/index.php/AppArmor_Core_Policy_Reference @@ -746,6 +754,8 @@ message ListContainersResponse { message ContainerStatusRequest { // ID of the container for which to retrieve status. string container_id = 1; + // Verbose indicates whether to return extra information about the container. + bool verbose = 2; } // ContainerStatus represents the status of a container. @@ -790,6 +800,11 @@ message ContainerStatus { message ContainerStatusResponse { // Status of the container. ContainerStatus status = 1; + // Info is extra information of the Container. The key could be abitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. pid for linux container based container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; } message UpdateContainerResourcesRequest { @@ -827,7 +842,17 @@ message ExecRequest { // Whether to exec the command in a TTY. bool tty = 3; // Whether to stream stdin. + // One of `stdin`, `stdout`, and `stderr` MUST be true. bool stdin = 4; + // Whether to stream stdout. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdout = 5; + // Whether to stream stderr. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported + // in this case. The output of stdout and stderr will be combined to a + // single stream. + bool stderr = 6; } message ExecResponse { @@ -839,10 +864,20 @@ message AttachRequest { // ID of the container to which to attach. string container_id = 1; // Whether to stream stdin. + // One of `stdin`, `stdout`, and `stderr` MUST be true. bool stdin = 2; // Whether the process being attached is running in a TTY. // This must match the TTY setting in the ContainerConfig. bool tty = 3; + // Whether to stream stdout. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + bool stdout = 4; + // Whether to stream stderr. + // One of `stdin`, `stdout`, and `stderr` MUST be true. + // If `tty` is true, `stderr` MUST be false. Multiplexing is not supported + // in this case. The output of stdout and stderr will be combined to a + // single stream. + bool stderr = 5; } message AttachResponse { @@ -899,11 +934,18 @@ message ListImagesResponse { message ImageStatusRequest { // Spec of the image. ImageSpec image = 1; + // Verbose indicates whether to return extra information about the image. + bool verbose = 2; } message ImageStatusResponse { // Status of the image. Image image = 1; + // Info is extra information of the Image. The key could be abitrary string, and + // value should be in json format. The information could include anything useful + // for debug, e.g. image config for oci image based container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; } // AuthConfig contains authorization information for connecting to a registry. @@ -986,11 +1028,19 @@ message RuntimeStatus { repeated RuntimeCondition conditions = 1; } -message StatusRequest {} +message StatusRequest { + // Verbose indicates whether to return extra information about the runtime. + bool verbose = 1; +} message StatusResponse { // Status of the Runtime. RuntimeStatus status = 1; + // Info is extra information of the Runtime. The key could be abitrary string, and + // value should be in json format. The information could include anything useful for + // debug, e.g. plugins used by the container runtime. + // It should only be returned non-empty when Verbose is true. + map info = 2; } message ImageFsInfoRequest {} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go b/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go index e242398f..df1b274f 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/helpers.go @@ -48,7 +48,7 @@ type HandlerRunner interface { type RuntimeHelper interface { GenerateRunContainerOptions(pod *v1.Pod, container *v1.Container, podIP string) (contOpts *RunContainerOptions, useClusterFirstPolicy bool, err error) GetClusterDNS(pod *v1.Pod) (dnsServers []string, dnsSearches []string, useClusterFirstPolicy bool, err error) - // GetPodCgroupParent returns the the CgroupName identifer, and its literal cgroupfs form on the host + // GetPodCgroupParent returns the CgroupName identifer, and its literal cgroupfs form on the host // of a pod. GetPodCgroupParent(pod *v1.Pod) string GetPodDir(podUID types.UID) string diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/ref.go b/vendor/k8s.io/kubernetes/pkg/kubelet/container/ref.go index b15f7702..f61c0fc4 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/ref.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/ref.go @@ -21,7 +21,7 @@ import ( "k8s.io/api/core/v1" ref "k8s.io/client-go/tools/reference" - "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/legacyscheme" ) var ImplicitContainerPrefix string = "implicitly required container " @@ -39,7 +39,7 @@ func GenerateContainerRef(pod *v1.Pod, container *v1.Container) (*v1.ObjectRefer // start (like the pod infra container). This is not a good way, ugh. fieldPath = ImplicitContainerPrefix + container.Name } - ref, err := ref.GetPartialReference(api.Scheme, pod, fieldPath) + ref, err := ref.GetPartialReference(legacyscheme.Scheme, pod, fieldPath) if err != nil { return nil, err } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go b/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go index 3e9644c2..f545b41a 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/container/runtime.go @@ -127,9 +127,8 @@ type Runtime interface { // DirectStreamingRuntime is the interface implemented by runtimes for which the streaming calls // (exec/attach/port-forward) should be served directly by the Kubelet. type DirectStreamingRuntime interface { - // Runs the command in the container of the specified pod using nsenter. - // Attaches the processes stdin, stdout, and stderr. Optionally uses a - // tty. + // Runs the command in the container of the specified pod. Attaches + // the processes stdin, stdout, and stderr. Optionally uses a tty. ExecInContainer(containerID ContainerID, cmd []string, stdin io.Reader, stdout, stderr io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize, timeout time.Duration) error // Forward the specified port from the specified pod to the stream. PortForward(pod *Pod, port int32, stream io.ReadWriteCloser) error diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/network/hostport/hostport_manager.go b/vendor/k8s.io/kubernetes/pkg/kubelet/network/hostport/hostport_manager.go index c2e588cd..ea53c9c8 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/network/hostport/hostport_manager.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/network/hostport/hostport_manager.go @@ -177,11 +177,6 @@ func (hm *hostportManager) Remove(id string, podPortMapping *PodPortMapping) (er chainsToRemove := []utiliptables.Chain{} for _, pm := range hostportMappings { chainsToRemove = append(chainsToRemove, getHostportChain(id, pm)) - - // To preserve backward compatibility for k8s 1.5 or earlier. - // Need to remove hostport chains added by hostportSyncer if there is any - // TODO: remove this in 1.7 - chainsToRemove = append(chainsToRemove, hostportChainName(pm, getPodFullName(podPortMapping))) } // remove rules that consists of target chains diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/network/hostport/hostport_syncer.go b/vendor/k8s.io/kubernetes/pkg/kubelet/network/hostport/hostport_syncer.go index 03cca1a8..0086b745 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/network/hostport/hostport_syncer.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/network/hostport/hostport_syncer.go @@ -64,7 +64,7 @@ func (hp *hostport) String() string { return fmt.Sprintf("%s:%d", hp.protocol, hp.port) } -//openPodHostports opens all hostport for pod and returns the map of hostport and socket +// openHostports opens all hostport for pod and returns the map of hostport and socket func (h *hostportSyncer) openHostports(podHostportMapping *PodPortMapping) error { var retErr error ports := make(map[hostport]closeable) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go b/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go index 4eac080a..ba9f12ff 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go @@ -158,9 +158,24 @@ type server struct { server *http.Server } -func (s *server) GetExec(req *runtimeapi.ExecRequest) (*runtimeapi.ExecResponse, error) { +func validateExecRequest(req *runtimeapi.ExecRequest) error { if req.ContainerId == "" { - return nil, grpc.Errorf(codes.InvalidArgument, "missing required container_id") + return grpc.Errorf(codes.InvalidArgument, "missing required container_id") + } + if req.Tty && req.Stderr { + // If TTY is set, stderr cannot be true because multiplexing is not + // supported. + return grpc.Errorf(codes.InvalidArgument, "tty and stderr cannot both be true") + } + if !req.Stdin && !req.Stdout && !req.Stderr { + return grpc.Errorf(codes.InvalidArgument, "one of stdin, stdout, or stderr must be set") + } + return nil +} + +func (s *server) GetExec(req *runtimeapi.ExecRequest) (*runtimeapi.ExecResponse, error) { + if err := validateExecRequest(req); err != nil { + return nil, err } token, err := s.cache.Insert(req) if err != nil { @@ -171,9 +186,24 @@ func (s *server) GetExec(req *runtimeapi.ExecRequest) (*runtimeapi.ExecResponse, }, nil } -func (s *server) GetAttach(req *runtimeapi.AttachRequest) (*runtimeapi.AttachResponse, error) { +func validateAttachRequest(req *runtimeapi.AttachRequest) error { if req.ContainerId == "" { - return nil, grpc.Errorf(codes.InvalidArgument, "missing required container_id") + return grpc.Errorf(codes.InvalidArgument, "missing required container_id") + } + if req.Tty && req.Stderr { + // If TTY is set, stderr cannot be true because multiplexing is not + // supported. + return grpc.Errorf(codes.InvalidArgument, "tty and stderr cannot both be true") + } + if !req.Stdin && !req.Stdout && !req.Stderr { + return grpc.Errorf(codes.InvalidArgument, "one of stdin, stdout, and stderr must be set") + } + return nil +} + +func (s *server) GetAttach(req *runtimeapi.AttachRequest) (*runtimeapi.AttachResponse, error) { + if err := validateAttachRequest(req); err != nil { + return nil, err } token, err := s.cache.Insert(req) if err != nil { @@ -239,8 +269,8 @@ func (s *server) serveExec(req *restful.Request, resp *restful.Response) { streamOpts := &remotecommandserver.Options{ Stdin: exec.Stdin, - Stdout: true, - Stderr: !exec.Tty, + Stdout: exec.Stdout, + Stderr: exec.Stderr, TTY: exec.Tty, } @@ -273,8 +303,8 @@ func (s *server) serveAttach(req *restful.Request, resp *restful.Response) { streamOpts := &remotecommandserver.Options{ Stdin: attach.Stdin, - Stdout: true, - Stderr: !attach.Tty, + Stdout: attach.Stdout, + Stderr: attach.Stderr, TTY: attach.Tty, } remotecommandserver.ServeAttach( @@ -332,11 +362,11 @@ var _ remotecommandserver.Attacher = &criAdapter{} var _ portforward.PortForwarder = &criAdapter{} func (a *criAdapter) ExecInContainer(podName string, podUID types.UID, container string, cmd []string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize, timeout time.Duration) error { - return a.Exec(container, cmd, in, out, err, tty, resize) + return a.Runtime.Exec(container, cmd, in, out, err, tty, resize) } func (a *criAdapter) AttachContainer(podName string, podUID types.UID, container string, in io.Reader, out, err io.WriteCloser, tty bool, resize <-chan remotecommand.TerminalSize) error { - return a.Attach(container, in, out, err, tty, resize) + return a.Runtime.Attach(container, in, out, err, tty, resize) } func (a *criAdapter) PortForward(podName string, podUID types.UID, port int32, stream io.ReadWriteCloser) error { diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go index 6d3bcc36..786434f7 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/iptables/proxier.go @@ -47,6 +47,7 @@ import ( "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/proxy" "k8s.io/kubernetes/pkg/proxy/healthcheck" + "k8s.io/kubernetes/pkg/proxy/metrics" utilproxy "k8s.io/kubernetes/pkg/proxy/util" "k8s.io/kubernetes/pkg/util/async" utiliptables "k8s.io/kubernetes/pkg/util/iptables" @@ -166,12 +167,9 @@ type endpointsInfo struct { chainName utiliptables.Chain } -// Returns just the IP part of the endpoint. +// IPPart returns just the IP part of the endpoint. func (e *endpointsInfo) IPPart() string { - if index := strings.Index(e.endpoint, ":"); index != -1 { - return e.endpoint[0:index] - } - return e.endpoint + return utilproxy.IPPart(e.endpoint) } // Returns the endpoint chain name for a given endpointsInfo. @@ -320,12 +318,14 @@ func (scm *serviceChangeMap) update(namespacedName *types.NamespacedName, previo func (sm *proxyServiceMap) merge(other proxyServiceMap) sets.String { existingPorts := sets.NewString() for svcPortName, info := range other { + port := strconv.Itoa(info.port) + clusterIPPort := net.JoinHostPort(info.clusterIP.String(), port) existingPorts.Insert(svcPortName.Port) _, exists := (*sm)[svcPortName] if !exists { - glog.V(1).Infof("Adding new service port %q at %s:%d/%s", svcPortName, info.clusterIP, info.port, info.protocol) + glog.V(1).Infof("Adding new service port %q at %s/%s", svcPortName, clusterIPPort, info.protocol) } else { - glog.V(1).Infof("Updating existing service port %q at %s:%d/%s", svcPortName, info.clusterIP, info.port, info.protocol) + glog.V(1).Infof("Updating existing service port %q at %s/%s", svcPortName, clusterIPPort, info.protocol) } (*sm)[svcPortName] = info } @@ -798,11 +798,15 @@ func getLocalIPs(endpointsMap proxyEndpointsMap) map[types.NamespacedName]sets.S for svcPortName := range endpointsMap { for _, ep := range endpointsMap[svcPortName] { if ep.isLocal { - nsn := svcPortName.NamespacedName - if localIPs[nsn] == nil { - localIPs[nsn] = sets.NewString() + // If the endpoint has a bad format, ipPart() will log an + // error and ep.IPPart() will return a null string. + if ip := ep.IPPart(); ip != "" { + nsn := svcPortName.NamespacedName + if localIPs[nsn] == nil { + localIPs[nsn] = sets.NewString() + } + localIPs[nsn].Insert(ip) } - localIPs[nsn].Insert(ep.IPPart()) // just the IP part } } } @@ -924,10 +928,7 @@ type endpointServicePair struct { } func (esp *endpointServicePair) IPPart() string { - if index := strings.Index(esp.endpoint, ":"); index != -1 { - return esp.endpoint[0:index] - } - return esp.endpoint + return utilproxy.IPPart(esp.endpoint) } // After a UDP endpoint has been removed, we must flush any pending conntrack entries to it, or else we @@ -936,7 +937,7 @@ func (esp *endpointServicePair) IPPart() string { func (proxier *Proxier) deleteEndpointConnections(connectionMap map[endpointServicePair]bool) { for epSvcPair := range connectionMap { if svcInfo, ok := proxier.serviceMap[epSvcPair.servicePortName]; ok && svcInfo.protocol == api.ProtocolUDP { - endpointIP := epSvcPair.endpoint[0:strings.Index(epSvcPair.endpoint, ":")] + endpointIP := utilproxy.IPPart(epSvcPair.endpoint) err := utilproxy.ClearUDPConntrackForPeers(proxier.exec, svcInfo.clusterIP.String(), endpointIP) if err != nil { glog.Errorf("Failed to delete %s endpoint connections, error: %v", epSvcPair.servicePortName.String(), err) @@ -954,7 +955,7 @@ func (proxier *Proxier) syncProxyRules() { start := time.Now() defer func() { - SyncProxyRulesLatency.Observe(sinceInMicroseconds(start)) + metrics.SyncProxyRulesLatency.Observe(metrics.SinceInMicroseconds(start)) glog.V(4).Infof("syncProxyRules took %v", time.Since(start)) }() // don't sync rules till we've received services and endpoints @@ -1162,7 +1163,7 @@ func (proxier *Proxier) syncProxyRules() { "-A", string(kubeServicesChain), "-m", "comment", "--comment", fmt.Sprintf(`"%s cluster IP"`, svcNameString), "-m", protocol, "-p", protocol, - "-d", fmt.Sprintf("%s/32", svcInfo.clusterIP.String()), + "-d", utilproxy.ToCIDR(svcInfo.clusterIP), "--dport", strconv.Itoa(svcInfo.port), ) if proxier.masqueradeAll { @@ -1216,7 +1217,7 @@ func (proxier *Proxier) syncProxyRules() { "-A", string(kubeServicesChain), "-m", "comment", "--comment", fmt.Sprintf(`"%s external IP"`, svcNameString), "-m", protocol, "-p", protocol, - "-d", fmt.Sprintf("%s/32", externalIP), + "-d", utilproxy.ToCIDR(net.ParseIP(externalIP)), "--dport", strconv.Itoa(svcInfo.port), ) // We have to SNAT packets to external IPs. @@ -1242,7 +1243,7 @@ func (proxier *Proxier) syncProxyRules() { "-A", string(kubeServicesChain), "-m", "comment", "--comment", fmt.Sprintf(`"%s has no endpoints"`, svcNameString), "-m", protocol, "-p", protocol, - "-d", fmt.Sprintf("%s/32", externalIP), + "-d", utilproxy.ToCIDR(net.ParseIP(externalIP)), "--dport", strconv.Itoa(svcInfo.port), "-j", "REJECT", ) @@ -1268,7 +1269,7 @@ func (proxier *Proxier) syncProxyRules() { "-A", string(kubeServicesChain), "-m", "comment", "--comment", fmt.Sprintf(`"%s loadbalancer IP"`, svcNameString), "-m", protocol, "-p", protocol, - "-d", fmt.Sprintf("%s/32", ingress.IP), + "-d", utilproxy.ToCIDR(net.ParseIP(ingress.IP)), "--dport", strconv.Itoa(svcInfo.port), ) // jump to service firewall chain @@ -1306,7 +1307,7 @@ func (proxier *Proxier) syncProxyRules() { // loadbalancer's backend hosts. In this case, request will not hit the loadbalancer but loop back directly. // Need to add the following rule to allow request on host. if allowFromNode { - writeLine(proxier.natRules, append(args, "-s", fmt.Sprintf("%s/32", ingress.IP), "-j", string(chosenChain))...) + writeLine(proxier.natRules, append(args, "-s", utilproxy.ToCIDR(net.ParseIP(ingress.IP)), "-j", string(chosenChain))...) } } @@ -1342,7 +1343,8 @@ func (proxier *Proxier) syncProxyRules() { // This is very low impact. The NodePort range is intentionally obscure, and unlikely to actually collide with real Services. // This only affects UDP connections, which are not common. // See issue: https://github.com/kubernetes/kubernetes/issues/49881 - err := utilproxy.ClearUDPConntrackForPort(proxier.exec, lp.Port) + isIPv6 := utilproxy.IsIPv6(svcInfo.clusterIP) + err := utilproxy.ClearUDPConntrackForPort(proxier.exec, lp.Port, isIPv6) if err != nil { glog.Errorf("Failed to clear udp conntrack for port %d, error: %v", lp.Port, err) } @@ -1389,7 +1391,7 @@ func (proxier *Proxier) syncProxyRules() { "-A", string(kubeServicesChain), "-m", "comment", "--comment", fmt.Sprintf(`"%s has no endpoints"`, svcNameString), "-m", protocol, "-p", protocol, - "-d", fmt.Sprintf("%s/32", svcInfo.clusterIP.String()), + "-d", utilproxy.ToCIDR(svcInfo.clusterIP), "--dport", strconv.Itoa(svcInfo.port), "-j", "REJECT", ) @@ -1433,6 +1435,11 @@ func (proxier *Proxier) syncProxyRules() { // Now write loadbalancing & DNAT rules. n := len(endpointChains) for i, endpointChain := range endpointChains { + epIP := endpoints[i].IPPart() + if epIP == "" { + // Error parsing this endpoint has been logged. Skip to next endpoint. + continue + } // Balancing rules in the per-service chain. args = append(args[:0], []string{ "-A", string(svcChain), @@ -1456,7 +1463,7 @@ func (proxier *Proxier) syncProxyRules() { ) // Handle traffic that loops back to the originator with SNAT. writeLine(proxier.natRules, append(args, - "-s", fmt.Sprintf("%s/32", endpoints[i].IPPart()), + "-s", utilproxy.ToCIDR(net.ParseIP(epIP)), "-j", string(KubeMarkMasqChain))...) // Update client-affinity lists. if svcInfo.sessionAffinityType == api.ServiceAffinityClientIP { @@ -1571,20 +1578,6 @@ func (proxier *Proxier) syncProxyRules() { err = proxier.iptables.RestoreAll(proxier.iptablesData.Bytes(), utiliptables.NoFlushTables, utiliptables.RestoreCounters) if err != nil { glog.Errorf("Failed to execute iptables-restore: %v", err) - // ~rough approximation, assume ~100 chars per line - // we log first 1000 bytes, but full list at higher levels - rules := proxier.iptablesData.Bytes() - if len(rules) > 1000 { - abridgedRules := rules[:1000] - if glog.V(4) { - glog.V(4).Infof("Rules:\n%s", rules) - } else { - glog.V(2).Infof("Rules (abridged):\n%s", abridgedRules) - } - } else { - glog.V(2).Infof("Rules:\n%s", rules) - } - // Revert new local ports. glog.V(2).Infof("Closing local ports after iptables-restore failure") utilproxy.RevertPorts(replacementPortsMap, proxier.portsMap) diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/metrics.go b/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go similarity index 80% rename from vendor/k8s.io/kubernetes/pkg/proxy/iptables/metrics.go rename to vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go index fabe6a59..d442f2da 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/iptables/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/metrics/metrics.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package iptables +package metrics import ( "sync" @@ -26,6 +26,7 @@ import ( const kubeProxySubsystem = "kubeproxy" var ( + // SyncProxyRulesLatency is the latency of one round of kube-proxy syncing proxy rules. SyncProxyRulesLatency = prometheus.NewHistogram( prometheus.HistogramOpts{ Subsystem: kubeProxySubsystem, @@ -38,13 +39,14 @@ var ( var registerMetricsOnce sync.Once +// RegisterMetrics registers sync proxy rules latency metrics func RegisterMetrics() { registerMetricsOnce.Do(func() { prometheus.MustRegister(SyncProxyRulesLatency) }) } -// Gets the time since the specified start in microseconds. -func sinceInMicroseconds(start time.Time) float64 { +// SinceInMicroseconds gets the time since the specified start in microseconds. +func SinceInMicroseconds(start time.Time) float64 { return float64(time.Since(start).Nanoseconds() / time.Microsecond.Nanoseconds()) } diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/util/conntrack.go b/vendor/k8s.io/kubernetes/pkg/proxy/util/conntrack.go index 6d7e4703..7806c3a1 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/util/conntrack.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/util/conntrack.go @@ -18,6 +18,7 @@ package util import ( "fmt" + "net" "strconv" "strings" @@ -28,10 +29,27 @@ import ( const noConnectionToDelete = "0 flow entries have been deleted" -// DeleteServiceConnections uses the conntrack tool to delete the conntrack entries +func IsIPv6(netIP net.IP) bool { + return netIP != nil && netIP.To4() == nil +} + +func IsIPv6String(ip string) bool { + netIP := net.ParseIP(ip) + return IsIPv6(netIP) +} + +func parametersWithFamily(isIPv6 bool, parameters ...string) []string { + if isIPv6 { + parameters = append(parameters, "-f", "ipv6") + } + return parameters +} + +// ClearUDPConntrackForIP uses the conntrack tool to delete the conntrack entries // for the UDP connections specified by the given service IP func ClearUDPConntrackForIP(execer exec.Interface, ip string) error { - err := ExecConntrackTool(execer, "-D", "--orig-dst", ip, "-p", "udp") + parameters := parametersWithFamily(IsIPv6String(ip), "-D", "--orig-dst", ip, "-p", "udp") + err := ExecConntrackTool(execer, parameters...) if err != nil && !strings.Contains(err.Error(), noConnectionToDelete) { // TODO: Better handling for deletion failure. When failure occur, stale udp connection may not get flushed. // These stale udp connection will keep black hole traffic. Making this a best effort operation for now, since it @@ -60,11 +78,12 @@ func ExecConntrackTool(execer exec.Interface, parameters ...string) error { // The solution is clearing the conntrack. Known issues: // https://github.com/docker/docker/issues/8795 // https://github.com/kubernetes/kubernetes/issues/31983 -func ClearUDPConntrackForPort(execer exec.Interface, port int) error { +func ClearUDPConntrackForPort(execer exec.Interface, port int, isIPv6 bool) error { if port <= 0 { return fmt.Errorf("Wrong port number. The port number must be greater than zero") } - err := ExecConntrackTool(execer, "-D", "-p", "udp", "--dport", strconv.Itoa(port)) + parameters := parametersWithFamily(isIPv6, "-D", "-p", "udp", "--dport", strconv.Itoa(port)) + err := ExecConntrackTool(execer, parameters...) if err != nil && !strings.Contains(err.Error(), noConnectionToDelete) { return fmt.Errorf("error deleting conntrack entries for UDP port: %d, error: %v", port, err) } @@ -74,7 +93,8 @@ func ClearUDPConntrackForPort(execer exec.Interface, port int) error { // ClearUDPConntrackForPeers uses the conntrack tool to delete the conntrack entries // for the UDP connections specified by the {origin, dest} IP pair. func ClearUDPConntrackForPeers(execer exec.Interface, origin, dest string) error { - err := ExecConntrackTool(execer, "-D", "--orig-dst", origin, "--dst-nat", dest, "-p", "udp") + parameters := parametersWithFamily(IsIPv6String(origin), "-D", "--orig-dst", origin, "--dst-nat", dest, "-p", "udp") + err := ExecConntrackTool(execer, parameters...) if err != nil && !strings.Contains(err.Error(), noConnectionToDelete) { // TODO: Better handling for deletion failure. When failure occur, stale udp connection may not get flushed. // These stale udp connection will keep black hole traffic. Making this a best effort operation for now, since it diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/util/endpoints.go b/vendor/k8s.io/kubernetes/pkg/proxy/util/endpoints.go new file mode 100644 index 00000000..32e770d4 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/proxy/util/endpoints.go @@ -0,0 +1,51 @@ +/* +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 util + +import ( + "fmt" + "net" + + "github.com/golang/glog" +) + +// IPPart returns just the IP part of an IP or IP:port or endpoint string. If the IP +// part is an IPv6 address enclosed in brackets (e.g. "[fd00:1::5]:9999"), +// then the brackets are stripped as well. +func IPPart(s string) string { + if ip := net.ParseIP(s); ip != nil { + // IP address without port + return s + } + // Must be IP:port + ip, _, err := net.SplitHostPort(s) + if err != nil { + glog.Errorf("Error parsing '%s': %v", s, err) + return "" + } + return ip +} + +// ToCIDR returns a host address of the form /32 for +// IPv4 and /128 for IPv6 +func ToCIDR(ip net.IP) string { + len := 32 + if ip.To4() == nil { + len = 128 + } + return fmt.Sprintf("%s/%d", ip.String(), len) +} diff --git a/vendor/k8s.io/kubernetes/pkg/proxy/util/port.go b/vendor/k8s.io/kubernetes/pkg/proxy/util/port.go index fd1a024d..96317b1d 100644 --- a/vendor/k8s.io/kubernetes/pkg/proxy/util/port.go +++ b/vendor/k8s.io/kubernetes/pkg/proxy/util/port.go @@ -18,6 +18,8 @@ package util import ( "fmt" + "net" + "strconv" "github.com/golang/glog" ) @@ -37,7 +39,8 @@ type LocalPort struct { } func (lp *LocalPort) String() string { - return fmt.Sprintf("%q (%s:%d/%s)", lp.Description, lp.IP, lp.Port, lp.Protocol) + ipPort := net.JoinHostPort(lp.IP, strconv.Itoa(lp.Port)) + return fmt.Sprintf("%q (%s/%s)", lp.Description, ipPort, lp.Protocol) } // Closeable is an interface around closing an port. diff --git a/vendor/k8s.io/kubernetes/pkg/security/apparmor/helpers.go b/vendor/k8s.io/kubernetes/pkg/security/apparmor/helpers.go index 2224a734..5352f133 100644 --- a/vendor/k8s.io/kubernetes/pkg/security/apparmor/helpers.go +++ b/vendor/k8s.io/kubernetes/pkg/security/apparmor/helpers.go @@ -35,13 +35,16 @@ const ( ProfileRuntimeDefault = "runtime/default" // The prefix for specifying profiles loaded on the node. ProfileNamePrefix = "localhost/" + + // Unconfined profile + ProfileNameUnconfined = "unconfined" ) // Checks whether app armor is required for pod to be run. func isRequired(pod *v1.Pod) bool { - for key := range pod.Annotations { + for key, value := range pod.Annotations { if strings.HasPrefix(key, ContainerAnnotationKeyPrefix) { - return true + return value != ProfileNameUnconfined } } return false diff --git a/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go b/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go index 061a8750..740698f2 100644 --- a/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go +++ b/vendor/k8s.io/kubernetes/pkg/security/apparmor/validate.go @@ -136,7 +136,7 @@ func validateProfile(profile string, loadedProfiles map[string]bool) error { } func ValidateProfileFormat(profile string) error { - if profile == "" || profile == ProfileRuntimeDefault { + if profile == "" || profile == ProfileRuntimeDefault || profile == ProfileNameUnconfined { return nil } if !strings.HasPrefix(profile, ProfileNamePrefix) { diff --git a/vendor/k8s.io/kubernetes/pkg/util/dbus/fake_dbus.go b/vendor/k8s.io/kubernetes/pkg/util/dbus/fake_dbus.go index 44131272..28cde82f 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/dbus/fake_dbus.go +++ b/vendor/k8s.io/kubernetes/pkg/util/dbus/fake_dbus.go @@ -18,6 +18,7 @@ package dbus import ( "fmt" + "sync" godbus "github.com/godbus/dbus" ) @@ -30,6 +31,7 @@ type DBusFake struct { // DBusFakeConnection represents a fake D-Bus connection type DBusFakeConnection struct { + lock sync.Mutex busObject *fakeObject objects map[string]*fakeObject signalHandlers []chan<- *godbus.Signal @@ -88,6 +90,8 @@ func (conn *DBusFakeConnection) Object(name, path string) Object { // Signal is part of the Connection interface func (conn *DBusFakeConnection) Signal(ch chan<- *godbus.Signal) { + conn.lock.Lock() + defer conn.lock.Unlock() for i := range conn.signalHandlers { if conn.signalHandlers[i] == ch { conn.signalHandlers = append(conn.signalHandlers[:i], conn.signalHandlers[i+1:]...) @@ -109,6 +113,8 @@ func (conn *DBusFakeConnection) AddObject(name, path string, handler DBusFakeHan // EmitSignal emits a signal on conn func (conn *DBusFakeConnection) EmitSignal(name, path, iface, signal string, args ...interface{}) { + conn.lock.Lock() + defer conn.lock.Unlock() sig := &godbus.Signal{ Sender: name, Path: godbus.ObjectPath(path), diff --git a/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go b/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go index 84e0fe03..40e6ab2f 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go +++ b/vendor/k8s.io/kubernetes/pkg/util/iptables/iptables.go @@ -94,10 +94,12 @@ const ( ) const ( - cmdIPTablesSave string = "iptables-save" - cmdIPTablesRestore string = "iptables-restore" - cmdIPTables string = "iptables" - cmdIp6tables string = "ip6tables" + cmdIPTablesSave string = "iptables-save" + cmdIPTablesRestore string = "iptables-restore" + cmdIPTables string = "iptables" + cmdIP6TablesRestore string = "ip6tables-restore" + cmdIP6TablesSave string = "ip6tables-save" + cmdIP6Tables string = "ip6tables" ) // Option flag for Restore @@ -116,9 +118,11 @@ const NoFlushTables FlushFlag = false // (test whether a rule exists). const MinCheckVersion = "1.4.11" -// Minimum iptables versions supporting the -w and -w2 flags -const MinWaitVersion = "1.4.20" -const MinWait2Version = "1.4.22" +// Minimum iptables versions supporting the -w and -w flags +const WaitMinVersion = "1.4.20" +const WaitSecondsMinVersion = "1.4.22" +const WaitString = "-w" +const WaitSecondsString = "-w5" const LockfilePath16x = "/run/xtables.lock" @@ -140,7 +144,7 @@ type runner struct { // newInternal returns a new Interface which will exec iptables, and allows the // caller to change the iptables-restore lockfile path func newInternal(exec utilexec.Interface, dbus utildbus.Interface, protocol Protocol, lockfilePath string) Interface { - vstring, err := getIPTablesVersionString(exec) + vstring, err := getIPTablesVersionString(exec, protocol) if err != nil { glog.Warningf("Error checking iptables version, assuming version at least %s: %v", MinCheckVersion, err) vstring = MinCheckVersion @@ -156,7 +160,7 @@ func newInternal(exec utilexec.Interface, dbus utildbus.Interface, protocol Prot protocol: protocol, hasCheck: getIPTablesHasCheckCommand(vstring), waitFlag: getIPTablesWaitFlag(vstring), - restoreWaitFlag: getIPTablesRestoreWaitFlag(exec), + restoreWaitFlag: getIPTablesRestoreWaitFlag(exec, protocol), lockfilePath: lockfilePath, } // TODO this needs to be moved to a separate Start() or Run() function so that New() has zero side @@ -207,7 +211,7 @@ func (runner *runner) connectToFirewallD() { // GetVersion returns the version string. func (runner *runner) GetVersion() (string, error) { - return getIPTablesVersionString(runner.exec) + return getIPTablesVersionString(runner.exec, runner.protocol) } // EnsureChain is part of Interface. @@ -310,9 +314,10 @@ func (runner *runner) SaveInto(table Table, buffer *bytes.Buffer) error { defer runner.mu.Unlock() // run and return + iptablesSaveCmd := iptablesSaveCommand(runner.protocol) args := []string{"-t", string(table)} - glog.V(4).Infof("running iptables-save %v", args) - cmd := runner.exec.Command(cmdIPTablesSave, args...) + glog.V(4).Infof("running %s %v", iptablesSaveCmd, args) + cmd := runner.exec.Command(iptablesSaveCmd, args...) // Since CombinedOutput() doesn't support redirecting it to a buffer, // we need to workaround it by redirecting stdout and stderr to buffer // and explicitly calling Run() [CombinedOutput() underneath itself @@ -370,8 +375,9 @@ func (runner *runner) restoreInternal(args []string, data []byte, flush FlushFla // run the command and return the output or an error including the output and error fullArgs := append(runner.restoreWaitFlag, args...) - glog.V(4).Infof("running iptables-restore %v", fullArgs) - cmd := runner.exec.Command(cmdIPTablesRestore, fullArgs...) + iptablesRestoreCmd := iptablesRestoreCommand(runner.protocol) + glog.V(4).Infof("running %s %v", iptablesRestoreCmd, fullArgs) + cmd := runner.exec.Command(iptablesRestoreCmd, fullArgs...) cmd.SetStdin(bytes.NewBuffer(data)) b, err := cmd.CombinedOutput() if err != nil { @@ -380,17 +386,32 @@ func (runner *runner) restoreInternal(args []string, data []byte, flush FlushFla return nil } -func (runner *runner) iptablesCommand() string { - if runner.IsIpv6() { - return cmdIp6tables +func iptablesSaveCommand(protocol Protocol) string { + if protocol == ProtocolIpv6 { + return cmdIP6TablesSave + } else { + return cmdIPTablesSave + } +} + +func iptablesRestoreCommand(protocol Protocol) string { + if protocol == ProtocolIpv6 { + return cmdIP6TablesRestore + } else { + return cmdIPTablesRestore + } +} + +func iptablesCommand(protocol Protocol) string { + if protocol == ProtocolIpv6 { + return cmdIP6Tables } else { return cmdIPTables } } func (runner *runner) run(op operation, args []string) ([]byte, error) { - iptablesCmd := runner.iptablesCommand() - + iptablesCmd := iptablesCommand(runner.protocol) fullArgs := append(runner.waitFlag, string(op)) fullArgs = append(fullArgs, args...) glog.V(5).Infof("running iptables %s %v", string(op), args) @@ -418,8 +439,9 @@ func trimhex(s string) string { // Present for compatibility with <1.4.11 versions of iptables. This is full // of hack and half-measures. We should nix this ASAP. func (runner *runner) checkRuleWithoutCheck(table Table, chain Chain, args ...string) (bool, error) { - glog.V(1).Infof("running iptables-save -t %s", string(table)) - out, err := runner.exec.Command(cmdIPTablesSave, "-t", string(table)).CombinedOutput() + iptablesSaveCmd := iptablesSaveCommand(runner.protocol) + glog.V(1).Infof("running %s -t %s", iptablesSaveCmd, string(table)) + out, err := runner.exec.Command(iptablesSaveCmd, "-t", string(table)).CombinedOutput() if err != nil { return false, fmt.Errorf("error checking rule: %v", err) } @@ -517,32 +539,33 @@ func getIPTablesWaitFlag(vstring string) []string { return nil } - minVersion, err := utilversion.ParseGeneric(MinWaitVersion) + minVersion, err := utilversion.ParseGeneric(WaitMinVersion) if err != nil { - glog.Errorf("MinWaitVersion (%s) is not a valid version string: %v", MinWaitVersion, err) + glog.Errorf("WaitMinVersion (%s) is not a valid version string: %v", WaitMinVersion, err) return nil } if version.LessThan(minVersion) { return nil } - minVersion, err = utilversion.ParseGeneric(MinWait2Version) + minVersion, err = utilversion.ParseGeneric(WaitSecondsMinVersion) if err != nil { - glog.Errorf("MinWait2Version (%s) is not a valid version string: %v", MinWait2Version, err) + glog.Errorf("WaitSecondsMinVersion (%s) is not a valid version string: %v", WaitSecondsMinVersion, err) return nil } if version.LessThan(minVersion) { - return []string{"-w"} + return []string{WaitString} } else { - return []string{"-w2"} + return []string{WaitSecondsString} } } // getIPTablesVersionString runs "iptables --version" to get the version string // in the form "X.X.X" -func getIPTablesVersionString(exec utilexec.Interface) (string, error) { +func getIPTablesVersionString(exec utilexec.Interface, protocol Protocol) (string, error) { // this doesn't access mutable state so we don't need to use the interface / runner - bytes, err := exec.Command(cmdIPTables, "--version").CombinedOutput() + iptablesCmd := iptablesCommand(protocol) + bytes, err := exec.Command(iptablesCmd, "--version").CombinedOutput() if err != nil { return "", err } @@ -558,8 +581,8 @@ func getIPTablesVersionString(exec utilexec.Interface) (string, error) { // --wait support landed in v1.6.1+ right before --version support, so // any version of iptables-restore that supports --version will also // support --wait -func getIPTablesRestoreWaitFlag(exec utilexec.Interface) []string { - vstring, err := getIPTablesRestoreVersionString(exec) +func getIPTablesRestoreWaitFlag(exec utilexec.Interface, protocol Protocol) []string { + vstring, err := getIPTablesRestoreVersionString(exec, protocol) if err != nil || vstring == "" { glog.V(3).Infof("couldn't get iptables-restore version; assuming it doesn't support --wait") return nil @@ -574,13 +597,14 @@ func getIPTablesRestoreWaitFlag(exec utilexec.Interface) []string { // getIPTablesRestoreVersionString runs "iptables-restore --version" to get the version string // in the form "X.X.X" -func getIPTablesRestoreVersionString(exec utilexec.Interface) (string, error) { +func getIPTablesRestoreVersionString(exec utilexec.Interface, protocol Protocol) (string, error) { // this doesn't access mutable state so we don't need to use the interface / runner // iptables-restore hasn't always had --version, and worse complains // about unrecognized commands but doesn't exit when it gets them. // Work around that by setting stdin to nothing so it exits immediately. - cmd := exec.Command(cmdIPTablesRestore, "--version") + iptablesRestoreCmd := iptablesRestoreCommand(protocol) + cmd := exec.Command(iptablesRestoreCmd, "--version") cmd.SetStdin(bytes.NewReader([]byte{})) bytes, err := cmd.CombinedOutput() if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go b/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go index 480d15b9..f4e2e411 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/fake.go @@ -17,6 +17,7 @@ limitations under the License. package mount import ( + "os" "path/filepath" "sync" @@ -125,7 +126,7 @@ func (f *FakeMounter) List() ([]MountPoint, error) { } func (f *FakeMounter) IsMountPointMatch(mp MountPoint, dir string) bool { - return (mp.Path == dir) + return mp.Path == dir } func (f *FakeMounter) IsNotMountPoint(dir string) (bool, error) { @@ -136,6 +137,11 @@ func (f *FakeMounter) IsLikelyNotMountPoint(file string) (bool, error) { f.mutex.Lock() defer f.mutex.Unlock() + _, err := os.Stat(file) + if err != nil { + return true, err + } + // If file is a symlink, get its absolute path absFile, err := filepath.EvalSymlinks(file) if err != nil { @@ -175,3 +181,19 @@ func (f *FakeMounter) GetDeviceNameFromMount(mountPath, pluginDir string) (strin func (f *FakeMounter) MakeRShared(path string) error { return nil } + +func (f *FakeMounter) GetFileType(pathname string) (FileType, error) { + return FileType("fake"), nil +} + +func (f *FakeMounter) MakeDir(pathname string) error { + return nil +} + +func (f *FakeMounter) MakeFile(pathname string) error { + return nil +} + +func (f *FakeMounter) ExistsPath(pathname string) bool { + return false +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go b/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go index 5be3ca40..953b5719 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount.go @@ -19,18 +19,20 @@ limitations under the License. package mount import ( - "fmt" - "path" "path/filepath" - "strings" - - "github.com/golang/glog" ) +type FileType string + const ( // Default mount command if mounter path is not specified - defaultMountCommand = "mount" - MountsInGlobalPDPath = "mounts" + defaultMountCommand = "mount" + MountsInGlobalPDPath = "mounts" + FileTypeDirectory FileType = "Directory" + FileTypeFile FileType = "File" + FileTypeSocket FileType = "Socket" + FileTypeCharDev FileType = "CharDevice" + FileTypeBlockDev FileType = "BlockDevice" ) type Interface interface { @@ -70,6 +72,18 @@ type Interface interface { // 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 + // GetFileType checks for file/directory/socket/block/character devices. + // Will operate in the host mount namespace if kubelet is running in a container + GetFileType(pathname string) (FileType, error) + // MakeFile creates an empty file. + // Will operate in the host mount namespace if kubelet is running in a container + MakeFile(pathname string) error + // MakeDir creates a new directory. + // Will operate in the host mount namespace if kubelet is running in a container + MakeDir(pathname string) error + // ExistsPath checks whether the path exists. + // Will operate in the host mount namespace if kubelet is running in a container + ExistsPath(pathname string) bool } // Exec executes command where mount utilities are. This can be either the host, @@ -119,41 +133,6 @@ func (mounter *SafeFormatAndMount) FormatAndMount(source string, target string, return mounter.formatAndMount(source, target, fstype, options) } -// GetMountRefs finds all other references to the device referenced -// by mountPath; returns a list of paths. -func GetMountRefs(mounter Interface, mountPath string) ([]string, error) { - mps, err := mounter.List() - if err != nil { - return nil, err - } - // Find the device name. - deviceName := "" - // If mountPath is symlink, need get its target path. - slTarget, err := filepath.EvalSymlinks(mountPath) - if err != nil { - slTarget = mountPath - } - for i := range mps { - if mps[i].Path == slTarget { - deviceName = mps[i].Device - break - } - } - - // Find all references to the device. - var refs []string - if deviceName == "" { - glog.Warningf("could not determine device for path: %q", mountPath) - } else { - for i := range mps { - if mps[i].Device == deviceName && mps[i].Path != slTarget { - refs = append(refs, mps[i].Path) - } - } - } - return refs, nil -} - // GetMountRefsByDev finds all references to the device provided // by mountPath; returns a list of paths. func GetMountRefsByDev(mounter Interface, mountPath string) ([]string, error) { @@ -220,34 +199,6 @@ func GetDeviceNameFromMount(mounter Interface, mountPath string) (string, int, e return device, refCount, nil } -// 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 -// matches, returns the volume name taken from its given mountPath -func getDeviceNameFromMount(mounter Interface, mountPath, pluginDir string) (string, error) { - refs, err := GetMountRefs(mounter, mountPath) - if err != nil { - glog.V(4).Infof("GetMountRefs failed for mount path %q: %v", mountPath, err) - return "", err - } - if len(refs) == 0 { - glog.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 err != nil { - glog.Errorf("Failed to get volume id from mount %s - %v", mountPath, err) - return "", err - } - return volumeID, nil - } - } - - return path.Base(mountPath), nil -} - // IsNotMountPoint determines if a directory is a mountpoint. // It should return ErrNotExist when the directory does not exist. // This method uses the List() of all mountpoints 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 0efc5d68..9caec670 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_linux.go @@ -22,6 +22,8 @@ import ( "fmt" "os" "os/exec" + "path" + "path/filepath" "strconv" "strings" "syscall" @@ -42,9 +44,6 @@ const ( procMountsPath = "/proc/mounts" // Location of the mountinfo file procMountInfoPath = "/proc/self/mountinfo" -) - -const ( // 'fsck' found errors and corrected them fsckErrorsCorrected = 1 // 'fsck' found errors but exited without correcting them @@ -71,12 +70,12 @@ func New(mounterPath string) Interface { // Mount mounts source to target as fstype with given options. 'source' and 'fstype' must // be an emtpy string in case it's not required, e.g. for remount, or for auto filesystem -// type, where kernel handles fs type for you. The mount 'options' is a list of options, +// type, where kernel handles fstype for you. The mount 'options' is a list of options, // currently come from mount(8), e.g. "ro", "remount", "bind", etc. If no more option is // required, call Mount with an empty string list or nil. func (mounter *Mounter) Mount(source string, target string, fstype string, options []string) error { // 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 an support bind mounts. + // All Linux distros are expected to be shipped with a mount utility that a support bind mounts. mounterPath := "" bind, bindRemountOpts := isBind(options) if bind { @@ -144,6 +143,41 @@ func (m *Mounter) doMount(mounterPath string, mountCmd string, source string, ta return err } +// GetMountRefs finds all other references to the device referenced +// by mountPath; returns a list of paths. +func GetMountRefs(mounter Interface, mountPath string) ([]string, error) { + mps, err := mounter.List() + if err != nil { + return nil, err + } + // Find the device name. + deviceName := "" + // If mountPath is symlink, need get its target path. + slTarget, err := filepath.EvalSymlinks(mountPath) + if err != nil { + slTarget = mountPath + } + for i := range mps { + if mps[i].Path == slTarget { + deviceName = mps[i].Device + break + } + } + + // Find all references to the device. + var refs []string + if deviceName == "" { + glog.Warningf("could not determine device for path: %q", mountPath) + } else { + for i := range mps { + if mps[i].Device == deviceName && mps[i].Path != slTarget { + refs = append(refs, mps[i].Path) + } + } + } + return refs, nil +} + // detectSystemd returns true if OS runs with systemd as init. When not sure // (permission errors, ...), it returns false. // There may be different ways how to detect systemd, this one makes sure that @@ -255,17 +289,29 @@ func (mounter *Mounter) DeviceOpened(pathname string) (bool, error) { // PathIsDevice uses FileInfo returned from os.Stat to check if path refers // to a device. func (mounter *Mounter) PathIsDevice(pathname string) (bool, error) { - return pathIsDevice(pathname) + pathType, err := mounter.GetFileType(pathname) + isDevice := pathType == FileTypeCharDev || pathType == FileTypeBlockDev + return isDevice, err } func exclusiveOpenFailsOnDevice(pathname string) (bool, error) { - isDevice, err := pathIsDevice(pathname) + var isDevice bool + finfo, err := os.Stat(pathname) + if os.IsNotExist(err) { + isDevice = false + } + // err in call to os.Stat if err != nil { return false, fmt.Errorf( "PathIsDevice failed for path %q: %v", pathname, err) } + // path refers to a device + if finfo.Mode()&os.ModeDevice != 0 { + isDevice = true + } + if !isDevice { glog.Errorf("Path %q is not refering to a device.", pathname) return false, nil @@ -285,28 +331,39 @@ func exclusiveOpenFailsOnDevice(pathname string) (bool, error) { return false, errno } -func pathIsDevice(pathname string) (bool, error) { - finfo, err := os.Stat(pathname) - if os.IsNotExist(err) { - return false, nil - } - // err in call to os.Stat - if err != nil { - return false, err - } - // path refers to a device - if finfo.Mode()&os.ModeDevice != 0 { - return true, nil - } - // path does not refer to device - return false, nil -} - //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) } +// 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 +// matches, returns the volume name taken from its given mountPath +func getDeviceNameFromMount(mounter Interface, mountPath, pluginDir string) (string, error) { + refs, err := GetMountRefs(mounter, mountPath) + if err != nil { + glog.V(4).Infof("GetMountRefs failed for mount path %q: %v", mountPath, err) + return "", err + } + if len(refs) == 0 { + glog.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 err != nil { + glog.Errorf("Failed to get volume id from mount %s - %v", mountPath, err) + return "", err + } + return volumeID, nil + } + } + + return path.Base(mountPath), nil +} + func listProcMounts(mountFilePath string) ([]MountPoint, error) { content, err := utilio.ConsistentRead(mountFilePath, maxListTries) if err != nil { @@ -353,9 +410,64 @@ func parseProcMounts(content []byte) ([]MountPoint, error) { } func (mounter *Mounter) MakeRShared(path string) error { - mountCmd := defaultMountCommand - mountArgs := []string{} - return doMakeRShared(path, procMountInfoPath, mountCmd, mountArgs) + return doMakeRShared(path, procMountInfoPath) +} + +func (mounter *Mounter) GetFileType(pathname string) (FileType, error) { + var pathType FileType + finfo, err := os.Stat(pathname) + if os.IsNotExist(err) { + return pathType, fmt.Errorf("path %q does not exist", pathname) + } + // err in call to os.Stat + if err != nil { + return pathType, err + } + + mode := finfo.Sys().(*syscall.Stat_t).Mode + switch mode & syscall.S_IFMT { + case syscall.S_IFSOCK: + return FileTypeSocket, nil + case syscall.S_IFBLK: + return FileTypeBlockDev, nil + case syscall.S_IFCHR: + return FileTypeBlockDev, nil + case syscall.S_IFDIR: + return FileTypeDirectory, nil + case syscall.S_IFREG: + return FileTypeFile, nil + } + + return pathType, fmt.Errorf("only recognise file, directory, socket, block device and character device") +} + +func (mounter *Mounter) MakeDir(pathname string) error { + err := os.MkdirAll(pathname, os.FileMode(0755)) + if err != nil { + if !os.IsExist(err) { + return err + } + } + return nil +} + +func (mounter *Mounter) MakeFile(pathname string) error { + f, err := os.OpenFile(pathname, os.O_CREATE, os.FileMode(0644)) + defer f.Close() + if err != nil { + if !os.IsExist(err) { + return err + } + } + return nil +} + +func (mounter *Mounter) ExistsPath(pathname string) bool { + _, err := os.Stat(pathname) + if err != nil { + return false + } + return true } // formatAndMount uses unix utils to format and mount the given disk @@ -424,7 +536,7 @@ func (mounter *SafeFormatAndMount) formatAndMount(source string, target string, return mountErr } -// diskLooksUnformatted uses 'lsblk' to see if the given disk is unformated +// getDiskFormat uses 'lsblk' to see if the given disk is unformated func (mounter *SafeFormatAndMount) getDiskFormat(disk string) (string, error) { args := []string{"-n", "-o", "FSTYPE", disk} glog.V(4).Infof("Attempting to determine if disk %q is formatted using lsblk with args: (%v)", disk, args) @@ -526,7 +638,7 @@ func parseMountInfo(filename string) ([]mountInfo, error) { // path is shared and bind-mounts it as rshared if needed. mountCmd and // mountArgs are expected to contain mount-like command, doMakeRShared will add // '--bind ' and '--make-rshared ' to mountArgs. -func doMakeRShared(path string, mountInfoFilename string, mountCmd string, mountArgs []string) error { +func doMakeRShared(path string, mountInfoFilename string) error { shared, err := isShared(path, mountInfoFilename) if err != nil { return 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 936c30ab..244c22c0 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_unsupported.go @@ -18,6 +18,10 @@ limitations under the License. package mount +import ( + "errors" +) + type Mounter struct { mounterPath string } @@ -39,6 +43,12 @@ func (mounter *Mounter) Unmount(target string) error { return nil } +// GetMountRefs finds all other references to the device referenced +// by mountPath; returns a list of paths. +func GetMountRefs(mounter Interface, mountPath string) ([]string, error) { + return []string{}, nil +} + func (mounter *Mounter) List() ([]MountPoint, error) { return []MountPoint{}, nil } @@ -59,6 +69,10 @@ func (mounter *Mounter) GetDeviceNameFromMount(mountPath, pluginDir string) (str return "", nil } +func getDeviceNameFromMount(mounter Interface, mountPath, pluginDir string) (string, error) { + return "", nil +} + func (mounter *Mounter) DeviceOpened(pathname string) (bool, error) { return false, nil } @@ -78,3 +92,19 @@ func (mounter *SafeFormatAndMount) formatAndMount(source string, target string, func (mounter *SafeFormatAndMount) diskLooksUnformatted(disk string) (bool, error) { return true, nil } + +func (mounter *Mounter) GetFileType(pathname string) (FileType, error) { + return FileType("fake"), errors.New("not implemented") +} + +func (mounter *Mounter) MakeDir(pathname string) error { + return nil +} + +func (mounter *Mounter) MakeFile(pathname string) error { + return nil +} + +func (mounter *Mounter) ExistsPath(pathname string) bool { + return true +} 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 63294df9..b39951ad 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/mount_windows.go @@ -22,9 +22,11 @@ import ( "fmt" "os" "os/exec" + "path" "path/filepath" "strconv" "strings" + "syscall" "github.com/golang/glog" ) @@ -74,8 +76,24 @@ func (mounter *Mounter) Mount(source string, target string, fstype string, optio return nil } - // empty implementation for mounting azure file - return os.MkdirAll(target, 0755) + // currently only cifs mount is supported + if strings.ToLower(fstype) != "cifs" { + return fmt.Errorf("azureMount: only cifs mount is supported now, fstype: %q, mounting source (%q), target (%q), with options (%q)", fstype, source, target, options) + } + + cmdLine := fmt.Sprintf(`$User = "%s";$PWord = ConvertTo-SecureString -String "%s" -AsPlainText -Force;`+ + `$Credential = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord`, + options[0], options[1]) + + bindSource = source + cmdLine += fmt.Sprintf(";New-SmbGlobalMapping -RemotePath %s -Credential $Credential", source) + + if output, err := exec.Command("powershell", "/c", cmdLine).CombinedOutput(); err != nil { + // we don't return error here, even though New-SmbGlobalMapping failed, we still make it successful, + // will return error when Windows 2016 RS3 is ready on azure + glog.Errorf("azureMount: SmbGlobalMapping failed: %v, only SMB mount is supported now, output: %q", err, string(output)) + return os.MkdirAll(target, 0755) + } } if output, err := exec.Command("cmd", "/c", "mklink", "/D", target, bindSource).CombinedOutput(); err != nil { @@ -97,6 +115,16 @@ func (mounter *Mounter) Unmount(target string) error { return nil } +// GetMountRefs finds all other references to the device(drive) referenced +// by mountPath; returns a list of paths. +func GetMountRefs(mounter Interface, mountPath string) ([]string, error) { + refs, err := getAllParentLinks(normalizeWindowsPath(mountPath)) + if err != nil { + return nil, err + } + return refs, nil +} + // List returns a list of all mounted filesystems. todo func (mounter *Mounter) List() ([]MountPoint, error) { return []MountPoint{}, nil @@ -131,6 +159,33 @@ func (mounter *Mounter) GetDeviceNameFromMount(mountPath, pluginDir string) (str return getDeviceNameFromMount(mounter, mountPath, pluginDir) } +// getDeviceNameFromMount find the device(drive) name in which +// the mount path reference should match the given plugin 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) { + refs, err := GetMountRefs(mounter, mountPath) + if err != nil { + glog.V(4).Infof("GetMountRefs failed for mount path %q: %v", mountPath, err) + return "", err + } + if len(refs) == 0 { + return "", fmt.Errorf("directory %s is not mounted", mountPath) + } + basemountPath := normalizeWindowsPath(path.Join(pluginDir, MountsInGlobalPDPath)) + for _, ref := range refs { + if strings.Contains(ref, basemountPath) { + volumeID, err := filepath.Rel(normalizeWindowsPath(basemountPath), ref) + if err != nil { + glog.Errorf("Failed to get volume id from mount %s - %v", mountPath, err) + return "", err + } + return volumeID, nil + } + } + + return path.Base(mountPath), nil +} + // DeviceOpened determines if the device is in use elsewhere func (mounter *Mounter) DeviceOpened(pathname string) (bool, error) { return false, nil @@ -147,6 +202,67 @@ func (mounter *Mounter) MakeRShared(path string) error { return nil } +// GetFileType checks for sockets/block/character devices +func (mounter *Mounter) GetFileType(pathname string) (FileType, error) { + var pathType FileType + info, err := os.Stat(pathname) + if os.IsNotExist(err) { + return pathType, fmt.Errorf("path %q does not exist", pathname) + } + // err in call to os.Stat + if err != nil { + return pathType, err + } + + mode := info.Sys().(*syscall.Win32FileAttributeData).FileAttributes + switch mode & syscall.S_IFMT { + case syscall.S_IFSOCK: + return FileTypeSocket, nil + case syscall.S_IFBLK: + return FileTypeBlockDev, nil + case syscall.S_IFCHR: + return FileTypeCharDev, nil + case syscall.S_IFDIR: + return FileTypeDirectory, nil + case syscall.S_IFREG: + return FileTypeFile, nil + } + + return pathType, fmt.Errorf("only recognise file, directory, socket, block device and character device") +} + +// MakeFile creates a new directory +func (mounter *Mounter) MakeDir(pathname string) error { + err := os.MkdirAll(pathname, os.FileMode(0755)) + if err != nil { + if !os.IsExist(err) { + return err + } + } + return nil +} + +// MakeFile creates an empty file +func (mounter *Mounter) MakeFile(pathname string) error { + f, err := os.OpenFile(pathname, os.O_CREATE, os.FileMode(0644)) + defer f.Close() + if err != nil { + if !os.IsExist(err) { + return err + } + } + return nil +} + +// ExistsPath checks whether the path exists +func (mounter *Mounter) ExistsPath(pathname string) bool { + _, err := os.Stat(pathname) + if err != nil { + return false + } + return true +} + func (mounter *SafeFormatAndMount) formatAndMount(source string, target string, fstype string, options []string) error { // Try to mount the disk glog.V(4).Infof("Attempting to formatAndMount disk: %s %s %s", fstype, source, target) @@ -204,3 +320,30 @@ func getDriveLetterByDiskNumber(diskNum string, exec Exec) (string, error) { } return string(output)[:1], nil } + +// getAllParentLinks walks all symbolic links and return all the parent targets recursively +func getAllParentLinks(path string) ([]string, error) { + const maxIter = 255 + links := []string{} + for { + links = append(links, path) + if len(links) > maxIter { + return links, fmt.Errorf("unexpected length of parent links: %v", links) + } + + fi, err := os.Lstat(path) + if err != nil { + return links, fmt.Errorf("Lstat: %v", err) + } + if fi.Mode()&os.ModeSymlink == 0 { + break + } + + path, err = os.Readlink(path) + if err != nil { + return links, fmt.Errorf("Readlink error: %v", err) + } + } + + return links, nil +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount.go b/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount.go index 24a095a6..a6c7869b 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount.go @@ -25,78 +25,30 @@ import ( "strings" "github.com/golang/glog" - "k8s.io/utils/exec" + "k8s.io/kubernetes/pkg/util/nsenter" ) -// NsenterMounter is part of experimental support for running the kubelet -// in a container. Currently, all docker containers receive their own mount -// namespaces. NsenterMounter works by executing nsenter to run commands in +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. -// -// NsenterMounter requires: -// -// 1. Docker >= 1.6 due to the dependency on the slave propagation mode -// of the bind-mount of the kubelet root directory in the container. -// Docker 1.5 used a private propagation mode for bind-mounts, so mounts -// performed in the host's mount namespace do not propagate out to the -// bind-mount in this docker version. -// 2. The host's root filesystem must be available at /rootfs -// 3. The nsenter binary must be on the Kubelet process' PATH in the container's -// filesystem. -// 4. The Kubelet process must have CAP_SYS_ADMIN (required by nsenter); at -// the present, this effectively means that the kubelet is running in a -// privileged container. -// 5. The volume path used by the Kubelet must be the same inside and outside -// the container and be writable by the container (to initialize volume) -// contents. TODO: remove this requirement. -// 6. The host image must have mount, findmnt, and umount binaries in /bin, -// /usr/sbin, or /usr/bin -// 7. The host image should have systemd-run in /bin, /usr/sbin, or /usr/bin -// For more information about mount propagation modes, see: -// https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt type NsenterMounter struct { - // a map of commands to their paths on the host filesystem - paths map[string]string + ne *nsenter.Nsenter } func NewNsenterMounter() *NsenterMounter { - m := &NsenterMounter{ - paths: map[string]string{ - "mount": "", - "findmnt": "", - "umount": "", - "systemd-run": "", - }, - } - // search for the mount command in other locations besides /usr/bin - for binary := range m.paths { - // default to root - m.paths[binary] = filepath.Join("/", binary) - for _, path := range []string{"/bin", "/usr/sbin", "/usr/bin"} { - binPath := filepath.Join(path, binary) - if _, err := os.Stat(filepath.Join(hostRootFsPath, binPath)); err != nil { - continue - } - m.paths[binary] = binPath - break - } - // TODO: error, so that the kubelet can stop if the mounts don't exist - // (don't forget that systemd-run is optional) - } - return m + return &NsenterMounter{ne: nsenter.NewNsenter()} } // NsenterMounter implements mount.Interface var _ = Interface(&NsenterMounter{}) -const ( - hostRootFsPath = "/rootfs" - hostProcMountsPath = "/rootfs/proc/1/mounts" - hostProcMountinfoPath = "/rootfs/proc/1/mountinfo" - hostMountNamespacePath = "/rootfs/proc/1/ns/mnt" - nsenterPath = "nsenter" -) - // 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 { @@ -116,26 +68,22 @@ func (n *NsenterMounter) Mount(source string, target string, fstype string, opti // doNsenterMount nsenters the host's mount namespace and performs the // requested mount. func (n *NsenterMounter) doNsenterMount(source, target, fstype string, options []string) error { - glog.V(5).Infof("nsenter Mounting %s %s %s %v", source, target, fstype, options) - args := n.makeNsenterArgs(source, target, fstype, options) - - glog.V(5).Infof("Mount command: %v %v", nsenterPath, args) - exec := exec.New() - outputBytes, err := exec.Command(nsenterPath, args...).CombinedOutput() + glog.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 { glog.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 { - mountCmd := n.absHostPath("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.paths["systemd-run"]; hasSystemd { + 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: @@ -165,34 +113,20 @@ func (n *NsenterMounter) makeNsenterArgs(source, target, fstype string, options // No code here, mountCmd and mountArgs use /bin/mount } - nsenterArgs := []string{ - "--mount=" + hostMountNamespacePath, - "--", - mountCmd, - } - nsenterArgs = append(nsenterArgs, mountArgs...) - - return nsenterArgs + return mountCmd, mountArgs } // Unmount runs umount(8) in the host's mount namespace. func (n *NsenterMounter) Unmount(target string) error { - args := []string{ - "--mount=" + hostMountNamespacePath, - "--", - n.absHostPath("umount"), - target, - } + 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. - glog.V(5).Infof("Unmount command: %v %v", nsenterPath, args) - exec := exec.New() - outputBytes, err := exec.Command(nsenterPath, args...).CombinedOutput() + glog.V(5).Infof("nsenter unmount args: %v", args) + outputBytes, err := n.ne.Exec("umount", args).CombinedOutput() if len(outputBytes) != 0 { glog.V(5).Infof("Output of unmounting %s: %v", target, string(outputBytes)) } - return err } @@ -207,7 +141,7 @@ func (m *NsenterMounter) IsNotMountPoint(dir string) (bool, error) { func (*NsenterMounter) IsMountPointMatch(mp MountPoint, dir string) bool { deletedDir := fmt.Sprintf("%s\\040(deleted)", dir) - return ((mp.Path == dir) || (mp.Path == deletedDir)) + return (mp.Path == dir) || (mp.Path == deletedDir) } // IsLikelyNotMountPoint determines whether a path is a mountpoint by calling findmnt @@ -227,11 +161,9 @@ func (n *NsenterMounter) IsLikelyNotMountPoint(file string) (bool, error) { // 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{"--mount=" + hostMountNamespacePath, "--", n.absHostPath("findmnt"), "-o", "target,fstype", "--noheadings", "--first-only", "--target", file} - glog.V(5).Infof("findmnt command: %v %v", nsenterPath, args) - - exec := exec.New() - out, err := exec.Command(nsenterPath, args...).CombinedOutput() + args := []string{"-o", "target,fstype", "--noheadings", "--first-only", "--target", file} + glog.V(5).Infof("nsenter findmnt args: %v", args) + out, err := n.ne.Exec("findmnt", args).CombinedOutput() if err != nil { glog.V(2).Infof("Failed findmnt command for path %s: %v", file, err) // Different operating systems behave differently for paths which are not mount points. @@ -277,7 +209,9 @@ func (n *NsenterMounter) DeviceOpened(pathname string) (bool, error) { // PathIsDevice uses FileInfo returned from os.Stat to check if path refers // to a device. func (n *NsenterMounter) PathIsDevice(pathname string) (bool, error) { - return pathIsDevice(pathname) + 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 @@ -285,20 +219,54 @@ func (n *NsenterMounter) GetDeviceNameFromMount(mountPath, pluginDir string) (st return getDeviceNameFromMount(n, mountPath, pluginDir) } -func (n *NsenterMounter) absHostPath(command string) string { - path, ok := n.paths[command] - if !ok { - return command - } - return path +func (n *NsenterMounter) MakeRShared(path string) error { + return doMakeRShared(path, hostProcMountinfoPath) } -func (n *NsenterMounter) MakeRShared(path string) error { - nsenterCmd := nsenterPath - nsenterArgs := []string{ - "--mount=" + hostMountNamespacePath, - "--", - n.absHostPath("mount"), +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 { + return pathType, err } - return doMakeRShared(path, hostProcMountinfoPath, nsenterCmd, nsenterArgs) + + 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 { + args := []string{pathname} + _, err := mounter.ne.Exec("ls", args).CombinedOutput() + if err == nil { + return true + } + return false } 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 index f881c508..f4eb692f 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount_unsupported.go +++ b/vendor/k8s.io/kubernetes/pkg/util/mount/nsenter_mount_unsupported.go @@ -18,6 +18,10 @@ limitations under the License. package mount +import ( + "errors" +) + type NsenterMounter struct{} func NewNsenterMounter() *NsenterMounter { @@ -65,3 +69,19 @@ func (*NsenterMounter) GetDeviceNameFromMount(mountPath, pluginDir string) (stri 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 { + return true +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/nsenter/nsenter.go b/vendor/k8s.io/kubernetes/pkg/util/nsenter/nsenter.go new file mode 100644 index 00000000..32fbc084 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/nsenter/nsenter.go @@ -0,0 +1,124 @@ +// +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 nsenter + +import ( + "fmt" + "os" + "path/filepath" + + "k8s.io/utils/exec" + + "github.com/golang/glog" +) + +const ( + hostRootFsPath = "/rootfs" + // hostProcMountNsPath is the default mount namespace for rootfs + hostProcMountNsPath = "/rootfs/proc/1/ns/mnt" + // nsenterPath is the default nsenter command + nsenterPath = "nsenter" +) + +// Nsenter is part of experimental support for running the kubelet +// in a container. +// +// Nsenter requires: +// +// 1. Docker >= 1.6 due to the dependency on the slave propagation mode +// of the bind-mount of the kubelet root directory in the container. +// Docker 1.5 used a private propagation mode for bind-mounts, so mounts +// performed in the host's mount namespace do not propagate out to the +// bind-mount in this docker version. +// 2. The host's root filesystem must be available at /rootfs +// 3. The nsenter binary must be on the Kubelet process' PATH in the container's +// filesystem. +// 4. The Kubelet process must have CAP_SYS_ADMIN (required by nsenter); at +// the present, this effectively means that the kubelet is running in a +// privileged container. +// 5. The volume path used by the Kubelet must be the same inside and outside +// the container and be writable by the container (to initialize volume) +// contents. TODO: remove this requirement. +// 6. The host image must have "mount", "findmnt", "umount", "stat", "touch", +// "mkdir", "ls", "sh" and "chmod" binaries in /bin, /usr/sbin, or /usr/bin +// 7. The host image should have systemd-run in /bin, /usr/sbin, or /usr/bin +// For more information about mount propagation modes, see: +// https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt +type Nsenter struct { + // a map of commands to their paths on the host filesystem + paths map[string]string +} + +// NewNsenter constructs a new instance of Nsenter +func NewNsenter() *Nsenter { + ne := &Nsenter{ + paths: map[string]string{ + "mount": "", + "findmnt": "", + "umount": "", + "systemd-run": "", + "stat": "", + "touch": "", + "mkdir": "", + "ls": "", + "sh": "", + "chmod": "", + }, + } + // search for the required commands in other locations besides /usr/bin + for binary := range ne.paths { + // default to root + ne.paths[binary] = filepath.Join("/", binary) + for _, path := range []string{"/bin", "/usr/sbin", "/usr/bin"} { + binPath := filepath.Join(path, binary) + if _, err := os.Stat(filepath.Join(hostRootFsPath, binPath)); err != nil { + continue + } + ne.paths[binary] = binPath + break + } + // TODO: error, so that the kubelet can stop if the paths don't exist + // (don't forget that systemd-run is optional) + } + return ne +} + +// Exec executes nsenter commands in hostProcMountNsPath mount namespace +func (ne *Nsenter) Exec(cmd string, args []string) exec.Cmd { + fullArgs := append([]string{fmt.Sprintf("--mount=%s", hostProcMountNsPath), "--"}, + append([]string{ne.AbsHostPath(cmd)}, args...)...) + glog.V(5).Infof("Running nsenter command: %v %v", nsenterPath, fullArgs) + exec := exec.New() + return exec.Command(nsenterPath, fullArgs...) +} + +// AbsHostPath returns the absolute runnable path for a specified command +func (ne *Nsenter) AbsHostPath(command string) string { + path, ok := ne.paths[command] + if !ok { + return command + } + return path +} + +// SupportsSystemd checks whether command systemd-run exists +func (ne *Nsenter) SupportsSystemd() (string, bool) { + systemdRunPath, hasSystemd := ne.paths["systemd-run"] + return systemdRunPath, hasSystemd +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/nsenter/nsenter_unsupported.go b/vendor/k8s.io/kubernetes/pkg/util/nsenter/nsenter_unsupported.go new file mode 100644 index 00000000..17b3b572 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/util/nsenter/nsenter_unsupported.go @@ -0,0 +1,50 @@ +// +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 nsenter + +import ( + "k8s.io/utils/exec" +) + +// Nsenter is part of experimental support for running the kubelet +// in a container. +type Nsenter struct { + // a map of commands to their paths on the host filesystem + Paths map[string]string +} + +// NewNsenter constructs a new instance of Nsenter +func NewNsenter() *Nsenter { + return &Nsenter{} +} + +// Exec executes nsenter commands in hostProcMountNsPath mount namespace +func (ne *Nsenter) Exec(args ...string) exec.Cmd { + return nil +} + +// AbsHostPath returns the absolute runnable path for a specified command +func (ne *Nsenter) AbsHostPath(command string) string { + return "" +} + +// SupportsSystemd checks whether command systemd-run exists +func (ne *Nsenter) SupportsSystemd() (string, bool) { + return "", false +} diff --git a/vendor/k8s.io/kubernetes/pkg/util/taints/taints.go b/vendor/k8s.io/kubernetes/pkg/util/taints/taints.go index 5957adfb..a86839b5 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/taints/taints.go +++ b/vendor/k8s.io/kubernetes/pkg/util/taints/taints.go @@ -35,7 +35,7 @@ const ( UNTAINTED = "untainted" ) -// parseTaint parses a taint from a string. Taint must be off the format '=:'. +// parseTaint parses a taint from a string. Taint must be of the format '=:'. func parseTaint(st string) (v1.Taint, error) { var taint v1.Taint parts := strings.Split(st, "=") @@ -45,15 +45,14 @@ func parseTaint(st string) (v1.Taint, error) { parts2 := strings.Split(parts[1], ":") - effect := v1.TaintEffect(parts2[1]) - errs := validation.IsValidLabelValue(parts2[0]) if len(parts2) != 2 || len(errs) != 0 { return taint, fmt.Errorf("invalid taint spec: %v, %s", st, strings.Join(errs, "; ")) } - if effect != v1.TaintEffectNoSchedule && effect != v1.TaintEffectPreferNoSchedule && effect != v1.TaintEffectNoExecute { - return taint, fmt.Errorf("invalid taint spec: %v, unsupported taint effect", st) + effect := v1.TaintEffect(parts2[1]) + if err := validateTaintEffect(effect); err != nil { + return taint, err } taint.Key = parts[0] @@ -63,6 +62,14 @@ func parseTaint(st string) (v1.Taint, error) { return taint, nil } +func validateTaintEffect(effect v1.TaintEffect) error { + if effect != v1.TaintEffectNoSchedule && effect != v1.TaintEffectPreferNoSchedule && effect != v1.TaintEffectNoExecute { + return fmt.Errorf("invalid taint effect: %v, unsupported taint effect", effect) + } + + return nil +} + // NewTaintsVar wraps []api.Taint in a struct that implements flag.Value to allow taints to be // bound to command line flags. func NewTaintsVar(ptr *[]api.Taint) taintsVar { @@ -76,6 +83,10 @@ type taintsVar struct { } func (t taintsVar) Set(s string) error { + if len(s) == 0 { + *t.ptr = nil + return nil + } sts := strings.Split(s, ",") var taints []api.Taint for _, st := range sts { @@ -91,7 +102,7 @@ func (t taintsVar) Set(s string) error { func (t taintsVar) String() string { if len(*t.ptr) == 0 { - return "" + return "" } var taints []string for _, taint := range *t.ptr { @@ -134,6 +145,14 @@ func ParseTaints(spec []string) ([]v1.Taint, []v1.Taint, error) { taintKey = parts[0] effect = v1.TaintEffect(parts[1]) } + + // If effect is specified, need to validate it. + if len(effect) > 0 { + err := validateTaintEffect(effect) + if err != nil { + return nil, nil, err + } + } taintsToRemove = append(taintsToRemove, v1.Taint{Key: taintKey, Effect: effect}) } else { return nil, nil, fmt.Errorf("unknown taint spec: %v", taintSpec) @@ -238,11 +257,7 @@ func DeleteTaint(taints []v1.Taint, taintToDelete *v1.Taint) ([]v1.Taint, bool) // RemoveTaint tries to remove a taint from annotations list. Returns a new copy of updated Node and true if something was updated // false otherwise. func RemoveTaint(node *v1.Node, taint *v1.Taint) (*v1.Node, bool, error) { - objCopy, err := api.Scheme.DeepCopy(node) - if err != nil { - return nil, false, err - } - newNode := objCopy.(*v1.Node) + newNode := node.DeepCopy() nodeTaints := newNode.Spec.Taints if len(nodeTaints) == 0 { return newNode, false, nil @@ -260,11 +275,7 @@ func RemoveTaint(node *v1.Node, taint *v1.Taint) (*v1.Node, bool, error) { // AddOrUpdateTaint tries to add a taint to annotations list. Returns a new copy of updated Node and true if something was updated // false otherwise. func AddOrUpdateTaint(node *v1.Node, taint *v1.Taint) (*v1.Node, bool, error) { - objCopy, err := api.Scheme.DeepCopy(node) - if err != nil { - return nil, false, err - } - newNode := objCopy.(*v1.Node) + newNode := node.DeepCopy() nodeTaints := newNode.Spec.Taints var newTaints []v1.Taint diff --git a/vendor/k8s.io/kubernetes/pkg/util/version/version.go b/vendor/k8s.io/kubernetes/pkg/util/version/version.go index e8cd0cec..24724e50 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/version/version.go +++ b/vendor/k8s.io/kubernetes/pkg/util/version/version.go @@ -181,12 +181,11 @@ func (v *Version) String() string { // compareInternal returns -1 if v is less than other, 1 if it is greater than other, or 0 // if they are equal func (v *Version) compareInternal(other *Version) int { - for i := range v.components { + + vLen := len(v.components) + oLen := len(other.components) + for i := 0; i < vLen && i < oLen; i++ { switch { - case i >= len(other.components): - if v.components[i] != 0 { - return 1 - } case other.components[i] < v.components[i]: return 1 case other.components[i] > v.components[i]: @@ -194,6 +193,14 @@ func (v *Version) compareInternal(other *Version) int { } } + // If components are common but one has more items and they are not zeros, it is bigger + switch { + case oLen < vLen && !onlyZeros(v.components[oLen:]): + return 1 + case oLen > vLen && !onlyZeros(other.components[vLen:]): + return -1 + } + if !v.semver || !other.semver { return 0 } @@ -209,10 +216,7 @@ func (v *Version) compareInternal(other *Version) int { vPR := strings.Split(v.preRelease, ".") oPR := strings.Split(other.preRelease, ".") - for i := range vPR { - if i >= len(oPR) { - return 1 - } + for i := 0; i < len(vPR) && i < len(oPR); i++ { vNum, err := strconv.ParseUint(vPR[i], 10, 0) if err == nil { oNum, err := strconv.ParseUint(oPR[i], 10, 0) @@ -234,9 +238,26 @@ func (v *Version) compareInternal(other *Version) int { } } + switch { + case len(oPR) < len(vPR): + return 1 + case len(oPR) > len(vPR): + return -1 + } + return 0 } +// returns false if array contain any non-zero element +func onlyZeros(array []uint) bool { + for _, num := range array { + if num != 0 { + return false + } + } + return true +} + // AtLeast tests if a version is at least equal to a given minimum version. If both // Versions are Semantic Versions, this will use the Semantic Version comparison // algorithm. Otherwise, it will compare only the numeric components, with non-present diff --git a/vendor/k8s.io/kubernetes/pkg/volume/plugins.go b/vendor/k8s.io/kubernetes/pkg/volume/plugins.go index eb2f8149..1ec55d23 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/plugins.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/plugins.go @@ -69,8 +69,6 @@ type VolumeOptions struct { CloudTags *map[string]string // Volume provisioning parameters from StorageClass Parameters map[string]string - // This flag helps identify whether kubelet is running in a container - Containerized bool } type DynamicPluginProber interface { @@ -713,7 +711,7 @@ func NewPersistentVolumeRecyclerPodTemplate() *v1.Pod { Containers: []v1.Container{ { Name: "pv-recycler", - Image: "gcr.io/google_containers/busybox", + Image: "busybox:1.27", Command: []string{"/bin/sh"}, Args: []string{"-c", "test -e /scrub && rm -rf /scrub/..?* /scrub/.[!.]* /scrub/* && test -z \"$(ls -A /scrub)\" || exit 1"}, VolumeMounts: []v1.VolumeMount{ diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util.go b/vendor/k8s.io/kubernetes/pkg/volume/util.go index b976ce94..e2890516 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util.go @@ -36,7 +36,6 @@ import ( "k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" - volutil "k8s.io/kubernetes/pkg/volume/util" ) type RecycleEventRecorder func(eventtype, message string) @@ -48,8 +47,8 @@ type RecycleEventRecorder func(eventtype, message string) // attempted before returning. // // In case there is a pod with the same namespace+name already running, this -// function assumes it's an older instance of the recycler pod and watches -// this old pod instead of starting a new one. +// function deletes it as it is not able to judge if it is an old recycler +// or user has forged a fake recycler to block Kubernetes from recycling.// // // pod - the pod designed by a volume plugin to recycle the volume. pod.Name // will be overwritten with unique name based on PV.Name. @@ -81,20 +80,44 @@ func internalRecycleVolumeByWatchingPodUntilCompletion(pvName string, pod *v1.Po _, err = recyclerClient.CreatePod(pod) if err != nil { if errors.IsAlreadyExists(err) { - glog.V(5).Infof("old recycler pod %q found for volume", pod.Name) + deleteErr := recyclerClient.DeletePod(pod.Name, pod.Namespace) + if deleteErr != nil { + return fmt.Errorf("failed to delete old recycler pod %s/%s: %s", pod.Namespace, pod.Name, deleteErr) + } + // Recycler will try again and the old pod will be hopefuly deleted + // at that time. + return fmt.Errorf("old recycler pod found, will retry later") } else { return fmt.Errorf("unexpected error creating recycler pod: %+v\n", err) } } - defer func(pod *v1.Pod) { - glog.V(2).Infof("deleting recycler pod %s/%s", pod.Namespace, pod.Name) - if err := recyclerClient.DeletePod(pod.Name, pod.Namespace); err != nil { - glog.Errorf("failed to delete recycler pod %s/%s: %v", pod.Namespace, pod.Name, err) - } - }(pod) + err = waitForPod(pod, recyclerClient, podCh) - // Now only the old pod or the new pod run. Watch it until it finishes - // and send all events on the pod to the PV + // In all cases delete the recycler pod and log its result. + glog.V(2).Infof("deleting recycler pod %s/%s", pod.Namespace, pod.Name) + deleteErr := recyclerClient.DeletePod(pod.Name, pod.Namespace) + if deleteErr != nil { + glog.Errorf("failed to delete recycler pod %s/%s: %v", pod.Namespace, pod.Name, err) + } + + // Returning recycler error is preferred, the pod will be deleted again on + // the next retry. + if err != nil { + return fmt.Errorf("failed to recycle volume: %s", err) + } + + // Recycle succeeded but we failed to delete the recycler pod. Report it, + // the controller will re-try recycling the PV again shortly. + if deleteErr != nil { + return fmt.Errorf("failed to delete recycler pod: %s", deleteErr) + } + + return nil +} + +// waitForPod watches the pod it until it finishes and send all events on the +// pod to the PV. +func waitForPod(pod *v1.Pod, recyclerClient recyclerClient, podCh <-chan watch.Event) error { for { event, ok := <-podCh if !ok { @@ -164,15 +187,15 @@ type realRecyclerClient struct { } func (c *realRecyclerClient) CreatePod(pod *v1.Pod) (*v1.Pod, error) { - return c.client.Core().Pods(pod.Namespace).Create(pod) + return c.client.CoreV1().Pods(pod.Namespace).Create(pod) } func (c *realRecyclerClient) GetPod(name, namespace string) (*v1.Pod, error) { - return c.client.Core().Pods(namespace).Get(name, metav1.GetOptions{}) + return c.client.CoreV1().Pods(namespace).Get(name, metav1.GetOptions{}) } func (c *realRecyclerClient) DeletePod(name, namespace string) error { - return c.client.Core().Pods(namespace).Delete(name, nil) + return c.client.CoreV1().Pods(namespace).Delete(name, nil) } func (c *realRecyclerClient) Event(eventtype, message string) { @@ -189,13 +212,13 @@ func (c *realRecyclerClient) WatchPod(name, namespace string, stopChannel chan s Watch: true, } - podWatch, err := c.client.Core().Pods(namespace).Watch(options) + podWatch, err := c.client.CoreV1().Pods(namespace).Watch(options) if err != nil { return nil, err } eventSelector, _ := fields.ParseSelector("involvedObject.name=" + name) - eventWatch, err := c.client.Core().Events(namespace).Watch(metav1.ListOptions{ + eventWatch, err := c.client.CoreV1().Events(namespace).Watch(metav1.ListOptions{ FieldSelector: eventSelector.String(), Watch: true, }) @@ -400,13 +423,6 @@ func getPVCNameHashAndIndexOffset(pvcName string) (hash uint32, index uint32) { func UnmountViaEmptyDir(dir string, host VolumeHost, volName string, volSpec Spec, podUID types.UID) error { glog.V(3).Infof("Tearing down volume %v for pod %v at %v", volName, podUID, dir) - if pathExists, pathErr := volutil.PathExists(dir); pathErr != nil { - return fmt.Errorf("Error checking if path exists: %v", pathErr) - } else if !pathExists { - glog.Warningf("Warning: Unmount skipped because path does not exist: %v", dir) - return nil - } - // Wrap EmptyDir, let it do the teardown. wrapped, err := host.NewWrapperUnmounter(volName, volSpec, podUID) if err != nil { diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/metrics.go b/vendor/k8s.io/kubernetes/pkg/volume/util/metrics.go index 087bbfff..ab2d7628 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/metrics.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/metrics.go @@ -24,8 +24,9 @@ import ( var storageOperationMetric = prometheus.NewHistogramVec( prometheus.HistogramOpts{ - Name: "storage_operation_duration_seconds", - Help: "Storage operation duration", + Name: "storage_operation_duration_seconds", + Help: "Storage operation duration", + Buckets: []float64{.1, .25, .5, 1, 2.5, 5, 10, 15, 25, 50}, }, []string{"volume_plugin", "operation_name"}, ) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/util/util.go b/vendor/k8s.io/kubernetes/pkg/volume/util/util.go index 976ad968..ad4ac6a0 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/util/util.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/util/util.go @@ -32,7 +32,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/sets" clientset "k8s.io/client-go/kubernetes" - "k8s.io/kubernetes/pkg/api" + "k8s.io/kubernetes/pkg/api/legacyscheme" v1helper "k8s.io/kubernetes/pkg/api/v1/helper" kubeletapis "k8s.io/kubernetes/pkg/kubelet/apis" "k8s.io/kubernetes/pkg/util/mount" @@ -147,7 +147,7 @@ func GetSecretForPod(pod *v1.Pod, secretName string, kubeClient clientset.Interf if kubeClient == nil { return secret, fmt.Errorf("Cannot get kube client") } - secrets, err := kubeClient.Core().Secrets(pod.Namespace).Get(secretName, metav1.GetOptions{}) + secrets, err := kubeClient.CoreV1().Secrets(pod.Namespace).Get(secretName, metav1.GetOptions{}) if err != nil { return secret, err } @@ -163,7 +163,7 @@ func GetSecretForPV(secretNamespace, secretName, volumePluginName string, kubeCl if kubeClient == nil { return secret, fmt.Errorf("Cannot get kube client") } - secrets, err := kubeClient.Core().Secrets(secretNamespace).Get(secretName, metav1.GetOptions{}) + secrets, err := kubeClient.CoreV1().Secrets(secretNamespace).Get(secretName, metav1.GetOptions{}) if err != nil { return secret, err } @@ -233,7 +233,7 @@ func LoadPodFromFile(filePath string) (*v1.Pod, error) { } pod := &v1.Pod{} - codec := api.Codecs.LegacyCodec(api.Registry.GroupOrDie(v1.GroupName).GroupVersion) + codec := legacyscheme.Codecs.LegacyCodec(legacyscheme.Registry.GroupOrDie(v1.GroupName).GroupVersion) if err := runtime.DecodeInto(codec, podDef, pod); err != nil { return nil, fmt.Errorf("failed decoding file: %v", err) }