From c4205721eeeed817f9be32964a75232adb4e691c Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Fri, 19 Jun 2020 16:16:14 -0400 Subject: [PATCH] Update vendor/ directory Signed-off-by: Davanum Srinivas --- vendor/github.com/fsnotify/fsnotify/README.md | 47 + vendor/github.com/go-logr/logr/LICENSE | 201 + vendor/github.com/go-logr/logr/README.md | 181 + vendor/github.com/go-logr/logr/go.mod | 3 + vendor/github.com/go-logr/logr/logr.go | 178 + .../json-iterator/go/reflect_extension.go | 2 +- .../json-iterator/go/reflect_map.go | 10 +- .../go/reflect_struct_encoder.go | 1 + .../prometheus/client_golang/go.mod | 16 +- .../client_golang/prometheus/counter.go | 50 +- .../client_golang/prometheus/doc.go | 37 +- .../client_golang/prometheus/gauge.go | 2 +- .../client_golang/prometheus/go_collector.go | 2 +- .../client_golang/prometheus/histogram.go | 110 +- .../client_golang/prometheus/observer.go | 12 + .../prometheus/process_collector_windows.go | 24 +- .../prometheus/promhttp/delegator.go | 10 +- .../client_golang/prometheus/promhttp/http.go | 82 +- .../client_golang/prometheus/value.go | 50 +- .../client_golang/prometheus/vec.go | 12 + .../prometheus/client_model/go/metrics.pb.go | 266 +- .../prometheus/common/expfmt/encode.go | 128 +- .../prometheus/common/expfmt/expfmt.go | 11 +- .../common/expfmt/openmetrics_create.go | 527 ++ .../prometheus/common/expfmt/text_create.go | 3 +- vendor/github.com/prometheus/common/go.mod | 4 +- vendor/github.com/prometheus/procfs/crypto.go | 158 +- vendor/github.com/prometheus/procfs/go.mod | 1 + .../github.com/prometheus/procfs/loadavg.go | 62 + .../github.com/prometheus/procfs/mountinfo.go | 12 +- .../prometheus/procfs/net_conntrackstat.go | 153 + .../prometheus/procfs/net_softnet.go | 115 +- .../github.com/prometheus/procfs/net_udp.go | 229 + .../github.com/prometheus/procfs/net_unix.go | 224 +- .../prometheus/procfs/proc_fdinfo.go | 32 +- .../github.com/prometheus/procfs/proc_maps.go | 208 + .../prometheus/procfs/proc_status.go | 37 +- vendor/github.com/prometheus/procfs/swaps.go | 89 + vendor/golang.org/x/oauth2/transport.go | 79 +- vendor/golang.org/x/time/rate/rate.go | 30 +- .../api/core/v1/annotation_key_constants.go | 16 + vendor/k8s.io/api/core/v1/generated.pb.go | 1757 +++-- vendor/k8s.io/api/core/v1/generated.proto | 72 +- vendor/k8s.io/api/core/v1/types.go | 81 +- .../core/v1/types_swagger_doc_generated.go | 33 +- vendor/k8s.io/api/go.mod | 4 +- vendor/k8s.io/apimachinery/go.mod | 21 +- .../apimachinery/pkg/api/errors/errors.go | 82 +- .../pkg/apis/meta/internalversion/doc.go | 20 - .../pkg/apis/meta/internalversion/register.go | 86 - .../pkg/apis/meta/internalversion/types.go | 76 - .../zz_generated.conversion.go | 143 - .../internalversion/zz_generated.deepcopy.go | 96 - .../pkg/apis/meta/v1/generated.pb.go | 344 +- .../pkg/apis/meta/v1/generated.proto | 3 +- .../apimachinery/pkg/apis/meta/v1/types.go | 7 +- .../meta/v1/types_swagger_doc_generated.go | 2 +- .../pkg/apis/meta/v1/unstructured/helpers.go | 2 +- .../pkg/apis/meta/v1beta1/conversion.go | 27 - .../pkg/apis/meta/v1beta1/deepcopy.go | 17 - .../apimachinery/pkg/apis/meta/v1beta1/doc.go | 23 - .../pkg/apis/meta/v1beta1/generated.pb.go | 415 -- .../pkg/apis/meta/v1beta1/generated.proto | 41 - .../pkg/apis/meta/v1beta1/register.go | 45 - .../pkg/apis/meta/v1beta1/types.go | 84 - .../v1beta1/types_swagger_doc_generated.go | 40 - .../meta/v1beta1/zz_generated.deepcopy.go | 59 - .../meta/v1beta1/zz_generated.defaults.go | 32 - .../apimachinery/pkg/conversion/converter.go | 10 +- .../k8s.io/apimachinery/pkg/labels/labels.go | 14 +- .../apimachinery/pkg/labels/selector.go | 25 +- .../k8s.io/apimachinery/pkg/runtime/codec.go | 2 +- .../apimachinery/pkg/runtime/codec_check.go | 10 +- .../apimachinery/pkg/runtime/converter.go | 2 +- .../pkg/runtime/schema/group_version.go | 9 - .../k8s.io/apimachinery/pkg/runtime/scheme.go | 13 + .../pkg/runtime/serializer/json/json.go | 2 +- .../serializer/versioning/versioning.go | 2 +- .../pkg/util/httpstream/httpstream.go | 14 +- .../pkg/util/httpstream/spdy/connection.go | 2 +- .../pkg/util/httpstream/spdy/roundtripper.go | 21 +- .../apimachinery/pkg/util/intstr/intstr.go | 2 +- .../k8s.io/apimachinery/pkg/util/json/json.go | 25 + .../k8s.io/apimachinery/pkg/util/net/http.go | 2 +- .../apimachinery/pkg/util/net/interface.go | 2 +- .../apimachinery/pkg/util/runtime/runtime.go | 2 +- .../k8s.io/apimachinery/pkg/util/wait/wait.go | 27 +- .../apimachinery/pkg/util/yaml/decoder.go | 6 +- .../apimachinery/pkg/watch/streamwatcher.go | 2 +- vendor/k8s.io/apimachinery/pkg/watch/watch.go | 8 +- .../forked/golang/reflect/deep_equal.go | 4 +- vendor/k8s.io/apiserver/go.mod | 45 +- .../apiserver/pkg/server/httplog/httplog.go | 6 +- .../apiserver/pkg/util/wsstream/conn.go | 2 +- .../apiserver/pkg/util/wsstream/stream.go | 4 +- vendor/k8s.io/client-go/go.mod | 34 +- .../plugin/pkg/client/auth/exec/exec.go | 2 +- vendor/k8s.io/client-go/rest/config.go | 12 +- vendor/k8s.io/client-go/rest/plugin.go | 2 +- vendor/k8s.io/client-go/rest/request.go | 29 +- vendor/k8s.io/client-go/rest/transport.go | 3 +- vendor/k8s.io/client-go/rest/urlbackoff.go | 2 +- .../client-go/tools/clientcmd/api/helpers.go | 3 + .../client-go/tools/clientcmd/api/types.go | 11 + .../tools/remotecommand/remotecommand.go | 2 +- .../client-go/tools/remotecommand/v1.go | 2 +- vendor/k8s.io/client-go/transport/cache.go | 13 +- .../client-go/transport/cert_rotation.go | 2 +- vendor/k8s.io/client-go/transport/config.go | 8 + .../client-go/transport/round_trippers.go | 10 +- .../k8s.io/client-go/transport/spdy/spdy.go | 6 +- .../client-go/transport/token_source.go | 2 +- .../k8s.io/client-go/transport/transport.go | 2 +- vendor/k8s.io/client-go/util/cert/cert.go | 6 +- .../util/workqueue/default_rate_limiters.go | 48 - .../util/workqueue/delaying_queue.go | 13 +- .../client-go/util/workqueue/parallelizer.go | 68 +- vendor/k8s.io/component-base/LICENSE | 202 + vendor/k8s.io/component-base/README.md | 34 + vendor/k8s.io/component-base/go.mod | 32 + .../logs}/logreduction/logreduction.go | 0 vendor/k8s.io/cri-api/go.mod | 11 +- .../pkg/apis/runtime/v1alpha2/api.pb.go | 870 ++- .../pkg/apis/runtime/v1alpha2/api.proto | 17 +- vendor/k8s.io/klog/go.mod | 5 - vendor/k8s.io/klog/{ => v2}/LICENSE | 0 vendor/k8s.io/klog/{ => v2}/README.md | 8 +- vendor/k8s.io/klog/v2/go.mod | 5 + vendor/k8s.io/klog/{ => v2}/klog.go | 347 +- vendor/k8s.io/klog/{ => v2}/klog_file.go | 51 +- vendor/k8s.io/kubernetes/build/README.md | 7 +- vendor/k8s.io/kubernetes/go.mod | 364 +- .../pkg/apis/core/annotation_key_constants.go | 110 - vendor/k8s.io/kubernetes/pkg/apis/core/doc.go | 24 - .../pkg/apis/core/field_constants.go | 38 - .../k8s.io/kubernetes/pkg/apis/core/json.go | 31 - .../pkg/apis/core/objectreference.go | 37 - .../kubernetes/pkg/apis/core/register.go | 103 - .../kubernetes/pkg/apis/core/resource.go | 65 - .../k8s.io/kubernetes/pkg/apis/core/taint.go | 42 - .../kubernetes/pkg/apis/core/toleration.go | 30 - .../k8s.io/kubernetes/pkg/apis/core/types.go | 5235 --------------- .../pkg/apis/core/zz_generated.deepcopy.go | 5790 ----------------- .../pkg/kubelet/{ => cri}/remote/doc.go | 0 .../kubelet/{ => cri}/remote/remote_image.go | 4 +- .../{ => cri}/remote/remote_runtime.go | 71 +- .../pkg/kubelet/cri/remote/util/util_unix.go | 145 + .../cri/remote/util/util_unsupported.go | 55 + .../kubelet/cri/remote/util/util_windows.go | 149 + .../pkg/kubelet/{ => cri}/remote/utils.go | 0 .../{server => cri}/streaming/errors.go | 0 .../streaming}/portforward/constants.go | 0 .../streaming}/portforward/httpstream.go | 4 +- .../streaming}/portforward/portforward.go | 0 .../streaming}/portforward/websocket.go | 4 +- .../streaming}/remotecommand/attach.go | 0 .../streaming}/remotecommand/doc.go | 2 +- .../streaming}/remotecommand/exec.go | 0 .../streaming}/remotecommand/httpstream.go | 5 +- .../streaming}/remotecommand/websocket.go | 0 .../streaming/request_cache.go | 0 .../{server => cri}/streaming/server.go | 4 +- .../kubernetes/pkg/kubelet/util/util_unix.go | 2 +- .../kubernetes/pkg/util/bandwidth/linux.go | 2 +- vendor/k8s.io/utils/README.md | 56 +- vendor/k8s.io/utils/exec/README.md | 5 + vendor/k8s.io/utils/go.mod | 2 +- 167 files changed, 6144 insertions(+), 15393 deletions(-) create mode 100644 vendor/github.com/go-logr/logr/LICENSE create mode 100644 vendor/github.com/go-logr/logr/README.md create mode 100644 vendor/github.com/go-logr/logr/go.mod create mode 100644 vendor/github.com/go-logr/logr/logr.go create mode 100644 vendor/github.com/prometheus/common/expfmt/openmetrics_create.go create mode 100644 vendor/github.com/prometheus/procfs/loadavg.go create mode 100644 vendor/github.com/prometheus/procfs/net_conntrackstat.go create mode 100644 vendor/github.com/prometheus/procfs/net_udp.go create mode 100644 vendor/github.com/prometheus/procfs/proc_maps.go create mode 100644 vendor/github.com/prometheus/procfs/swaps.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go delete mode 100644 vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go create mode 100644 vendor/k8s.io/component-base/LICENSE create mode 100644 vendor/k8s.io/component-base/README.md create mode 100644 vendor/k8s.io/component-base/go.mod rename vendor/k8s.io/{kubernetes/pkg/kubelet/util => component-base/logs}/logreduction/logreduction.go (100%) delete mode 100644 vendor/k8s.io/klog/go.mod rename vendor/k8s.io/klog/{ => v2}/LICENSE (100%) rename vendor/k8s.io/klog/{ => v2}/README.md (90%) create mode 100644 vendor/k8s.io/klog/v2/go.mod rename vendor/k8s.io/klog/{ => v2}/klog.go (79%) rename vendor/k8s.io/klog/{ => v2}/klog_file.go (77%) delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/annotation_key_constants.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/doc.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/field_constants.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/json.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/objectreference.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/register.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/resource.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/taint.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/toleration.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/types.go delete mode 100644 vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go rename vendor/k8s.io/kubernetes/pkg/kubelet/{ => cri}/remote/doc.go (100%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{ => cri}/remote/remote_image.go (98%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{ => cri}/remote/remote_runtime.go (76%) create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_unix.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_unsupported.go create mode 100644 vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_windows.go rename vendor/k8s.io/kubernetes/pkg/kubelet/{ => cri}/remote/utils.go (100%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri}/streaming/errors.go (100%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri/streaming}/portforward/constants.go (100%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri/streaming}/portforward/httpstream.go (99%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri/streaming}/portforward/portforward.go (100%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri/streaming}/portforward/websocket.go (99%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri/streaming}/remotecommand/attach.go (100%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri/streaming}/remotecommand/doc.go (88%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri/streaming}/remotecommand/exec.go (100%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri/streaming}/remotecommand/httpstream.go (99%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri/streaming}/remotecommand/websocket.go (100%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri}/streaming/request_cache.go (100%) rename vendor/k8s.io/kubernetes/pkg/kubelet/{server => cri}/streaming/server.go (98%) create mode 100644 vendor/k8s.io/utils/exec/README.md diff --git a/vendor/github.com/fsnotify/fsnotify/README.md b/vendor/github.com/fsnotify/fsnotify/README.md index 06de57947..b2629e522 100644 --- a/vendor/github.com/fsnotify/fsnotify/README.md +++ b/vendor/github.com/fsnotify/fsnotify/README.md @@ -33,6 +33,53 @@ All [releases](https://github.com/fsnotify/fsnotify/releases) are tagged based o Go 1.6 supports dependencies located in the `vendor/` folder. Unless you are creating a library, it is recommended that you copy fsnotify into `vendor/github.com/fsnotify/fsnotify` within your project, and likewise for `golang.org/x/sys`. +## Usage + +```go +package main + +import ( + "log" + + "github.com/fsnotify/fsnotify" +) + +func main() { + watcher, err := fsnotify.NewWatcher() + if err != nil { + log.Fatal(err) + } + defer watcher.Close() + + done := make(chan bool) + go func() { + for { + select { + case event, ok := <-watcher.Events: + if !ok { + return + } + log.Println("event:", event) + if event.Op&fsnotify.Write == fsnotify.Write { + log.Println("modified file:", event.Name) + } + case err, ok := <-watcher.Errors: + if !ok { + return + } + log.Println("error:", err) + } + } + }() + + err = watcher.Add("/tmp/foo") + if err != nil { + log.Fatal(err) + } + <-done +} +``` + ## Contributing Please refer to [CONTRIBUTING][] before opening an issue or pull request. diff --git a/vendor/github.com/go-logr/logr/LICENSE b/vendor/github.com/go-logr/logr/LICENSE new file mode 100644 index 000000000..8dada3eda --- /dev/null +++ b/vendor/github.com/go-logr/logr/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/go-logr/logr/README.md b/vendor/github.com/go-logr/logr/README.md new file mode 100644 index 000000000..aca17f382 --- /dev/null +++ b/vendor/github.com/go-logr/logr/README.md @@ -0,0 +1,181 @@ +# A more minimal logging API for Go + +Before you consider this package, please read [this blog post by the +inimitable Dave Cheney][warning-makes-no-sense]. I really appreciate what +he has to say, and it largely aligns with my own experiences. Too many +choices of levels means inconsistent logs. + +This package offers a purely abstract interface, based on these ideas but with +a few twists. Code can depend on just this interface and have the actual +logging implementation be injected from callers. Ideally only `main()` knows +what logging implementation is being used. + +# Differences from Dave's ideas + +The main differences are: + +1) Dave basically proposes doing away with the notion of a logging API in favor +of `fmt.Printf()`. I disagree, especially when you consider things like output +locations, timestamps, file and line decorations, and structured logging. I +restrict the API to just 2 types of logs: info and error. + +Info logs are things you want to tell the user which are not errors. Error +logs are, well, errors. If your code receives an `error` from a subordinate +function call and is logging that `error` *and not returning it*, use error +logs. + +2) Verbosity-levels on info logs. This gives developers a chance to indicate +arbitrary grades of importance for info logs, without assigning names with +semantic meaning such as "warning", "trace", and "debug". Superficially this +may feel very similar, but the primary difference is the lack of semantics. +Because verbosity is a numerical value, it's safe to assume that an app running +with higher verbosity means more (and less important) logs will be generated. + +This is a BETA grade API. + +There are implementations for the following logging libraries: + +- **github.com/google/glog**: [glogr](https://github.com/go-logr/glogr) +- **k8s.io/klog**: [klogr](https://git.k8s.io/klog/klogr) +- **go.uber.org/zap**: [zapr](https://github.com/go-logr/zapr) +- **log** (the Go standard library logger): + [stdr](https://github.com/go-logr/stdr) +- **github.com/sirupsen/logrus**: [logrusr](https://github.com/bombsimon/logrusr) + +# FAQ + +## Conceptual + +## Why structured logging? + +- **Structured logs are more easily queriable**: Since you've got + key-value pairs, it's much easier to query your structured logs for + particular values by filtering on the contents of a particular key -- + think searching request logs for error codes, Kubernetes reconcilers for + the name and namespace of the reconciled object, etc + +- **Structured logging makes it easier to have cross-referencable logs**: + Similarly to searchability, if you maintain conventions around your + keys, it becomes easy to gather all log lines related to a particular + concept. + +- **Structured logs allow better dimensions of filtering**: if you have + structure to your logs, you've got more precise control over how much + information is logged -- you might choose in a particular configuration + to log certain keys but not others, only log lines where a certain key + matches a certain value, etc, instead of just having v-levels and names + to key off of. + +- **Structured logs better represent structured data**: sometimes, the + data that you want to log is inherently structured (think tuple-link + objects). Structured logs allow you to preserve that structure when + outputting. + +## Why V-levels? + +**V-levels give operators an easy way to control the chattiness of log +operations**. V-levels provide a way for a given package to distinguish +the relative importance or verbosity of a given log message. Then, if +a particular logger or package is logging too many messages, the user +of the package can simply change the v-levels for that library. + +## Why not more named levels, like Warning? + +Read [Dave Cheney's post][warning-makes-no-sense]. Then read [Differences +from Dave's ideas](#differences-from-daves-ideas). + +## Why not allow format strings, too? + +**Format strings negate many of the benefits of structured logs**: + +- They're not easily searchable without resorting to fuzzy searching, + regular expressions, etc + +- They don't store structured data well, since contents are flattened into + a string + +- They're not cross-referencable + +- They don't compress easily, since the message is not constant + +(unless you turn positional parameters into key-value pairs with numerical +keys, at which point you've gotten key-value logging with meaningless +keys) + +## Practical + +## Why key-value pairs, and not a map? + +Key-value pairs are *much* easier to optimize, especially around +allocations. Zap (a structured logger that inspired logr's interface) has +[performance measurements](https://github.com/uber-go/zap#performance) +that show this quite nicely. + +While the interface ends up being a little less obvious, you get +potentially better performance, plus avoid making users type +`map[string]string{}` every time they want to log. + +## What if my V-levels differ between libraries? + +That's fine. Control your V-levels on a per-logger basis, and use the +`WithName` function to pass different loggers to different libraries. + +Generally, you should take care to ensure that you have relatively +consistent V-levels within a given logger, however, as this makes deciding +on what verbosity of logs to request easier. + +## But I *really* want to use a format string! + +That's not actually a question. Assuming your question is "how do +I convert my mental model of logging with format strings to logging with +constant messages": + +1. figure out what the error actually is, as you'd write in a TL;DR style, + and use that as a message + +2. For every place you'd write a format specifier, look to the word before + it, and add that as a key value pair + +For instance, consider the following examples (all taken from spots in the +Kubernetes codebase): + +- `klog.V(4).Infof("Client is returning errors: code %v, error %v", + responseCode, err)` becomes `logger.Error(err, "client returned an + error", "code", responseCode)` + +- `klog.V(4).Infof("Got a Retry-After %ds response for attempt %d to %v", + seconds, retries, url)` becomes `logger.V(4).Info("got a retry-after + response when requesting url", "attempt", retries, "after + seconds", seconds, "url", url)` + +If you *really* must use a format string, place it as a key value, and +call `fmt.Sprintf` yourself -- for instance, `log.Printf("unable to +reflect over type %T")` becomes `logger.Info("unable to reflect over +type", "type", fmt.Sprintf("%T"))`. In general though, the cases where +this is necessary should be few and far between. + +## How do I choose my V-levels? + +This is basically the only hard constraint: increase V-levels to denote +more verbose or more debug-y logs. + +Otherwise, you can start out with `0` as "you always want to see this", +`1` as "common logging that you might *possibly* want to turn off", and +`10` as "I would like to performance-test your log collection stack". + +Then gradually choose levels in between as you need them, working your way +down from 10 (for debug and trace style logs) and up from 1 (for chattier +info-type logs). + +## How do I choose my keys + +- make your keys human-readable +- constant keys are generally a good idea +- be consistent across your codebase +- keys should naturally match parts of the message string + +While key names are mostly unrestricted (and spaces are acceptable), +it's generally a good idea to stick to printable ascii characters, or at +least match the general character set of your log lines. + +[warning-makes-no-sense]: http://dave.cheney.net/2015/11/05/lets-talk-about-logging diff --git a/vendor/github.com/go-logr/logr/go.mod b/vendor/github.com/go-logr/logr/go.mod new file mode 100644 index 000000000..591884e91 --- /dev/null +++ b/vendor/github.com/go-logr/logr/go.mod @@ -0,0 +1,3 @@ +module github.com/go-logr/logr + +go 1.14 diff --git a/vendor/github.com/go-logr/logr/logr.go b/vendor/github.com/go-logr/logr/logr.go new file mode 100644 index 000000000..520c4fe55 --- /dev/null +++ b/vendor/github.com/go-logr/logr/logr.go @@ -0,0 +1,178 @@ +/* +Copyright 2019 The logr 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 logr defines abstract interfaces for logging. Packages can depend on +// these interfaces and callers can implement logging in whatever way is +// appropriate. +// +// This design derives from Dave Cheney's blog: +// http://dave.cheney.net/2015/11/05/lets-talk-about-logging +// +// This is a BETA grade API. Until there is a significant 2nd implementation, +// I don't really know how it will change. +// +// The logging specifically makes it non-trivial to use format strings, to encourage +// attaching structured information instead of unstructured format strings. +// +// Usage +// +// Logging is done using a Logger. Loggers can have name prefixes and named +// values attached, so that all log messages logged with that Logger have some +// base context associated. +// +// The term "key" is used to refer to the name associated with a particular +// value, to disambiguate it from the general Logger name. +// +// For instance, suppose we're trying to reconcile the state of an object, and +// we want to log that we've made some decision. +// +// With the traditional log package, we might write: +// log.Printf( +// "decided to set field foo to value %q for object %s/%s", +// targetValue, object.Namespace, object.Name) +// +// With logr's structured logging, we'd write: +// // elsewhere in the file, set up the logger to log with the prefix of "reconcilers", +// // and the named value target-type=Foo, for extra context. +// log := mainLogger.WithName("reconcilers").WithValues("target-type", "Foo") +// +// // later on... +// log.Info("setting field foo on object", "value", targetValue, "object", object) +// +// Depending on our logging implementation, we could then make logging decisions +// based on field values (like only logging such events for objects in a certain +// namespace), or copy the structured information into a structured log store. +// +// For logging errors, Logger has a method called Error. Suppose we wanted to +// log an error while reconciling. With the traditional log package, we might +// write: +// log.Errorf("unable to reconcile object %s/%s: %v", object.Namespace, object.Name, err) +// +// With logr, we'd instead write: +// // assuming the above setup for log +// log.Error(err, "unable to reconcile object", "object", object) +// +// This functions similarly to: +// log.Info("unable to reconcile object", "error", err, "object", object) +// +// However, it ensures that a standard key for the error value ("error") is used +// across all error logging. Furthermore, certain implementations may choose to +// attach additional information (such as stack traces) on calls to Error, so +// it's preferred to use Error to log errors. +// +// Parts of a log line +// +// Each log message from a Logger has four types of context: +// logger name, log verbosity, log message, and the named values. +// +// The Logger name constists of a series of name "segments" added by successive +// calls to WithName. These name segments will be joined in some way by the +// underlying implementation. It is strongly reccomended that name segements +// contain simple identifiers (letters, digits, and hyphen), and do not contain +// characters that could muddle the log output or confuse the joining operation +// (e.g. whitespace, commas, periods, slashes, brackets, quotes, etc). +// +// Log verbosity represents how little a log matters. Level zero, the default, +// matters most. Increasing levels matter less and less. Try to avoid lots of +// different verbosity levels, and instead provide useful keys, logger names, +// and log messages for users to filter on. It's illegal to pass a log level +// below zero. +// +// The log message consists of a constant message attached to the the log line. +// This should generally be a simple description of what's occuring, and should +// never be a format string. +// +// Variable information can then be attached using named values (key/value +// pairs). Keys are arbitrary strings, while values may be any Go value. +// +// Key Naming Conventions +// +// Keys are not strictly required to conform to any specification or regex, but +// it is recommended that they: +// * be human-readable and meaningful (not auto-generated or simple ordinals) +// * be constant (not dependent on input data) +// * contain only printable characters +// * not contain whitespace or punctuation +// +// These guidelines help ensure that log data is processed properly regardless +// of the log implementation. For example, log implementations will try to +// output JSON data or will store data for later database (e.g. SQL) queries. +// +// While users are generally free to use key names of their choice, it's +// generally best to avoid using the following keys, as they're frequently used +// by implementations: +// +// - `"caller"`: the calling information (file/line) of a particular log line. +// - `"error"`: the underlying error value in the `Error` method. +// - `"level"`: the log level. +// - `"logger"`: the name of the associated logger. +// - `"msg"`: the log message. +// - `"stacktrace"`: the stack trace associated with a particular log line or +// error (often from the `Error` message). +// - `"ts"`: the timestamp for a log line. +// +// Implementations are encouraged to make use of these keys to represent the +// above concepts, when neccessary (for example, in a pure-JSON output form, it +// would be necessary to represent at least message and timestamp as ordinary +// named values). +package logr + +// TODO: consider adding back in format strings if they're really needed +// TODO: consider other bits of zap/zapcore functionality like ObjectMarshaller (for arbitrary objects) +// TODO: consider other bits of glog functionality like Flush, InfoDepth, OutputStats + +// Logger represents the ability to log messages, both errors and not. +type Logger interface { + // Enabled tests whether this Logger is enabled. For example, commandline + // flags might be used to set the logging verbosity and disable some info + // logs. + Enabled() bool + + // Info logs a non-error message with the given key/value pairs as context. + // + // The msg argument should be used to add some constant description to + // the log line. The key/value pairs can then be used to add additional + // variable information. The key/value pairs should alternate string + // keys and arbitrary values. + Info(msg string, keysAndValues ...interface{}) + + // Error logs an error, with the given message and key/value pairs as context. + // It functions similarly to calling Info with the "error" named value, but may + // have unique behavior, and should be preferred for logging errors (see the + // package documentations for more information). + // + // The msg field should be used to add context to any underlying error, + // while the err field should be used to attach the actual error that + // triggered this log line, if present. + Error(err error, msg string, keysAndValues ...interface{}) + + // V returns an Logger value for a specific verbosity level, relative to + // this Logger. In other words, V values are additive. V higher verbosity + // level means a log message is less important. It's illegal to pass a log + // level less than zero. + V(level int) Logger + + // WithValues adds some key-value pairs of context to a logger. + // See Info for documentation on how key/value pairs work. + WithValues(keysAndValues ...interface{}) Logger + + // WithName adds a new element to the logger's name. + // Successive calls with WithName continue to append + // suffixes to the logger's name. It's strongly reccomended + // that name segments contain only letters, digits, and hyphens + // (see the package documentation for more information). + WithName(name string) Logger +} diff --git a/vendor/github.com/json-iterator/go/reflect_extension.go b/vendor/github.com/json-iterator/go/reflect_extension.go index e27e8d191..80320cd64 100644 --- a/vendor/github.com/json-iterator/go/reflect_extension.go +++ b/vendor/github.com/json-iterator/go/reflect_extension.go @@ -341,7 +341,7 @@ func describeStruct(ctx *ctx, typ reflect2.Type) *StructDescriptor { if ctx.onlyTaggedField && !hastag && !field.Anonymous() { continue } - if tag == "-" { + if tag == "-" || field.Name() == "_" { continue } tagParts := strings.Split(tag, ",") diff --git a/vendor/github.com/json-iterator/go/reflect_map.go b/vendor/github.com/json-iterator/go/reflect_map.go index 08e9a3912..9e2b623fe 100644 --- a/vendor/github.com/json-iterator/go/reflect_map.go +++ b/vendor/github.com/json-iterator/go/reflect_map.go @@ -290,16 +290,17 @@ func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { stream.WriteObjectStart() mapIter := encoder.mapType.UnsafeIterate(ptr) subStream := stream.cfg.BorrowStream(nil) + subStream.Attachment = stream.Attachment subIter := stream.cfg.BorrowIterator(nil) keyValues := encodedKeyValues{} for mapIter.HasNext() { - subStream.buf = make([]byte, 0, 64) key, elem := mapIter.UnsafeNext() + subStreamIndex := subStream.Buffered() encoder.keyEncoder.Encode(key, subStream) if subStream.Error != nil && subStream.Error != io.EOF && stream.Error == nil { stream.Error = subStream.Error } - encodedKey := subStream.Buffer() + encodedKey := subStream.Buffer()[subStreamIndex:] subIter.ResetBytes(encodedKey) decodedKey := subIter.ReadString() if stream.indention > 0 { @@ -310,7 +311,7 @@ func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { encoder.elemEncoder.Encode(elem, subStream) keyValues = append(keyValues, encodedKV{ key: decodedKey, - keyValue: subStream.Buffer(), + keyValue: subStream.Buffer()[subStreamIndex:], }) } sort.Sort(keyValues) @@ -320,6 +321,9 @@ func (encoder *sortKeysMapEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { } stream.Write(keyValue.keyValue) } + if subStream.Error != nil && stream.Error == nil { + stream.Error = subStream.Error + } stream.WriteObjectEnd() stream.cfg.ReturnStream(subStream) stream.cfg.ReturnIterator(subIter) diff --git a/vendor/github.com/json-iterator/go/reflect_struct_encoder.go b/vendor/github.com/json-iterator/go/reflect_struct_encoder.go index d0759cf64..152e3ef5a 100644 --- a/vendor/github.com/json-iterator/go/reflect_struct_encoder.go +++ b/vendor/github.com/json-iterator/go/reflect_struct_encoder.go @@ -200,6 +200,7 @@ type stringModeStringEncoder struct { func (encoder *stringModeStringEncoder) Encode(ptr unsafe.Pointer, stream *Stream) { tempStream := encoder.cfg.BorrowStream(nil) + tempStream.Attachment = stream.Attachment defer encoder.cfg.ReturnStream(tempStream) encoder.elemEncoder.Encode(ptr, tempStream) stream.WriteString(string(tempStream.Buffer())) diff --git a/vendor/github.com/prometheus/client_golang/go.mod b/vendor/github.com/prometheus/client_golang/go.mod index 1540dba22..61b13edc7 100644 --- a/vendor/github.com/prometheus/client_golang/go.mod +++ b/vendor/github.com/prometheus/client_golang/go.mod @@ -3,12 +3,16 @@ module github.com/prometheus/client_golang require ( github.com/beorn7/perks v1.0.1 github.com/cespare/xxhash/v2 v2.1.1 - github.com/golang/protobuf v1.3.2 - github.com/json-iterator/go v1.1.8 - github.com/prometheus/client_model v0.1.0 - github.com/prometheus/common v0.7.0 - github.com/prometheus/procfs v0.0.8 - golang.org/x/sys v0.0.0-20191220142924-d4481acd189f + github.com/golang/protobuf v1.4.0 + github.com/json-iterator/go v1.1.9 + github.com/kr/pretty v0.1.0 // indirect + github.com/prometheus/client_model v0.2.0 + github.com/prometheus/common v0.9.1 + github.com/prometheus/procfs v0.0.11 + github.com/stretchr/testify v1.4.0 // indirect + golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect + gopkg.in/yaml.v2 v2.2.5 // indirect ) go 1.11 diff --git a/vendor/github.com/prometheus/client_golang/prometheus/counter.go b/vendor/github.com/prometheus/client_golang/prometheus/counter.go index d463e36d3..0e1b48c03 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/counter.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/counter.go @@ -17,6 +17,7 @@ import ( "errors" "math" "sync/atomic" + "time" dto "github.com/prometheus/client_model/go" ) @@ -42,11 +43,27 @@ type Counter interface { Add(float64) } +// ExemplarAdder is implemented by Counters that offer the option of adding a +// value to the Counter together with an exemplar. Its AddWithExemplar method +// works like the Add method of the Counter interface but also replaces the +// currently saved exemplar (if any) with a new one, created from the provided +// value, the current time as timestamp, and the provided labels. Empty Labels +// will lead to a valid (label-less) exemplar. But if Labels is nil, the current +// exemplar is left in place. AddWithExemplar panics if the value is < 0, if any +// of the provided labels are invalid, or if the provided labels contain more +// than 64 runes in total. +type ExemplarAdder interface { + AddWithExemplar(value float64, exemplar Labels) +} + // CounterOpts is an alias for Opts. See there for doc comments. type CounterOpts Opts // NewCounter creates a new Counter based on the provided CounterOpts. // +// The returned implementation also implements ExemplarAdder. It is safe to +// perform the corresponding type assertion. +// // The returned implementation tracks the counter value in two separate // variables, a float64 and a uint64. The latter is used to track calls of the // Inc method and calls of the Add method with a value that can be represented @@ -61,7 +78,7 @@ func NewCounter(opts CounterOpts) Counter { nil, opts.ConstLabels, ) - result := &counter{desc: desc, labelPairs: desc.constLabelPairs} + result := &counter{desc: desc, labelPairs: desc.constLabelPairs, now: time.Now} result.init(result) // Init self-collection. return result } @@ -78,6 +95,9 @@ type counter struct { desc *Desc labelPairs []*dto.LabelPair + exemplar atomic.Value // Containing nil or a *dto.Exemplar. + + now func() time.Time // To mock out time.Now() for testing. } func (c *counter) Desc() *Desc { @@ -88,6 +108,7 @@ func (c *counter) Add(v float64) { if v < 0 { panic(errors.New("counter cannot decrease in value")) } + ival := uint64(v) if float64(ival) == v { atomic.AddUint64(&c.valInt, ival) @@ -103,6 +124,11 @@ func (c *counter) Add(v float64) { } } +func (c *counter) AddWithExemplar(v float64, e Labels) { + c.Add(v) + c.updateExemplar(v, e) +} + func (c *counter) Inc() { atomic.AddUint64(&c.valInt, 1) } @@ -112,7 +138,23 @@ func (c *counter) Write(out *dto.Metric) error { ival := atomic.LoadUint64(&c.valInt) val := fval + float64(ival) - return populateMetric(CounterValue, val, c.labelPairs, out) + var exemplar *dto.Exemplar + if e := c.exemplar.Load(); e != nil { + exemplar = e.(*dto.Exemplar) + } + + return populateMetric(CounterValue, val, c.labelPairs, exemplar, out) +} + +func (c *counter) updateExemplar(v float64, l Labels) { + if l == nil { + return + } + e, err := newExemplar(v, c.now(), l) + if err != nil { + panic(err) + } + c.exemplar.Store(e) } // CounterVec is a Collector that bundles a set of Counters that all share the @@ -138,7 +180,7 @@ func NewCounterVec(opts CounterOpts, labelNames []string) *CounterVec { if len(lvs) != len(desc.variableLabels) { panic(makeInconsistentCardinalityError(desc.fqName, desc.variableLabels, lvs)) } - result := &counter{desc: desc, labelPairs: makeLabelPairs(desc, lvs)} + result := &counter{desc: desc, labelPairs: makeLabelPairs(desc, lvs), now: time.Now} result.init(result) // Init self-collection. return result }), @@ -267,6 +309,8 @@ type CounterFunc interface { // provided function must be concurrency-safe. The function should also honor // the contract for a Counter (values only go up, not down), but compliance will // not be checked. +// +// Check out the ExampleGaugeFunc examples for the similar GaugeFunc. func NewCounterFunc(opts CounterOpts, function func() float64) CounterFunc { return newValueFunc(NewDesc( BuildFQName(opts.Namespace, opts.Subsystem, opts.Name), diff --git a/vendor/github.com/prometheus/client_golang/prometheus/doc.go b/vendor/github.com/prometheus/client_golang/prometheus/doc.go index 01977de66..98450125d 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/doc.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/doc.go @@ -84,25 +84,21 @@ // of those four metric types can be found in the Prometheus docs: // https://prometheus.io/docs/concepts/metric_types/ // -// A fifth "type" of metric is Untyped. It behaves like a Gauge, but signals the -// Prometheus server not to assume anything about its type. -// -// In addition to the fundamental metric types Gauge, Counter, Summary, -// Histogram, and Untyped, a very important part of the Prometheus data model is -// the partitioning of samples along dimensions called labels, which results in +// In addition to the fundamental metric types Gauge, Counter, Summary, and +// Histogram, a very important part of the Prometheus data model is the +// partitioning of samples along dimensions called labels, which results in // metric vectors. The fundamental types are GaugeVec, CounterVec, SummaryVec, -// HistogramVec, and UntypedVec. +// and HistogramVec. // // While only the fundamental metric types implement the Metric interface, both // the metrics and their vector versions implement the Collector interface. A // Collector manages the collection of a number of Metrics, but for convenience, -// a Metric can also “collect itself”. Note that Gauge, Counter, Summary, -// Histogram, and Untyped are interfaces themselves while GaugeVec, CounterVec, -// SummaryVec, HistogramVec, and UntypedVec are not. +// a Metric can also “collect itself”. Note that Gauge, Counter, Summary, and +// Histogram are interfaces themselves while GaugeVec, CounterVec, SummaryVec, +// and HistogramVec are not. // // To create instances of Metrics and their vector versions, you need a suitable -// …Opts struct, i.e. GaugeOpts, CounterOpts, SummaryOpts, HistogramOpts, or -// UntypedOpts. +// …Opts struct, i.e. GaugeOpts, CounterOpts, SummaryOpts, or HistogramOpts. // // Custom Collectors and constant Metrics // @@ -118,13 +114,16 @@ // existing numbers into Prometheus Metrics during collection. An own // implementation of the Collector interface is perfect for that. You can create // Metric instances “on the fly” using NewConstMetric, NewConstHistogram, and -// NewConstSummary (and their respective Must… versions). That will happen in -// the Collect method. The Describe method has to return separate Desc -// instances, representative of the “throw-away” metrics to be created later. -// NewDesc comes in handy to create those Desc instances. Alternatively, you -// could return no Desc at all, which will mark the Collector “unchecked”. No -// checks are performed at registration time, but metric consistency will still -// be ensured at scrape time, i.e. any inconsistencies will lead to scrape +// NewConstSummary (and their respective Must… versions). NewConstMetric is used +// for all metric types with just a float64 as their value: Counter, Gauge, and +// a special “type” called Untyped. Use the latter if you are not sure if the +// mirrored metric is a Counter or a Gauge. Creation of the Metric instance +// happens in the Collect method. The Describe method has to return separate +// Desc instances, representative of the “throw-away” metrics to be created +// later. NewDesc comes in handy to create those Desc instances. Alternatively, +// you could return no Desc at all, which will mark the Collector “unchecked”. +// No checks are performed at registration time, but metric consistency will +// still be ensured at scrape time, i.e. any inconsistencies will lead to scrape // errors. Thus, with unchecked Collectors, the responsibility to not collect // metrics that lead to inconsistencies in the total scrape result lies with the // implementer of the Collector. While this is not a desirable state, it is diff --git a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go index 56d8cc209..d67573f76 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/gauge.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/gauge.go @@ -123,7 +123,7 @@ func (g *gauge) Sub(val float64) { func (g *gauge) Write(out *dto.Metric) error { val := math.Float64frombits(atomic.LoadUint64(&g.valBits)) - return populateMetric(GaugeValue, val, g.labelPairs, out) + return populateMetric(GaugeValue, val, g.labelPairs, nil, out) } // GaugeVec is a Collector that bundles a set of Gauges that all share the same diff --git a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go index dc9247fed..ea05cf429 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/go_collector.go @@ -73,7 +73,7 @@ func NewGoCollector() Collector { nil, nil), gcDesc: NewDesc( "go_gc_duration_seconds", - "A summary of the GC invocation durations.", + "A summary of the pause duration of garbage collection cycles.", nil, nil), goInfoDesc: NewDesc( "go_info", diff --git a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go index ac2614d52..4271f438a 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/histogram.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/histogram.go @@ -20,6 +20,7 @@ import ( "sort" "sync" "sync/atomic" + "time" "github.com/golang/protobuf/proto" @@ -151,6 +152,10 @@ type HistogramOpts struct { // NewHistogram creates a new Histogram based on the provided HistogramOpts. It // panics if the buckets in HistogramOpts are not in strictly increasing order. +// +// The returned implementation also implements ExemplarObserver. It is safe to +// perform the corresponding type assertion. Exemplars are tracked separately +// for each bucket. func NewHistogram(opts HistogramOpts) Histogram { return newHistogram( NewDesc( @@ -188,6 +193,7 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr upperBounds: opts.Buckets, labelPairs: makeLabelPairs(desc, labelValues), counts: [2]*histogramCounts{{}, {}}, + now: time.Now, } for i, upperBound := range h.upperBounds { if i < len(h.upperBounds)-1 { @@ -205,9 +211,10 @@ func newHistogram(desc *Desc, opts HistogramOpts, labelValues ...string) Histogr } } // Finally we know the final length of h.upperBounds and can make buckets - // for both counts: + // for both counts as well as exemplars: h.counts[0].buckets = make([]uint64, len(h.upperBounds)) h.counts[1].buckets = make([]uint64, len(h.upperBounds)) + h.exemplars = make([]atomic.Value, len(h.upperBounds)+1) h.init(h) // Init self-collection. return h @@ -254,6 +261,9 @@ type histogram struct { upperBounds []float64 labelPairs []*dto.LabelPair + exemplars []atomic.Value // One more than buckets (to include +Inf), each a *dto.Exemplar. + + now func() time.Time // To mock out time.Now() for testing. } func (h *histogram) Desc() *Desc { @@ -261,36 +271,13 @@ func (h *histogram) Desc() *Desc { } func (h *histogram) Observe(v float64) { - // TODO(beorn7): For small numbers of buckets (<30), a linear search is - // slightly faster than the binary search. If we really care, we could - // switch from one search strategy to the other depending on the number - // of buckets. - // - // Microbenchmarks (BenchmarkHistogramNoLabels): - // 11 buckets: 38.3 ns/op linear - binary 48.7 ns/op - // 100 buckets: 78.1 ns/op linear - binary 54.9 ns/op - // 300 buckets: 154 ns/op linear - binary 61.6 ns/op - i := sort.SearchFloat64s(h.upperBounds, v) + h.observe(v, h.findBucket(v)) +} - // We increment h.countAndHotIdx so that the counter in the lower - // 63 bits gets incremented. At the same time, we get the new value - // back, which we can use to find the currently-hot counts. - n := atomic.AddUint64(&h.countAndHotIdx, 1) - hotCounts := h.counts[n>>63] - - if i < len(h.upperBounds) { - atomic.AddUint64(&hotCounts.buckets[i], 1) - } - for { - oldBits := atomic.LoadUint64(&hotCounts.sumBits) - newBits := math.Float64bits(math.Float64frombits(oldBits) + v) - if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { - break - } - } - // Increment count last as we take it as a signal that the observation - // is complete. - atomic.AddUint64(&hotCounts.count, 1) +func (h *histogram) ObserveWithExemplar(v float64, e Labels) { + i := h.findBucket(v) + h.observe(v, i) + h.updateExemplar(v, i, e) } func (h *histogram) Write(out *dto.Metric) error { @@ -329,6 +316,18 @@ func (h *histogram) Write(out *dto.Metric) error { CumulativeCount: proto.Uint64(cumCount), UpperBound: proto.Float64(upperBound), } + if e := h.exemplars[i].Load(); e != nil { + his.Bucket[i].Exemplar = e.(*dto.Exemplar) + } + } + // If there is an exemplar for the +Inf bucket, we have to add that bucket explicitly. + if e := h.exemplars[len(h.upperBounds)].Load(); e != nil { + b := &dto.Bucket{ + CumulativeCount: proto.Uint64(count), + UpperBound: proto.Float64(math.Inf(1)), + Exemplar: e.(*dto.Exemplar), + } + his.Bucket = append(his.Bucket, b) } out.Histogram = his @@ -352,6 +351,57 @@ func (h *histogram) Write(out *dto.Metric) error { return nil } +// findBucket returns the index of the bucket for the provided value, or +// len(h.upperBounds) for the +Inf bucket. +func (h *histogram) findBucket(v float64) int { + // TODO(beorn7): For small numbers of buckets (<30), a linear search is + // slightly faster than the binary search. If we really care, we could + // switch from one search strategy to the other depending on the number + // of buckets. + // + // Microbenchmarks (BenchmarkHistogramNoLabels): + // 11 buckets: 38.3 ns/op linear - binary 48.7 ns/op + // 100 buckets: 78.1 ns/op linear - binary 54.9 ns/op + // 300 buckets: 154 ns/op linear - binary 61.6 ns/op + return sort.SearchFloat64s(h.upperBounds, v) +} + +// observe is the implementation for Observe without the findBucket part. +func (h *histogram) observe(v float64, bucket int) { + // We increment h.countAndHotIdx so that the counter in the lower + // 63 bits gets incremented. At the same time, we get the new value + // back, which we can use to find the currently-hot counts. + n := atomic.AddUint64(&h.countAndHotIdx, 1) + hotCounts := h.counts[n>>63] + + if bucket < len(h.upperBounds) { + atomic.AddUint64(&hotCounts.buckets[bucket], 1) + } + for { + oldBits := atomic.LoadUint64(&hotCounts.sumBits) + newBits := math.Float64bits(math.Float64frombits(oldBits) + v) + if atomic.CompareAndSwapUint64(&hotCounts.sumBits, oldBits, newBits) { + break + } + } + // Increment count last as we take it as a signal that the observation + // is complete. + atomic.AddUint64(&hotCounts.count, 1) +} + +// updateExemplar replaces the exemplar for the provided bucket. With empty +// labels, it's a no-op. It panics if any of the labels is invalid. +func (h *histogram) updateExemplar(v float64, bucket int, l Labels) { + if l == nil { + return + } + e, err := newExemplar(v, h.now(), l) + if err != nil { + panic(err) + } + h.exemplars[bucket].Store(e) +} + // HistogramVec is a Collector that bundles a set of Histograms that all share the // same Desc, but have different values for their variable labels. This is used // if you want to count the same thing partitioned by various dimensions diff --git a/vendor/github.com/prometheus/client_golang/prometheus/observer.go b/vendor/github.com/prometheus/client_golang/prometheus/observer.go index 5806cd09e..44128016f 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/observer.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/observer.go @@ -50,3 +50,15 @@ type ObserverVec interface { Collector } + +// ExemplarObserver is implemented by Observers that offer the option of +// observing a value together with an exemplar. Its ObserveWithExemplar method +// works like the Observe method of an Observer but also replaces the currently +// saved exemplar (if any) with a new one, created from the provided value, the +// current time as timestamp, and the provided Labels. Empty Labels will lead to +// a valid (label-less) exemplar. But if Labels is nil, the current exemplar is +// left in place. ObserveWithExemplar panics if any of the provided labels are +// invalid or if the provided labels contain more than 64 runes in total. +type ExemplarObserver interface { + ObserveWithExemplar(value float64, exemplar Labels) +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go index e0b935d1f..f973398df 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/process_collector_windows.go @@ -33,18 +33,22 @@ var ( ) type processMemoryCounters struct { - // https://docs.microsoft.com/en-us/windows/desktop/api/psapi/ns-psapi-_process_memory_counters_ex + // System interface description + // https://docs.microsoft.com/en-us/windows/desktop/api/psapi/ns-psapi-process_memory_counters_ex + + // Refer to the Golang internal implementation + // https://golang.org/src/internal/syscall/windows/psapi_windows.go _ uint32 PageFaultCount uint32 - PeakWorkingSetSize uint64 - WorkingSetSize uint64 - QuotaPeakPagedPoolUsage uint64 - QuotaPagedPoolUsage uint64 - QuotaPeakNonPagedPoolUsage uint64 - QuotaNonPagedPoolUsage uint64 - PagefileUsage uint64 - PeakPagefileUsage uint64 - PrivateUsage uint64 + PeakWorkingSetSize uintptr + WorkingSetSize uintptr + QuotaPeakPagedPoolUsage uintptr + QuotaPagedPoolUsage uintptr + QuotaPeakNonPagedPoolUsage uintptr + QuotaNonPagedPoolUsage uintptr + PagefileUsage uintptr + PeakPagefileUsage uintptr + PrivateUsage uintptr } func getProcessMemoryInfo(handle windows.Handle) (processMemoryCounters, error) { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go index d1354b101..5070e72e2 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/delegator.go @@ -53,12 +53,16 @@ func (r *responseWriterDelegator) Written() int64 { } func (r *responseWriterDelegator) WriteHeader(code int) { + if r.observeWriteHeader != nil && !r.wroteHeader { + // Only call observeWriteHeader for the 1st time. It's a bug if + // WriteHeader is called more than once, but we want to protect + // against it here. Note that we still delegate the WriteHeader + // to the original ResponseWriter to not mask the bug from it. + r.observeWriteHeader(code) + } r.status = code r.wroteHeader = true r.ResponseWriter.WriteHeader(code) - if r.observeWriteHeader != nil { - r.observeWriteHeader(code) - } } func (r *responseWriterDelegator) Write(b []byte) (int, error) { diff --git a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go index cea5a90fd..5e1c4546c 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/promhttp/http.go @@ -144,7 +144,12 @@ func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { } } - contentType := expfmt.Negotiate(req.Header) + var contentType expfmt.Format + if opts.EnableOpenMetrics { + contentType = expfmt.NegotiateIncludingOpenMetrics(req.Header) + } else { + contentType = expfmt.Negotiate(req.Header) + } header := rsp.Header() header.Set(contentTypeHeader, string(contentType)) @@ -162,28 +167,40 @@ func HandlerFor(reg prometheus.Gatherer, opts HandlerOpts) http.Handler { enc := expfmt.NewEncoder(w, contentType) - var lastErr error - for _, mf := range mfs { - if err := enc.Encode(mf); err != nil { - lastErr = err - if opts.ErrorLog != nil { - opts.ErrorLog.Println("error encoding and sending metric family:", err) - } - errCnt.WithLabelValues("encoding").Inc() - switch opts.ErrorHandling { - case PanicOnError: - panic(err) - case ContinueOnError: - // Handled later. - case HTTPErrorOnError: - httpError(rsp, err) - return - } + // handleError handles the error according to opts.ErrorHandling + // and returns true if we have to abort after the handling. + handleError := func(err error) bool { + if err == nil { + return false } + if opts.ErrorLog != nil { + opts.ErrorLog.Println("error encoding and sending metric family:", err) + } + errCnt.WithLabelValues("encoding").Inc() + switch opts.ErrorHandling { + case PanicOnError: + panic(err) + case HTTPErrorOnError: + // We cannot really send an HTTP error at this + // point because we most likely have written + // something to rsp already. But at least we can + // stop sending. + return true + } + // Do nothing in all other cases, including ContinueOnError. + return false } - if lastErr != nil { - httpError(rsp, lastErr) + for _, mf := range mfs { + if handleError(enc.Encode(mf)) { + return + } + } + if closer, ok := enc.(expfmt.Closer); ok { + // This in particular takes care of the final "# EOF\n" line for OpenMetrics. + if handleError(closer.Close()) { + return + } } }) @@ -255,7 +272,12 @@ type HandlerErrorHandling int // errors are encountered. const ( // Serve an HTTP status code 500 upon the first error - // encountered. Report the error message in the body. + // encountered. Report the error message in the body. Note that HTTP + // errors cannot be served anymore once the beginning of a regular + // payload has been sent. Thus, in the (unlikely) case that encoding the + // payload into the negotiated wire format fails, serving the response + // will simply be aborted. Set an ErrorLog in HandlerOpts to detect + // those errors. HTTPErrorOnError HandlerErrorHandling = iota // Ignore errors and try to serve as many metrics as possible. However, // if no metrics can be served, serve an HTTP status code 500 and the @@ -318,6 +340,16 @@ type HandlerOpts struct { // away). Until the implementation is improved, it is recommended to // implement a separate timeout in potentially slow Collectors. Timeout time.Duration + // If true, the experimental OpenMetrics encoding is added to the + // possible options during content negotiation. Note that Prometheus + // 2.5.0+ will negotiate OpenMetrics as first priority. OpenMetrics is + // the only way to transmit exemplars. However, the move to OpenMetrics + // is not completely transparent. Most notably, the values of "quantile" + // labels of Summaries and "le" labels of Histograms are formatted with + // a trailing ".0" if they would otherwise look like integer numbers + // (which changes the identity of the resulting series on the Prometheus + // server). + EnableOpenMetrics bool } // gzipAccepted returns whether the client will accept gzip-encoded content. @@ -334,11 +366,9 @@ func gzipAccepted(header http.Header) bool { } // httpError removes any content-encoding header and then calls http.Error with -// the provided error and http.StatusInternalServerErrer. Error contents is -// supposed to be uncompressed plain text. However, same as with a plain -// http.Error, any header settings will be void if the header has already been -// sent. The error message will still be written to the writer, but it will -// probably be of limited use. +// the provided error and http.StatusInternalServerError. Error contents is +// supposed to be uncompressed plain text. Same as with a plain http.Error, this +// must not be called if the header or any payload has already been sent. func httpError(rsp http.ResponseWriter, err error) { rsp.Header().Del(contentEncodingHeader) http.Error( diff --git a/vendor/github.com/prometheus/client_golang/prometheus/value.go b/vendor/github.com/prometheus/client_golang/prometheus/value.go index eb248f108..2be470ce1 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/value.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/value.go @@ -16,8 +16,11 @@ package prometheus import ( "fmt" "sort" + "time" + "unicode/utf8" "github.com/golang/protobuf/proto" + "github.com/golang/protobuf/ptypes" dto "github.com/prometheus/client_model/go" ) @@ -25,7 +28,8 @@ import ( // ValueType is an enumeration of metric types that represent a simple value. type ValueType int -// Possible values for the ValueType enum. +// Possible values for the ValueType enum. Use UntypedValue to mark a metric +// with an unknown type. const ( _ ValueType = iota CounterValue @@ -69,7 +73,7 @@ func (v *valueFunc) Desc() *Desc { } func (v *valueFunc) Write(out *dto.Metric) error { - return populateMetric(v.valType, v.function(), v.labelPairs, out) + return populateMetric(v.valType, v.function(), v.labelPairs, nil, out) } // NewConstMetric returns a metric with one fixed value that cannot be @@ -116,19 +120,20 @@ func (m *constMetric) Desc() *Desc { } func (m *constMetric) Write(out *dto.Metric) error { - return populateMetric(m.valType, m.val, m.labelPairs, out) + return populateMetric(m.valType, m.val, m.labelPairs, nil, out) } func populateMetric( t ValueType, v float64, labelPairs []*dto.LabelPair, + e *dto.Exemplar, m *dto.Metric, ) error { m.Label = labelPairs switch t { case CounterValue: - m.Counter = &dto.Counter{Value: proto.Float64(v)} + m.Counter = &dto.Counter{Value: proto.Float64(v), Exemplar: e} case GaugeValue: m.Gauge = &dto.Gauge{Value: proto.Float64(v)} case UntypedValue: @@ -160,3 +165,40 @@ func makeLabelPairs(desc *Desc, labelValues []string) []*dto.LabelPair { sort.Sort(labelPairSorter(labelPairs)) return labelPairs } + +// ExemplarMaxRunes is the max total number of runes allowed in exemplar labels. +const ExemplarMaxRunes = 64 + +// newExemplar creates a new dto.Exemplar from the provided values. An error is +// returned if any of the label names or values are invalid or if the total +// number of runes in the label names and values exceeds ExemplarMaxRunes. +func newExemplar(value float64, ts time.Time, l Labels) (*dto.Exemplar, error) { + e := &dto.Exemplar{} + e.Value = proto.Float64(value) + tsProto, err := ptypes.TimestampProto(ts) + if err != nil { + return nil, err + } + e.Timestamp = tsProto + labelPairs := make([]*dto.LabelPair, 0, len(l)) + var runes int + for name, value := range l { + if !checkLabelName(name) { + return nil, fmt.Errorf("exemplar label name %q is invalid", name) + } + runes += utf8.RuneCountInString(name) + if !utf8.ValidString(value) { + return nil, fmt.Errorf("exemplar label value %q is not valid UTF-8", value) + } + runes += utf8.RuneCountInString(value) + labelPairs = append(labelPairs, &dto.LabelPair{ + Name: proto.String(name), + Value: proto.String(value), + }) + } + if runes > ExemplarMaxRunes { + return nil, fmt.Errorf("exemplar labels have %d runes, exceeding the limit of %d", runes, ExemplarMaxRunes) + } + e.Label = labelPairs + return e, nil +} diff --git a/vendor/github.com/prometheus/client_golang/prometheus/vec.go b/vendor/github.com/prometheus/client_golang/prometheus/vec.go index 19df3fe6b..d53848dc4 100644 --- a/vendor/github.com/prometheus/client_golang/prometheus/vec.go +++ b/vendor/github.com/prometheus/client_golang/prometheus/vec.go @@ -91,6 +91,18 @@ func (m *metricVec) Delete(labels Labels) bool { return m.metricMap.deleteByHashWithLabels(h, labels, m.curry) } +// Without explicit forwarding of Describe, Collect, Reset, those methods won't +// show up in GoDoc. + +// Describe implements Collector. +func (m *metricVec) Describe(ch chan<- *Desc) { m.metricMap.Describe(ch) } + +// Collect implements Collector. +func (m *metricVec) Collect(ch chan<- Metric) { m.metricMap.Collect(ch) } + +// Reset deletes all metrics in this vector. +func (m *metricVec) Reset() { m.metricMap.Reset() } + func (m *metricVec) curryWith(labels Labels) (*metricVec, error) { var ( newCurry []curriedLabelValue diff --git a/vendor/github.com/prometheus/client_model/go/metrics.pb.go b/vendor/github.com/prometheus/client_model/go/metrics.pb.go index 9805432c2..2f4930d9d 100644 --- a/vendor/github.com/prometheus/client_model/go/metrics.pb.go +++ b/vendor/github.com/prometheus/client_model/go/metrics.pb.go @@ -1,11 +1,14 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // source: metrics.proto -package io_prometheus_client // import "github.com/prometheus/client_model/go" +package io_prometheus_client -import proto "github.com/golang/protobuf/proto" -import fmt "fmt" -import math "math" +import ( + fmt "fmt" + proto "github.com/golang/protobuf/proto" + timestamp "github.com/golang/protobuf/ptypes/timestamp" + math "math" +) // Reference imports to suppress errors if they are not otherwise used. var _ = proto.Marshal @@ -16,7 +19,7 @@ var _ = math.Inf // 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.ProtoPackageIsVersion2 // please upgrade the proto package +const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package type MetricType int32 @@ -35,6 +38,7 @@ var MetricType_name = map[int32]string{ 3: "UNTYPED", 4: "HISTOGRAM", } + var MetricType_value = map[string]int32{ "COUNTER": 0, "GAUGE": 1, @@ -48,9 +52,11 @@ func (x MetricType) Enum() *MetricType { *p = x return p } + func (x MetricType) String() string { return proto.EnumName(MetricType_name, int32(x)) } + func (x *MetricType) UnmarshalJSON(data []byte) error { value, err := proto.UnmarshalJSONEnum(MetricType_value, data, "MetricType") if err != nil { @@ -59,8 +65,9 @@ func (x *MetricType) UnmarshalJSON(data []byte) error { *x = MetricType(value) return nil } + func (MetricType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{0} + return fileDescriptor_6039342a2ba47b72, []int{0} } type LabelPair struct { @@ -75,16 +82,17 @@ func (m *LabelPair) Reset() { *m = LabelPair{} } func (m *LabelPair) String() string { return proto.CompactTextString(m) } func (*LabelPair) ProtoMessage() {} func (*LabelPair) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{0} + return fileDescriptor_6039342a2ba47b72, []int{0} } + func (m *LabelPair) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_LabelPair.Unmarshal(m, b) } func (m *LabelPair) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_LabelPair.Marshal(b, m, deterministic) } -func (dst *LabelPair) XXX_Merge(src proto.Message) { - xxx_messageInfo_LabelPair.Merge(dst, src) +func (m *LabelPair) XXX_Merge(src proto.Message) { + xxx_messageInfo_LabelPair.Merge(m, src) } func (m *LabelPair) XXX_Size() int { return xxx_messageInfo_LabelPair.Size(m) @@ -120,16 +128,17 @@ func (m *Gauge) Reset() { *m = Gauge{} } func (m *Gauge) String() string { return proto.CompactTextString(m) } func (*Gauge) ProtoMessage() {} func (*Gauge) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{1} + return fileDescriptor_6039342a2ba47b72, []int{1} } + func (m *Gauge) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Gauge.Unmarshal(m, b) } func (m *Gauge) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Gauge.Marshal(b, m, deterministic) } -func (dst *Gauge) XXX_Merge(src proto.Message) { - xxx_messageInfo_Gauge.Merge(dst, src) +func (m *Gauge) XXX_Merge(src proto.Message) { + xxx_messageInfo_Gauge.Merge(m, src) } func (m *Gauge) XXX_Size() int { return xxx_messageInfo_Gauge.Size(m) @@ -148,26 +157,28 @@ func (m *Gauge) GetValue() float64 { } type Counter struct { - Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Value *float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"` + Exemplar *Exemplar `protobuf:"bytes,2,opt,name=exemplar" json:"exemplar,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Counter) Reset() { *m = Counter{} } func (m *Counter) String() string { return proto.CompactTextString(m) } func (*Counter) ProtoMessage() {} func (*Counter) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{2} + return fileDescriptor_6039342a2ba47b72, []int{2} } + func (m *Counter) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Counter.Unmarshal(m, b) } func (m *Counter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Counter.Marshal(b, m, deterministic) } -func (dst *Counter) XXX_Merge(src proto.Message) { - xxx_messageInfo_Counter.Merge(dst, src) +func (m *Counter) XXX_Merge(src proto.Message) { + xxx_messageInfo_Counter.Merge(m, src) } func (m *Counter) XXX_Size() int { return xxx_messageInfo_Counter.Size(m) @@ -185,6 +196,13 @@ func (m *Counter) GetValue() float64 { return 0 } +func (m *Counter) GetExemplar() *Exemplar { + if m != nil { + return m.Exemplar + } + return nil +} + type Quantile struct { Quantile *float64 `protobuf:"fixed64,1,opt,name=quantile" json:"quantile,omitempty"` Value *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"` @@ -197,16 +215,17 @@ func (m *Quantile) Reset() { *m = Quantile{} } func (m *Quantile) String() string { return proto.CompactTextString(m) } func (*Quantile) ProtoMessage() {} func (*Quantile) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{3} + return fileDescriptor_6039342a2ba47b72, []int{3} } + func (m *Quantile) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Quantile.Unmarshal(m, b) } func (m *Quantile) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Quantile.Marshal(b, m, deterministic) } -func (dst *Quantile) XXX_Merge(src proto.Message) { - xxx_messageInfo_Quantile.Merge(dst, src) +func (m *Quantile) XXX_Merge(src proto.Message) { + xxx_messageInfo_Quantile.Merge(m, src) } func (m *Quantile) XXX_Size() int { return xxx_messageInfo_Quantile.Size(m) @@ -244,16 +263,17 @@ func (m *Summary) Reset() { *m = Summary{} } func (m *Summary) String() string { return proto.CompactTextString(m) } func (*Summary) ProtoMessage() {} func (*Summary) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{4} + return fileDescriptor_6039342a2ba47b72, []int{4} } + func (m *Summary) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Summary.Unmarshal(m, b) } func (m *Summary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Summary.Marshal(b, m, deterministic) } -func (dst *Summary) XXX_Merge(src proto.Message) { - xxx_messageInfo_Summary.Merge(dst, src) +func (m *Summary) XXX_Merge(src proto.Message) { + xxx_messageInfo_Summary.Merge(m, src) } func (m *Summary) XXX_Size() int { return xxx_messageInfo_Summary.Size(m) @@ -296,16 +316,17 @@ func (m *Untyped) Reset() { *m = Untyped{} } func (m *Untyped) String() string { return proto.CompactTextString(m) } func (*Untyped) ProtoMessage() {} func (*Untyped) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{5} + return fileDescriptor_6039342a2ba47b72, []int{5} } + func (m *Untyped) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Untyped.Unmarshal(m, b) } func (m *Untyped) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Untyped.Marshal(b, m, deterministic) } -func (dst *Untyped) XXX_Merge(src proto.Message) { - xxx_messageInfo_Untyped.Merge(dst, src) +func (m *Untyped) XXX_Merge(src proto.Message) { + xxx_messageInfo_Untyped.Merge(m, src) } func (m *Untyped) XXX_Size() int { return xxx_messageInfo_Untyped.Size(m) @@ -336,16 +357,17 @@ func (m *Histogram) Reset() { *m = Histogram{} } func (m *Histogram) String() string { return proto.CompactTextString(m) } func (*Histogram) ProtoMessage() {} func (*Histogram) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{6} + return fileDescriptor_6039342a2ba47b72, []int{6} } + func (m *Histogram) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Histogram.Unmarshal(m, b) } func (m *Histogram) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Histogram.Marshal(b, m, deterministic) } -func (dst *Histogram) XXX_Merge(src proto.Message) { - xxx_messageInfo_Histogram.Merge(dst, src) +func (m *Histogram) XXX_Merge(src proto.Message) { + xxx_messageInfo_Histogram.Merge(m, src) } func (m *Histogram) XXX_Size() int { return xxx_messageInfo_Histogram.Size(m) @@ -378,27 +400,29 @@ func (m *Histogram) GetBucket() []*Bucket { } type Bucket struct { - CumulativeCount *uint64 `protobuf:"varint,1,opt,name=cumulative_count,json=cumulativeCount" json:"cumulative_count,omitempty"` - UpperBound *float64 `protobuf:"fixed64,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + CumulativeCount *uint64 `protobuf:"varint,1,opt,name=cumulative_count,json=cumulativeCount" json:"cumulative_count,omitempty"` + UpperBound *float64 `protobuf:"fixed64,2,opt,name=upper_bound,json=upperBound" json:"upper_bound,omitempty"` + Exemplar *Exemplar `protobuf:"bytes,3,opt,name=exemplar" json:"exemplar,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Bucket) Reset() { *m = Bucket{} } func (m *Bucket) String() string { return proto.CompactTextString(m) } func (*Bucket) ProtoMessage() {} func (*Bucket) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{7} + return fileDescriptor_6039342a2ba47b72, []int{7} } + func (m *Bucket) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Bucket.Unmarshal(m, b) } func (m *Bucket) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Bucket.Marshal(b, m, deterministic) } -func (dst *Bucket) XXX_Merge(src proto.Message) { - xxx_messageInfo_Bucket.Merge(dst, src) +func (m *Bucket) XXX_Merge(src proto.Message) { + xxx_messageInfo_Bucket.Merge(m, src) } func (m *Bucket) XXX_Size() int { return xxx_messageInfo_Bucket.Size(m) @@ -423,6 +447,68 @@ func (m *Bucket) GetUpperBound() float64 { return 0 } +func (m *Bucket) GetExemplar() *Exemplar { + if m != nil { + return m.Exemplar + } + return nil +} + +type Exemplar struct { + Label []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"` + Value *float64 `protobuf:"fixed64,2,opt,name=value" json:"value,omitempty"` + Timestamp *timestamp.Timestamp `protobuf:"bytes,3,opt,name=timestamp" json:"timestamp,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *Exemplar) Reset() { *m = Exemplar{} } +func (m *Exemplar) String() string { return proto.CompactTextString(m) } +func (*Exemplar) ProtoMessage() {} +func (*Exemplar) Descriptor() ([]byte, []int) { + return fileDescriptor_6039342a2ba47b72, []int{8} +} + +func (m *Exemplar) XXX_Unmarshal(b []byte) error { + return xxx_messageInfo_Exemplar.Unmarshal(m, b) +} +func (m *Exemplar) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + return xxx_messageInfo_Exemplar.Marshal(b, m, deterministic) +} +func (m *Exemplar) XXX_Merge(src proto.Message) { + xxx_messageInfo_Exemplar.Merge(m, src) +} +func (m *Exemplar) XXX_Size() int { + return xxx_messageInfo_Exemplar.Size(m) +} +func (m *Exemplar) XXX_DiscardUnknown() { + xxx_messageInfo_Exemplar.DiscardUnknown(m) +} + +var xxx_messageInfo_Exemplar proto.InternalMessageInfo + +func (m *Exemplar) GetLabel() []*LabelPair { + if m != nil { + return m.Label + } + return nil +} + +func (m *Exemplar) GetValue() float64 { + if m != nil && m.Value != nil { + return *m.Value + } + return 0 +} + +func (m *Exemplar) GetTimestamp() *timestamp.Timestamp { + if m != nil { + return m.Timestamp + } + return nil +} + type Metric struct { Label []*LabelPair `protobuf:"bytes,1,rep,name=label" json:"label,omitempty"` Gauge *Gauge `protobuf:"bytes,2,opt,name=gauge" json:"gauge,omitempty"` @@ -440,16 +526,17 @@ func (m *Metric) Reset() { *m = Metric{} } func (m *Metric) String() string { return proto.CompactTextString(m) } func (*Metric) ProtoMessage() {} func (*Metric) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{8} + return fileDescriptor_6039342a2ba47b72, []int{9} } + func (m *Metric) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_Metric.Unmarshal(m, b) } func (m *Metric) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_Metric.Marshal(b, m, deterministic) } -func (dst *Metric) XXX_Merge(src proto.Message) { - xxx_messageInfo_Metric.Merge(dst, src) +func (m *Metric) XXX_Merge(src proto.Message) { + xxx_messageInfo_Metric.Merge(m, src) } func (m *Metric) XXX_Size() int { return xxx_messageInfo_Metric.Size(m) @@ -523,16 +610,17 @@ func (m *MetricFamily) Reset() { *m = MetricFamily{} } func (m *MetricFamily) String() string { return proto.CompactTextString(m) } func (*MetricFamily) ProtoMessage() {} func (*MetricFamily) Descriptor() ([]byte, []int) { - return fileDescriptor_metrics_c97c9a2b9560cb8f, []int{9} + return fileDescriptor_6039342a2ba47b72, []int{10} } + func (m *MetricFamily) XXX_Unmarshal(b []byte) error { return xxx_messageInfo_MetricFamily.Unmarshal(m, b) } func (m *MetricFamily) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { return xxx_messageInfo_MetricFamily.Marshal(b, m, deterministic) } -func (dst *MetricFamily) XXX_Merge(src proto.Message) { - xxx_messageInfo_MetricFamily.Merge(dst, src) +func (m *MetricFamily) XXX_Merge(src proto.Message) { + xxx_messageInfo_MetricFamily.Merge(m, src) } func (m *MetricFamily) XXX_Size() int { return xxx_messageInfo_MetricFamily.Size(m) @@ -572,6 +660,7 @@ func (m *MetricFamily) GetMetric() []*Metric { } func init() { + proto.RegisterEnum("io.prometheus.client.MetricType", MetricType_name, MetricType_value) proto.RegisterType((*LabelPair)(nil), "io.prometheus.client.LabelPair") proto.RegisterType((*Gauge)(nil), "io.prometheus.client.Gauge") proto.RegisterType((*Counter)(nil), "io.prometheus.client.Counter") @@ -580,50 +669,55 @@ func init() { proto.RegisterType((*Untyped)(nil), "io.prometheus.client.Untyped") proto.RegisterType((*Histogram)(nil), "io.prometheus.client.Histogram") proto.RegisterType((*Bucket)(nil), "io.prometheus.client.Bucket") + proto.RegisterType((*Exemplar)(nil), "io.prometheus.client.Exemplar") proto.RegisterType((*Metric)(nil), "io.prometheus.client.Metric") proto.RegisterType((*MetricFamily)(nil), "io.prometheus.client.MetricFamily") - proto.RegisterEnum("io.prometheus.client.MetricType", MetricType_name, MetricType_value) } -func init() { proto.RegisterFile("metrics.proto", fileDescriptor_metrics_c97c9a2b9560cb8f) } +func init() { proto.RegisterFile("metrics.proto", fileDescriptor_6039342a2ba47b72) } -var fileDescriptor_metrics_c97c9a2b9560cb8f = []byte{ - // 591 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0x4f, 0x4f, 0xdb, 0x4e, - 0x14, 0xfc, 0x99, 0xd8, 0x09, 0x7e, 0x86, 0x5f, 0xad, 0x15, 0x07, 0xab, 0x2d, 0x25, 0xcd, 0x89, - 0xf6, 0x10, 0x54, 0x04, 0xaa, 0x44, 0xdb, 0x03, 0x50, 0x1a, 0x2a, 0xd5, 0x40, 0x37, 0xc9, 0x81, - 0x5e, 0xac, 0x8d, 0x59, 0x25, 0x56, 0xbd, 0xb6, 0x6b, 0xef, 0x22, 0xe5, 0xdc, 0x43, 0xbf, 0x47, - 0xbf, 0x68, 0xab, 0xfd, 0xe3, 0x18, 0x24, 0xc3, 0xa9, 0xb7, 0xb7, 0xf3, 0x66, 0xde, 0x8e, 0x77, - 0xc7, 0x0b, 0x9b, 0x8c, 0xf2, 0x32, 0x89, 0xab, 0x61, 0x51, 0xe6, 0x3c, 0x47, 0x5b, 0x49, 0x2e, - 0x2b, 0x46, 0xf9, 0x82, 0x8a, 0x6a, 0x18, 0xa7, 0x09, 0xcd, 0xf8, 0xe0, 0x10, 0xdc, 0x2f, 0x64, - 0x46, 0xd3, 0x2b, 0x92, 0x94, 0x08, 0x81, 0x9d, 0x11, 0x46, 0x03, 0xab, 0x6f, 0xed, 0xba, 0x58, - 0xd5, 0x68, 0x0b, 0x9c, 0x5b, 0x92, 0x0a, 0x1a, 0xac, 0x29, 0x50, 0x2f, 0x06, 0xdb, 0xe0, 0x8c, - 0x88, 0x98, 0xdf, 0x69, 0x4b, 0x8d, 0x55, 0xb7, 0x77, 0xa0, 0x77, 0x9a, 0x8b, 0x8c, 0xd3, 0xf2, - 0x01, 0xc2, 0x7b, 0x58, 0xff, 0x2a, 0x48, 0xc6, 0x93, 0x94, 0xa2, 0xa7, 0xb0, 0xfe, 0xc3, 0xd4, - 0x86, 0xb4, 0x5a, 0xdf, 0xdf, 0x7d, 0xa5, 0xfe, 0x65, 0x41, 0x6f, 0x2c, 0x18, 0x23, 0xe5, 0x12, - 0xbd, 0x84, 0x8d, 0x8a, 0xb0, 0x22, 0xa5, 0x51, 0x2c, 0x77, 0x54, 0x13, 0x6c, 0xec, 0x69, 0x4c, - 0x99, 0x40, 0xdb, 0x00, 0x86, 0x52, 0x09, 0x66, 0x26, 0xb9, 0x1a, 0x19, 0x0b, 0x86, 0x8e, 0xee, - 0xec, 0xdf, 0xe9, 0x77, 0x76, 0xbd, 0xfd, 0x17, 0xc3, 0xb6, 0xb3, 0x1a, 0xd6, 0x8e, 0x1b, 0x7f, - 0xf2, 0x43, 0xa7, 0x19, 0x5f, 0x16, 0xf4, 0xe6, 0x81, 0x0f, 0xfd, 0x69, 0x81, 0x7b, 0x9e, 0x54, - 0x3c, 0x9f, 0x97, 0x84, 0xfd, 0x03, 0xb3, 0x07, 0xd0, 0x9d, 0x89, 0xf8, 0x3b, 0xe5, 0xc6, 0xea, - 0xf3, 0x76, 0xab, 0x27, 0x8a, 0x83, 0x0d, 0x77, 0x30, 0x81, 0xae, 0x46, 0xd0, 0x2b, 0xf0, 0x63, - 0xc1, 0x44, 0x4a, 0x78, 0x72, 0x7b, 0xdf, 0xc5, 0x93, 0x06, 0xd7, 0x4e, 0x76, 0xc0, 0x13, 0x45, - 0x41, 0xcb, 0x68, 0x96, 0x8b, 0xec, 0xc6, 0x58, 0x01, 0x05, 0x9d, 0x48, 0x64, 0xf0, 0x67, 0x0d, - 0xba, 0xa1, 0xca, 0x18, 0x3a, 0x04, 0x27, 0x95, 0x31, 0x0a, 0x2c, 0xe5, 0x6a, 0xa7, 0xdd, 0xd5, - 0x2a, 0x69, 0x58, 0xb3, 0xd1, 0x1b, 0x70, 0xe6, 0x32, 0x46, 0x6a, 0xb8, 0xb7, 0xff, 0xac, 0x5d, - 0xa6, 0x92, 0x86, 0x35, 0x13, 0xbd, 0x85, 0x5e, 0xac, 0xa3, 0x15, 0x74, 0x94, 0x68, 0xbb, 0x5d, - 0x64, 0xf2, 0x87, 0x6b, 0xb6, 0x14, 0x56, 0x3a, 0x33, 0x81, 0xfd, 0x98, 0xd0, 0x04, 0x0b, 0xd7, - 0x6c, 0x29, 0x14, 0xfa, 0x8e, 0x03, 0xe7, 0x31, 0xa1, 0x09, 0x02, 0xae, 0xd9, 0xe8, 0x03, 0xb8, - 0x8b, 0xfa, 0xea, 0x83, 0x9e, 0x92, 0x3e, 0x70, 0x30, 0xab, 0x84, 0xe0, 0x46, 0x21, 0xc3, 0xc2, - 0x13, 0x46, 0x2b, 0x4e, 0x58, 0x11, 0xb1, 0x2a, 0xe8, 0xf6, 0xad, 0xdd, 0x0e, 0xf6, 0x56, 0x58, - 0x58, 0x0d, 0x7e, 0x5b, 0xb0, 0xa1, 0x6f, 0xe0, 0x13, 0x61, 0x49, 0xba, 0x6c, 0xfd, 0x83, 0x11, - 0xd8, 0x0b, 0x9a, 0x16, 0xe6, 0x07, 0x56, 0x35, 0x3a, 0x00, 0x5b, 0x7a, 0x54, 0x47, 0xf8, 0xff, - 0x7e, 0xbf, 0xdd, 0x95, 0x9e, 0x3c, 0x59, 0x16, 0x14, 0x2b, 0xb6, 0x0c, 0x9f, 0x7e, 0x53, 0x02, - 0xfb, 0xb1, 0xf0, 0x69, 0x1d, 0x36, 0xdc, 0xd7, 0x21, 0x40, 0x33, 0x09, 0x79, 0xd0, 0x3b, 0xbd, - 0x9c, 0x5e, 0x4c, 0xce, 0xb0, 0xff, 0x1f, 0x72, 0xc1, 0x19, 0x1d, 0x4f, 0x47, 0x67, 0xbe, 0x25, - 0xf1, 0xf1, 0x34, 0x0c, 0x8f, 0xf1, 0xb5, 0xbf, 0x26, 0x17, 0xd3, 0x8b, 0xc9, 0xf5, 0xd5, 0xd9, - 0x47, 0xbf, 0x83, 0x36, 0xc1, 0x3d, 0xff, 0x3c, 0x9e, 0x5c, 0x8e, 0xf0, 0x71, 0xe8, 0xdb, 0x27, - 0x18, 0x5a, 0x5f, 0xb2, 0x6f, 0x47, 0xf3, 0x84, 0x2f, 0xc4, 0x6c, 0x18, 0xe7, 0x6c, 0xaf, 0xe9, - 0xee, 0xe9, 0x6e, 0xc4, 0xf2, 0x1b, 0x9a, 0xee, 0xcd, 0xf3, 0x77, 0x49, 0x1e, 0x35, 0xdd, 0x48, - 0x77, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x45, 0x21, 0x7f, 0x64, 0x2b, 0x05, 0x00, 0x00, +var fileDescriptor_6039342a2ba47b72 = []byte{ + // 665 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0xd3, 0x4c, + 0x14, 0xfd, 0xdc, 0x38, 0x3f, 0xbe, 0x69, 0x3f, 0xa2, 0x51, 0x17, 0x56, 0xa1, 0x24, 0x78, 0x55, + 0x58, 0x38, 0xa2, 0x6a, 0x05, 0x2a, 0xb0, 0x68, 0x4b, 0x48, 0x91, 0x48, 0x5b, 0x26, 0xc9, 0xa2, + 0xb0, 0x88, 0x1c, 0x77, 0x70, 0x2c, 0x3c, 0xb1, 0xb1, 0x67, 0x2a, 0xb2, 0x66, 0xc1, 0x16, 0x5e, + 0x81, 0x17, 0x05, 0xcd, 0x8f, 0x6d, 0x2a, 0xb9, 0x95, 0x40, 0xec, 0x66, 0xee, 0x3d, 0xe7, 0xfa, + 0xcc, 0xf8, 0x9c, 0x81, 0x0d, 0x4a, 0x58, 0x1a, 0xfa, 0x99, 0x9b, 0xa4, 0x31, 0x8b, 0xd1, 0x66, + 0x18, 0x8b, 0x15, 0x25, 0x6c, 0x41, 0x78, 0xe6, 0xfa, 0x51, 0x48, 0x96, 0x6c, 0xab, 0x1b, 0xc4, + 0x71, 0x10, 0x91, 0xbe, 0xc4, 0xcc, 0xf9, 0x87, 0x3e, 0x0b, 0x29, 0xc9, 0x98, 0x47, 0x13, 0x45, + 0x73, 0xf6, 0xc1, 0x7a, 0xe3, 0xcd, 0x49, 0x74, 0xee, 0x85, 0x29, 0x42, 0x60, 0x2e, 0x3d, 0x4a, + 0x6c, 0xa3, 0x67, 0xec, 0x58, 0x58, 0xae, 0xd1, 0x26, 0xd4, 0xaf, 0xbc, 0x88, 0x13, 0x7b, 0x4d, + 0x16, 0xd5, 0xc6, 0xd9, 0x86, 0xfa, 0xd0, 0xe3, 0xc1, 0x6f, 0x6d, 0xc1, 0x31, 0xf2, 0xf6, 0x7b, + 0x68, 0x1e, 0xc7, 0x7c, 0xc9, 0x48, 0x5a, 0x0d, 0x40, 0x07, 0xd0, 0x22, 0x9f, 0x09, 0x4d, 0x22, + 0x2f, 0x95, 0x83, 0xdb, 0xbb, 0xf7, 0xdd, 0xaa, 0x03, 0xb8, 0x03, 0x8d, 0xc2, 0x05, 0xde, 0x79, + 0x0e, 0xad, 0xb7, 0xdc, 0x5b, 0xb2, 0x30, 0x22, 0x68, 0x0b, 0x5a, 0x9f, 0xf4, 0x5a, 0x7f, 0xa0, + 0xd8, 0x5f, 0x57, 0x5e, 0x48, 0xfb, 0x6a, 0x40, 0x73, 0xcc, 0x29, 0xf5, 0xd2, 0x15, 0x7a, 0x00, + 0xeb, 0x99, 0x47, 0x93, 0x88, 0xcc, 0x7c, 0xa1, 0x56, 0x4e, 0x30, 0x71, 0x5b, 0xd5, 0xe4, 0x01, + 0xd0, 0x36, 0x80, 0x86, 0x64, 0x9c, 0xea, 0x49, 0x96, 0xaa, 0x8c, 0x39, 0x15, 0xe7, 0x28, 0xbe, + 0x5f, 0xeb, 0xd5, 0x6e, 0x3e, 0x47, 0xae, 0xb8, 0xd4, 0xe7, 0x74, 0xa1, 0x39, 0x5d, 0xb2, 0x55, + 0x42, 0x2e, 0x6f, 0xb8, 0xc5, 0x2f, 0x06, 0x58, 0x27, 0x61, 0xc6, 0xe2, 0x20, 0xf5, 0xe8, 0x3f, + 0x10, 0xbb, 0x07, 0x8d, 0x39, 0xf7, 0x3f, 0x12, 0xa6, 0xa5, 0xde, 0xab, 0x96, 0x7a, 0x24, 0x31, + 0x58, 0x63, 0x9d, 0x6f, 0x06, 0x34, 0x54, 0x09, 0x3d, 0x84, 0x8e, 0xcf, 0x29, 0x8f, 0x3c, 0x16, + 0x5e, 0x5d, 0x97, 0x71, 0xa7, 0xac, 0x2b, 0x29, 0x5d, 0x68, 0xf3, 0x24, 0x21, 0xe9, 0x6c, 0x1e, + 0xf3, 0xe5, 0xa5, 0xd6, 0x02, 0xb2, 0x74, 0x24, 0x2a, 0xd7, 0x1c, 0x50, 0xfb, 0x43, 0x07, 0x7c, + 0x37, 0xa0, 0x95, 0x97, 0xd1, 0x3e, 0xd4, 0x23, 0xe1, 0x60, 0xdb, 0x90, 0x87, 0xea, 0x56, 0x4f, + 0x29, 0x4c, 0x8e, 0x15, 0xba, 0xda, 0x1d, 0xe8, 0x29, 0x58, 0x45, 0x42, 0xb4, 0xac, 0x2d, 0x57, + 0x65, 0xc8, 0xcd, 0x33, 0xe4, 0x4e, 0x72, 0x04, 0x2e, 0xc1, 0xce, 0xcf, 0x35, 0x68, 0x8c, 0x64, + 0x22, 0xff, 0x56, 0xd1, 0x63, 0xa8, 0x07, 0x22, 0x53, 0x3a, 0x10, 0x77, 0xab, 0x69, 0x32, 0x76, + 0x58, 0x21, 0xd1, 0x13, 0x68, 0xfa, 0x2a, 0x67, 0x5a, 0xec, 0x76, 0x35, 0x49, 0x87, 0x11, 0xe7, + 0x68, 0x41, 0xcc, 0x54, 0x08, 0x6c, 0xf3, 0x36, 0xa2, 0x4e, 0x0a, 0xce, 0xd1, 0x82, 0xc8, 0x95, + 0x69, 0xed, 0xfa, 0x6d, 0x44, 0xed, 0x6c, 0x9c, 0xa3, 0xd1, 0x0b, 0xb0, 0x16, 0xb9, 0x97, 0xed, + 0xa6, 0xa4, 0xde, 0x70, 0x31, 0x85, 0xe5, 0x71, 0xc9, 0x10, 0xee, 0x2f, 0xee, 0x7a, 0x46, 0x33, + 0xbb, 0xd1, 0x33, 0x76, 0x6a, 0xb8, 0x5d, 0xd4, 0x46, 0x99, 0xf3, 0xc3, 0x80, 0x75, 0xf5, 0x07, + 0x5e, 0x79, 0x34, 0x8c, 0x56, 0x95, 0xcf, 0x19, 0x02, 0x73, 0x41, 0xa2, 0x44, 0xbf, 0x66, 0x72, + 0x8d, 0xf6, 0xc0, 0x14, 0x1a, 0xe5, 0x15, 0xfe, 0xbf, 0xdb, 0xab, 0x56, 0xa5, 0x26, 0x4f, 0x56, + 0x09, 0xc1, 0x12, 0x2d, 0xd2, 0xa4, 0x5e, 0x60, 0xdb, 0xbc, 0x2d, 0x4d, 0x8a, 0x87, 0x35, 0xf6, + 0xd1, 0x08, 0xa0, 0x9c, 0x84, 0xda, 0xd0, 0x3c, 0x3e, 0x9b, 0x9e, 0x4e, 0x06, 0xb8, 0xf3, 0x1f, + 0xb2, 0xa0, 0x3e, 0x3c, 0x9c, 0x0e, 0x07, 0x1d, 0x43, 0xd4, 0xc7, 0xd3, 0xd1, 0xe8, 0x10, 0x5f, + 0x74, 0xd6, 0xc4, 0x66, 0x7a, 0x3a, 0xb9, 0x38, 0x1f, 0xbc, 0xec, 0xd4, 0xd0, 0x06, 0x58, 0x27, + 0xaf, 0xc7, 0x93, 0xb3, 0x21, 0x3e, 0x1c, 0x75, 0xcc, 0x23, 0x0c, 0x95, 0xef, 0xfe, 0xbb, 0x83, + 0x20, 0x64, 0x0b, 0x3e, 0x77, 0xfd, 0x98, 0xf6, 0xcb, 0x6e, 0x5f, 0x75, 0x67, 0x34, 0xbe, 0x24, + 0x51, 0x3f, 0x88, 0x9f, 0x85, 0xf1, 0xac, 0xec, 0xce, 0x54, 0xf7, 0x57, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xd0, 0x84, 0x91, 0x73, 0x59, 0x06, 0x00, 0x00, } diff --git a/vendor/github.com/prometheus/common/expfmt/encode.go b/vendor/github.com/prometheus/common/expfmt/encode.go index 11839ed65..bd4e34745 100644 --- a/vendor/github.com/prometheus/common/expfmt/encode.go +++ b/vendor/github.com/prometheus/common/expfmt/encode.go @@ -30,17 +30,38 @@ type Encoder interface { Encode(*dto.MetricFamily) error } -type encoder func(*dto.MetricFamily) error - -func (e encoder) Encode(v *dto.MetricFamily) error { - return e(v) +// Closer is implemented by Encoders that need to be closed to finalize +// encoding. (For example, OpenMetrics needs a final `# EOF` line.) +// +// Note that all Encoder implementations returned from this package implement +// Closer, too, even if the Close call is a no-op. This happens in preparation +// for adding a Close method to the Encoder interface directly in a (mildly +// breaking) release in the future. +type Closer interface { + Close() error } -// Negotiate returns the Content-Type based on the given Accept header. -// If no appropriate accepted type is found, FmtText is returned. +type encoderCloser struct { + encode func(*dto.MetricFamily) error + close func() error +} + +func (ec encoderCloser) Encode(v *dto.MetricFamily) error { + return ec.encode(v) +} + +func (ec encoderCloser) Close() error { + return ec.close() +} + +// Negotiate returns the Content-Type based on the given Accept header. If no +// appropriate accepted type is found, FmtText is returned (which is the +// Prometheus text format). This function will never negotiate FmtOpenMetrics, +// as the support is still experimental. To include the option to negotiate +// FmtOpenMetrics, use NegotiateOpenMetrics. func Negotiate(h http.Header) Format { for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) { - // Check for protocol buffer + ver := ac.Params["version"] if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol { switch ac.Params["encoding"] { case "delimited": @@ -51,8 +72,6 @@ func Negotiate(h http.Header) Format { return FmtProtoCompact } } - // Check for text format. - ver := ac.Params["version"] if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") { return FmtText } @@ -60,29 +79,84 @@ func Negotiate(h http.Header) Format { return FmtText } -// NewEncoder returns a new encoder based on content type negotiation. +// NegotiateIncludingOpenMetrics works like Negotiate but includes +// FmtOpenMetrics as an option for the result. Note that this function is +// temporary and will disappear once FmtOpenMetrics is fully supported and as +// such may be negotiated by the normal Negotiate function. +func NegotiateIncludingOpenMetrics(h http.Header) Format { + for _, ac := range goautoneg.ParseAccept(h.Get(hdrAccept)) { + ver := ac.Params["version"] + if ac.Type+"/"+ac.SubType == ProtoType && ac.Params["proto"] == ProtoProtocol { + switch ac.Params["encoding"] { + case "delimited": + return FmtProtoDelim + case "text": + return FmtProtoText + case "compact-text": + return FmtProtoCompact + } + } + if ac.Type == "text" && ac.SubType == "plain" && (ver == TextVersion || ver == "") { + return FmtText + } + if ac.Type+"/"+ac.SubType == OpenMetricsType && (ver == OpenMetricsVersion || ver == "") { + return FmtOpenMetrics + } + } + return FmtText +} + +// NewEncoder returns a new encoder based on content type negotiation. All +// Encoder implementations returned by NewEncoder also implement Closer, and +// callers should always call the Close method. It is currently only required +// for FmtOpenMetrics, but a future (breaking) release will add the Close method +// to the Encoder interface directly. The current version of the Encoder +// interface is kept for backwards compatibility. func NewEncoder(w io.Writer, format Format) Encoder { switch format { case FmtProtoDelim: - return encoder(func(v *dto.MetricFamily) error { - _, err := pbutil.WriteDelimited(w, v) - return err - }) + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := pbutil.WriteDelimited(w, v) + return err + }, + close: func() error { return nil }, + } case FmtProtoCompact: - return encoder(func(v *dto.MetricFamily) error { - _, err := fmt.Fprintln(w, v.String()) - return err - }) + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := fmt.Fprintln(w, v.String()) + return err + }, + close: func() error { return nil }, + } case FmtProtoText: - return encoder(func(v *dto.MetricFamily) error { - _, err := fmt.Fprintln(w, proto.MarshalTextString(v)) - return err - }) + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := fmt.Fprintln(w, proto.MarshalTextString(v)) + return err + }, + close: func() error { return nil }, + } case FmtText: - return encoder(func(v *dto.MetricFamily) error { - _, err := MetricFamilyToText(w, v) - return err - }) + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := MetricFamilyToText(w, v) + return err + }, + close: func() error { return nil }, + } + case FmtOpenMetrics: + return encoderCloser{ + encode: func(v *dto.MetricFamily) error { + _, err := MetricFamilyToOpenMetrics(w, v) + return err + }, + close: func() error { + _, err := FinalizeOpenMetrics(w) + return err + }, + } } - panic("expfmt.NewEncoder: unknown format") + panic(fmt.Errorf("expfmt.NewEncoder: unknown format %q", format)) } diff --git a/vendor/github.com/prometheus/common/expfmt/expfmt.go b/vendor/github.com/prometheus/common/expfmt/expfmt.go index c71bcb981..0f176fa64 100644 --- a/vendor/github.com/prometheus/common/expfmt/expfmt.go +++ b/vendor/github.com/prometheus/common/expfmt/expfmt.go @@ -19,10 +19,12 @@ type Format string // Constants to assemble the Content-Type values for the different wire protocols. const ( - TextVersion = "0.0.4" - ProtoType = `application/vnd.google.protobuf` - ProtoProtocol = `io.prometheus.client.MetricFamily` - ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" + TextVersion = "0.0.4" + ProtoType = `application/vnd.google.protobuf` + ProtoProtocol = `io.prometheus.client.MetricFamily` + ProtoFmt = ProtoType + "; proto=" + ProtoProtocol + ";" + OpenMetricsType = `application/openmetrics-text` + OpenMetricsVersion = "0.0.1" // The Content-Type values for the different wire protocols. FmtUnknown Format = `` @@ -30,6 +32,7 @@ const ( FmtProtoDelim Format = ProtoFmt + ` encoding=delimited` FmtProtoText Format = ProtoFmt + ` encoding=text` FmtProtoCompact Format = ProtoFmt + ` encoding=compact-text` + FmtOpenMetrics Format = OpenMetricsType + `; version=` + OpenMetricsVersion + `; charset=utf-8` ) const ( diff --git a/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go b/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go new file mode 100644 index 000000000..8a9313a3b --- /dev/null +++ b/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go @@ -0,0 +1,527 @@ +// Copyright 2020 The Prometheus 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 expfmt + +import ( + "bufio" + "bytes" + "fmt" + "io" + "math" + "strconv" + "strings" + + "github.com/golang/protobuf/ptypes" + "github.com/prometheus/common/model" + + dto "github.com/prometheus/client_model/go" +) + +// MetricFamilyToOpenMetrics converts a MetricFamily proto message into the +// OpenMetrics text format and writes the resulting lines to 'out'. It returns +// the number of bytes written and any error encountered. The output will have +// the same order as the input, no further sorting is performed. Furthermore, +// this function assumes the input is already sanitized and does not perform any +// sanity checks. If the input contains duplicate metrics or invalid metric or +// label names, the conversion will result in invalid text format output. +// +// This function fulfills the type 'expfmt.encoder'. +// +// Note that OpenMetrics requires a final `# EOF` line. Since this function acts +// on individual metric families, it is the responsibility of the caller to +// append this line to 'out' once all metric families have been written. +// Conveniently, this can be done by calling FinalizeOpenMetrics. +// +// The output should be fully OpenMetrics compliant. However, there are a few +// missing features and peculiarities to avoid complications when switching from +// Prometheus to OpenMetrics or vice versa: +// +// - Counters are expected to have the `_total` suffix in their metric name. In +// the output, the suffix will be truncated from the `# TYPE` and `# HELP` +// line. A counter with a missing `_total` suffix is not an error. However, +// its type will be set to `unknown` in that case to avoid invalid OpenMetrics +// output. +// +// - No support for the following (optional) features: `# UNIT` line, `_created` +// line, info type, stateset type, gaugehistogram type. +// +// - The size of exemplar labels is not checked (i.e. it's possible to create +// exemplars that are larger than allowed by the OpenMetrics specification). +// +// - The value of Counters is not checked. (OpenMetrics doesn't allow counters +// with a `NaN` value.) +func MetricFamilyToOpenMetrics(out io.Writer, in *dto.MetricFamily) (written int, err error) { + name := in.GetName() + if name == "" { + return 0, fmt.Errorf("MetricFamily has no name: %s", in) + } + + // Try the interface upgrade. If it doesn't work, we'll use a + // bufio.Writer from the sync.Pool. + w, ok := out.(enhancedWriter) + if !ok { + b := bufPool.Get().(*bufio.Writer) + b.Reset(out) + w = b + defer func() { + bErr := b.Flush() + if err == nil { + err = bErr + } + bufPool.Put(b) + }() + } + + var ( + n int + metricType = in.GetType() + shortName = name + ) + if metricType == dto.MetricType_COUNTER && strings.HasSuffix(shortName, "_total") { + shortName = name[:len(name)-6] + } + + // Comments, first HELP, then TYPE. + if in.Help != nil { + n, err = w.WriteString("# HELP ") + written += n + if err != nil { + return + } + n, err = w.WriteString(shortName) + written += n + if err != nil { + return + } + err = w.WriteByte(' ') + written++ + if err != nil { + return + } + n, err = writeEscapedString(w, *in.Help, true) + written += n + if err != nil { + return + } + err = w.WriteByte('\n') + written++ + if err != nil { + return + } + } + n, err = w.WriteString("# TYPE ") + written += n + if err != nil { + return + } + n, err = w.WriteString(shortName) + written += n + if err != nil { + return + } + switch metricType { + case dto.MetricType_COUNTER: + if strings.HasSuffix(name, "_total") { + n, err = w.WriteString(" counter\n") + } else { + n, err = w.WriteString(" unknown\n") + } + case dto.MetricType_GAUGE: + n, err = w.WriteString(" gauge\n") + case dto.MetricType_SUMMARY: + n, err = w.WriteString(" summary\n") + case dto.MetricType_UNTYPED: + n, err = w.WriteString(" unknown\n") + case dto.MetricType_HISTOGRAM: + n, err = w.WriteString(" histogram\n") + default: + return written, fmt.Errorf("unknown metric type %s", metricType.String()) + } + written += n + if err != nil { + return + } + + // Finally the samples, one line for each. + for _, metric := range in.Metric { + switch metricType { + case dto.MetricType_COUNTER: + if metric.Counter == nil { + return written, fmt.Errorf( + "expected counter in metric %s %s", name, metric, + ) + } + // Note that we have ensured above that either the name + // ends on `_total` or that the rendered type is + // `unknown`. Therefore, no `_total` must be added here. + n, err = writeOpenMetricsSample( + w, name, "", metric, "", 0, + metric.Counter.GetValue(), 0, false, + metric.Counter.Exemplar, + ) + case dto.MetricType_GAUGE: + if metric.Gauge == nil { + return written, fmt.Errorf( + "expected gauge in metric %s %s", name, metric, + ) + } + n, err = writeOpenMetricsSample( + w, name, "", metric, "", 0, + metric.Gauge.GetValue(), 0, false, + nil, + ) + case dto.MetricType_UNTYPED: + if metric.Untyped == nil { + return written, fmt.Errorf( + "expected untyped in metric %s %s", name, metric, + ) + } + n, err = writeOpenMetricsSample( + w, name, "", metric, "", 0, + metric.Untyped.GetValue(), 0, false, + nil, + ) + case dto.MetricType_SUMMARY: + if metric.Summary == nil { + return written, fmt.Errorf( + "expected summary in metric %s %s", name, metric, + ) + } + for _, q := range metric.Summary.Quantile { + n, err = writeOpenMetricsSample( + w, name, "", metric, + model.QuantileLabel, q.GetQuantile(), + q.GetValue(), 0, false, + nil, + ) + written += n + if err != nil { + return + } + } + n, err = writeOpenMetricsSample( + w, name, "_sum", metric, "", 0, + metric.Summary.GetSampleSum(), 0, false, + nil, + ) + written += n + if err != nil { + return + } + n, err = writeOpenMetricsSample( + w, name, "_count", metric, "", 0, + 0, metric.Summary.GetSampleCount(), true, + nil, + ) + case dto.MetricType_HISTOGRAM: + if metric.Histogram == nil { + return written, fmt.Errorf( + "expected histogram in metric %s %s", name, metric, + ) + } + infSeen := false + for _, b := range metric.Histogram.Bucket { + n, err = writeOpenMetricsSample( + w, name, "_bucket", metric, + model.BucketLabel, b.GetUpperBound(), + 0, b.GetCumulativeCount(), true, + b.Exemplar, + ) + written += n + if err != nil { + return + } + if math.IsInf(b.GetUpperBound(), +1) { + infSeen = true + } + } + if !infSeen { + n, err = writeOpenMetricsSample( + w, name, "_bucket", metric, + model.BucketLabel, math.Inf(+1), + 0, metric.Histogram.GetSampleCount(), true, + nil, + ) + written += n + if err != nil { + return + } + } + n, err = writeOpenMetricsSample( + w, name, "_sum", metric, "", 0, + metric.Histogram.GetSampleSum(), 0, false, + nil, + ) + written += n + if err != nil { + return + } + n, err = writeOpenMetricsSample( + w, name, "_count", metric, "", 0, + 0, metric.Histogram.GetSampleCount(), true, + nil, + ) + default: + return written, fmt.Errorf( + "unexpected type in metric %s %s", name, metric, + ) + } + written += n + if err != nil { + return + } + } + return +} + +// FinalizeOpenMetrics writes the final `# EOF\n` line required by OpenMetrics. +func FinalizeOpenMetrics(w io.Writer) (written int, err error) { + return w.Write([]byte("# EOF\n")) +} + +// writeOpenMetricsSample writes a single sample in OpenMetrics text format to +// w, given the metric name, the metric proto message itself, optionally an +// additional label name with a float64 value (use empty string as label name if +// not required), the value (optionally as float64 or uint64, determined by +// useIntValue), and optionally an exemplar (use nil if not required). The +// function returns the number of bytes written and any error encountered. +func writeOpenMetricsSample( + w enhancedWriter, + name, suffix string, + metric *dto.Metric, + additionalLabelName string, additionalLabelValue float64, + floatValue float64, intValue uint64, useIntValue bool, + exemplar *dto.Exemplar, +) (int, error) { + var written int + n, err := w.WriteString(name) + written += n + if err != nil { + return written, err + } + if suffix != "" { + n, err = w.WriteString(suffix) + written += n + if err != nil { + return written, err + } + } + n, err = writeOpenMetricsLabelPairs( + w, metric.Label, additionalLabelName, additionalLabelValue, + ) + written += n + if err != nil { + return written, err + } + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + if useIntValue { + n, err = writeUint(w, intValue) + } else { + n, err = writeOpenMetricsFloat(w, floatValue) + } + written += n + if err != nil { + return written, err + } + if metric.TimestampMs != nil { + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + // TODO(beorn7): Format this directly without converting to a float first. + n, err = writeOpenMetricsFloat(w, float64(*metric.TimestampMs)/1000) + written += n + if err != nil { + return written, err + } + } + if exemplar != nil { + n, err = writeExemplar(w, exemplar) + written += n + if err != nil { + return written, err + } + } + err = w.WriteByte('\n') + written++ + if err != nil { + return written, err + } + return written, nil +} + +// writeOpenMetricsLabelPairs works like writeOpenMetrics but formats the float +// in OpenMetrics style. +func writeOpenMetricsLabelPairs( + w enhancedWriter, + in []*dto.LabelPair, + additionalLabelName string, additionalLabelValue float64, +) (int, error) { + if len(in) == 0 && additionalLabelName == "" { + return 0, nil + } + var ( + written int + separator byte = '{' + ) + for _, lp := range in { + err := w.WriteByte(separator) + written++ + if err != nil { + return written, err + } + n, err := w.WriteString(lp.GetName()) + written += n + if err != nil { + return written, err + } + n, err = w.WriteString(`="`) + written += n + if err != nil { + return written, err + } + n, err = writeEscapedString(w, lp.GetValue(), true) + written += n + if err != nil { + return written, err + } + err = w.WriteByte('"') + written++ + if err != nil { + return written, err + } + separator = ',' + } + if additionalLabelName != "" { + err := w.WriteByte(separator) + written++ + if err != nil { + return written, err + } + n, err := w.WriteString(additionalLabelName) + written += n + if err != nil { + return written, err + } + n, err = w.WriteString(`="`) + written += n + if err != nil { + return written, err + } + n, err = writeOpenMetricsFloat(w, additionalLabelValue) + written += n + if err != nil { + return written, err + } + err = w.WriteByte('"') + written++ + if err != nil { + return written, err + } + } + err := w.WriteByte('}') + written++ + if err != nil { + return written, err + } + return written, nil +} + +// writeExemplar writes the provided exemplar in OpenMetrics format to w. The +// function returns the number of bytes written and any error encountered. +func writeExemplar(w enhancedWriter, e *dto.Exemplar) (int, error) { + written := 0 + n, err := w.WriteString(" # ") + written += n + if err != nil { + return written, err + } + n, err = writeOpenMetricsLabelPairs(w, e.Label, "", 0) + written += n + if err != nil { + return written, err + } + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + n, err = writeOpenMetricsFloat(w, e.GetValue()) + written += n + if err != nil { + return written, err + } + if e.Timestamp != nil { + err = w.WriteByte(' ') + written++ + if err != nil { + return written, err + } + ts, err := ptypes.Timestamp((*e).Timestamp) + if err != nil { + return written, err + } + // TODO(beorn7): Format this directly from components of ts to + // avoid overflow/underflow and precision issues of the float + // conversion. + n, err = writeOpenMetricsFloat(w, float64(ts.UnixNano())/1e9) + written += n + if err != nil { + return written, err + } + } + return written, nil +} + +// writeOpenMetricsFloat works like writeFloat but appends ".0" if the resulting +// number would otherwise contain neither a "." nor an "e". +func writeOpenMetricsFloat(w enhancedWriter, f float64) (int, error) { + switch { + case f == 1: + return w.WriteString("1.0") + case f == 0: + return w.WriteString("0.0") + case f == -1: + return w.WriteString("-1.0") + case math.IsNaN(f): + return w.WriteString("NaN") + case math.IsInf(f, +1): + return w.WriteString("+Inf") + case math.IsInf(f, -1): + return w.WriteString("-Inf") + default: + bp := numBufPool.Get().(*[]byte) + *bp = strconv.AppendFloat((*bp)[:0], f, 'g', -1, 64) + if !bytes.ContainsAny(*bp, "e.") { + *bp = append(*bp, '.', '0') + } + written, err := w.Write(*bp) + numBufPool.Put(bp) + return written, err + } +} + +// writeUint is like writeInt just for uint64. +func writeUint(w enhancedWriter, u uint64) (int, error) { + bp := numBufPool.Get().(*[]byte) + *bp = strconv.AppendUint((*bp)[:0], u, 10) + written, err := w.Write(*bp) + numBufPool.Put(bp) + return written, err +} diff --git a/vendor/github.com/prometheus/common/expfmt/text_create.go b/vendor/github.com/prometheus/common/expfmt/text_create.go index 0327865ee..5ba503b06 100644 --- a/vendor/github.com/prometheus/common/expfmt/text_create.go +++ b/vendor/github.com/prometheus/common/expfmt/text_create.go @@ -423,9 +423,8 @@ var ( func writeEscapedString(w enhancedWriter, v string, includeDoubleQuote bool) (int, error) { if includeDoubleQuote { return quotedEscaper.WriteString(w, v) - } else { - return escaper.WriteString(w, v) } + return escaper.WriteString(w, v) } // writeFloat is equivalent to fmt.Fprint with a float64 argument but hardcodes diff --git a/vendor/github.com/prometheus/common/go.mod b/vendor/github.com/prometheus/common/go.mod index ccdb3ca54..de597e713 100644 --- a/vendor/github.com/prometheus/common/go.mod +++ b/vendor/github.com/prometheus/common/go.mod @@ -11,12 +11,12 @@ require ( github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223 github.com/pkg/errors v0.8.1 github.com/prometheus/client_golang v1.0.0 - github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 + github.com/prometheus/client_model v0.2.0 github.com/sirupsen/logrus v1.4.2 golang.org/x/net v0.0.0-20190613194153-d28f0bde5980 // indirect golang.org/x/sys v0.0.0-20190422165155-953cdadca894 gopkg.in/alecthomas/kingpin.v2 v2.2.6 - gopkg.in/yaml.v2 v2.2.2 + gopkg.in/yaml.v2 v2.2.4 ) go 1.11 diff --git a/vendor/github.com/prometheus/procfs/crypto.go b/vendor/github.com/prometheus/procfs/crypto.go index 19d4041b2..a95893375 100644 --- a/vendor/github.com/prometheus/procfs/crypto.go +++ b/vendor/github.com/prometheus/procfs/crypto.go @@ -14,10 +14,10 @@ package procfs import ( + "bufio" "bytes" "fmt" - "io/ioutil" - "strconv" + "io" "strings" "github.com/prometheus/procfs/internal/util" @@ -52,80 +52,102 @@ type Crypto struct { // structs containing the relevant info. More information available here: // https://kernel.readthedocs.io/en/sphinx-samples/crypto-API.html func (fs FS) Crypto() ([]Crypto, error) { - data, err := ioutil.ReadFile(fs.proc.Path("crypto")) + path := fs.proc.Path("crypto") + b, err := util.ReadFileNoStat(path) if err != nil { - return nil, fmt.Errorf("error parsing crypto %s: %s", fs.proc.Path("crypto"), err) + return nil, fmt.Errorf("error reading crypto %s: %s", path, err) } - crypto, err := parseCrypto(data) + + crypto, err := parseCrypto(bytes.NewReader(b)) if err != nil { - return nil, fmt.Errorf("error parsing crypto %s: %s", fs.proc.Path("crypto"), err) + return nil, fmt.Errorf("error parsing crypto %s: %s", path, err) } + return crypto, nil } -func parseCrypto(cryptoData []byte) ([]Crypto, error) { - crypto := []Crypto{} +// parseCrypto parses a /proc/crypto stream into Crypto elements. +func parseCrypto(r io.Reader) ([]Crypto, error) { + var out []Crypto - cryptoBlocks := bytes.Split(cryptoData, []byte("\n\n")) - - for _, block := range cryptoBlocks { - var newCryptoElem Crypto - - lines := strings.Split(string(block), "\n") - for _, line := range lines { - if strings.TrimSpace(line) == "" || line[0] == ' ' { - continue - } - fields := strings.Split(line, ":") - key := strings.TrimSpace(fields[0]) - value := strings.TrimSpace(fields[1]) - vp := util.NewValueParser(value) - - switch strings.TrimSpace(key) { - case "async": - b, err := strconv.ParseBool(value) - if err == nil { - newCryptoElem.Async = b - } - case "blocksize": - newCryptoElem.Blocksize = vp.PUInt64() - case "chunksize": - newCryptoElem.Chunksize = vp.PUInt64() - case "digestsize": - newCryptoElem.Digestsize = vp.PUInt64() - case "driver": - newCryptoElem.Driver = value - case "geniv": - newCryptoElem.Geniv = value - case "internal": - newCryptoElem.Internal = value - case "ivsize": - newCryptoElem.Ivsize = vp.PUInt64() - case "maxauthsize": - newCryptoElem.Maxauthsize = vp.PUInt64() - case "max keysize": - newCryptoElem.MaxKeysize = vp.PUInt64() - case "min keysize": - newCryptoElem.MinKeysize = vp.PUInt64() - case "module": - newCryptoElem.Module = value - case "name": - newCryptoElem.Name = value - case "priority": - newCryptoElem.Priority = vp.PInt64() - case "refcnt": - newCryptoElem.Refcnt = vp.PInt64() - case "seedsize": - newCryptoElem.Seedsize = vp.PUInt64() - case "selftest": - newCryptoElem.Selftest = value - case "type": - newCryptoElem.Type = value - case "walksize": - newCryptoElem.Walksize = vp.PUInt64() - } + s := bufio.NewScanner(r) + for s.Scan() { + text := s.Text() + switch { + case strings.HasPrefix(text, "name"): + // Each crypto element begins with its name. + out = append(out, Crypto{}) + case text == "": + continue + } + + kv := strings.Split(text, ":") + if len(kv) != 2 { + return nil, fmt.Errorf("malformed crypto line: %q", text) + } + + k := strings.TrimSpace(kv[0]) + v := strings.TrimSpace(kv[1]) + + // Parse the key/value pair into the currently focused element. + c := &out[len(out)-1] + if err := c.parseKV(k, v); err != nil { + return nil, err } - crypto = append(crypto, newCryptoElem) } - return crypto, nil + + if err := s.Err(); err != nil { + return nil, err + } + + return out, nil +} + +// parseKV parses a key/value pair into the appropriate field of c. +func (c *Crypto) parseKV(k, v string) error { + vp := util.NewValueParser(v) + + switch k { + case "async": + // Interpret literal yes as true. + c.Async = v == "yes" + case "blocksize": + c.Blocksize = vp.PUInt64() + case "chunksize": + c.Chunksize = vp.PUInt64() + case "digestsize": + c.Digestsize = vp.PUInt64() + case "driver": + c.Driver = v + case "geniv": + c.Geniv = v + case "internal": + c.Internal = v + case "ivsize": + c.Ivsize = vp.PUInt64() + case "maxauthsize": + c.Maxauthsize = vp.PUInt64() + case "max keysize": + c.MaxKeysize = vp.PUInt64() + case "min keysize": + c.MinKeysize = vp.PUInt64() + case "module": + c.Module = v + case "name": + c.Name = v + case "priority": + c.Priority = vp.PInt64() + case "refcnt": + c.Refcnt = vp.PInt64() + case "seedsize": + c.Seedsize = vp.PUInt64() + case "selftest": + c.Selftest = v + case "type": + c.Type = v + case "walksize": + c.Walksize = vp.PUInt64() + } + + return vp.Err() } diff --git a/vendor/github.com/prometheus/procfs/go.mod b/vendor/github.com/prometheus/procfs/go.mod index 0e04e5d1f..ded48253c 100644 --- a/vendor/github.com/prometheus/procfs/go.mod +++ b/vendor/github.com/prometheus/procfs/go.mod @@ -5,4 +5,5 @@ go 1.12 require ( github.com/google/go-cmp v0.3.1 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e + golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e ) diff --git a/vendor/github.com/prometheus/procfs/loadavg.go b/vendor/github.com/prometheus/procfs/loadavg.go new file mode 100644 index 000000000..00bbe1441 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/loadavg.go @@ -0,0 +1,62 @@ +// Copyright 2019 The Prometheus 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 procfs + +import ( + "fmt" + "strconv" + "strings" + + "github.com/prometheus/procfs/internal/util" +) + +// LoadAvg represents an entry in /proc/loadavg +type LoadAvg struct { + Load1 float64 + Load5 float64 + Load15 float64 +} + +// LoadAvg returns loadavg from /proc. +func (fs FS) LoadAvg() (*LoadAvg, error) { + path := fs.proc.Path("loadavg") + + data, err := util.ReadFileNoStat(path) + if err != nil { + return nil, err + } + return parseLoad(data) +} + +// Parse /proc loadavg and return 1m, 5m and 15m. +func parseLoad(loadavgBytes []byte) (*LoadAvg, error) { + loads := make([]float64, 3) + parts := strings.Fields(string(loadavgBytes)) + if len(parts) < 3 { + return nil, fmt.Errorf("malformed loadavg line: too few fields in loadavg string: %s", string(loadavgBytes)) + } + + var err error + for i, load := range parts[0:3] { + loads[i], err = strconv.ParseFloat(load, 64) + if err != nil { + return nil, fmt.Errorf("could not parse load '%s': %s", load, err) + } + } + return &LoadAvg{ + Load1: loads[0], + Load5: loads[1], + Load15: loads[2], + }, nil +} diff --git a/vendor/github.com/prometheus/procfs/mountinfo.go b/vendor/github.com/prometheus/procfs/mountinfo.go index bb01bb5a2..947113610 100644 --- a/vendor/github.com/prometheus/procfs/mountinfo.go +++ b/vendor/github.com/prometheus/procfs/mountinfo.go @@ -29,10 +29,10 @@ import ( // is described in the following man page. // http://man7.org/linux/man-pages/man5/proc.5.html type MountInfo struct { - // Unique Id for the mount - MountId int - // The Id of the parent mount - ParentId int + // Unique ID for the mount + MountID int + // The ID of the parent mount + ParentID int // The value of `st_dev` for the files on this FS MajorMinorVer string // The pathname of the directory in the FS that forms @@ -96,11 +96,11 @@ func parseMountInfoString(mountString string) (*MountInfo, error) { SuperOptions: mountOptionsParser(mountInfo[mountInfoLength-1]), } - mount.MountId, err = strconv.Atoi(mountInfo[0]) + mount.MountID, err = strconv.Atoi(mountInfo[0]) if err != nil { return nil, fmt.Errorf("failed to parse mount ID") } - mount.ParentId, err = strconv.Atoi(mountInfo[1]) + mount.ParentID, err = strconv.Atoi(mountInfo[1]) if err != nil { return nil, fmt.Errorf("failed to parse parent ID") } diff --git a/vendor/github.com/prometheus/procfs/net_conntrackstat.go b/vendor/github.com/prometheus/procfs/net_conntrackstat.go new file mode 100644 index 000000000..1e27c83d5 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/net_conntrackstat.go @@ -0,0 +1,153 @@ +// Copyright 2020 The Prometheus 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 procfs + +import ( + "bufio" + "bytes" + "fmt" + "io" + "strconv" + "strings" + + "github.com/prometheus/procfs/internal/util" +) + +// A ConntrackStatEntry represents one line from net/stat/nf_conntrack +// and contains netfilter conntrack statistics at one CPU core +type ConntrackStatEntry struct { + Entries uint64 + Found uint64 + Invalid uint64 + Ignore uint64 + Insert uint64 + InsertFailed uint64 + Drop uint64 + EarlyDrop uint64 + SearchRestart uint64 +} + +// Retrieves netfilter's conntrack statistics, split by CPU cores +func (fs FS) ConntrackStat() ([]ConntrackStatEntry, error) { + return readConntrackStat(fs.proc.Path("net", "stat", "nf_conntrack")) +} + +// Parses a slice of ConntrackStatEntries from the given filepath +func readConntrackStat(path string) ([]ConntrackStatEntry, error) { + // This file is small and can be read with one syscall. + b, err := util.ReadFileNoStat(path) + if err != nil { + // Do not wrap this error so the caller can detect os.IsNotExist and + // similar conditions. + return nil, err + } + + stat, err := parseConntrackStat(bytes.NewReader(b)) + if err != nil { + return nil, fmt.Errorf("failed to read conntrack stats from %q: %v", path, err) + } + + return stat, nil +} + +// Reads the contents of a conntrack statistics file and parses a slice of ConntrackStatEntries +func parseConntrackStat(r io.Reader) ([]ConntrackStatEntry, error) { + var entries []ConntrackStatEntry + + scanner := bufio.NewScanner(r) + scanner.Scan() + for scanner.Scan() { + fields := strings.Fields(scanner.Text()) + conntrackEntry, err := parseConntrackStatEntry(fields) + if err != nil { + return nil, err + } + entries = append(entries, *conntrackEntry) + } + + return entries, nil +} + +// Parses a ConntrackStatEntry from given array of fields +func parseConntrackStatEntry(fields []string) (*ConntrackStatEntry, error) { + if len(fields) != 17 { + return nil, fmt.Errorf("invalid conntrackstat entry, missing fields") + } + entry := &ConntrackStatEntry{} + + entries, err := parseConntrackStatField(fields[0]) + if err != nil { + return nil, err + } + entry.Entries = entries + + found, err := parseConntrackStatField(fields[2]) + if err != nil { + return nil, err + } + entry.Found = found + + invalid, err := parseConntrackStatField(fields[4]) + if err != nil { + return nil, err + } + entry.Invalid = invalid + + ignore, err := parseConntrackStatField(fields[5]) + if err != nil { + return nil, err + } + entry.Ignore = ignore + + insert, err := parseConntrackStatField(fields[8]) + if err != nil { + return nil, err + } + entry.Insert = insert + + insertFailed, err := parseConntrackStatField(fields[9]) + if err != nil { + return nil, err + } + entry.InsertFailed = insertFailed + + drop, err := parseConntrackStatField(fields[10]) + if err != nil { + return nil, err + } + entry.Drop = drop + + earlyDrop, err := parseConntrackStatField(fields[11]) + if err != nil { + return nil, err + } + entry.EarlyDrop = earlyDrop + + searchRestart, err := parseConntrackStatField(fields[16]) + if err != nil { + return nil, err + } + entry.SearchRestart = searchRestart + + return entry, nil +} + +// Parses a uint64 from given hex in string +func parseConntrackStatField(field string) (uint64, error) { + val, err := strconv.ParseUint(field, 16, 64) + if err != nil { + return 0, fmt.Errorf("couldn't parse \"%s\" field: %s", field, err) + } + return val, err +} diff --git a/vendor/github.com/prometheus/procfs/net_softnet.go b/vendor/github.com/prometheus/procfs/net_softnet.go index 6fcad20af..db5debdf4 100644 --- a/vendor/github.com/prometheus/procfs/net_softnet.go +++ b/vendor/github.com/prometheus/procfs/net_softnet.go @@ -14,78 +14,89 @@ package procfs import ( + "bufio" + "bytes" "fmt" - "io/ioutil" + "io" "strconv" "strings" + + "github.com/prometheus/procfs/internal/util" ) // For the proc file format details, -// see https://elixir.bootlin.com/linux/v4.17/source/net/core/net-procfs.c#L162 +// See: +// * Linux 2.6.23 https://elixir.bootlin.com/linux/v2.6.23/source/net/core/dev.c#L2343 +// * Linux 4.17 https://elixir.bootlin.com/linux/v4.17/source/net/core/net-procfs.c#L162 // and https://elixir.bootlin.com/linux/v4.17/source/include/linux/netdevice.h#L2810. -// SoftnetEntry contains a single row of data from /proc/net/softnet_stat -type SoftnetEntry struct { +// SoftnetStat contains a single row of data from /proc/net/softnet_stat +type SoftnetStat struct { // Number of processed packets - Processed uint + Processed uint32 // Number of dropped packets - Dropped uint + Dropped uint32 // Number of times processing packets ran out of quota - TimeSqueezed uint + TimeSqueezed uint32 } -// GatherSoftnetStats reads /proc/net/softnet_stat, parse the relevant columns, -// and then return a slice of SoftnetEntry's. -func (fs FS) GatherSoftnetStats() ([]SoftnetEntry, error) { - data, err := ioutil.ReadFile(fs.proc.Path("net/softnet_stat")) +var softNetProcFile = "net/softnet_stat" + +// NetSoftnetStat reads data from /proc/net/softnet_stat. +func (fs FS) NetSoftnetStat() ([]SoftnetStat, error) { + b, err := util.ReadFileNoStat(fs.proc.Path(softNetProcFile)) if err != nil { - return nil, fmt.Errorf("error reading softnet %s: %s", fs.proc.Path("net/softnet_stat"), err) + return nil, err } - return parseSoftnetEntries(data) -} - -func parseSoftnetEntries(data []byte) ([]SoftnetEntry, error) { - lines := strings.Split(string(data), "\n") - entries := make([]SoftnetEntry, 0) - var err error - const ( - expectedColumns = 11 - ) - for _, line := range lines { - columns := strings.Fields(line) - width := len(columns) - if width == 0 { - continue - } - if width != expectedColumns { - return []SoftnetEntry{}, fmt.Errorf("%d columns were detected, but %d were expected", width, expectedColumns) - } - var entry SoftnetEntry - if entry, err = parseSoftnetEntry(columns); err != nil { - return []SoftnetEntry{}, err - } - entries = append(entries, entry) + entries, err := parseSoftnet(bytes.NewReader(b)) + if err != nil { + return nil, fmt.Errorf("failed to parse /proc/net/softnet_stat: %v", err) } return entries, nil } -func parseSoftnetEntry(columns []string) (SoftnetEntry, error) { - var err error - var processed, dropped, timeSqueezed uint64 - if processed, err = strconv.ParseUint(columns[0], 16, 32); err != nil { - return SoftnetEntry{}, fmt.Errorf("Unable to parse column 0: %s", err) +func parseSoftnet(r io.Reader) ([]SoftnetStat, error) { + const minColumns = 9 + + s := bufio.NewScanner(r) + + var stats []SoftnetStat + for s.Scan() { + columns := strings.Fields(s.Text()) + width := len(columns) + + if width < minColumns { + return nil, fmt.Errorf("%d columns were detected, but at least %d were expected", width, minColumns) + } + + // We only parse the first three columns at the moment. + us, err := parseHexUint32s(columns[0:3]) + if err != nil { + return nil, err + } + + stats = append(stats, SoftnetStat{ + Processed: us[0], + Dropped: us[1], + TimeSqueezed: us[2], + }) } - if dropped, err = strconv.ParseUint(columns[1], 16, 32); err != nil { - return SoftnetEntry{}, fmt.Errorf("Unable to parse column 1: %s", err) - } - if timeSqueezed, err = strconv.ParseUint(columns[2], 16, 32); err != nil { - return SoftnetEntry{}, fmt.Errorf("Unable to parse column 2: %s", err) - } - return SoftnetEntry{ - Processed: uint(processed), - Dropped: uint(dropped), - TimeSqueezed: uint(timeSqueezed), - }, nil + + return stats, nil +} + +func parseHexUint32s(ss []string) ([]uint32, error) { + us := make([]uint32, 0, len(ss)) + for _, s := range ss { + u, err := strconv.ParseUint(s, 16, 32) + if err != nil { + return nil, err + } + + us = append(us, uint32(u)) + } + + return us, nil } diff --git a/vendor/github.com/prometheus/procfs/net_udp.go b/vendor/github.com/prometheus/procfs/net_udp.go new file mode 100644 index 000000000..d017e3f18 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/net_udp.go @@ -0,0 +1,229 @@ +// Copyright 2020 The Prometheus 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 procfs + +import ( + "bufio" + "encoding/hex" + "fmt" + "io" + "net" + "os" + "strconv" + "strings" +) + +const ( + // readLimit is used by io.LimitReader while reading the content of the + // /proc/net/udp{,6} files. The number of lines inside such a file is dynamic + // as each line represents a single used socket. + // In theory, the number of available sockets is 65535 (2^16 - 1) per IP. + // With e.g. 150 Byte per line and the maximum number of 65535, + // the reader needs to handle 150 Byte * 65535 =~ 10 MB for a single IP. + readLimit = 4294967296 // Byte -> 4 GiB +) + +type ( + // NetUDP represents the contents of /proc/net/udp{,6} file without the header. + NetUDP []*netUDPLine + + // NetUDPSummary provides already computed values like the total queue lengths or + // the total number of used sockets. In contrast to NetUDP it does not collect + // the parsed lines into a slice. + NetUDPSummary struct { + // TxQueueLength shows the total queue length of all parsed tx_queue lengths. + TxQueueLength uint64 + // RxQueueLength shows the total queue length of all parsed rx_queue lengths. + RxQueueLength uint64 + // UsedSockets shows the total number of parsed lines representing the + // number of used sockets. + UsedSockets uint64 + } + + // netUDPLine represents the fields parsed from a single line + // in /proc/net/udp{,6}. Fields which are not used by UDP are skipped. + // For the proc file format details, see https://linux.die.net/man/5/proc. + netUDPLine struct { + Sl uint64 + LocalAddr net.IP + LocalPort uint64 + RemAddr net.IP + RemPort uint64 + St uint64 + TxQueue uint64 + RxQueue uint64 + UID uint64 + } +) + +// NetUDP returns the IPv4 kernel/networking statistics for UDP datagrams +// read from /proc/net/udp. +func (fs FS) NetUDP() (NetUDP, error) { + return newNetUDP(fs.proc.Path("net/udp")) +} + +// NetUDP6 returns the IPv6 kernel/networking statistics for UDP datagrams +// read from /proc/net/udp6. +func (fs FS) NetUDP6() (NetUDP, error) { + return newNetUDP(fs.proc.Path("net/udp6")) +} + +// NetUDPSummary returns already computed statistics like the total queue lengths +// for UDP datagrams read from /proc/net/udp. +func (fs FS) NetUDPSummary() (*NetUDPSummary, error) { + return newNetUDPSummary(fs.proc.Path("net/udp")) +} + +// NetUDP6Summary returns already computed statistics like the total queue lengths +// for UDP datagrams read from /proc/net/udp6. +func (fs FS) NetUDP6Summary() (*NetUDPSummary, error) { + return newNetUDPSummary(fs.proc.Path("net/udp6")) +} + +// newNetUDP creates a new NetUDP{,6} from the contents of the given file. +func newNetUDP(file string) (NetUDP, error) { + f, err := os.Open(file) + if err != nil { + return nil, err + } + defer f.Close() + + netUDP := NetUDP{} + + lr := io.LimitReader(f, readLimit) + s := bufio.NewScanner(lr) + s.Scan() // skip first line with headers + for s.Scan() { + fields := strings.Fields(s.Text()) + line, err := parseNetUDPLine(fields) + if err != nil { + return nil, err + } + netUDP = append(netUDP, line) + } + if err := s.Err(); err != nil { + return nil, err + } + return netUDP, nil +} + +// newNetUDPSummary creates a new NetUDP{,6} from the contents of the given file. +func newNetUDPSummary(file string) (*NetUDPSummary, error) { + f, err := os.Open(file) + if err != nil { + return nil, err + } + defer f.Close() + + netUDPSummary := &NetUDPSummary{} + + lr := io.LimitReader(f, readLimit) + s := bufio.NewScanner(lr) + s.Scan() // skip first line with headers + for s.Scan() { + fields := strings.Fields(s.Text()) + line, err := parseNetUDPLine(fields) + if err != nil { + return nil, err + } + netUDPSummary.TxQueueLength += line.TxQueue + netUDPSummary.RxQueueLength += line.RxQueue + netUDPSummary.UsedSockets++ + } + if err := s.Err(); err != nil { + return nil, err + } + return netUDPSummary, nil +} + +// parseNetUDPLine parses a single line, represented by a list of fields. +func parseNetUDPLine(fields []string) (*netUDPLine, error) { + line := &netUDPLine{} + if len(fields) < 8 { + return nil, fmt.Errorf( + "cannot parse net udp socket line as it has less then 8 columns: %s", + strings.Join(fields, " "), + ) + } + var err error // parse error + + // sl + s := strings.Split(fields[0], ":") + if len(s) != 2 { + return nil, fmt.Errorf( + "cannot parse sl field in udp socket line: %s", fields[0]) + } + + if line.Sl, err = strconv.ParseUint(s[0], 0, 64); err != nil { + return nil, fmt.Errorf("cannot parse sl value in udp socket line: %s", err) + } + // local_address + l := strings.Split(fields[1], ":") + if len(l) != 2 { + return nil, fmt.Errorf( + "cannot parse local_address field in udp socket line: %s", fields[1]) + } + if line.LocalAddr, err = hex.DecodeString(l[0]); err != nil { + return nil, fmt.Errorf( + "cannot parse local_address value in udp socket line: %s", err) + } + if line.LocalPort, err = strconv.ParseUint(l[1], 16, 64); err != nil { + return nil, fmt.Errorf( + "cannot parse local_address port value in udp socket line: %s", err) + } + + // remote_address + r := strings.Split(fields[2], ":") + if len(r) != 2 { + return nil, fmt.Errorf( + "cannot parse rem_address field in udp socket line: %s", fields[1]) + } + if line.RemAddr, err = hex.DecodeString(r[0]); err != nil { + return nil, fmt.Errorf( + "cannot parse rem_address value in udp socket line: %s", err) + } + if line.RemPort, err = strconv.ParseUint(r[1], 16, 64); err != nil { + return nil, fmt.Errorf( + "cannot parse rem_address port value in udp socket line: %s", err) + } + + // st + if line.St, err = strconv.ParseUint(fields[3], 16, 64); err != nil { + return nil, fmt.Errorf( + "cannot parse st value in udp socket line: %s", err) + } + + // tx_queue and rx_queue + q := strings.Split(fields[4], ":") + if len(q) != 2 { + return nil, fmt.Errorf( + "cannot parse tx/rx queues in udp socket line as it has a missing colon: %s", + fields[4], + ) + } + if line.TxQueue, err = strconv.ParseUint(q[0], 16, 64); err != nil { + return nil, fmt.Errorf("cannot parse tx_queue value in udp socket line: %s", err) + } + if line.RxQueue, err = strconv.ParseUint(q[1], 16, 64); err != nil { + return nil, fmt.Errorf("cannot parse rx_queue value in udp socket line: %s", err) + } + + // uid + if line.UID, err = strconv.ParseUint(fields[7], 0, 64); err != nil { + return nil, fmt.Errorf( + "cannot parse uid value in udp socket line: %s", err) + } + + return line, nil +} diff --git a/vendor/github.com/prometheus/procfs/net_unix.go b/vendor/github.com/prometheus/procfs/net_unix.go index 93bd58f80..c55b4b18e 100644 --- a/vendor/github.com/prometheus/procfs/net_unix.go +++ b/vendor/github.com/prometheus/procfs/net_unix.go @@ -15,7 +15,6 @@ package procfs import ( "bufio" - "errors" "fmt" "io" "os" @@ -27,25 +26,15 @@ import ( // see https://elixir.bootlin.com/linux/v4.17/source/net/unix/af_unix.c#L2815 // and https://elixir.bootlin.com/linux/latest/source/include/uapi/linux/net.h#L48. -const ( - netUnixKernelPtrIdx = iota - netUnixRefCountIdx - _ - netUnixFlagsIdx - netUnixTypeIdx - netUnixStateIdx - netUnixInodeIdx - - // Inode and Path are optional. - netUnixStaticFieldsCnt = 6 -) - +// Constants for the various /proc/net/unix enumerations. +// TODO: match against x/sys/unix or similar? const ( netUnixTypeStream = 1 netUnixTypeDgram = 2 netUnixTypeSeqpacket = 5 - netUnixFlagListen = 1 << 16 + netUnixFlagDefault = 0 + netUnixFlagListen = 1 << 16 netUnixStateUnconnected = 1 netUnixStateConnecting = 2 @@ -53,129 +42,127 @@ const ( netUnixStateDisconnected = 4 ) -var errInvalidKernelPtrFmt = errors.New("Invalid Num(the kernel table slot number) format") +// NetUNIXType is the type of the type field. +type NetUNIXType uint64 -// NetUnixType is the type of the type field. -type NetUnixType uint64 +// NetUNIXFlags is the type of the flags field. +type NetUNIXFlags uint64 -// NetUnixFlags is the type of the flags field. -type NetUnixFlags uint64 +// NetUNIXState is the type of the state field. +type NetUNIXState uint64 -// NetUnixState is the type of the state field. -type NetUnixState uint64 - -// NetUnixLine represents a line of /proc/net/unix. -type NetUnixLine struct { +// NetUNIXLine represents a line of /proc/net/unix. +type NetUNIXLine struct { KernelPtr string RefCount uint64 Protocol uint64 - Flags NetUnixFlags - Type NetUnixType - State NetUnixState + Flags NetUNIXFlags + Type NetUNIXType + State NetUNIXState Inode uint64 Path string } -// NetUnix holds the data read from /proc/net/unix. -type NetUnix struct { - Rows []*NetUnixLine +// NetUNIX holds the data read from /proc/net/unix. +type NetUNIX struct { + Rows []*NetUNIXLine } -// NewNetUnix returns data read from /proc/net/unix. -func NewNetUnix() (*NetUnix, error) { - fs, err := NewFS(DefaultMountPoint) - if err != nil { - return nil, err - } - - return fs.NewNetUnix() +// NetUNIX returns data read from /proc/net/unix. +func (fs FS) NetUNIX() (*NetUNIX, error) { + return readNetUNIX(fs.proc.Path("net/unix")) } -// NewNetUnix returns data read from /proc/net/unix. -func (fs FS) NewNetUnix() (*NetUnix, error) { - return NewNetUnixByPath(fs.proc.Path("net/unix")) -} - -// NewNetUnixByPath returns data read from /proc/net/unix by file path. -// It might returns an error with partial parsed data, if an error occur after some data parsed. -func NewNetUnixByPath(path string) (*NetUnix, error) { - f, err := os.Open(path) +// readNetUNIX reads data in /proc/net/unix format from the specified file. +func readNetUNIX(file string) (*NetUNIX, error) { + // This file could be quite large and a streaming read is desirable versus + // reading the entire contents at once. + f, err := os.Open(file) if err != nil { return nil, err } defer f.Close() - return NewNetUnixByReader(f) + + return parseNetUNIX(f) } -// NewNetUnixByReader returns data read from /proc/net/unix by a reader. -// It might returns an error with partial parsed data, if an error occur after some data parsed. -func NewNetUnixByReader(reader io.Reader) (*NetUnix, error) { - nu := &NetUnix{ - Rows: make([]*NetUnixLine, 0, 32), - } - scanner := bufio.NewScanner(reader) - // Omit the header line. - scanner.Scan() - header := scanner.Text() - // From the man page of proc(5), it does not contain an Inode field, - // but in actually it exists. - // This code works for both cases. - hasInode := strings.Contains(header, "Inode") +// parseNetUNIX creates a NetUnix structure from the incoming stream. +func parseNetUNIX(r io.Reader) (*NetUNIX, error) { + // Begin scanning by checking for the existence of Inode. + s := bufio.NewScanner(r) + s.Scan() - minFieldsCnt := netUnixStaticFieldsCnt + // From the man page of proc(5), it does not contain an Inode field, + // but in actually it exists. This code works for both cases. + hasInode := strings.Contains(s.Text(), "Inode") + + // Expect a minimum number of fields, but Inode and Path are optional: + // Num RefCount Protocol Flags Type St Inode Path + minFields := 6 if hasInode { - minFieldsCnt++ + minFields++ } - for scanner.Scan() { - line := scanner.Text() - item, err := nu.parseLine(line, hasInode, minFieldsCnt) + + var nu NetUNIX + for s.Scan() { + line := s.Text() + item, err := nu.parseLine(line, hasInode, minFields) if err != nil { - return nu, err + return nil, fmt.Errorf("failed to parse /proc/net/unix data %q: %v", line, err) } + nu.Rows = append(nu.Rows, item) } - return nu, scanner.Err() + if err := s.Err(); err != nil { + return nil, fmt.Errorf("failed to scan /proc/net/unix data: %v", err) + } + + return &nu, nil } -func (u *NetUnix) parseLine(line string, hasInode bool, minFieldsCnt int) (*NetUnixLine, error) { +func (u *NetUNIX) parseLine(line string, hasInode bool, min int) (*NetUNIXLine, error) { fields := strings.Fields(line) - fieldsLen := len(fields) - if fieldsLen < minFieldsCnt { - return nil, fmt.Errorf( - "Parse Unix domain failed: expect at least %d fields but got %d", - minFieldsCnt, fieldsLen) + + l := len(fields) + if l < min { + return nil, fmt.Errorf("expected at least %d fields but got %d", min, l) } - kernelPtr, err := u.parseKernelPtr(fields[netUnixKernelPtrIdx]) + + // Field offsets are as follows: + // Num RefCount Protocol Flags Type St Inode Path + + kernelPtr := strings.TrimSuffix(fields[0], ":") + + users, err := u.parseUsers(fields[1]) if err != nil { - return nil, fmt.Errorf("Parse Unix domain num(%s) failed: %s", fields[netUnixKernelPtrIdx], err) + return nil, fmt.Errorf("failed to parse ref count(%s): %v", fields[1], err) } - users, err := u.parseUsers(fields[netUnixRefCountIdx]) + + flags, err := u.parseFlags(fields[3]) if err != nil { - return nil, fmt.Errorf("Parse Unix domain ref count(%s) failed: %s", fields[netUnixRefCountIdx], err) + return nil, fmt.Errorf("failed to parse flags(%s): %v", fields[3], err) } - flags, err := u.parseFlags(fields[netUnixFlagsIdx]) + + typ, err := u.parseType(fields[4]) if err != nil { - return nil, fmt.Errorf("Parse Unix domain flags(%s) failed: %s", fields[netUnixFlagsIdx], err) + return nil, fmt.Errorf("failed to parse type(%s): %v", fields[4], err) } - typ, err := u.parseType(fields[netUnixTypeIdx]) + + state, err := u.parseState(fields[5]) if err != nil { - return nil, fmt.Errorf("Parse Unix domain type(%s) failed: %s", fields[netUnixTypeIdx], err) - } - state, err := u.parseState(fields[netUnixStateIdx]) - if err != nil { - return nil, fmt.Errorf("Parse Unix domain state(%s) failed: %s", fields[netUnixStateIdx], err) + return nil, fmt.Errorf("failed to parse state(%s): %v", fields[5], err) } + var inode uint64 if hasInode { - inodeStr := fields[netUnixInodeIdx] - inode, err = u.parseInode(inodeStr) + inode, err = u.parseInode(fields[6]) if err != nil { - return nil, fmt.Errorf("Parse Unix domain inode(%s) failed: %s", inodeStr, err) + return nil, fmt.Errorf("failed to parse inode(%s): %v", fields[6], err) } } - nuLine := &NetUnixLine{ + n := &NetUNIXLine{ KernelPtr: kernelPtr, RefCount: users, Type: typ, @@ -185,57 +172,56 @@ func (u *NetUnix) parseLine(line string, hasInode bool, minFieldsCnt int) (*NetU } // Path field is optional. - if fieldsLen > minFieldsCnt { - pathIdx := netUnixInodeIdx + 1 + if l > min { + // Path occurs at either index 6 or 7 depending on whether inode is + // already present. + pathIdx := 7 if !hasInode { pathIdx-- } - nuLine.Path = fields[pathIdx] + + n.Path = fields[pathIdx] } - return nuLine, nil + return n, nil } -func (u NetUnix) parseKernelPtr(str string) (string, error) { - if !strings.HasSuffix(str, ":") { - return "", errInvalidKernelPtrFmt - } - return str[:len(str)-1], nil +func (u NetUNIX) parseUsers(s string) (uint64, error) { + return strconv.ParseUint(s, 16, 32) } -func (u NetUnix) parseUsers(hexStr string) (uint64, error) { - return strconv.ParseUint(hexStr, 16, 32) -} - -func (u NetUnix) parseType(hexStr string) (NetUnixType, error) { - typ, err := strconv.ParseUint(hexStr, 16, 16) +func (u NetUNIX) parseType(s string) (NetUNIXType, error) { + typ, err := strconv.ParseUint(s, 16, 16) if err != nil { return 0, err } - return NetUnixType(typ), nil + + return NetUNIXType(typ), nil } -func (u NetUnix) parseFlags(hexStr string) (NetUnixFlags, error) { - flags, err := strconv.ParseUint(hexStr, 16, 32) +func (u NetUNIX) parseFlags(s string) (NetUNIXFlags, error) { + flags, err := strconv.ParseUint(s, 16, 32) if err != nil { return 0, err } - return NetUnixFlags(flags), nil + + return NetUNIXFlags(flags), nil } -func (u NetUnix) parseState(hexStr string) (NetUnixState, error) { - st, err := strconv.ParseInt(hexStr, 16, 8) +func (u NetUNIX) parseState(s string) (NetUNIXState, error) { + st, err := strconv.ParseInt(s, 16, 8) if err != nil { return 0, err } - return NetUnixState(st), nil + + return NetUNIXState(st), nil } -func (u NetUnix) parseInode(inodeStr string) (uint64, error) { - return strconv.ParseUint(inodeStr, 10, 64) +func (u NetUNIX) parseInode(s string) (uint64, error) { + return strconv.ParseUint(s, 10, 64) } -func (t NetUnixType) String() string { +func (t NetUNIXType) String() string { switch t { case netUnixTypeStream: return "stream" @@ -247,7 +233,7 @@ func (t NetUnixType) String() string { return "unknown" } -func (f NetUnixFlags) String() string { +func (f NetUNIXFlags) String() string { switch f { case netUnixFlagListen: return "listen" @@ -256,7 +242,7 @@ func (f NetUnixFlags) String() string { } } -func (s NetUnixState) String() string { +func (s NetUNIXState) String() string { switch s { case netUnixStateUnconnected: return "unconnected" diff --git a/vendor/github.com/prometheus/procfs/proc_fdinfo.go b/vendor/github.com/prometheus/procfs/proc_fdinfo.go index 4e7597f86..0c9c40285 100644 --- a/vendor/github.com/prometheus/procfs/proc_fdinfo.go +++ b/vendor/github.com/prometheus/procfs/proc_fdinfo.go @@ -16,6 +16,7 @@ package procfs import ( "bufio" "bytes" + "errors" "regexp" "github.com/prometheus/procfs/internal/util" @@ -23,10 +24,11 @@ import ( // Regexp variables var ( - rPos = regexp.MustCompile(`^pos:\s+(\d+)$`) - rFlags = regexp.MustCompile(`^flags:\s+(\d+)$`) - rMntID = regexp.MustCompile(`^mnt_id:\s+(\d+)$`) - rInotify = regexp.MustCompile(`^inotify`) + rPos = regexp.MustCompile(`^pos:\s+(\d+)$`) + rFlags = regexp.MustCompile(`^flags:\s+(\d+)$`) + rMntID = regexp.MustCompile(`^mnt_id:\s+(\d+)$`) + rInotify = regexp.MustCompile(`^inotify`) + rInotifyParts = regexp.MustCompile(`^inotify\s+wd:([0-9a-f]+)\s+ino:([0-9a-f]+)\s+sdev:([0-9a-f]+)(?:\s+mask:([0-9a-f]+))?`) ) // ProcFDInfo contains represents file descriptor information. @@ -96,15 +98,21 @@ type InotifyInfo struct { // InotifyInfo constructor. Only available on kernel 3.8+. func parseInotifyInfo(line string) (*InotifyInfo, error) { - r := regexp.MustCompile(`^inotify\s+wd:([0-9a-f]+)\s+ino:([0-9a-f]+)\s+sdev:([0-9a-f]+)\s+mask:([0-9a-f]+)`) - m := r.FindStringSubmatch(line) - i := &InotifyInfo{ - WD: m[1], - Ino: m[2], - Sdev: m[3], - Mask: m[4], + m := rInotifyParts.FindStringSubmatch(line) + if len(m) >= 4 { + var mask string + if len(m) == 5 { + mask = m[4] + } + i := &InotifyInfo{ + WD: m[1], + Ino: m[2], + Sdev: m[3], + Mask: mask, + } + return i, nil } - return i, nil + return nil, errors.New("invalid inode entry: " + line) } // ProcFDInfos represents a list of ProcFDInfo structs. diff --git a/vendor/github.com/prometheus/procfs/proc_maps.go b/vendor/github.com/prometheus/procfs/proc_maps.go new file mode 100644 index 000000000..28d5c6eb1 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/proc_maps.go @@ -0,0 +1,208 @@ +// Copyright 2019 The Prometheus 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. + +// +build !windows + +package procfs + +import ( + "bufio" + "fmt" + "os" + "strconv" + "strings" + + "golang.org/x/sys/unix" +) + +type ProcMapPermissions struct { + // mapping has the [R]ead flag set + Read bool + // mapping has the [W]rite flag set + Write bool + // mapping has the [X]ecutable flag set + Execute bool + // mapping has the [S]hared flag set + Shared bool + // mapping is marked as [P]rivate (copy on write) + Private bool +} + +// ProcMap contains the process memory-mappings of the process, +// read from /proc/[pid]/maps +type ProcMap struct { + // The start address of current mapping. + StartAddr uintptr + // The end address of the current mapping + EndAddr uintptr + // The permissions for this mapping + Perms *ProcMapPermissions + // The current offset into the file/fd (e.g., shared libs) + Offset int64 + // Device owner of this mapping (major:minor) in Mkdev format. + Dev uint64 + // The inode of the device above + Inode uint64 + // The file or psuedofile (or empty==anonymous) + Pathname string +} + +// parseDevice parses the device token of a line and converts it to a dev_t +// (mkdev) like structure. +func parseDevice(s string) (uint64, error) { + toks := strings.Split(s, ":") + if len(toks) < 2 { + return 0, fmt.Errorf("unexpected number of fields") + } + + major, err := strconv.ParseUint(toks[0], 16, 0) + if err != nil { + return 0, err + } + + minor, err := strconv.ParseUint(toks[1], 16, 0) + if err != nil { + return 0, err + } + + return unix.Mkdev(uint32(major), uint32(minor)), nil +} + +// parseAddress just converts a hex-string to a uintptr +func parseAddress(s string) (uintptr, error) { + a, err := strconv.ParseUint(s, 16, 0) + if err != nil { + return 0, err + } + + return uintptr(a), nil +} + +// parseAddresses parses the start-end address +func parseAddresses(s string) (uintptr, uintptr, error) { + toks := strings.Split(s, "-") + if len(toks) < 2 { + return 0, 0, fmt.Errorf("invalid address") + } + + saddr, err := parseAddress(toks[0]) + if err != nil { + return 0, 0, err + } + + eaddr, err := parseAddress(toks[1]) + if err != nil { + return 0, 0, err + } + + return saddr, eaddr, nil +} + +// parsePermissions parses a token and returns any that are set. +func parsePermissions(s string) (*ProcMapPermissions, error) { + if len(s) < 4 { + return nil, fmt.Errorf("invalid permissions token") + } + + perms := ProcMapPermissions{} + for _, ch := range s { + switch ch { + case 'r': + perms.Read = true + case 'w': + perms.Write = true + case 'x': + perms.Execute = true + case 'p': + perms.Private = true + case 's': + perms.Shared = true + } + } + + return &perms, nil +} + +// parseProcMap will attempt to parse a single line within a proc/[pid]/maps +// buffer. +func parseProcMap(text string) (*ProcMap, error) { + fields := strings.Fields(text) + if len(fields) < 5 { + return nil, fmt.Errorf("truncated procmap entry") + } + + saddr, eaddr, err := parseAddresses(fields[0]) + if err != nil { + return nil, err + } + + perms, err := parsePermissions(fields[1]) + if err != nil { + return nil, err + } + + offset, err := strconv.ParseInt(fields[2], 16, 0) + if err != nil { + return nil, err + } + + device, err := parseDevice(fields[3]) + if err != nil { + return nil, err + } + + inode, err := strconv.ParseUint(fields[4], 10, 0) + if err != nil { + return nil, err + } + + pathname := "" + + if len(fields) >= 5 { + pathname = strings.Join(fields[5:], " ") + } + + return &ProcMap{ + StartAddr: saddr, + EndAddr: eaddr, + Perms: perms, + Offset: offset, + Dev: device, + Inode: inode, + Pathname: pathname, + }, nil +} + +// ProcMaps reads from /proc/[pid]/maps to get the memory-mappings of the +// process. +func (p Proc) ProcMaps() ([]*ProcMap, error) { + file, err := os.Open(p.path("maps")) + if err != nil { + return nil, err + } + defer file.Close() + + maps := []*ProcMap{} + scan := bufio.NewScanner(file) + + for scan.Scan() { + m, err := parseProcMap(scan.Text()) + if err != nil { + return nil, err + } + + maps = append(maps, m) + } + + return maps, nil +} diff --git a/vendor/github.com/prometheus/procfs/proc_status.go b/vendor/github.com/prometheus/procfs/proc_status.go index e30c2b88f..c58346d91 100644 --- a/vendor/github.com/prometheus/procfs/proc_status.go +++ b/vendor/github.com/prometheus/procfs/proc_status.go @@ -33,37 +33,37 @@ type ProcStatus struct { TGID int // Peak virtual memory size. - VmPeak uint64 + VmPeak uint64 // nolint:golint // Virtual memory size. - VmSize uint64 + VmSize uint64 // nolint:golint // Locked memory size. - VmLck uint64 + VmLck uint64 // nolint:golint // Pinned memory size. - VmPin uint64 + VmPin uint64 // nolint:golint // Peak resident set size. - VmHWM uint64 + VmHWM uint64 // nolint:golint // Resident set size (sum of RssAnnon RssFile and RssShmem). - VmRSS uint64 + VmRSS uint64 // nolint:golint // Size of resident anonymous memory. - RssAnon uint64 + RssAnon uint64 // nolint:golint // Size of resident file mappings. - RssFile uint64 + RssFile uint64 // nolint:golint // Size of resident shared memory. - RssShmem uint64 + RssShmem uint64 // nolint:golint // Size of data segments. - VmData uint64 + VmData uint64 // nolint:golint // Size of stack segments. - VmStk uint64 + VmStk uint64 // nolint:golint // Size of text segments. - VmExe uint64 + VmExe uint64 // nolint:golint // Shared library code size. - VmLib uint64 + VmLib uint64 // nolint:golint // Page table entries size. - VmPTE uint64 + VmPTE uint64 // nolint:golint // Size of second-level page tables. - VmPMD uint64 + VmPMD uint64 // nolint:golint // Swapped-out virtual memory size by anonymous private. - VmSwap uint64 + VmSwap uint64 // nolint:golint // Size of hugetlb memory portions HugetlbPages uint64 @@ -71,6 +71,9 @@ type ProcStatus struct { VoluntaryCtxtSwitches uint64 // Number of involuntary context switches. NonVoluntaryCtxtSwitches uint64 + + // UIDs of the process (Real, effective, saved set, and filesystem UIDs (GIDs)) + UIDs [4]string } // NewStatus returns the current status information of the process. @@ -114,6 +117,8 @@ func (s *ProcStatus) fillStatus(k string, vString string, vUint uint64, vUintByt s.TGID = int(vUint) case "Name": s.Name = vString + case "Uid": + copy(s.UIDs[:], strings.Split(vString, "\t")) case "VmPeak": s.VmPeak = vUintBytes case "VmSize": diff --git a/vendor/github.com/prometheus/procfs/swaps.go b/vendor/github.com/prometheus/procfs/swaps.go new file mode 100644 index 000000000..15edc2212 --- /dev/null +++ b/vendor/github.com/prometheus/procfs/swaps.go @@ -0,0 +1,89 @@ +// Copyright 2019 The Prometheus 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 procfs + +import ( + "bufio" + "bytes" + "fmt" + "strconv" + "strings" + + "github.com/prometheus/procfs/internal/util" +) + +// Swap represents an entry in /proc/swaps. +type Swap struct { + Filename string + Type string + Size int + Used int + Priority int +} + +// Swaps returns a slice of all configured swap devices on the system. +func (fs FS) Swaps() ([]*Swap, error) { + data, err := util.ReadFileNoStat(fs.proc.Path("swaps")) + if err != nil { + return nil, err + } + return parseSwaps(data) +} + +func parseSwaps(info []byte) ([]*Swap, error) { + swaps := []*Swap{} + scanner := bufio.NewScanner(bytes.NewReader(info)) + scanner.Scan() // ignore header line + for scanner.Scan() { + swapString := scanner.Text() + parsedSwap, err := parseSwapString(swapString) + if err != nil { + return nil, err + } + swaps = append(swaps, parsedSwap) + } + + err := scanner.Err() + return swaps, err +} + +func parseSwapString(swapString string) (*Swap, error) { + var err error + + swapFields := strings.Fields(swapString) + swapLength := len(swapFields) + if swapLength < 5 { + return nil, fmt.Errorf("too few fields in swap string: %s", swapString) + } + + swap := &Swap{ + Filename: swapFields[0], + Type: swapFields[1], + } + + swap.Size, err = strconv.Atoi(swapFields[2]) + if err != nil { + return nil, fmt.Errorf("invalid swap size: %s", swapFields[2]) + } + swap.Used, err = strconv.Atoi(swapFields[3]) + if err != nil { + return nil, fmt.Errorf("invalid swap used: %s", swapFields[3]) + } + swap.Priority, err = strconv.Atoi(swapFields[4]) + if err != nil { + return nil, fmt.Errorf("invalid swap priority: %s", swapFields[4]) + } + + return swap, nil +} diff --git a/vendor/golang.org/x/oauth2/transport.go b/vendor/golang.org/x/oauth2/transport.go index aa0d34f1e..90657915f 100644 --- a/vendor/golang.org/x/oauth2/transport.go +++ b/vendor/golang.org/x/oauth2/transport.go @@ -6,7 +6,7 @@ package oauth2 import ( "errors" - "io" + "log" "net/http" "sync" ) @@ -25,9 +25,6 @@ type Transport struct { // Base is the base RoundTripper used to make HTTP requests. // If nil, http.DefaultTransport is used. Base http.RoundTripper - - mu sync.Mutex // guards modReq - modReq map[*http.Request]*http.Request // original -> modified } // RoundTrip authorizes and authenticates the request with an @@ -52,35 +49,22 @@ func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { req2 := cloneRequest(req) // per RoundTripper contract token.SetAuthHeader(req2) - t.setModReq(req, req2) - res, err := t.base().RoundTrip(req2) - // req.Body is assumed to have been closed by the base RoundTripper. + // req.Body is assumed to be closed by the base RoundTripper. reqBodyClosed = true - - if err != nil { - t.setModReq(req, nil) - return nil, err - } - res.Body = &onEOFReader{ - rc: res.Body, - fn: func() { t.setModReq(req, nil) }, - } - return res, nil + return t.base().RoundTrip(req2) } -// CancelRequest cancels an in-flight request by closing its connection. +var cancelOnce sync.Once + +// CancelRequest does nothing. It used to be a legacy cancellation mechanism +// but now only it only logs on first use to warn that it's deprecated. +// +// Deprecated: use contexts for cancellation instead. func (t *Transport) CancelRequest(req *http.Request) { - type canceler interface { - CancelRequest(*http.Request) - } - if cr, ok := t.base().(canceler); ok { - t.mu.Lock() - modReq := t.modReq[req] - delete(t.modReq, req) - t.mu.Unlock() - cr.CancelRequest(modReq) - } + cancelOnce.Do(func() { + log.Printf("deprecated: golang.org/x/oauth2: Transport.CancelRequest no longer does anything; use contexts") + }) } func (t *Transport) base() http.RoundTripper { @@ -90,19 +74,6 @@ func (t *Transport) base() http.RoundTripper { return http.DefaultTransport } -func (t *Transport) setModReq(orig, mod *http.Request) { - t.mu.Lock() - defer t.mu.Unlock() - if t.modReq == nil { - t.modReq = make(map[*http.Request]*http.Request) - } - if mod == nil { - delete(t.modReq, orig) - } else { - t.modReq[orig] = mod - } -} - // cloneRequest returns a clone of the provided *http.Request. // The clone is a shallow copy of the struct and its Header map. func cloneRequest(r *http.Request) *http.Request { @@ -116,29 +87,3 @@ func cloneRequest(r *http.Request) *http.Request { } return r2 } - -type onEOFReader struct { - rc io.ReadCloser - fn func() -} - -func (r *onEOFReader) Read(p []byte) (n int, err error) { - n, err = r.rc.Read(p) - if err == io.EOF { - r.runFunc() - } - return -} - -func (r *onEOFReader) Close() error { - err := r.rc.Close() - r.runFunc() - return err -} - -func (r *onEOFReader) runFunc() { - if fn := r.fn; fn != nil { - fn() - r.fn = nil - } -} diff --git a/vendor/golang.org/x/time/rate/rate.go b/vendor/golang.org/x/time/rate/rate.go index ae93e2471..563f70429 100644 --- a/vendor/golang.org/x/time/rate/rate.go +++ b/vendor/golang.org/x/time/rate/rate.go @@ -223,7 +223,12 @@ func (lim *Limiter) Wait(ctx context.Context) (err error) { // canceled, or the expected wait time exceeds the Context's Deadline. // The burst limit is ignored if the rate limit is Inf. func (lim *Limiter) WaitN(ctx context.Context, n int) (err error) { - if n > lim.burst && lim.limit != Inf { + lim.mu.Lock() + burst := lim.burst + limit := lim.limit + lim.mu.Unlock() + + if n > burst && limit != Inf { return fmt.Errorf("rate: Wait(n=%d) exceeds limiter's burst %d", n, lim.burst) } // Check if ctx is already cancelled @@ -281,6 +286,23 @@ func (lim *Limiter) SetLimitAt(now time.Time, newLimit Limit) { lim.limit = newLimit } +// SetBurst is shorthand for SetBurstAt(time.Now(), newBurst). +func (lim *Limiter) SetBurst(newBurst int) { + lim.SetBurstAt(time.Now(), newBurst) +} + +// SetBurstAt sets a new burst size for the limiter. +func (lim *Limiter) SetBurstAt(now time.Time, newBurst int) { + lim.mu.Lock() + defer lim.mu.Unlock() + + now, _, tokens := lim.advance(now) + + lim.last = now + lim.tokens = tokens + lim.burst = newBurst +} + // reserveN is a helper method for AllowN, ReserveN, and WaitN. // maxFutureReserve specifies the maximum reservation wait duration allowed. // reserveN returns Reservation, not *Reservation, to avoid allocation in AllowN and WaitN. @@ -370,5 +392,9 @@ func (limit Limit) durationFromTokens(tokens float64) time.Duration { // tokensFromDuration is a unit conversion function from a time duration to the number of tokens // which could be accumulated during that duration at a rate of limit tokens per second. func (limit Limit) tokensFromDuration(d time.Duration) float64 { - return d.Seconds() * float64(limit) + // Split the integer and fractional parts ourself to minimize rounding errors. + // See golang.org/issues/34861. + sec := float64(d/time.Second) * float64(limit) + nsec := float64(d%time.Second) * float64(limit) + return sec + nsec/1e9 } diff --git a/vendor/k8s.io/api/core/v1/annotation_key_constants.go b/vendor/k8s.io/api/core/v1/annotation_key_constants.go index edc9b4d60..14f9ab965 100644 --- a/vendor/k8s.io/api/core/v1/annotation_key_constants.go +++ b/vendor/k8s.io/api/core/v1/annotation_key_constants.go @@ -48,6 +48,22 @@ const ( // SeccompProfileRuntimeDefault represents the default seccomp profile used by container runtime. SeccompProfileRuntimeDefault string = "runtime/default" + // AppArmorBetaContainerAnnotationKeyPrefix is the prefix to an annotation key specifying a container's apparmor profile. + AppArmorBetaContainerAnnotationKeyPrefix = "container.apparmor.security.beta.kubernetes.io/" + // AppArmorBetaDefaultProfileAnnotatoinKey is the annotation key specifying the default AppArmor profile. + AppArmorBetaDefaultProfileAnnotationKey = "apparmor.security.beta.kubernetes.io/defaultProfileName" + // AppArmorBetaAllowedProfileAnnotationKey is the annotation key specifying the allowed AppArmor profiles. + AppArmorBetaAllowedProfilesAnnotationKey = "apparmor.security.beta.kubernetes.io/allowedProfileNames" + + // AppArmorBetaProfileRuntimeDefault is the profile specifying the runtime default. + AppArmorBetaProfileRuntimeDefault = "runtime/default" + + // AppArmorBetaProfileNamePrefix is the prefix for specifying profiles loaded on the node. + AppArmorBetaProfileNamePrefix = "localhost/" + + // AppArmorBetaProfileNameUnconfined is the Unconfined AppArmor profile + AppArmorBetaProfileNameUnconfined = "unconfined" + // DeprecatedSeccompProfileDockerDefault represents the default seccomp profile used by docker. // This is now deprecated and should be replaced by SeccompProfileRuntimeDefault. DeprecatedSeccompProfileDockerDefault string = "docker/default" diff --git a/vendor/k8s.io/api/core/v1/generated.pb.go b/vendor/k8s.io/api/core/v1/generated.pb.go index 8e5875206..a3e408f15 100644 --- a/vendor/k8s.io/api/core/v1/generated.pb.go +++ b/vendor/k8s.io/api/core/v1/generated.pb.go @@ -6000,865 +6000,864 @@ func init() { } var fileDescriptor_83c10c24ec417dc9 = []byte{ - // 13727 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7b, 0x70, 0x24, 0x49, - 0x5a, 0x18, 0x7e, 0xd5, 0xad, 0x47, 0xf7, 0xa7, 0x77, 0xce, 0x63, 0x35, 0xda, 0x99, 0xd1, 0x6c, - 0xed, 0xdd, 0xec, 0xec, 0xed, 0xae, 0xe6, 0xf6, 0x75, 0xbb, 0xdc, 0xde, 0x2d, 0x48, 0x6a, 0x69, - 0xa6, 0x77, 0x46, 0x9a, 0xde, 0x6c, 0xcd, 0xcc, 0xdd, 0xb1, 0x77, 0xbf, 0x2b, 0x75, 0xa5, 0xa4, - 0x3a, 0x75, 0x57, 0xf5, 0x56, 0x55, 0x6b, 0x46, 0xfb, 0x83, 0x30, 0x3e, 0x9e, 0x67, 0xc0, 0x71, - 0x76, 0x10, 0x7e, 0x00, 0x41, 0x38, 0x30, 0x0e, 0xc0, 0xd8, 0x0e, 0x63, 0x30, 0x60, 0x0e, 0x1b, - 0x0c, 0xb6, 0x03, 0xfb, 0x0f, 0x8c, 0x09, 0xdb, 0x47, 0x04, 0x61, 0x19, 0x06, 0x87, 0x89, 0xfb, - 0xc3, 0x40, 0x18, 0xfc, 0x87, 0x65, 0xc2, 0x38, 0xf2, 0x59, 0x99, 0xd5, 0x55, 0xdd, 0xad, 0x59, - 0x8d, 0x6e, 0xb9, 0xd8, 0xff, 0xba, 0xf3, 0xfb, 0xf2, 0xcb, 0xac, 0x7c, 0x7c, 0xf9, 0xe5, 0x97, - 0xdf, 0x03, 0x5e, 0xdb, 0x7d, 0x35, 0x5a, 0xf0, 0x82, 0xab, 0xbb, 0x9d, 0x4d, 0x12, 0xfa, 0x24, - 0x26, 0xd1, 0xd5, 0x3d, 0xe2, 0xbb, 0x41, 0x78, 0x55, 0x00, 0x9c, 0xb6, 0x77, 0xb5, 0x11, 0x84, - 0xe4, 0xea, 0xde, 0xf3, 0x57, 0xb7, 0x89, 0x4f, 0x42, 0x27, 0x26, 0xee, 0x42, 0x3b, 0x0c, 0xe2, - 0x00, 0x21, 0x8e, 0xb3, 0xe0, 0xb4, 0xbd, 0x05, 0x8a, 0xb3, 0xb0, 0xf7, 0xfc, 0xdc, 0x73, 0xdb, - 0x5e, 0xbc, 0xd3, 0xd9, 0x5c, 0x68, 0x04, 0xad, 0xab, 0xdb, 0xc1, 0x76, 0x70, 0x95, 0xa1, 0x6e, - 0x76, 0xb6, 0xd8, 0x3f, 0xf6, 0x87, 0xfd, 0xe2, 0x24, 0xe6, 0x5e, 0x4a, 0x9a, 0x69, 0x39, 0x8d, - 0x1d, 0xcf, 0x27, 0xe1, 0xfe, 0xd5, 0xf6, 0xee, 0x36, 0x6b, 0x37, 0x24, 0x51, 0xd0, 0x09, 0x1b, - 0x24, 0xdd, 0x70, 0xcf, 0x5a, 0xd1, 0xd5, 0x16, 0x89, 0x9d, 0x8c, 0xee, 0xce, 0x5d, 0xcd, 0xab, - 0x15, 0x76, 0xfc, 0xd8, 0x6b, 0x75, 0x37, 0xf3, 0xd1, 0x7e, 0x15, 0xa2, 0xc6, 0x0e, 0x69, 0x39, - 0x5d, 0xf5, 0x5e, 0xcc, 0xab, 0xd7, 0x89, 0xbd, 0xe6, 0x55, 0xcf, 0x8f, 0xa3, 0x38, 0x4c, 0x57, - 0xb2, 0xbf, 0x62, 0xc1, 0xa5, 0xc5, 0xbb, 0xf5, 0x95, 0xa6, 0x13, 0xc5, 0x5e, 0x63, 0xa9, 0x19, - 0x34, 0x76, 0xeb, 0x71, 0x10, 0x92, 0x3b, 0x41, 0xb3, 0xd3, 0x22, 0x75, 0x36, 0x10, 0xe8, 0x59, - 0x28, 0xed, 0xb1, 0xff, 0xd5, 0xca, 0xac, 0x75, 0xc9, 0xba, 0x52, 0x5e, 0x9a, 0xfe, 0xf5, 0x83, - 0xf9, 0x0f, 0x3c, 0x38, 0x98, 0x2f, 0xdd, 0x11, 0xe5, 0x58, 0x61, 0xa0, 0xcb, 0x30, 0xb2, 0x15, - 0x6d, 0xec, 0xb7, 0xc9, 0x6c, 0x81, 0xe1, 0x4e, 0x0a, 0xdc, 0x91, 0xd5, 0x3a, 0x2d, 0xc5, 0x02, - 0x8a, 0xae, 0x42, 0xb9, 0xed, 0x84, 0xb1, 0x17, 0x7b, 0x81, 0x3f, 0x5b, 0xbc, 0x64, 0x5d, 0x19, - 0x5e, 0x9a, 0x11, 0xa8, 0xe5, 0x9a, 0x04, 0xe0, 0x04, 0x87, 0x76, 0x23, 0x24, 0x8e, 0x7b, 0xcb, - 0x6f, 0xee, 0xcf, 0x0e, 0x5d, 0xb2, 0xae, 0x94, 0x92, 0x6e, 0x60, 0x51, 0x8e, 0x15, 0x86, 0xfd, - 0x83, 0x05, 0x28, 0x2d, 0x6e, 0x6d, 0x79, 0xbe, 0x17, 0xef, 0xa3, 0x3b, 0x30, 0xee, 0x07, 0x2e, - 0x91, 0xff, 0xd9, 0x57, 0x8c, 0xbd, 0x70, 0x69, 0xa1, 0x7b, 0x29, 0x2d, 0xac, 0x6b, 0x78, 0x4b, - 0xd3, 0x0f, 0x0e, 0xe6, 0xc7, 0xf5, 0x12, 0x6c, 0xd0, 0x41, 0x18, 0xc6, 0xda, 0x81, 0xab, 0xc8, - 0x16, 0x18, 0xd9, 0xf9, 0x2c, 0xb2, 0xb5, 0x04, 0x6d, 0x69, 0xea, 0xc1, 0xc1, 0xfc, 0x98, 0x56, - 0x80, 0x75, 0x22, 0x68, 0x13, 0xa6, 0xe8, 0x5f, 0x3f, 0xf6, 0x14, 0xdd, 0x22, 0xa3, 0xfb, 0x64, - 0x1e, 0x5d, 0x0d, 0x75, 0xe9, 0xd4, 0x83, 0x83, 0xf9, 0xa9, 0x54, 0x21, 0x4e, 0x13, 0xb4, 0xdf, - 0x81, 0xc9, 0xc5, 0x38, 0x76, 0x1a, 0x3b, 0xc4, 0xe5, 0x33, 0x88, 0x5e, 0x82, 0x21, 0xdf, 0x69, - 0x11, 0x31, 0xbf, 0x97, 0xc4, 0xc0, 0x0e, 0xad, 0x3b, 0x2d, 0x72, 0x78, 0x30, 0x3f, 0x7d, 0xdb, - 0xf7, 0xde, 0xee, 0x88, 0x55, 0x41, 0xcb, 0x30, 0xc3, 0x46, 0x2f, 0x00, 0xb8, 0x64, 0xcf, 0x6b, - 0x90, 0x9a, 0x13, 0xef, 0x88, 0xf9, 0x46, 0xa2, 0x2e, 0x54, 0x14, 0x04, 0x6b, 0x58, 0xf6, 0x7d, - 0x28, 0x2f, 0xee, 0x05, 0x9e, 0x5b, 0x0b, 0xdc, 0x08, 0xed, 0xc2, 0x54, 0x3b, 0x24, 0x5b, 0x24, - 0x54, 0x45, 0xb3, 0xd6, 0xa5, 0xe2, 0x95, 0xb1, 0x17, 0xae, 0x64, 0x7e, 0xac, 0x89, 0xba, 0xe2, - 0xc7, 0xe1, 0xfe, 0xd2, 0x63, 0xa2, 0xbd, 0xa9, 0x14, 0x14, 0xa7, 0x29, 0xdb, 0xff, 0xaa, 0x00, - 0x67, 0x16, 0xdf, 0xe9, 0x84, 0xa4, 0xe2, 0x45, 0xbb, 0xe9, 0x15, 0xee, 0x7a, 0xd1, 0xee, 0x7a, - 0x32, 0x02, 0x6a, 0x69, 0x55, 0x44, 0x39, 0x56, 0x18, 0xe8, 0x39, 0x18, 0xa5, 0xbf, 0x6f, 0xe3, - 0xaa, 0xf8, 0xe4, 0x53, 0x02, 0x79, 0xac, 0xe2, 0xc4, 0x4e, 0x85, 0x83, 0xb0, 0xc4, 0x41, 0x6b, - 0x30, 0xd6, 0x60, 0x1b, 0x72, 0x7b, 0x2d, 0x70, 0x09, 0x9b, 0xcc, 0xf2, 0xd2, 0x33, 0x14, 0x7d, - 0x39, 0x29, 0x3e, 0x3c, 0x98, 0x9f, 0xe5, 0x7d, 0x13, 0x24, 0x34, 0x18, 0xd6, 0xeb, 0x23, 0x5b, - 0xed, 0xaf, 0x21, 0x46, 0x09, 0x32, 0xf6, 0xd6, 0x15, 0x6d, 0xab, 0x0c, 0xb3, 0xad, 0x32, 0x9e, - 0xbd, 0x4d, 0xd0, 0xf3, 0x30, 0xb4, 0xeb, 0xf9, 0xee, 0xec, 0x08, 0xa3, 0x75, 0x81, 0xce, 0xf9, - 0x0d, 0xcf, 0x77, 0x0f, 0x0f, 0xe6, 0x67, 0x8c, 0xee, 0xd0, 0x42, 0xcc, 0x50, 0xed, 0x3f, 0xb1, - 0x60, 0x9e, 0xc1, 0x56, 0xbd, 0x26, 0xa9, 0x91, 0x30, 0xf2, 0xa2, 0x98, 0xf8, 0xb1, 0x31, 0xa0, - 0x2f, 0x00, 0x44, 0xa4, 0x11, 0x92, 0x58, 0x1b, 0x52, 0xb5, 0x30, 0xea, 0x0a, 0x82, 0x35, 0x2c, - 0xca, 0x10, 0xa2, 0x1d, 0x27, 0x64, 0xeb, 0x4b, 0x0c, 0xac, 0x62, 0x08, 0x75, 0x09, 0xc0, 0x09, - 0x8e, 0xc1, 0x10, 0x8a, 0xfd, 0x18, 0x02, 0xfa, 0x04, 0x4c, 0x25, 0x8d, 0x45, 0x6d, 0xa7, 0x21, - 0x07, 0x90, 0x6d, 0x99, 0xba, 0x09, 0xc2, 0x69, 0x5c, 0xfb, 0xef, 0x5b, 0x62, 0xf1, 0xd0, 0xaf, - 0x7e, 0x8f, 0x7f, 0xab, 0xfd, 0x0b, 0x16, 0x8c, 0x2e, 0x79, 0xbe, 0xeb, 0xf9, 0xdb, 0xe8, 0x73, - 0x50, 0xa2, 0x67, 0x93, 0xeb, 0xc4, 0x8e, 0xe0, 0x7b, 0x1f, 0xd1, 0xf6, 0x96, 0x3a, 0x2a, 0x16, - 0xda, 0xbb, 0xdb, 0xb4, 0x20, 0x5a, 0xa0, 0xd8, 0x74, 0xb7, 0xdd, 0xda, 0xfc, 0x3c, 0x69, 0xc4, - 0x6b, 0x24, 0x76, 0x92, 0xcf, 0x49, 0xca, 0xb0, 0xa2, 0x8a, 0x6e, 0xc0, 0x48, 0xec, 0x84, 0xdb, - 0x24, 0x16, 0x0c, 0x30, 0x93, 0x51, 0xf1, 0x9a, 0x98, 0xee, 0x48, 0xe2, 0x37, 0x48, 0x72, 0x2c, - 0x6c, 0xb0, 0xaa, 0x58, 0x90, 0xb0, 0xbf, 0x7f, 0x14, 0xce, 0x2d, 0xd7, 0xab, 0x39, 0xeb, 0xea, - 0x32, 0x8c, 0xb8, 0xa1, 0xb7, 0x47, 0x42, 0x31, 0xce, 0x8a, 0x4a, 0x85, 0x95, 0x62, 0x01, 0x45, - 0xaf, 0xc2, 0x38, 0x3f, 0x90, 0xae, 0x3b, 0xbe, 0xdb, 0x94, 0x43, 0x7c, 0x5a, 0x60, 0x8f, 0xdf, - 0xd1, 0x60, 0xd8, 0xc0, 0x3c, 0xe2, 0xa2, 0xba, 0x9c, 0xda, 0x8c, 0x79, 0x87, 0xdd, 0x17, 0x2d, - 0x98, 0xe6, 0xcd, 0x2c, 0xc6, 0x71, 0xe8, 0x6d, 0x76, 0x62, 0x12, 0xcd, 0x0e, 0x33, 0x4e, 0xb7, - 0x9c, 0x35, 0x5a, 0xb9, 0x23, 0xb0, 0x70, 0x27, 0x45, 0x85, 0x33, 0xc1, 0x59, 0xd1, 0xee, 0x74, - 0x1a, 0x8c, 0xbb, 0x9a, 0x45, 0xdf, 0x6e, 0xc1, 0x5c, 0x23, 0xf0, 0xe3, 0x30, 0x68, 0x36, 0x49, - 0x58, 0xeb, 0x6c, 0x36, 0xbd, 0x68, 0x87, 0xaf, 0x53, 0x4c, 0xb6, 0x18, 0x27, 0xc8, 0x99, 0x43, - 0x85, 0x24, 0xe6, 0xf0, 0xe2, 0x83, 0x83, 0xf9, 0xb9, 0xe5, 0x5c, 0x52, 0xb8, 0x47, 0x33, 0x68, - 0x17, 0x10, 0x3d, 0x4a, 0xeb, 0xb1, 0xb3, 0x4d, 0x92, 0xc6, 0x47, 0x07, 0x6f, 0xfc, 0xec, 0x83, - 0x83, 0x79, 0xb4, 0xde, 0x45, 0x02, 0x67, 0x90, 0x45, 0x6f, 0xc3, 0x69, 0x5a, 0xda, 0xf5, 0xad, - 0xa5, 0xc1, 0x9b, 0x9b, 0x7d, 0x70, 0x30, 0x7f, 0x7a, 0x3d, 0x83, 0x08, 0xce, 0x24, 0x8d, 0xbe, - 0xcd, 0x82, 0x73, 0xc9, 0xe7, 0xaf, 0xdc, 0x6f, 0x3b, 0xbe, 0x9b, 0x34, 0x5c, 0x1e, 0xbc, 0x61, - 0xca, 0x93, 0xcf, 0x2d, 0xe7, 0x51, 0xc2, 0xf9, 0x8d, 0xcc, 0x2d, 0xc3, 0x99, 0xcc, 0xd5, 0x82, - 0xa6, 0xa1, 0xb8, 0x4b, 0xb8, 0x14, 0x54, 0xc6, 0xf4, 0x27, 0x3a, 0x0d, 0xc3, 0x7b, 0x4e, 0xb3, - 0x23, 0x36, 0x0a, 0xe6, 0x7f, 0x3e, 0x56, 0x78, 0xd5, 0xb2, 0xff, 0x75, 0x11, 0xa6, 0x96, 0xeb, - 0xd5, 0x87, 0xda, 0x85, 0xfa, 0x31, 0x54, 0xe8, 0x79, 0x0c, 0x25, 0x87, 0x5a, 0x31, 0xf7, 0x50, - 0xfb, 0x4b, 0x19, 0x5b, 0x68, 0x88, 0x6d, 0xa1, 0x6f, 0xc8, 0xd9, 0x42, 0xc7, 0xbc, 0x71, 0xf6, - 0x72, 0x56, 0xd1, 0x30, 0x9b, 0xcc, 0x4c, 0x89, 0xe5, 0x66, 0xd0, 0x70, 0x9a, 0x69, 0xd6, 0x77, - 0xc4, 0xa5, 0x74, 0x3c, 0xf3, 0xd8, 0x80, 0xf1, 0x65, 0xa7, 0xed, 0x6c, 0x7a, 0x4d, 0x2f, 0xf6, - 0x48, 0x84, 0x9e, 0x82, 0xa2, 0xe3, 0xba, 0x4c, 0xda, 0x2a, 0x2f, 0x9d, 0x79, 0x70, 0x30, 0x5f, - 0x5c, 0x74, 0xe9, 0xb1, 0x0f, 0x0a, 0x6b, 0x1f, 0x53, 0x0c, 0xf4, 0x61, 0x18, 0x72, 0xc3, 0xa0, - 0x3d, 0x5b, 0x60, 0x98, 0x74, 0xd7, 0x0d, 0x55, 0xc2, 0xa0, 0x9d, 0x42, 0x65, 0x38, 0xf6, 0xaf, - 0x14, 0xe0, 0xfc, 0x32, 0x69, 0xef, 0xac, 0xd6, 0x73, 0xf8, 0xf7, 0x15, 0x28, 0xb5, 0x02, 0xdf, - 0x8b, 0x83, 0x30, 0x12, 0x4d, 0xb3, 0x15, 0xb1, 0x26, 0xca, 0xb0, 0x82, 0xa2, 0x4b, 0x30, 0xd4, - 0x4e, 0x84, 0xca, 0x71, 0x29, 0x90, 0x32, 0x71, 0x92, 0x41, 0x28, 0x46, 0x27, 0x22, 0xa1, 0x58, - 0x31, 0x0a, 0xe3, 0x76, 0x44, 0x42, 0xcc, 0x20, 0xc9, 0xc9, 0x4c, 0xcf, 0x6c, 0xc1, 0xa1, 0x53, - 0x27, 0x33, 0x85, 0x60, 0x0d, 0x0b, 0xd5, 0xa0, 0x1c, 0xa5, 0x66, 0x76, 0xa0, 0x6d, 0x3a, 0xc1, - 0x8e, 0x6e, 0x35, 0x93, 0x09, 0x11, 0xe3, 0x44, 0x19, 0xe9, 0x7b, 0x74, 0x7f, 0xb9, 0x00, 0x88, - 0x0f, 0xe1, 0x5f, 0xb0, 0x81, 0xbb, 0xdd, 0x3d, 0x70, 0x83, 0x6f, 0x89, 0xe3, 0x1a, 0xbd, 0x3f, - 0xb5, 0xe0, 0xfc, 0xb2, 0xe7, 0xbb, 0x24, 0xcc, 0x59, 0x80, 0x8f, 0xe6, 0x2e, 0x7b, 0x34, 0xa1, - 0xc1, 0x58, 0x62, 0x43, 0xc7, 0xb0, 0xc4, 0xec, 0x3f, 0xb2, 0x00, 0xf1, 0xcf, 0x7e, 0xcf, 0x7d, - 0xec, 0xed, 0xee, 0x8f, 0x3d, 0x86, 0x65, 0x61, 0xdf, 0x84, 0xc9, 0xe5, 0xa6, 0x47, 0xfc, 0xb8, - 0x5a, 0x5b, 0x0e, 0xfc, 0x2d, 0x6f, 0x1b, 0x7d, 0x0c, 0x26, 0x63, 0xaf, 0x45, 0x82, 0x4e, 0x5c, - 0x27, 0x8d, 0xc0, 0x67, 0x37, 0x49, 0xeb, 0xca, 0xf0, 0x12, 0x7a, 0x70, 0x30, 0x3f, 0xb9, 0x61, - 0x40, 0x70, 0x0a, 0xd3, 0xfe, 0x1d, 0x3a, 0x7e, 0x41, 0xab, 0x1d, 0xf8, 0xc4, 0x8f, 0x97, 0x03, - 0xdf, 0xe5, 0x1a, 0x87, 0x8f, 0xc1, 0x50, 0x4c, 0xc7, 0x83, 0x8f, 0xdd, 0x65, 0xb9, 0x51, 0xe8, - 0x28, 0x1c, 0x1e, 0xcc, 0x9f, 0xed, 0xae, 0xc1, 0xc6, 0x89, 0xd5, 0x41, 0xdf, 0x00, 0x23, 0x51, - 0xec, 0xc4, 0x9d, 0x48, 0x8c, 0xe6, 0x13, 0x72, 0x34, 0xeb, 0xac, 0xf4, 0xf0, 0x60, 0x7e, 0x4a, - 0x55, 0xe3, 0x45, 0x58, 0x54, 0x40, 0x4f, 0xc3, 0x68, 0x8b, 0x44, 0x91, 0xb3, 0x2d, 0x4f, 0xc3, - 0x29, 0x51, 0x77, 0x74, 0x8d, 0x17, 0x63, 0x09, 0x47, 0x4f, 0xc2, 0x30, 0x09, 0xc3, 0x20, 0x14, - 0x7b, 0x74, 0x42, 0x20, 0x0e, 0xaf, 0xd0, 0x42, 0xcc, 0x61, 0xf6, 0xbf, 0xb7, 0x60, 0x4a, 0xf5, - 0x95, 0xb7, 0x75, 0x02, 0xb7, 0x82, 0x4f, 0x03, 0x34, 0xe4, 0x07, 0x46, 0xec, 0xf4, 0x18, 0x7b, - 0xe1, 0x72, 0xe6, 0x41, 0xdd, 0x35, 0x8c, 0x09, 0x65, 0x55, 0x14, 0x61, 0x8d, 0x9a, 0xfd, 0xcf, - 0x2d, 0x38, 0x95, 0xfa, 0xa2, 0x9b, 0x5e, 0x14, 0xa3, 0xb7, 0xba, 0xbe, 0x6a, 0x61, 0xb0, 0xaf, - 0xa2, 0xb5, 0xd9, 0x37, 0xa9, 0xa5, 0x2c, 0x4b, 0xb4, 0x2f, 0xba, 0x0e, 0xc3, 0x5e, 0x4c, 0x5a, - 0xf2, 0x63, 0x9e, 0xec, 0xf9, 0x31, 0xbc, 0x57, 0xc9, 0x8c, 0x54, 0x69, 0x4d, 0xcc, 0x09, 0xd8, - 0xbf, 0x52, 0x84, 0x32, 0x5f, 0xb6, 0x6b, 0x4e, 0xfb, 0x04, 0xe6, 0xe2, 0x19, 0x28, 0x7b, 0xad, - 0x56, 0x27, 0x76, 0x36, 0x05, 0x3b, 0x2f, 0xf1, 0xad, 0x55, 0x95, 0x85, 0x38, 0x81, 0xa3, 0x2a, - 0x0c, 0xb1, 0xae, 0xf0, 0xaf, 0x7c, 0x2a, 0xfb, 0x2b, 0x45, 0xdf, 0x17, 0x2a, 0x4e, 0xec, 0x70, - 0x49, 0x4a, 0x9d, 0x23, 0xb4, 0x08, 0x33, 0x12, 0xc8, 0x01, 0xd8, 0xf4, 0x7c, 0x27, 0xdc, 0xa7, - 0x65, 0xb3, 0x45, 0x46, 0xf0, 0xb9, 0xde, 0x04, 0x97, 0x14, 0x3e, 0x27, 0xab, 0x3e, 0x2c, 0x01, - 0x60, 0x8d, 0xe8, 0xdc, 0x2b, 0x50, 0x56, 0xc8, 0x47, 0x11, 0x88, 0xe6, 0x3e, 0x01, 0x53, 0xa9, - 0xb6, 0xfa, 0x55, 0x1f, 0xd7, 0xe5, 0xa9, 0x5f, 0x64, 0x2c, 0x43, 0xf4, 0x7a, 0xc5, 0xdf, 0x13, - 0x2c, 0xf7, 0x1d, 0x38, 0xdd, 0xcc, 0xe0, 0x64, 0x62, 0x5e, 0x07, 0xe7, 0x7c, 0xe7, 0xc5, 0x67, - 0x9f, 0xce, 0x82, 0xe2, 0xcc, 0x36, 0xa8, 0x8c, 0x10, 0xb4, 0xe9, 0x06, 0x71, 0x9a, 0xba, 0xb8, - 0x7d, 0x4b, 0x94, 0x61, 0x05, 0xa5, 0xfc, 0xee, 0xb4, 0xea, 0xfc, 0x0d, 0xb2, 0x5f, 0x27, 0x4d, - 0xd2, 0x88, 0x83, 0xf0, 0x6b, 0xda, 0xfd, 0x0b, 0x7c, 0xf4, 0x39, 0xbb, 0x1c, 0x13, 0x04, 0x8a, - 0x37, 0xc8, 0x3e, 0x9f, 0x0a, 0xfd, 0xeb, 0x8a, 0x3d, 0xbf, 0xee, 0xa7, 0x2d, 0x98, 0x50, 0x5f, - 0x77, 0x02, 0x7c, 0x61, 0xc9, 0xe4, 0x0b, 0x17, 0x7a, 0x2e, 0xf0, 0x1c, 0x8e, 0xf0, 0xe5, 0x02, - 0x9c, 0x53, 0x38, 0xf4, 0x6e, 0xc0, 0xff, 0x88, 0x55, 0x75, 0x15, 0xca, 0xbe, 0xd2, 0x5a, 0x59, - 0xa6, 0xba, 0x28, 0xd1, 0x59, 0x25, 0x38, 0x54, 0xc4, 0xf3, 0x13, 0xd5, 0xd2, 0xb8, 0xae, 0xce, - 0x15, 0xaa, 0xdb, 0x25, 0x28, 0x76, 0x3c, 0x57, 0x1c, 0x30, 0x1f, 0x91, 0xa3, 0x7d, 0xbb, 0x5a, - 0x39, 0x3c, 0x98, 0x7f, 0x22, 0xef, 0x29, 0x81, 0x9e, 0x6c, 0xd1, 0xc2, 0xed, 0x6a, 0x05, 0xd3, - 0xca, 0x68, 0x11, 0xa6, 0xe4, 0x6b, 0xc9, 0x1d, 0x2a, 0x6e, 0x05, 0xbe, 0x38, 0x87, 0x94, 0x4e, - 0x16, 0x9b, 0x60, 0x9c, 0xc6, 0x47, 0x15, 0x98, 0xde, 0xed, 0x6c, 0x92, 0x26, 0x89, 0xf9, 0x07, - 0xdf, 0x20, 0x5c, 0x63, 0x59, 0x4e, 0x6e, 0x66, 0x37, 0x52, 0x70, 0xdc, 0x55, 0xc3, 0xfe, 0x73, - 0x76, 0x1e, 0x88, 0xd1, 0xab, 0x85, 0x01, 0x5d, 0x58, 0x94, 0xfa, 0xd7, 0x72, 0x39, 0x0f, 0xb2, - 0x2a, 0x6e, 0x90, 0xfd, 0x8d, 0x80, 0x4a, 0xe6, 0xd9, 0xab, 0xc2, 0x58, 0xf3, 0x43, 0x3d, 0xd7, - 0xfc, 0xcf, 0x16, 0xe0, 0x8c, 0x1a, 0x01, 0x43, 0x08, 0xfc, 0x8b, 0x3e, 0x06, 0xcf, 0xc3, 0x98, - 0x4b, 0xb6, 0x9c, 0x4e, 0x33, 0x56, 0xea, 0xf3, 0x61, 0xfe, 0x84, 0x52, 0x49, 0x8a, 0xb1, 0x8e, - 0x73, 0x84, 0x61, 0xfb, 0x5f, 0x63, 0xec, 0x20, 0x8e, 0x1d, 0xba, 0xc6, 0xd5, 0xae, 0xb1, 0x72, - 0x77, 0xcd, 0x93, 0x30, 0xec, 0xb5, 0xa8, 0x60, 0x56, 0x30, 0xe5, 0xad, 0x2a, 0x2d, 0xc4, 0x1c, - 0x86, 0x3e, 0x04, 0xa3, 0x8d, 0xa0, 0xd5, 0x72, 0x7c, 0x97, 0x1d, 0x79, 0xe5, 0xa5, 0x31, 0x2a, - 0xbb, 0x2d, 0xf3, 0x22, 0x2c, 0x61, 0xe8, 0x3c, 0x0c, 0x39, 0xe1, 0x36, 0xd7, 0x61, 0x94, 0x97, - 0x4a, 0xb4, 0xa5, 0xc5, 0x70, 0x3b, 0xc2, 0xac, 0x94, 0x5e, 0xc1, 0xee, 0x05, 0xe1, 0xae, 0xe7, - 0x6f, 0x57, 0xbc, 0x50, 0x6c, 0x09, 0x75, 0x16, 0xde, 0x55, 0x10, 0xac, 0x61, 0xa1, 0x55, 0x18, - 0x6e, 0x07, 0x61, 0x1c, 0xcd, 0x8e, 0xb0, 0xe1, 0x7e, 0x22, 0x87, 0x11, 0xf1, 0xaf, 0xad, 0x05, - 0x61, 0x9c, 0x7c, 0x00, 0xfd, 0x17, 0x61, 0x5e, 0x1d, 0xdd, 0x84, 0x51, 0xe2, 0xef, 0xad, 0x86, - 0x41, 0x6b, 0xf6, 0x54, 0x3e, 0xa5, 0x15, 0x8e, 0xc2, 0x97, 0x59, 0x22, 0xa3, 0x8a, 0x62, 0x2c, - 0x49, 0xa0, 0x6f, 0x80, 0x22, 0xf1, 0xf7, 0x66, 0x47, 0x19, 0xa5, 0xb9, 0x1c, 0x4a, 0x77, 0x9c, - 0x30, 0xe1, 0xf9, 0x2b, 0xfe, 0x1e, 0xa6, 0x75, 0xd0, 0xa7, 0xa0, 0x2c, 0x19, 0x46, 0x24, 0x94, - 0x75, 0x99, 0x0b, 0x56, 0xb2, 0x19, 0x4c, 0xde, 0xee, 0x78, 0x21, 0x69, 0x11, 0x3f, 0x8e, 0x12, - 0x0e, 0x29, 0xa1, 0x11, 0x4e, 0xa8, 0xa1, 0x4f, 0x49, 0x0d, 0xf1, 0x5a, 0xd0, 0xf1, 0xe3, 0x68, - 0xb6, 0xcc, 0xba, 0x97, 0xf9, 0x76, 0x77, 0x27, 0xc1, 0x4b, 0xab, 0x90, 0x79, 0x65, 0x6c, 0x90, - 0x42, 0x9f, 0x81, 0x09, 0xfe, 0x9f, 0xbf, 0x80, 0x45, 0xb3, 0x67, 0x18, 0xed, 0x4b, 0xf9, 0xb4, - 0x39, 0xe2, 0xd2, 0x19, 0x41, 0x7c, 0x42, 0x2f, 0x8d, 0xb0, 0x49, 0x0d, 0x61, 0x98, 0x68, 0x7a, - 0x7b, 0xc4, 0x27, 0x51, 0x54, 0x0b, 0x83, 0x4d, 0x32, 0x0b, 0x6c, 0x60, 0xce, 0x65, 0xbf, 0x98, - 0x05, 0x9b, 0x64, 0x69, 0x86, 0xd2, 0xbc, 0xa9, 0xd7, 0xc1, 0x26, 0x09, 0x74, 0x1b, 0x26, 0xe9, - 0x8d, 0xcd, 0x4b, 0x88, 0x8e, 0xf5, 0x23, 0xca, 0xee, 0x55, 0xd8, 0xa8, 0x84, 0x53, 0x44, 0xd0, - 0x2d, 0x18, 0x8f, 0x62, 0x27, 0x8c, 0x3b, 0x6d, 0x4e, 0xf4, 0x6c, 0x3f, 0xa2, 0xec, 0xc1, 0xb5, - 0xae, 0x55, 0xc1, 0x06, 0x01, 0xf4, 0x06, 0x94, 0x9b, 0xde, 0x16, 0x69, 0xec, 0x37, 0x9a, 0x64, - 0x76, 0x9c, 0x51, 0xcb, 0x64, 0x2a, 0x37, 0x25, 0x12, 0x97, 0x73, 0xd5, 0x5f, 0x9c, 0x54, 0x47, - 0x77, 0xe0, 0x6c, 0x4c, 0xc2, 0x96, 0xe7, 0x3b, 0x94, 0x19, 0x88, 0xab, 0x15, 0x7b, 0xc8, 0x9c, - 0x60, 0xbb, 0xed, 0xa2, 0x98, 0x8d, 0xb3, 0x1b, 0x99, 0x58, 0x38, 0xa7, 0x36, 0xba, 0x0f, 0xb3, - 0x19, 0x90, 0xa0, 0xe9, 0x35, 0xf6, 0x67, 0x4f, 0x33, 0xca, 0x1f, 0x17, 0x94, 0x67, 0x37, 0x72, - 0xf0, 0x0e, 0x7b, 0xc0, 0x70, 0x2e, 0x75, 0x74, 0x0b, 0xa6, 0x18, 0x07, 0xaa, 0x75, 0x9a, 0x4d, - 0xd1, 0xe0, 0x24, 0x6b, 0xf0, 0x43, 0xf2, 0x3c, 0xae, 0x9a, 0xe0, 0xc3, 0x83, 0x79, 0x48, 0xfe, - 0xe1, 0x74, 0x6d, 0xb4, 0xc9, 0xde, 0xcc, 0x3a, 0xa1, 0x17, 0xef, 0x53, 0xbe, 0x41, 0xee, 0xc7, - 0xb3, 0x53, 0x3d, 0xf5, 0x15, 0x3a, 0xaa, 0x7a, 0x58, 0xd3, 0x0b, 0x71, 0x9a, 0x20, 0x65, 0xa9, - 0x51, 0xec, 0x7a, 0xfe, 0xec, 0x34, 0xbf, 0x97, 0x48, 0x8e, 0x54, 0xa7, 0x85, 0x98, 0xc3, 0xd8, - 0x7b, 0x19, 0xfd, 0x71, 0x8b, 0x9e, 0x5c, 0x33, 0x0c, 0x31, 0x79, 0x2f, 0x93, 0x00, 0x9c, 0xe0, - 0x50, 0x61, 0x32, 0x8e, 0xf7, 0x67, 0x11, 0x43, 0x55, 0x8c, 0x65, 0x63, 0xe3, 0x53, 0x98, 0x96, - 0xdb, 0x9b, 0x30, 0xa9, 0x18, 0x21, 0x1b, 0x13, 0x34, 0x0f, 0xc3, 0x4c, 0x7c, 0x12, 0xda, 0xb5, - 0x32, 0xed, 0x02, 0x13, 0xad, 0x30, 0x2f, 0x67, 0x5d, 0xf0, 0xde, 0x21, 0x4b, 0xfb, 0x31, 0xe1, - 0x77, 0xfa, 0xa2, 0xd6, 0x05, 0x09, 0xc0, 0x09, 0x8e, 0xfd, 0x7f, 0xb9, 0x18, 0x9a, 0x70, 0xdb, - 0x01, 0xce, 0x97, 0x67, 0xa1, 0xb4, 0x13, 0x44, 0x31, 0xc5, 0x66, 0x6d, 0x0c, 0x27, 0x82, 0xe7, - 0x75, 0x51, 0x8e, 0x15, 0x06, 0x7a, 0x0d, 0x26, 0x1a, 0x7a, 0x03, 0xe2, 0x70, 0x54, 0x6c, 0xc4, - 0x68, 0x1d, 0x9b, 0xb8, 0xe8, 0x55, 0x28, 0x31, 0x1b, 0x90, 0x46, 0xd0, 0x14, 0x52, 0x9b, 0x3c, - 0xe1, 0x4b, 0x35, 0x51, 0x7e, 0xa8, 0xfd, 0xc6, 0x0a, 0x1b, 0x5d, 0x86, 0x11, 0xda, 0x85, 0x6a, - 0x4d, 0x1c, 0x4b, 0x4a, 0x51, 0x74, 0x9d, 0x95, 0x62, 0x01, 0xb5, 0xff, 0x7a, 0x41, 0x1b, 0x65, - 0x7a, 0x1f, 0x26, 0xa8, 0x06, 0xa3, 0xf7, 0x1c, 0x2f, 0xf6, 0xfc, 0x6d, 0x21, 0x7f, 0x3c, 0xdd, - 0xf3, 0x8c, 0x62, 0x95, 0xee, 0xf2, 0x0a, 0xfc, 0x14, 0x15, 0x7f, 0xb0, 0x24, 0x43, 0x29, 0x86, - 0x1d, 0xdf, 0xa7, 0x14, 0x0b, 0x83, 0x52, 0xc4, 0xbc, 0x02, 0xa7, 0x28, 0xfe, 0x60, 0x49, 0x06, - 0xbd, 0x05, 0x20, 0x77, 0x18, 0x71, 0x85, 0xed, 0xc5, 0xb3, 0xfd, 0x89, 0x6e, 0xa8, 0x3a, 0x4b, - 0x93, 0xf4, 0x8c, 0x4e, 0xfe, 0x63, 0x8d, 0x9e, 0x1d, 0x33, 0x39, 0xad, 0xbb, 0x33, 0xe8, 0x9b, - 0xe9, 0x12, 0x77, 0xc2, 0x98, 0xb8, 0x8b, 0xb1, 0x18, 0x9c, 0x0f, 0x0f, 0x76, 0x49, 0xd9, 0xf0, - 0x5a, 0x44, 0xdf, 0x0e, 0x82, 0x08, 0x4e, 0xe8, 0xd9, 0x3f, 0x5f, 0x84, 0xd9, 0xbc, 0xee, 0xd2, - 0x45, 0x47, 0xee, 0x7b, 0xf1, 0x32, 0x15, 0xaf, 0x2c, 0x73, 0xd1, 0xad, 0x88, 0x72, 0xac, 0x30, - 0xe8, 0xec, 0x47, 0xde, 0xb6, 0xbc, 0x63, 0x0e, 0x27, 0xb3, 0x5f, 0x67, 0xa5, 0x58, 0x40, 0x29, - 0x5e, 0x48, 0x9c, 0x48, 0x18, 0xf7, 0x68, 0xab, 0x04, 0xb3, 0x52, 0x2c, 0xa0, 0xba, 0xb6, 0x6b, - 0xa8, 0x8f, 0xb6, 0xcb, 0x18, 0xa2, 0xe1, 0xe3, 0x1d, 0x22, 0xf4, 0x59, 0x80, 0x2d, 0xcf, 0xf7, - 0xa2, 0x1d, 0x46, 0x7d, 0xe4, 0xc8, 0xd4, 0x95, 0x70, 0xb6, 0xaa, 0xa8, 0x60, 0x8d, 0x22, 0x7a, - 0x19, 0xc6, 0xd4, 0x06, 0xac, 0x56, 0xd8, 0x4b, 0xa7, 0x66, 0x39, 0x92, 0x70, 0xa3, 0x0a, 0xd6, - 0xf1, 0xec, 0xcf, 0xa7, 0xd7, 0x8b, 0xd8, 0x01, 0xda, 0xf8, 0x5a, 0x83, 0x8e, 0x6f, 0xa1, 0xf7, - 0xf8, 0xda, 0x5f, 0x2d, 0xc2, 0x94, 0xd1, 0x58, 0x27, 0x1a, 0x80, 0x67, 0x5d, 0xa3, 0x0c, 0xdc, - 0x89, 0x89, 0xd8, 0x7f, 0x76, 0xff, 0xad, 0xa2, 0x33, 0x79, 0xba, 0x03, 0x78, 0x7d, 0xf4, 0x59, - 0x28, 0x37, 0x9d, 0x88, 0x69, 0xce, 0x88, 0xd8, 0x77, 0x83, 0x10, 0x4b, 0x2e, 0x26, 0x4e, 0x14, - 0x6b, 0xa7, 0x26, 0xa7, 0x9d, 0x90, 0xa4, 0x27, 0x0d, 0x95, 0x4f, 0xa4, 0xf5, 0x98, 0xea, 0x04, - 0x15, 0x62, 0xf6, 0x31, 0x87, 0xa1, 0x57, 0x61, 0x3c, 0x24, 0x6c, 0x55, 0x2c, 0x53, 0x69, 0x8e, - 0x2d, 0xb3, 0xe1, 0x44, 0xec, 0xc3, 0x1a, 0x0c, 0x1b, 0x98, 0xc9, 0xdd, 0x60, 0xa4, 0xc7, 0xdd, - 0xe0, 0x69, 0x18, 0x65, 0x3f, 0xd4, 0x0a, 0x50, 0xb3, 0x51, 0xe5, 0xc5, 0x58, 0xc2, 0xd3, 0x0b, - 0xa6, 0x34, 0xd8, 0x82, 0xa1, 0xb7, 0x0f, 0xb1, 0xa8, 0xd9, 0x2b, 0x73, 0x89, 0x73, 0x39, 0xb1, - 0xe4, 0xb1, 0x84, 0xd9, 0x1f, 0x86, 0xc9, 0x8a, 0x43, 0x5a, 0x81, 0xbf, 0xe2, 0xbb, 0xed, 0xc0, - 0xf3, 0x63, 0x34, 0x0b, 0x43, 0xec, 0x10, 0xe1, 0x2c, 0x60, 0x88, 0x36, 0x84, 0x87, 0xe8, 0x85, - 0xc0, 0xde, 0x86, 0x33, 0x95, 0xe0, 0x9e, 0x7f, 0xcf, 0x09, 0xdd, 0xc5, 0x5a, 0x55, 0xbb, 0x5f, - 0xaf, 0xcb, 0xfb, 0x1d, 0x37, 0xda, 0xca, 0x64, 0xbd, 0x5a, 0x4d, 0x2e, 0xd6, 0xae, 0x7a, 0x4d, - 0x92, 0xa3, 0x05, 0xf9, 0x9b, 0x05, 0xa3, 0xa5, 0x04, 0x5f, 0xbd, 0x6a, 0x59, 0xb9, 0xaf, 0x5a, - 0x6f, 0x42, 0x69, 0xcb, 0x23, 0x4d, 0x17, 0x93, 0x2d, 0xb1, 0x12, 0x9f, 0xca, 0xb7, 0x43, 0x59, - 0xa5, 0x98, 0x52, 0xeb, 0xc5, 0x6f, 0x87, 0xab, 0xa2, 0x32, 0x56, 0x64, 0xd0, 0x2e, 0x4c, 0xcb, - 0x0b, 0x83, 0x84, 0x8a, 0x75, 0xf9, 0x74, 0xaf, 0x5b, 0x88, 0x49, 0xfc, 0xf4, 0x83, 0x83, 0xf9, - 0x69, 0x9c, 0x22, 0x83, 0xbb, 0x08, 0xd3, 0xeb, 0x60, 0x8b, 0x72, 0xe0, 0x21, 0x36, 0xfc, 0xec, - 0x3a, 0xc8, 0x6e, 0xb6, 0xac, 0xd4, 0xfe, 0x61, 0x0b, 0x1e, 0xeb, 0x1a, 0x19, 0x71, 0xc3, 0x3f, - 0xe6, 0x59, 0x48, 0xdf, 0xb8, 0x0b, 0xfd, 0x6f, 0xdc, 0xf6, 0x3f, 0xb0, 0xe0, 0xf4, 0x4a, 0xab, - 0x1d, 0xef, 0x57, 0x3c, 0xf3, 0x09, 0xea, 0x15, 0x18, 0x69, 0x11, 0xd7, 0xeb, 0xb4, 0xc4, 0xcc, - 0xcd, 0x4b, 0x2e, 0xb5, 0xc6, 0x4a, 0x0f, 0x0f, 0xe6, 0x27, 0xea, 0x71, 0x10, 0x3a, 0xdb, 0x84, - 0x17, 0x60, 0x81, 0xce, 0x78, 0xbd, 0xf7, 0x0e, 0xb9, 0xe9, 0xb5, 0x3c, 0x69, 0x57, 0xd4, 0x53, - 0x67, 0xb7, 0x20, 0x07, 0x74, 0xe1, 0xcd, 0x8e, 0xe3, 0xc7, 0x5e, 0xbc, 0x2f, 0x5e, 0x8f, 0x24, - 0x11, 0x9c, 0xd0, 0xb3, 0xbf, 0x62, 0xc1, 0x94, 0x5c, 0xf7, 0x8b, 0xae, 0x1b, 0x92, 0x28, 0x42, - 0x73, 0x50, 0xf0, 0xda, 0xa2, 0x97, 0x20, 0x7a, 0x59, 0xa8, 0xd6, 0x70, 0xc1, 0x6b, 0x4b, 0xb1, - 0x8c, 0x31, 0xc2, 0xa2, 0xf9, 0x90, 0x76, 0x5d, 0x94, 0x63, 0x85, 0x81, 0xae, 0x40, 0xc9, 0x0f, - 0x5c, 0x6e, 0xdb, 0xc5, 0x8f, 0x34, 0xb6, 0xc0, 0xd6, 0x45, 0x19, 0x56, 0x50, 0x54, 0x83, 0x32, - 0x37, 0x7b, 0x4a, 0x16, 0xed, 0x40, 0xc6, 0x53, 0xec, 0xcb, 0x36, 0x64, 0x4d, 0x9c, 0x10, 0xb1, - 0x7f, 0xd9, 0x82, 0x71, 0xf9, 0x65, 0x03, 0xca, 0x9c, 0x74, 0x6b, 0x25, 0xf2, 0x66, 0xb2, 0xb5, - 0xa8, 0xcc, 0xc8, 0x20, 0x86, 0xa8, 0x58, 0x3c, 0x92, 0xa8, 0xf8, 0x3c, 0x8c, 0x39, 0xed, 0x76, - 0xcd, 0x94, 0x33, 0xd9, 0x52, 0x5a, 0x4c, 0x8a, 0xb1, 0x8e, 0x63, 0xff, 0x50, 0x01, 0x26, 0xe5, - 0x17, 0xd4, 0x3b, 0x9b, 0x11, 0x89, 0xd1, 0x06, 0x94, 0x1d, 0x3e, 0x4b, 0x44, 0x2e, 0xf2, 0x27, - 0xb3, 0xf5, 0x08, 0xc6, 0x94, 0x26, 0x07, 0xfe, 0xa2, 0xac, 0x8d, 0x13, 0x42, 0xa8, 0x09, 0x33, - 0x7e, 0x10, 0x33, 0xe6, 0xaf, 0xe0, 0xbd, 0x9e, 0x76, 0xd2, 0xd4, 0xcf, 0x09, 0xea, 0x33, 0xeb, - 0x69, 0x2a, 0xb8, 0x9b, 0x30, 0x5a, 0x91, 0xba, 0x99, 0x62, 0xbe, 0x32, 0x40, 0x9f, 0xb8, 0x6c, - 0xd5, 0x8c, 0xfd, 0x4b, 0x16, 0x94, 0x25, 0xda, 0x49, 0xbc, 0xe2, 0xad, 0xc1, 0x68, 0xc4, 0x26, - 0x41, 0x0e, 0x8d, 0xdd, 0xab, 0xe3, 0x7c, 0xbe, 0x92, 0x33, 0x8d, 0xff, 0x8f, 0xb0, 0xa4, 0xc1, - 0x54, 0xf3, 0xaa, 0xfb, 0xef, 0x11, 0xd5, 0xbc, 0xea, 0x4f, 0xce, 0xa1, 0xf4, 0x07, 0xac, 0xcf, - 0x9a, 0xae, 0x8b, 0x8a, 0x5e, 0xed, 0x90, 0x6c, 0x79, 0xf7, 0xd3, 0xa2, 0x57, 0x8d, 0x95, 0x62, - 0x01, 0x45, 0x6f, 0xc1, 0x78, 0x43, 0xea, 0x64, 0x93, 0x1d, 0x7e, 0xb9, 0xe7, 0xfb, 0x80, 0x7a, - 0x4a, 0xe2, 0xba, 0x90, 0x65, 0xad, 0x3e, 0x36, 0xa8, 0x99, 0x66, 0x04, 0xc5, 0x7e, 0x66, 0x04, - 0x09, 0xdd, 0xfc, 0x47, 0xf5, 0x1f, 0xb1, 0x60, 0x84, 0xeb, 0xe2, 0x06, 0x53, 0x85, 0x6a, 0x2f, - 0x6b, 0xc9, 0xd8, 0xdd, 0xa1, 0x85, 0xe2, 0xa5, 0x0c, 0xad, 0x41, 0x99, 0xfd, 0x60, 0xba, 0xc4, - 0x62, 0xbe, 0xd5, 0x3d, 0x6f, 0x55, 0xef, 0xe0, 0x1d, 0x59, 0x0d, 0x27, 0x14, 0xec, 0x1f, 0x28, - 0x52, 0xee, 0x96, 0xa0, 0x1a, 0x87, 0xbe, 0xf5, 0xe8, 0x0e, 0xfd, 0xc2, 0xa3, 0x3a, 0xf4, 0xb7, - 0x61, 0xaa, 0xa1, 0xbd, 0xc3, 0x25, 0x33, 0x79, 0xa5, 0xe7, 0x22, 0xd1, 0x9e, 0xec, 0xb8, 0x96, - 0x65, 0xd9, 0x24, 0x82, 0xd3, 0x54, 0xd1, 0x37, 0xc3, 0x38, 0x9f, 0x67, 0xd1, 0x0a, 0xb7, 0xc4, - 0xf8, 0x50, 0xfe, 0x7a, 0xd1, 0x9b, 0xe0, 0x5a, 0x39, 0xad, 0x3a, 0x36, 0x88, 0xd9, 0x7f, 0x6c, - 0x01, 0x5a, 0x69, 0xef, 0x90, 0x16, 0x09, 0x9d, 0x66, 0xa2, 0x4e, 0xff, 0x2b, 0x16, 0xcc, 0x92, - 0xae, 0xe2, 0xe5, 0xa0, 0xd5, 0x12, 0x97, 0x96, 0x9c, 0x7b, 0xf5, 0x4a, 0x4e, 0x1d, 0xe5, 0x96, - 0x30, 0x9b, 0x87, 0x81, 0x73, 0xdb, 0x43, 0x6b, 0x70, 0x8a, 0x9f, 0x92, 0x0a, 0xa0, 0xd9, 0x5e, - 0x3f, 0x2e, 0x08, 0x9f, 0xda, 0xe8, 0x46, 0xc1, 0x59, 0xf5, 0xec, 0xef, 0x18, 0x87, 0xdc, 0x5e, - 0xbc, 0xff, 0x8e, 0xf0, 0xfe, 0x3b, 0xc2, 0xfb, 0xef, 0x08, 0xef, 0xbf, 0x23, 0xbc, 0xff, 0x8e, - 0xf0, 0x75, 0xff, 0x8e, 0xf0, 0x87, 0x16, 0x9c, 0xea, 0x3e, 0x06, 0x4e, 0x42, 0x30, 0xef, 0xc0, - 0xa9, 0xee, 0xb3, 0xae, 0xa7, 0x9d, 0x5d, 0x77, 0x3f, 0x93, 0x73, 0x2f, 0xe3, 0x1b, 0x70, 0x16, - 0x7d, 0xfb, 0xe7, 0x4b, 0x30, 0xbc, 0xb2, 0x47, 0xfc, 0xf8, 0x04, 0x3e, 0xb1, 0x01, 0x93, 0x9e, - 0xbf, 0x17, 0x34, 0xf7, 0x88, 0xcb, 0xe1, 0x47, 0xb9, 0x22, 0x9f, 0x15, 0xa4, 0x27, 0xab, 0x06, - 0x09, 0x9c, 0x22, 0xf9, 0x28, 0xd4, 0xd4, 0xd7, 0x60, 0x84, 0x9f, 0x0e, 0x42, 0x47, 0x9d, 0x79, - 0x18, 0xb0, 0x41, 0x14, 0x67, 0x5e, 0xa2, 0x42, 0xe7, 0xa7, 0x8f, 0xa8, 0x8e, 0x3e, 0x0f, 0x93, - 0x5b, 0x5e, 0x18, 0xc5, 0x1b, 0x5e, 0x8b, 0x44, 0xb1, 0xd3, 0x6a, 0x3f, 0x84, 0x5a, 0x5a, 0x8d, - 0xc3, 0xaa, 0x41, 0x09, 0xa7, 0x28, 0xa3, 0x6d, 0x98, 0x68, 0x3a, 0x7a, 0x53, 0xa3, 0x47, 0x6e, - 0x4a, 0x1d, 0x3b, 0x37, 0x75, 0x42, 0xd8, 0xa4, 0x4b, 0xf7, 0x69, 0x83, 0x69, 0x56, 0x4b, 0x4c, - 0xdf, 0xa0, 0xf6, 0x29, 0x57, 0xa9, 0x72, 0x18, 0x95, 0xa0, 0x98, 0xe5, 0x6d, 0xd9, 0x94, 0xa0, - 0x34, 0xfb, 0xda, 0xcf, 0x41, 0x99, 0xd0, 0x21, 0xa4, 0x84, 0xc5, 0xc9, 0x75, 0x75, 0xb0, 0xbe, - 0xae, 0x79, 0x8d, 0x30, 0x30, 0x1f, 0x04, 0x56, 0x24, 0x25, 0x9c, 0x10, 0x45, 0xcb, 0x30, 0x12, - 0x91, 0xd0, 0x23, 0x91, 0x38, 0xc3, 0x7a, 0x4c, 0x23, 0x43, 0xe3, 0x4e, 0x2b, 0xfc, 0x37, 0x16, - 0x55, 0xe9, 0xf2, 0x72, 0x98, 0xae, 0x94, 0x9d, 0x32, 0xda, 0xf2, 0x5a, 0x64, 0xa5, 0x58, 0x40, - 0xd1, 0x1b, 0x30, 0x1a, 0x92, 0x26, 0x7b, 0x71, 0x9a, 0x18, 0x7c, 0x91, 0xf3, 0x07, 0x2c, 0x5e, - 0x0f, 0x4b, 0x02, 0xe8, 0x06, 0xa0, 0x90, 0x50, 0x09, 0xcc, 0xf3, 0xb7, 0x95, 0x3d, 0xaa, 0xe0, - 0xe0, 0x6a, 0xc7, 0xe3, 0x04, 0x43, 0xfa, 0x0f, 0xe1, 0x8c, 0x6a, 0xe8, 0x1a, 0xcc, 0xa8, 0xd2, - 0xaa, 0x1f, 0xc5, 0x0e, 0xe5, 0x9c, 0x53, 0x8c, 0x96, 0x52, 0x80, 0xe0, 0x34, 0x02, 0xee, 0xae, - 0x63, 0xff, 0xa4, 0x05, 0x7c, 0x9c, 0x4f, 0xe0, 0xda, 0xff, 0xba, 0x79, 0xed, 0x3f, 0x97, 0x3b, - 0x73, 0x39, 0x57, 0xfe, 0x07, 0x16, 0x8c, 0x69, 0x33, 0x9b, 0xac, 0x59, 0xab, 0xc7, 0x9a, 0xed, - 0xc0, 0x34, 0x5d, 0xe9, 0xb7, 0x36, 0x23, 0x12, 0xee, 0x11, 0x97, 0x2d, 0xcc, 0xc2, 0xc3, 0x2d, - 0x4c, 0x65, 0xfb, 0x76, 0x33, 0x45, 0x10, 0x77, 0x35, 0x81, 0x5e, 0x91, 0xcf, 0x2f, 0x45, 0xc3, - 0xce, 0x9c, 0x3f, 0xad, 0x1c, 0x1e, 0xcc, 0x4f, 0x6b, 0x1f, 0xa2, 0x3f, 0xb7, 0xd8, 0x9f, 0x93, - 0xdf, 0xa8, 0x6c, 0x0c, 0x1b, 0x6a, 0xb1, 0xa4, 0x6c, 0x0c, 0xd5, 0x72, 0xc0, 0x09, 0x0e, 0xdd, - 0xa3, 0x3b, 0x41, 0x14, 0xa7, 0x6d, 0x0c, 0xaf, 0x07, 0x51, 0x8c, 0x19, 0xc4, 0x7e, 0x11, 0x60, - 0xe5, 0x3e, 0x69, 0xf0, 0xa5, 0xae, 0x5f, 0x67, 0xac, 0xfc, 0xeb, 0x8c, 0xfd, 0x5b, 0x16, 0x4c, - 0xae, 0x2e, 0x1b, 0x4a, 0xe4, 0x05, 0x00, 0x7e, 0x07, 0xbb, 0x7b, 0x77, 0x5d, 0x3e, 0xd0, 0xf3, - 0x37, 0x56, 0x55, 0x8a, 0x35, 0x0c, 0x74, 0x0e, 0x8a, 0xcd, 0x8e, 0x2f, 0x14, 0x9a, 0xa3, 0xf4, - 0xc0, 0xbe, 0xd9, 0xf1, 0x31, 0x2d, 0xd3, 0x9c, 0x1c, 0x8a, 0x03, 0x3b, 0x39, 0xf4, 0x0d, 0x36, - 0x80, 0xe6, 0x61, 0xf8, 0xde, 0x3d, 0xcf, 0xe5, 0x2e, 0x9d, 0xc2, 0x78, 0xe0, 0xee, 0xdd, 0x6a, - 0x25, 0xc2, 0xbc, 0xdc, 0xfe, 0x52, 0x11, 0xe6, 0x56, 0x9b, 0xe4, 0xfe, 0xbb, 0x74, 0x6b, 0x1d, - 0xd4, 0x45, 0xe3, 0x68, 0xaa, 0xa1, 0xa3, 0xba, 0xe1, 0xf4, 0x1f, 0x8f, 0x2d, 0x18, 0xe5, 0x26, - 0x76, 0xd2, 0xc9, 0xf5, 0xb5, 0xac, 0xd6, 0xf3, 0x07, 0x64, 0x81, 0x9b, 0xea, 0x09, 0x1f, 0x3d, - 0x75, 0xd2, 0x8a, 0x52, 0x2c, 0x89, 0xcf, 0x7d, 0x0c, 0xc6, 0x75, 0xcc, 0x23, 0x39, 0xc4, 0xfd, - 0xe5, 0x22, 0x4c, 0xd3, 0x1e, 0x3c, 0xd2, 0x89, 0xb8, 0xdd, 0x3d, 0x11, 0xc7, 0xed, 0x14, 0xd5, - 0x7f, 0x36, 0xde, 0x4a, 0xcf, 0xc6, 0xf3, 0x79, 0xb3, 0x71, 0xd2, 0x73, 0xf0, 0xed, 0x16, 0x9c, - 0x5a, 0x6d, 0x06, 0x8d, 0xdd, 0x94, 0xe3, 0xd2, 0xcb, 0x30, 0x46, 0xf9, 0x78, 0x64, 0xf8, 0xd4, - 0x1b, 0x51, 0x16, 0x04, 0x08, 0xeb, 0x78, 0x5a, 0xb5, 0xdb, 0xb7, 0xab, 0x95, 0xac, 0xe0, 0x0c, - 0x02, 0x84, 0x75, 0x3c, 0xfb, 0x37, 0x2c, 0xb8, 0x70, 0x6d, 0x79, 0x25, 0x59, 0x8a, 0x5d, 0xf1, - 0x21, 0x2e, 0xc3, 0x48, 0xdb, 0xd5, 0xba, 0x92, 0x28, 0x7c, 0x2b, 0xac, 0x17, 0x02, 0xfa, 0x5e, - 0x89, 0x7d, 0xf2, 0x13, 0x16, 0x9c, 0xba, 0xe6, 0xc5, 0xf4, 0x58, 0x4e, 0x47, 0x2a, 0xa0, 0xe7, - 0x72, 0xe4, 0xc5, 0x41, 0xb8, 0x9f, 0x8e, 0x54, 0x80, 0x15, 0x04, 0x6b, 0x58, 0xbc, 0xe5, 0x3d, - 0x8f, 0x19, 0x77, 0x17, 0xcc, 0xa7, 0x2f, 0x2c, 0xca, 0xb1, 0xc2, 0xa0, 0x1f, 0xe6, 0x7a, 0x21, - 0xd3, 0x1a, 0xee, 0x0b, 0x0e, 0xab, 0x3e, 0xac, 0x22, 0x01, 0x38, 0xc1, 0xa1, 0x17, 0xa8, 0xf9, - 0x6b, 0xcd, 0x4e, 0x14, 0x93, 0x70, 0x2b, 0xca, 0xe1, 0x8e, 0x2f, 0x42, 0x99, 0x48, 0x1d, 0xbd, - 0xe8, 0xb5, 0x12, 0x35, 0x95, 0xf2, 0x9e, 0x07, 0x4c, 0x50, 0x78, 0x03, 0xb8, 0x41, 0x1e, 0xcd, - 0x8f, 0x6d, 0x15, 0x10, 0xd1, 0xdb, 0xd2, 0x23, 0x48, 0x30, 0x57, 0xf4, 0x95, 0x2e, 0x28, 0xce, - 0xa8, 0x61, 0xff, 0xb0, 0x05, 0x67, 0xd4, 0x07, 0xbf, 0xe7, 0x3e, 0xd3, 0xfe, 0x99, 0x02, 0x4c, - 0x5c, 0xdf, 0xd8, 0xa8, 0x5d, 0x23, 0xb1, 0x38, 0xb6, 0xfb, 0xbf, 0xbc, 0x63, 0xed, 0x01, 0xb1, - 0xd7, 0x2d, 0xb0, 0x13, 0x7b, 0xcd, 0x05, 0x1e, 0x88, 0x68, 0xa1, 0xea, 0xc7, 0xb7, 0xc2, 0x7a, - 0x1c, 0x7a, 0xfe, 0x76, 0xe6, 0x93, 0xa3, 0x14, 0x2e, 0x8a, 0x79, 0xc2, 0x05, 0x7a, 0x11, 0x46, - 0x58, 0x24, 0x24, 0x39, 0x09, 0x8f, 0xab, 0x4b, 0x14, 0x2b, 0x3d, 0x3c, 0x98, 0x2f, 0xdf, 0xc6, - 0x55, 0xfe, 0x07, 0x0b, 0x54, 0x74, 0x1b, 0xc6, 0x76, 0xe2, 0xb8, 0x7d, 0x9d, 0x38, 0x2e, 0xbd, - 0x2d, 0x73, 0x76, 0x78, 0x31, 0x8b, 0x1d, 0xd2, 0x41, 0xe0, 0x68, 0x09, 0x07, 0x49, 0xca, 0x22, - 0xac, 0xd3, 0xb1, 0xeb, 0x00, 0x09, 0xec, 0x98, 0xde, 0x4e, 0xec, 0xdf, 0xb7, 0x60, 0x94, 0x07, - 0xa5, 0x08, 0xd1, 0xc7, 0x61, 0x88, 0xdc, 0x27, 0x0d, 0x21, 0x2a, 0x67, 0x76, 0x38, 0x91, 0xb4, - 0xb8, 0x0e, 0x98, 0xfe, 0xc7, 0xac, 0x16, 0xba, 0x0e, 0xa3, 0xb4, 0xb7, 0xd7, 0x54, 0x84, 0x8e, - 0x27, 0xf2, 0xbe, 0x58, 0x4d, 0x3b, 0x17, 0xce, 0x44, 0x11, 0x96, 0xd5, 0xd9, 0x83, 0x75, 0xa3, - 0x5d, 0xa7, 0x1c, 0x3b, 0xee, 0x25, 0x58, 0x6c, 0x2c, 0xd7, 0x38, 0x92, 0xa0, 0xc6, 0x1f, 0xac, - 0x65, 0x21, 0x4e, 0x88, 0xd8, 0x1b, 0x50, 0xa6, 0x93, 0xba, 0xd8, 0xf4, 0x9c, 0xde, 0x6f, 0xf0, - 0xcf, 0x40, 0x59, 0xbe, 0xb0, 0x47, 0xc2, 0x19, 0x9d, 0x51, 0x95, 0x0f, 0xf0, 0x11, 0x4e, 0xe0, - 0xf6, 0x16, 0x9c, 0x66, 0xf6, 0x92, 0x4e, 0xbc, 0x63, 0xec, 0xb1, 0xfe, 0x8b, 0xf9, 0x59, 0x71, - 0xf3, 0xe4, 0x33, 0x33, 0xab, 0xf9, 0x7b, 0x8e, 0x4b, 0x8a, 0xc9, 0x2d, 0xd4, 0xfe, 0xea, 0x10, - 0x3c, 0x5e, 0xad, 0xe7, 0xc7, 0x2b, 0x79, 0x15, 0xc6, 0xb9, 0x5c, 0x4a, 0x97, 0xb6, 0xd3, 0x14, - 0xed, 0x2a, 0xe5, 0xef, 0x86, 0x06, 0xc3, 0x06, 0x26, 0xba, 0x00, 0x45, 0xef, 0x6d, 0x3f, 0xed, - 0x0d, 0x55, 0x7d, 0x73, 0x1d, 0xd3, 0x72, 0x0a, 0xa6, 0x22, 0x2e, 0x3f, 0x3b, 0x14, 0x58, 0x89, - 0xb9, 0xaf, 0xc3, 0xa4, 0x17, 0x35, 0x22, 0xaf, 0xea, 0x53, 0x3e, 0xa3, 0x71, 0x2a, 0xa5, 0x15, - 0xa1, 0x9d, 0x56, 0x50, 0x9c, 0xc2, 0xd6, 0x0e, 0xb2, 0xe1, 0x81, 0xc5, 0xe4, 0xbe, 0xde, 0xd9, - 0xf4, 0x06, 0xd0, 0x66, 0x5f, 0x17, 0x31, 0x2d, 0xbe, 0xb8, 0x01, 0xf0, 0x0f, 0x8e, 0xb0, 0x84, - 0xd1, 0x2b, 0x67, 0x63, 0xc7, 0x69, 0x2f, 0x76, 0xe2, 0x9d, 0x8a, 0x17, 0x35, 0x82, 0x3d, 0x12, - 0xee, 0x33, 0x6d, 0x41, 0x29, 0xb9, 0x72, 0x2a, 0xc0, 0xf2, 0xf5, 0xc5, 0x1a, 0xc5, 0xc4, 0xdd, - 0x75, 0xd0, 0x22, 0x4c, 0xc9, 0xc2, 0x3a, 0x89, 0xd8, 0x11, 0x36, 0xc6, 0xc8, 0x28, 0xff, 0x24, - 0x51, 0xac, 0x88, 0xa4, 0xf1, 0x4d, 0x49, 0x1a, 0x8e, 0x43, 0x92, 0x7e, 0x05, 0x26, 0x3c, 0xdf, - 0x8b, 0x3d, 0x27, 0x0e, 0xf8, 0x13, 0x14, 0x57, 0x0c, 0x30, 0xdd, 0x7a, 0x55, 0x07, 0x60, 0x13, - 0xcf, 0xfe, 0x6f, 0x43, 0x30, 0xc3, 0xa6, 0xed, 0xfd, 0x15, 0xf6, 0xf5, 0xb4, 0xc2, 0x6e, 0x77, - 0xaf, 0xb0, 0xe3, 0xb8, 0x22, 0x3c, 0xf4, 0x32, 0xfb, 0x3c, 0x94, 0x95, 0x4b, 0x96, 0xf4, 0xc9, - 0xb4, 0x72, 0x7c, 0x32, 0xfb, 0x4b, 0x1f, 0xd2, 0xaa, 0xad, 0x98, 0x69, 0xd5, 0xf6, 0xb7, 0x2d, - 0x48, 0xde, 0x54, 0xd0, 0x75, 0x28, 0xb7, 0x03, 0x66, 0xac, 0x19, 0x4a, 0x0b, 0xe8, 0xc7, 0x33, - 0x0f, 0x2a, 0x7e, 0x28, 0xf2, 0x8f, 0xaf, 0xc9, 0x1a, 0x38, 0xa9, 0x8c, 0x96, 0x60, 0xb4, 0x1d, - 0x92, 0x7a, 0xcc, 0xc2, 0x96, 0xf4, 0xa5, 0xc3, 0xd7, 0x08, 0xc7, 0xc7, 0xb2, 0xa2, 0xfd, 0xb3, - 0x16, 0x00, 0x37, 0x1c, 0x73, 0xfc, 0x6d, 0x72, 0x02, 0xea, 0xee, 0x0a, 0x0c, 0x45, 0x6d, 0xd2, - 0xe8, 0x65, 0x46, 0x9b, 0xf4, 0xa7, 0xde, 0x26, 0x8d, 0x64, 0xc0, 0xe9, 0x3f, 0xcc, 0x6a, 0xdb, - 0xdf, 0x09, 0x30, 0x99, 0xa0, 0x55, 0x63, 0xd2, 0x42, 0xcf, 0x19, 0x61, 0x0c, 0xce, 0xa5, 0xc2, - 0x18, 0x94, 0x19, 0xb6, 0xa6, 0x59, 0xfd, 0x3c, 0x14, 0x5b, 0xce, 0x7d, 0xa1, 0x3a, 0x7b, 0xa6, - 0x77, 0x37, 0x28, 0xfd, 0x85, 0x35, 0xe7, 0x3e, 0xbf, 0x24, 0x3e, 0x23, 0x17, 0xc8, 0x9a, 0x73, - 0xff, 0x90, 0x1b, 0xcb, 0x32, 0x26, 0x75, 0xd3, 0x8b, 0xe2, 0x2f, 0xfc, 0xd7, 0xe4, 0x3f, 0x5b, - 0x76, 0xb4, 0x11, 0xd6, 0x96, 0xe7, 0x0b, 0x9b, 0xa8, 0x81, 0xda, 0xf2, 0xfc, 0x74, 0x5b, 0x9e, - 0x3f, 0x40, 0x5b, 0x9e, 0x8f, 0xde, 0x81, 0x51, 0x61, 0xb2, 0x28, 0xc2, 0x06, 0x5d, 0x1d, 0xa0, - 0x3d, 0x61, 0xf1, 0xc8, 0xdb, 0xbc, 0x2a, 0x2f, 0xc1, 0xa2, 0xb4, 0x6f, 0xbb, 0xb2, 0x41, 0xf4, - 0x37, 0x2c, 0x98, 0x14, 0xbf, 0x31, 0x79, 0xbb, 0x43, 0xa2, 0x58, 0xc8, 0x9e, 0x1f, 0x1d, 0xbc, - 0x0f, 0xa2, 0x22, 0xef, 0xca, 0x47, 0x25, 0x9b, 0x35, 0x81, 0x7d, 0x7b, 0x94, 0xea, 0x05, 0xfa, - 0x47, 0x16, 0x9c, 0x6e, 0x39, 0xf7, 0x79, 0x8b, 0xbc, 0x0c, 0x3b, 0xb1, 0x17, 0x88, 0xa7, 0xff, - 0x8f, 0x0f, 0x36, 0xfd, 0x5d, 0xd5, 0x79, 0x27, 0xe5, 0xfb, 0xe4, 0xe9, 0x2c, 0x94, 0xbe, 0x5d, - 0xcd, 0xec, 0xd7, 0xdc, 0x16, 0x94, 0xe4, 0x7a, 0xcb, 0x50, 0x35, 0x54, 0x74, 0xc1, 0xfa, 0xc8, - 0x16, 0xa3, 0x7a, 0x78, 0x00, 0xda, 0x8e, 0x58, 0x6b, 0x8f, 0xb4, 0x9d, 0xcf, 0xc3, 0xb8, 0xbe, - 0xc6, 0x1e, 0x69, 0x5b, 0x6f, 0xc3, 0xa9, 0x8c, 0xb5, 0xf4, 0x48, 0x9b, 0xbc, 0x07, 0xe7, 0x72, - 0xd7, 0xc7, 0xa3, 0x6c, 0xd8, 0xfe, 0x19, 0x4b, 0xe7, 0x83, 0x27, 0xf0, 0xe6, 0xb0, 0x6c, 0xbe, - 0x39, 0x5c, 0xec, 0xbd, 0x73, 0x72, 0x1e, 0x1e, 0xde, 0xd2, 0x3b, 0x4d, 0xb9, 0x3a, 0x7a, 0x03, - 0x46, 0x9a, 0xb4, 0x44, 0x1a, 0xbe, 0xda, 0xfd, 0x77, 0x64, 0x22, 0x4b, 0xb1, 0xf2, 0x08, 0x0b, - 0x0a, 0xf6, 0x2f, 0x58, 0x30, 0x74, 0x02, 0x23, 0x81, 0xcd, 0x91, 0x78, 0x2e, 0x97, 0xb4, 0x88, - 0x68, 0xbc, 0x80, 0x9d, 0x7b, 0x2b, 0xf7, 0x63, 0xe2, 0x47, 0xec, 0xaa, 0x98, 0x39, 0x30, 0xff, - 0x1f, 0x9c, 0xba, 0x19, 0x38, 0xee, 0x92, 0xd3, 0x74, 0xfc, 0x06, 0x09, 0xab, 0xfe, 0xf6, 0x91, - 0x8c, 0xb6, 0x0b, 0xfd, 0x8c, 0xb6, 0xed, 0x1d, 0x40, 0x7a, 0x03, 0xc2, 0xfb, 0x05, 0xc3, 0xa8, - 0xc7, 0x9b, 0x12, 0xc3, 0xff, 0x54, 0xb6, 0x68, 0xd6, 0xd5, 0x33, 0xcd, 0xaf, 0x83, 0x17, 0x60, - 0x49, 0xc8, 0x7e, 0x15, 0x32, 0x5d, 0xe8, 0xfb, 0xab, 0x0d, 0xec, 0x4f, 0xc1, 0x0c, 0xab, 0x79, - 0xc4, 0x2b, 0xad, 0x9d, 0xd2, 0x4a, 0x66, 0x04, 0xd7, 0xb3, 0xbf, 0x68, 0xc1, 0xd4, 0x7a, 0x2a, - 0xe6, 0xd8, 0x65, 0xf6, 0x00, 0x9a, 0xa1, 0x0c, 0xaf, 0xb3, 0x52, 0x2c, 0xa0, 0xc7, 0xae, 0x83, - 0xfa, 0x73, 0x0b, 0x92, 0xa8, 0x16, 0x27, 0x20, 0x78, 0x2d, 0x1b, 0x82, 0x57, 0xa6, 0x6e, 0x44, - 0x75, 0x27, 0x4f, 0xee, 0x42, 0x37, 0x54, 0xbc, 0xa7, 0x1e, 0x6a, 0x91, 0x84, 0x0c, 0x8f, 0x0e, - 0x34, 0x69, 0x06, 0x85, 0x92, 0x11, 0xa0, 0xec, 0xff, 0x5c, 0x00, 0xa4, 0x70, 0x07, 0x8e, 0x47, - 0xd5, 0x5d, 0xe3, 0x78, 0xe2, 0x51, 0xed, 0x01, 0x62, 0x4f, 0xf8, 0xa1, 0xe3, 0x47, 0x9c, 0xac, - 0x27, 0xb4, 0x6e, 0x47, 0xb3, 0x0f, 0x98, 0x13, 0x4d, 0xa2, 0x9b, 0x5d, 0xd4, 0x70, 0x46, 0x0b, - 0x9a, 0x69, 0xc6, 0xf0, 0xa0, 0xa6, 0x19, 0x23, 0x7d, 0x3c, 0xdc, 0x7e, 0xda, 0x82, 0x09, 0x35, - 0x4c, 0xef, 0x11, 0xfb, 0x73, 0xd5, 0x9f, 0x1c, 0xd6, 0x57, 0xd3, 0xba, 0xcc, 0x8e, 0x84, 0x6f, - 0x64, 0x9e, 0x8a, 0x4e, 0xd3, 0x7b, 0x87, 0xa8, 0x68, 0x80, 0xf3, 0xc2, 0xf3, 0x50, 0x94, 0x1e, - 0x1e, 0xcc, 0x4f, 0xa8, 0x7f, 0x3c, 0xfa, 0x70, 0x52, 0xc5, 0xfe, 0x31, 0xba, 0xd9, 0xcd, 0xa5, - 0x88, 0x5e, 0x86, 0xe1, 0xf6, 0x8e, 0x13, 0x91, 0x94, 0x9f, 0xce, 0x70, 0x8d, 0x16, 0x1e, 0x1e, - 0xcc, 0x4f, 0xaa, 0x0a, 0xac, 0x04, 0x73, 0xec, 0xc1, 0xa3, 0x7c, 0x75, 0x2f, 0xce, 0xbe, 0x51, - 0xbe, 0xfe, 0xd8, 0x82, 0xa1, 0xf5, 0xc0, 0x3d, 0x09, 0x16, 0xf0, 0xba, 0xc1, 0x02, 0xce, 0xe7, - 0x05, 0x86, 0xcf, 0xdd, 0xfd, 0xab, 0xa9, 0xdd, 0x7f, 0x31, 0x97, 0x42, 0xef, 0x8d, 0xdf, 0x82, - 0x31, 0x16, 0x6e, 0x5e, 0xf8, 0x24, 0xbd, 0x68, 0x6c, 0xf8, 0xf9, 0xd4, 0x86, 0x9f, 0xd2, 0x50, - 0xb5, 0x9d, 0xfe, 0x34, 0x8c, 0x0a, 0x27, 0x97, 0xb4, 0xc3, 0xa7, 0xc0, 0xc5, 0x12, 0x6e, 0xff, - 0x48, 0x11, 0x8c, 0xf0, 0xf6, 0xe8, 0x97, 0x2c, 0x58, 0x08, 0xb9, 0xf1, 0xab, 0x5b, 0xe9, 0x84, - 0x9e, 0xbf, 0x5d, 0x6f, 0xec, 0x10, 0xb7, 0xd3, 0xf4, 0xfc, 0xed, 0xea, 0xb6, 0x1f, 0xa8, 0xe2, - 0x95, 0xfb, 0xa4, 0xd1, 0x61, 0xcf, 0x57, 0x7d, 0x62, 0xe9, 0x2b, 0x23, 0xf2, 0x17, 0x1e, 0x1c, - 0xcc, 0x2f, 0xe0, 0x23, 0xd1, 0xc6, 0x47, 0xec, 0x0b, 0xfa, 0x0d, 0x0b, 0xae, 0xf2, 0xa8, 0xef, - 0x83, 0xf7, 0xbf, 0xc7, 0x3d, 0xb7, 0x26, 0x49, 0x25, 0x44, 0x36, 0x48, 0xd8, 0x5a, 0x7a, 0x45, - 0x0c, 0xe8, 0xd5, 0xda, 0xd1, 0xda, 0xc2, 0x47, 0xed, 0x9c, 0xfd, 0x2f, 0x8b, 0x30, 0x21, 0xa2, - 0x41, 0x89, 0x33, 0xe0, 0x65, 0x63, 0x49, 0x3c, 0x91, 0x5a, 0x12, 0x33, 0x06, 0xf2, 0xf1, 0xb0, - 0xff, 0x08, 0x66, 0x28, 0x73, 0xbe, 0x4e, 0x9c, 0x30, 0xde, 0x24, 0x0e, 0xb7, 0xb8, 0x2a, 0x1e, - 0x99, 0xfb, 0x2b, 0xc5, 0xda, 0xcd, 0x34, 0x31, 0xdc, 0x4d, 0xff, 0xeb, 0xe9, 0xcc, 0xf1, 0x61, - 0xba, 0x2b, 0xa0, 0xd7, 0xa7, 0xa1, 0xac, 0x3c, 0x34, 0x04, 0xd3, 0xe9, 0x1d, 0x17, 0x2f, 0x4d, - 0x81, 0x2b, 0xbf, 0x12, 0xef, 0xa0, 0x84, 0x9c, 0xfd, 0x8f, 0x0b, 0x46, 0x83, 0x7c, 0x12, 0xd7, - 0xa1, 0xe4, 0x44, 0x91, 0xb7, 0xed, 0x13, 0x57, 0xec, 0xd8, 0x0f, 0xe6, 0xed, 0x58, 0xa3, 0x19, - 0xe6, 0x25, 0xb3, 0x28, 0x6a, 0x62, 0x45, 0x03, 0x5d, 0xe7, 0x76, 0x6d, 0x7b, 0xf2, 0xa6, 0x36, - 0x18, 0x35, 0x90, 0x96, 0x6f, 0x7b, 0x04, 0x8b, 0xfa, 0xe8, 0x33, 0xdc, 0xf0, 0xf0, 0x86, 0x1f, - 0xdc, 0xf3, 0xaf, 0x05, 0x81, 0x8c, 0xb8, 0x30, 0x18, 0xc1, 0x19, 0x69, 0x6e, 0xa8, 0xaa, 0x63, - 0x93, 0xda, 0x60, 0x11, 0x32, 0xbf, 0x05, 0x4e, 0x51, 0xd2, 0xa6, 0x43, 0x74, 0x84, 0x08, 0x4c, - 0x89, 0x50, 0x63, 0xb2, 0x4c, 0x8c, 0x5d, 0xe6, 0x25, 0xcc, 0xac, 0x9d, 0x68, 0x80, 0x6f, 0x98, - 0x24, 0x70, 0x9a, 0xa6, 0xfd, 0xe3, 0x16, 0x30, 0xe7, 0xd0, 0x13, 0x90, 0x47, 0x3e, 0x61, 0xca, - 0x23, 0xb3, 0x79, 0x83, 0x9c, 0x23, 0x8a, 0xbc, 0xc4, 0x57, 0x56, 0x2d, 0x0c, 0xee, 0xef, 0x0b, - 0xa3, 0x8f, 0xfe, 0xf7, 0x0f, 0xfb, 0xff, 0x58, 0x9c, 0x89, 0x29, 0xff, 0x09, 0xf4, 0xad, 0x50, - 0x6a, 0x38, 0x6d, 0xa7, 0xc1, 0x73, 0xb1, 0xe4, 0xea, 0xe2, 0x8c, 0x4a, 0x0b, 0xcb, 0xa2, 0x06, - 0xd7, 0x2d, 0xc9, 0x90, 0x75, 0x25, 0x59, 0xdc, 0x57, 0x9f, 0xa4, 0x9a, 0x9c, 0xdb, 0x85, 0x09, - 0x83, 0xd8, 0x23, 0x55, 0x44, 0x7c, 0x2b, 0x3f, 0x62, 0x55, 0x88, 0xc5, 0x16, 0xcc, 0xf8, 0xda, - 0x7f, 0x7a, 0xa0, 0xc8, 0xcb, 0xe5, 0x07, 0xfb, 0x1d, 0xa2, 0xec, 0xf4, 0xd1, 0xfc, 0x4e, 0x53, - 0x64, 0x70, 0x37, 0x65, 0xfb, 0x47, 0x2d, 0x78, 0x4c, 0x47, 0xd4, 0x5c, 0x5b, 0xfa, 0x69, 0xf7, - 0x2b, 0x50, 0x0a, 0xda, 0x24, 0x74, 0xe2, 0x20, 0x14, 0xa7, 0xc6, 0x15, 0x39, 0xe8, 0xb7, 0x44, - 0xf9, 0xa1, 0x88, 0x64, 0x2e, 0xa9, 0xcb, 0x72, 0xac, 0x6a, 0xd2, 0xdb, 0x27, 0x1b, 0x8c, 0x48, - 0x38, 0x31, 0x31, 0x1e, 0xc0, 0x1e, 0xba, 0x23, 0x2c, 0x20, 0xf6, 0x57, 0x2d, 0xbe, 0xb0, 0xf4, - 0xae, 0xa3, 0xb7, 0x61, 0xba, 0xe5, 0xc4, 0x8d, 0x9d, 0x95, 0xfb, 0xed, 0x90, 0xbf, 0x95, 0xc8, - 0x71, 0x7a, 0xa6, 0xdf, 0x38, 0x69, 0x1f, 0x99, 0xd8, 0x52, 0xae, 0xa5, 0x88, 0xe1, 0x2e, 0xf2, - 0x68, 0x13, 0xc6, 0x58, 0x19, 0xf3, 0xcf, 0x8b, 0x7a, 0x89, 0x06, 0x79, 0xad, 0x29, 0x5b, 0x81, - 0xb5, 0x84, 0x0e, 0xd6, 0x89, 0xda, 0x3f, 0x55, 0xe4, 0xbb, 0x9d, 0x89, 0xf2, 0x4f, 0xc3, 0x68, - 0x3b, 0x70, 0x97, 0xab, 0x15, 0x2c, 0x66, 0x41, 0x1d, 0x23, 0x35, 0x5e, 0x8c, 0x25, 0x1c, 0x5d, - 0x81, 0x92, 0xf8, 0x29, 0xdf, 0xb6, 0x18, 0x6f, 0x16, 0x78, 0x11, 0x56, 0x50, 0xf4, 0x02, 0x40, - 0x3b, 0x0c, 0xf6, 0x3c, 0x97, 0xc5, 0x8d, 0x28, 0x9a, 0x66, 0x3e, 0x35, 0x05, 0xc1, 0x1a, 0x16, - 0x7a, 0x0d, 0x26, 0x3a, 0x7e, 0xc4, 0xc5, 0x11, 0x2d, 0x4a, 0xac, 0x32, 0x40, 0xb9, 0xad, 0x03, - 0xb1, 0x89, 0x8b, 0x16, 0x61, 0x24, 0x76, 0x98, 0xd9, 0xca, 0x70, 0xbe, 0xbd, 0xed, 0x06, 0xc5, - 0xd0, 0xd3, 0x7e, 0xd0, 0x0a, 0x58, 0x54, 0x44, 0x9f, 0x96, 0xae, 0xb2, 0x9c, 0xb1, 0x0b, 0x43, - 0xf7, 0xc1, 0x0e, 0x01, 0xcd, 0x51, 0x56, 0x18, 0xd0, 0x1b, 0xb4, 0xd0, 0xc7, 0x00, 0xc8, 0xfd, - 0x98, 0x84, 0xbe, 0xd3, 0x54, 0x56, 0x61, 0x4a, 0x2e, 0xa8, 0x04, 0xeb, 0x41, 0x7c, 0x3b, 0x22, - 0x2b, 0x0a, 0x03, 0x6b, 0xd8, 0xf6, 0x6f, 0x94, 0x01, 0x12, 0xb9, 0x1d, 0xbd, 0xd3, 0xc5, 0xb8, - 0x9e, 0xed, 0x2d, 0xe9, 0x1f, 0x1f, 0xd7, 0x42, 0xdf, 0x65, 0xc1, 0x98, 0xd3, 0x6c, 0x06, 0x0d, - 0x87, 0xc7, 0xf1, 0x2d, 0xf4, 0x66, 0x9c, 0xa2, 0xfd, 0xc5, 0xa4, 0x06, 0xef, 0xc2, 0x8b, 0x72, - 0x85, 0x6a, 0x90, 0xbe, 0xbd, 0xd0, 0x1b, 0x46, 0x1f, 0x91, 0x57, 0xc5, 0xa2, 0x31, 0x94, 0xea, - 0xaa, 0x58, 0x66, 0x67, 0x84, 0x7e, 0x4b, 0xbc, 0x6d, 0xdc, 0x12, 0x87, 0xf2, 0x7d, 0x01, 0x0d, - 0xf1, 0xb5, 0xdf, 0x05, 0x11, 0xd5, 0xf4, 0xb8, 0x00, 0xc3, 0xf9, 0x8e, 0x77, 0xda, 0x3d, 0xa9, - 0x4f, 0x4c, 0x80, 0xcf, 0xc3, 0x94, 0x6b, 0x0a, 0x01, 0x62, 0x25, 0x3e, 0x95, 0x47, 0x37, 0x25, - 0x33, 0x24, 0xc7, 0x7e, 0x0a, 0x80, 0xd3, 0x84, 0x51, 0x8d, 0x87, 0x89, 0xa8, 0xfa, 0x5b, 0x81, - 0x70, 0xb6, 0xb0, 0x73, 0xe7, 0x72, 0x3f, 0x8a, 0x49, 0x8b, 0x62, 0x26, 0xa7, 0xfb, 0xba, 0xa8, - 0x8b, 0x15, 0x15, 0xf4, 0x06, 0x8c, 0x30, 0xcf, 0xab, 0x68, 0xb6, 0x94, 0xaf, 0x2b, 0x36, 0xe3, - 0x9e, 0x25, 0x1b, 0x92, 0xfd, 0x8d, 0xb0, 0xa0, 0x80, 0xae, 0x4b, 0xbf, 0xc6, 0xa8, 0xea, 0xdf, - 0x8e, 0x08, 0xf3, 0x6b, 0x2c, 0x2f, 0x7d, 0x30, 0x71, 0x59, 0xe4, 0xe5, 0x99, 0xc9, 0xc1, 0x8c, - 0x9a, 0x54, 0x8a, 0x12, 0xff, 0x65, 0xce, 0xb1, 0x59, 0xc8, 0xef, 0x9e, 0x99, 0x97, 0x2c, 0x19, - 0xce, 0x3b, 0x26, 0x09, 0x9c, 0xa6, 0x49, 0x25, 0x52, 0xbe, 0xeb, 0x85, 0xbb, 0x46, 0x3f, 0xde, - 0xc1, 0x2f, 0xe2, 0xec, 0x34, 0xe2, 0x25, 0x58, 0xd4, 0x3f, 0x51, 0xf1, 0x60, 0xce, 0x87, 0xe9, - 0xf4, 0x16, 0x7d, 0xa4, 0xe2, 0xc8, 0xef, 0x0f, 0xc1, 0xa4, 0xb9, 0xa4, 0xd0, 0x55, 0x28, 0x0b, - 0x22, 0x2a, 0x4f, 0x80, 0xda, 0x25, 0x6b, 0x12, 0x80, 0x13, 0x1c, 0x96, 0x1e, 0x82, 0x55, 0xd7, - 0xcc, 0x6c, 0x93, 0xf4, 0x10, 0x0a, 0x82, 0x35, 0x2c, 0x7a, 0xb1, 0xda, 0x0c, 0x82, 0x58, 0x1d, - 0x48, 0x6a, 0xdd, 0x2d, 0xb1, 0x52, 0x2c, 0xa0, 0xf4, 0x20, 0xda, 0x25, 0xa1, 0x4f, 0x9a, 0x66, - 0x44, 0x61, 0x75, 0x10, 0xdd, 0xd0, 0x81, 0xd8, 0xc4, 0xa5, 0xc7, 0x69, 0x10, 0xb1, 0x85, 0x2c, - 0xae, 0x6f, 0x89, 0xd9, 0x72, 0x9d, 0xbb, 0x56, 0x4b, 0x38, 0xfa, 0x14, 0x3c, 0xa6, 0xa2, 0x26, - 0x61, 0xfe, 0x0e, 0x21, 0x5b, 0x1c, 0x31, 0xb4, 0x2d, 0x8f, 0x2d, 0x67, 0xa3, 0xe1, 0xbc, 0xfa, - 0xe8, 0x75, 0x98, 0x14, 0x22, 0xbe, 0xa4, 0x38, 0x6a, 0x9a, 0xc6, 0xdc, 0x30, 0xa0, 0x38, 0x85, - 0x2d, 0x63, 0x22, 0x33, 0x29, 0x5b, 0x52, 0x28, 0x75, 0xc7, 0x44, 0xd6, 0xe1, 0xb8, 0xab, 0x06, - 0x5a, 0x84, 0x29, 0x2e, 0x83, 0x79, 0xfe, 0x36, 0x9f, 0x13, 0xe1, 0x4d, 0xa5, 0xb6, 0xd4, 0x2d, - 0x13, 0x8c, 0xd3, 0xf8, 0xe8, 0x55, 0x18, 0x77, 0xc2, 0xc6, 0x8e, 0x17, 0x93, 0x46, 0xdc, 0x09, - 0xb9, 0x9b, 0x95, 0x66, 0x5b, 0xb4, 0xa8, 0xc1, 0xb0, 0x81, 0x69, 0xbf, 0x03, 0xa7, 0x32, 0x62, - 0x2e, 0xd0, 0x85, 0xe3, 0xb4, 0x3d, 0xf9, 0x4d, 0x29, 0x03, 0xe4, 0xc5, 0x5a, 0x55, 0x7e, 0x8d, - 0x86, 0x45, 0x57, 0x27, 0x8b, 0xcd, 0xa0, 0xa5, 0x18, 0x54, 0xab, 0x73, 0x55, 0x02, 0x70, 0x82, - 0x63, 0xff, 0xcf, 0x02, 0x4c, 0x65, 0xbc, 0xad, 0xb0, 0x34, 0x77, 0xa9, 0x4b, 0x4a, 0x92, 0xd5, - 0xce, 0x0c, 0xb1, 0x5d, 0x38, 0x42, 0x88, 0xed, 0x62, 0xbf, 0x10, 0xdb, 0x43, 0xef, 0x26, 0xc4, - 0xb6, 0x39, 0x62, 0xc3, 0x03, 0x8d, 0x58, 0x46, 0x58, 0xee, 0x91, 0x23, 0x86, 0xe5, 0x36, 0x06, - 0x7d, 0x74, 0x80, 0x41, 0xff, 0x81, 0x02, 0x4c, 0xa7, 0x6d, 0x20, 0x4f, 0x40, 0x6f, 0xfb, 0x86, - 0xa1, 0xb7, 0xcd, 0x4e, 0x1a, 0x99, 0xb6, 0xcc, 0xcc, 0xd3, 0xe1, 0xe2, 0x94, 0x0e, 0xf7, 0xc3, - 0x03, 0x51, 0xeb, 0xad, 0xcf, 0xfd, 0xbb, 0x05, 0x38, 0x93, 0xae, 0xb2, 0xdc, 0x74, 0xbc, 0xd6, - 0x09, 0x8c, 0xcd, 0x2d, 0x63, 0x6c, 0x9e, 0x1b, 0xe4, 0x6b, 0x58, 0xd7, 0x72, 0x07, 0xe8, 0x6e, - 0x6a, 0x80, 0xae, 0x0e, 0x4e, 0xb2, 0xf7, 0x28, 0x7d, 0xa5, 0x08, 0x17, 0x33, 0xeb, 0x25, 0x6a, - 0xcf, 0x55, 0x43, 0xed, 0xf9, 0x42, 0x4a, 0xed, 0x69, 0xf7, 0xae, 0x7d, 0x3c, 0x7a, 0x50, 0xe1, - 0x21, 0xcb, 0x02, 0x08, 0x3c, 0xa4, 0x0e, 0xd4, 0xf0, 0x90, 0x55, 0x84, 0xb0, 0x49, 0xf7, 0xeb, - 0x49, 0xf7, 0xf9, 0x6f, 0x2d, 0x38, 0x97, 0x39, 0x37, 0x27, 0xa0, 0xeb, 0x5a, 0x37, 0x75, 0x5d, - 0x4f, 0x0f, 0xbc, 0x5a, 0x73, 0x94, 0x5f, 0xbf, 0x36, 0x94, 0xf3, 0x2d, 0xec, 0x26, 0x7f, 0x0b, - 0xc6, 0x9c, 0x46, 0x83, 0x44, 0xd1, 0x5a, 0xe0, 0xaa, 0x28, 0xc2, 0xcf, 0xb1, 0x7b, 0x56, 0x52, - 0x7c, 0x78, 0x30, 0x3f, 0x97, 0x26, 0x91, 0x80, 0xb1, 0x4e, 0x01, 0x7d, 0x06, 0x4a, 0x91, 0x38, - 0x37, 0xc5, 0xdc, 0xbf, 0x38, 0xe0, 0xe0, 0x38, 0x9b, 0xa4, 0x69, 0x86, 0x39, 0x52, 0x9a, 0x0a, - 0x45, 0xd2, 0x0c, 0x89, 0x52, 0x38, 0xd6, 0x90, 0x28, 0x2f, 0x00, 0xec, 0xa9, 0xcb, 0x40, 0x5a, - 0xff, 0xa0, 0x5d, 0x13, 0x34, 0x2c, 0xf4, 0x4d, 0x30, 0x1d, 0xf1, 0x38, 0x80, 0xcb, 0x4d, 0x27, - 0x62, 0x6e, 0x2e, 0x62, 0x15, 0xb2, 0x50, 0x4a, 0xf5, 0x14, 0x0c, 0x77, 0x61, 0xa3, 0x55, 0xd9, - 0x2a, 0x0b, 0x5a, 0xc8, 0x17, 0xe6, 0xe5, 0xa4, 0x45, 0x91, 0x64, 0xf7, 0x74, 0x7a, 0xf8, 0xd9, - 0xc0, 0x6b, 0x35, 0xd1, 0x67, 0x00, 0xe8, 0xf2, 0x11, 0x7a, 0x88, 0xd1, 0x7c, 0xe6, 0x49, 0xb9, - 0x8a, 0x9b, 0x69, 0x95, 0xcb, 0x7c, 0x53, 0x2b, 0x8a, 0x08, 0xd6, 0x08, 0xda, 0x3f, 0x30, 0x04, - 0x8f, 0xf7, 0xe0, 0x91, 0x68, 0xd1, 0x7c, 0x87, 0x7d, 0x26, 0x7d, 0xb9, 0x9e, 0xcb, 0xac, 0x6c, - 0xdc, 0xb6, 0x53, 0x4b, 0xb1, 0xf0, 0xae, 0x97, 0xe2, 0xf7, 0x5a, 0x9a, 0xda, 0x83, 0xdb, 0x6a, - 0x7e, 0xe2, 0x88, 0xbc, 0xff, 0x18, 0xf5, 0x20, 0x5b, 0x19, 0xca, 0x84, 0x17, 0x06, 0xee, 0xce, - 0xc0, 0xda, 0x85, 0x93, 0xd5, 0x12, 0x7f, 0xc1, 0x82, 0x27, 0x32, 0xfb, 0x6b, 0x58, 0xe4, 0x5c, - 0x85, 0x72, 0x83, 0x16, 0x6a, 0xae, 0x88, 0x89, 0x8f, 0xb6, 0x04, 0xe0, 0x04, 0xc7, 0x30, 0xbc, - 0x29, 0xf4, 0x35, 0xbc, 0xf9, 0x65, 0x0b, 0xba, 0xf6, 0xc7, 0x09, 0x30, 0xea, 0xaa, 0xc9, 0xa8, - 0x3f, 0x38, 0xc8, 0x5c, 0xe6, 0xf0, 0xe8, 0x3f, 0x9a, 0x82, 0xb3, 0x39, 0xae, 0x38, 0x7b, 0x30, - 0xb3, 0xdd, 0x20, 0xa6, 0x93, 0xa7, 0xf8, 0x98, 0x4c, 0x7f, 0xd8, 0x9e, 0x1e, 0xa1, 0x2c, 0x63, - 0xe6, 0x4c, 0x17, 0x0a, 0xee, 0x6e, 0x02, 0x7d, 0xc1, 0x82, 0xd3, 0xce, 0xbd, 0xa8, 0x2b, 0xc5, - 0xbe, 0x58, 0x33, 0x2f, 0x65, 0x2a, 0x41, 0xfa, 0xa4, 0xe4, 0xe7, 0x29, 0x44, 0xb3, 0xb0, 0x70, - 0x66, 0x5b, 0x08, 0x8b, 0xb8, 0xf2, 0x54, 0x9c, 0xef, 0xe1, 0x86, 0x9c, 0xe5, 0x33, 0xc5, 0x4f, - 0x10, 0x09, 0xc1, 0x8a, 0x0e, 0xfa, 0x1c, 0x94, 0xb7, 0xa5, 0x23, 0x63, 0xc6, 0x09, 0x95, 0x0c, - 0x64, 0x6f, 0xf7, 0x4e, 0xfe, 0x92, 0xa9, 0x90, 0x70, 0x42, 0x14, 0xbd, 0x0e, 0x45, 0x7f, 0x2b, - 0xea, 0x95, 0x85, 0x33, 0x65, 0xb2, 0xc6, 0x9d, 0xfd, 0xd7, 0x57, 0xeb, 0x98, 0x56, 0x44, 0xd7, - 0xa1, 0x18, 0x6e, 0xba, 0x42, 0x83, 0x97, 0xc9, 0xc3, 0xf1, 0x52, 0x25, 0xa7, 0x57, 0x8c, 0x12, - 0x5e, 0xaa, 0x60, 0x4a, 0x02, 0xd5, 0x60, 0x98, 0xf9, 0xaf, 0x88, 0xf3, 0x20, 0x53, 0xf2, 0xed, - 0xe1, 0x07, 0xc6, 0x23, 0x02, 0x30, 0x04, 0xcc, 0x09, 0xa1, 0x0d, 0x18, 0x69, 0xb0, 0x8c, 0x8d, - 0x22, 0x1e, 0xd9, 0x47, 0x32, 0x75, 0x75, 0x3d, 0x52, 0x59, 0x0a, 0xd5, 0x15, 0xc3, 0xc0, 0x82, - 0x16, 0xa3, 0x4a, 0xda, 0x3b, 0x5b, 0x91, 0xc8, 0x30, 0x9c, 0x4d, 0xb5, 0x47, 0x86, 0x56, 0x41, - 0x95, 0x61, 0x60, 0x41, 0x0b, 0x7d, 0x0c, 0x0a, 0x5b, 0x0d, 0xe1, 0x9b, 0x92, 0xa9, 0xb4, 0x33, - 0xe3, 0x35, 0x2c, 0x8d, 0x3c, 0x38, 0x98, 0x2f, 0xac, 0x2e, 0xe3, 0xc2, 0x56, 0x03, 0xad, 0xc3, - 0xe8, 0x16, 0xf7, 0xf0, 0x16, 0x7a, 0xb9, 0xa7, 0xb2, 0x9d, 0xcf, 0xbb, 0x9c, 0xc0, 0xb9, 0x5b, - 0x86, 0x00, 0x60, 0x49, 0x84, 0x85, 0x69, 0x57, 0x9e, 0xea, 0x22, 0x74, 0xd7, 0xc2, 0xd1, 0xa2, - 0x0b, 0xf0, 0xf3, 0x39, 0xf1, 0x77, 0xc7, 0x1a, 0x45, 0xba, 0xaa, 0x1d, 0x99, 0xe6, 0x5d, 0x84, - 0x62, 0xc9, 0x5c, 0xd5, 0x7d, 0x32, 0xe0, 0xf3, 0x55, 0xad, 0x90, 0x70, 0x42, 0x14, 0xed, 0xc2, - 0xc4, 0x5e, 0xd4, 0xde, 0x21, 0x72, 0x4b, 0xb3, 0xc8, 0x2c, 0x39, 0x47, 0xd8, 0x1d, 0x81, 0xe8, - 0x85, 0x71, 0xc7, 0x69, 0x76, 0x71, 0x21, 0xf6, 0xfc, 0x7d, 0x47, 0x27, 0x86, 0x4d, 0xda, 0x74, - 0xf8, 0xdf, 0xee, 0x04, 0x9b, 0xfb, 0x31, 0x11, 0x11, 0xb7, 0x32, 0x87, 0xff, 0x4d, 0x8e, 0xd2, - 0x3d, 0xfc, 0x02, 0x80, 0x25, 0x11, 0x74, 0x47, 0x0c, 0x0f, 0xe3, 0x9e, 0xd3, 0xf9, 0x61, 0x31, - 0x17, 0x25, 0x52, 0xce, 0xa0, 0x30, 0x6e, 0x99, 0x90, 0x62, 0x5c, 0xb2, 0xbd, 0x13, 0xc4, 0x81, - 0x9f, 0xe2, 0xd0, 0x33, 0xf9, 0x5c, 0xb2, 0x96, 0x81, 0xdf, 0xcd, 0x25, 0xb3, 0xb0, 0x70, 0x66, - 0x5b, 0xc8, 0x85, 0xc9, 0x76, 0x10, 0xc6, 0xf7, 0x82, 0x50, 0xae, 0x2f, 0xd4, 0x43, 0xaf, 0x60, - 0x60, 0x8a, 0x16, 0x59, 0x30, 0x3b, 0x13, 0x82, 0x53, 0x34, 0xd1, 0x27, 0x61, 0x34, 0x6a, 0x38, - 0x4d, 0x52, 0xbd, 0x35, 0x7b, 0x2a, 0xff, 0xf8, 0xa9, 0x73, 0x94, 0x9c, 0xd5, 0xc5, 0x63, 0xba, - 0x73, 0x14, 0x2c, 0xc9, 0xa1, 0x55, 0x18, 0x66, 0x69, 0xb8, 0x58, 0x78, 0xb8, 0x9c, 0xe8, 0x9e, - 0x5d, 0x06, 0xc4, 0x9c, 0x37, 0xb1, 0x62, 0xcc, 0xab, 0xd3, 0x3d, 0x20, 0xc4, 0xeb, 0x20, 0x9a, - 0x3d, 0x93, 0xbf, 0x07, 0x84, 0x54, 0x7e, 0xab, 0xde, 0x6b, 0x0f, 0x28, 0x24, 0x9c, 0x10, 0xa5, - 0x9c, 0x99, 0x72, 0xd3, 0xb3, 0x3d, 0x2c, 0x5f, 0x72, 0x79, 0x29, 0xe3, 0xcc, 0x94, 0x93, 0x52, - 0x12, 0xf6, 0xef, 0x8e, 0x76, 0xcb, 0x2c, 0xec, 0x42, 0xf6, 0x1d, 0x56, 0xd7, 0x5b, 0xdd, 0x47, - 0x07, 0xd5, 0x0f, 0x1d, 0xa3, 0xb4, 0xfa, 0x05, 0x0b, 0xce, 0xb6, 0x33, 0x3f, 0x44, 0x08, 0x00, - 0x83, 0xa9, 0x99, 0xf8, 0xa7, 0xab, 0x50, 0x82, 0xd9, 0x70, 0x9c, 0xd3, 0x52, 0xfa, 0x46, 0x50, - 0x7c, 0xd7, 0x37, 0x82, 0x35, 0x28, 0x31, 0x21, 0xb3, 0x4f, 0x06, 0xe3, 0xf4, 0xc5, 0x88, 0x89, - 0x12, 0xcb, 0xa2, 0x22, 0x56, 0x24, 0xd0, 0xf7, 0x59, 0x70, 0x21, 0xdd, 0x75, 0x4c, 0x18, 0x58, - 0xc4, 0x1f, 0xe4, 0x77, 0xc1, 0x55, 0xf1, 0xfd, 0x17, 0x6a, 0xbd, 0x90, 0x0f, 0xfb, 0x21, 0xe0, - 0xde, 0x8d, 0xa1, 0x4a, 0xc6, 0x65, 0x74, 0xc4, 0x54, 0xc0, 0x0f, 0x70, 0x21, 0x7d, 0x09, 0xc6, - 0x5b, 0x41, 0xc7, 0x8f, 0x85, 0xa1, 0x8c, 0x78, 0xb4, 0x67, 0x8f, 0xd5, 0x6b, 0x5a, 0x39, 0x36, - 0xb0, 0x52, 0xd7, 0xd8, 0xd2, 0x43, 0x5f, 0x63, 0xdf, 0x82, 0x71, 0x5f, 0xb3, 0xec, 0x14, 0xf2, - 0xc0, 0xe5, 0xfc, 0xd8, 0xa1, 0xba, 0x1d, 0x28, 0xef, 0xa5, 0x5e, 0x82, 0x0d, 0x6a, 0x27, 0x7b, - 0x37, 0xfa, 0x49, 0x2b, 0x43, 0xa8, 0xe7, 0xb7, 0xe5, 0x8f, 0x9b, 0xb7, 0xe5, 0xcb, 0xe9, 0xdb, - 0x72, 0x97, 0xf2, 0xd5, 0xb8, 0x28, 0x0f, 0x9e, 0x1a, 0x65, 0xd0, 0x30, 0x81, 0x76, 0x13, 0x2e, - 0xf5, 0x3b, 0x96, 0x98, 0xc5, 0x94, 0xab, 0x9e, 0xda, 0x12, 0x8b, 0x29, 0xb7, 0x5a, 0xc1, 0x0c, - 0x32, 0x68, 0x1c, 0x19, 0xfb, 0x7f, 0x58, 0x50, 0xac, 0x05, 0xee, 0x09, 0x28, 0x93, 0x3f, 0x61, - 0x28, 0x93, 0x1f, 0xcf, 0x3e, 0x10, 0xdd, 0x5c, 0xd5, 0xf1, 0x4a, 0x4a, 0x75, 0x7c, 0x21, 0x8f, - 0x40, 0x6f, 0x45, 0xf1, 0x8f, 0x15, 0x61, 0xac, 0x16, 0xb8, 0xca, 0x5c, 0xf9, 0xd7, 0x1e, 0xc6, - 0x5c, 0x39, 0x37, 0xc0, 0xbf, 0x46, 0x99, 0x19, 0x5a, 0x49, 0x1f, 0xcb, 0xbf, 0x60, 0x56, 0xcb, - 0x77, 0x89, 0xb7, 0xbd, 0x13, 0x13, 0x37, 0xfd, 0x39, 0x27, 0x67, 0xb5, 0xfc, 0xdf, 0x2d, 0x98, - 0x4a, 0xb5, 0x8e, 0x9a, 0x30, 0xd1, 0xd4, 0x15, 0x93, 0x62, 0x9d, 0x3e, 0x94, 0x4e, 0x53, 0x58, - 0x7d, 0x6a, 0x45, 0xd8, 0x24, 0x8e, 0x16, 0x00, 0xd4, 0x4b, 0x9d, 0xd4, 0x80, 0x31, 0xa9, 0x5f, - 0x3d, 0xe5, 0x45, 0x58, 0xc3, 0x40, 0x2f, 0xc3, 0x58, 0x1c, 0xb4, 0x83, 0x66, 0xb0, 0xbd, 0x7f, - 0x83, 0xc8, 0xc8, 0x45, 0xca, 0x96, 0x6b, 0x23, 0x01, 0x61, 0x1d, 0xcf, 0xfe, 0x89, 0x22, 0xff, - 0x50, 0x3f, 0xf6, 0xde, 0x5f, 0x93, 0xef, 0xed, 0x35, 0xf9, 0x15, 0x0b, 0xa6, 0x69, 0xeb, 0xcc, - 0x5c, 0x44, 0x1e, 0xb6, 0x2a, 0x66, 0xb0, 0xd5, 0x23, 0x66, 0xf0, 0x65, 0xca, 0xbb, 0xdc, 0xa0, - 0x13, 0x0b, 0x0d, 0x9a, 0xc6, 0x9c, 0x68, 0x29, 0x16, 0x50, 0x81, 0x47, 0xc2, 0x50, 0xb8, 0xb8, - 0xe9, 0x78, 0x24, 0x0c, 0xb1, 0x80, 0xca, 0x90, 0xc2, 0x43, 0xd9, 0x21, 0x85, 0x79, 0x1c, 0x46, - 0x61, 0x58, 0x20, 0xc4, 0x1e, 0x2d, 0x0e, 0xa3, 0xb4, 0x38, 0x48, 0x70, 0xec, 0x9f, 0x29, 0xc2, - 0x78, 0x2d, 0x70, 0x93, 0xb7, 0xb2, 0x97, 0x8c, 0xb7, 0xb2, 0x4b, 0xa9, 0xb7, 0xb2, 0x69, 0x1d, - 0xf7, 0xfd, 0x97, 0xb1, 0xaf, 0xd5, 0xcb, 0xd8, 0xbf, 0xb0, 0xd8, 0xac, 0x55, 0xd6, 0xeb, 0xdc, - 0xfa, 0x08, 0x3d, 0x0f, 0x63, 0x8c, 0x21, 0x31, 0x9f, 0x4a, 0xf9, 0x80, 0xc4, 0x52, 0xe5, 0xac, - 0x27, 0xc5, 0x58, 0xc7, 0x41, 0x57, 0xa0, 0x14, 0x11, 0x27, 0x6c, 0xec, 0x28, 0x1e, 0x27, 0x5e, - 0x7b, 0x78, 0x19, 0x56, 0x50, 0xf4, 0x66, 0x12, 0x02, 0xb0, 0x98, 0xef, 0xa3, 0xa5, 0xf7, 0x87, - 0x6f, 0x91, 0xfc, 0xb8, 0x7f, 0xf6, 0x5d, 0x40, 0xdd, 0xf8, 0x03, 0xc4, 0xbe, 0x9a, 0x37, 0x63, - 0x5f, 0x95, 0xbb, 0xe2, 0x5e, 0xfd, 0x99, 0x05, 0x93, 0xb5, 0xc0, 0xa5, 0x5b, 0xf7, 0xeb, 0x69, - 0x9f, 0xea, 0xf1, 0x4f, 0x47, 0x7a, 0xc4, 0x3f, 0x7d, 0x12, 0x86, 0x6b, 0x81, 0x5b, 0xad, 0xf5, - 0xf2, 0x6d, 0xb6, 0xff, 0x9e, 0x05, 0xa3, 0xb5, 0xc0, 0x3d, 0x01, 0xe5, 0xfc, 0xc7, 0x4d, 0xe5, - 0xfc, 0x63, 0x39, 0xeb, 0x26, 0x47, 0x1f, 0xff, 0x77, 0x86, 0x60, 0x82, 0xf6, 0x33, 0xd8, 0x96, - 0x53, 0x69, 0x0c, 0x9b, 0x35, 0xc0, 0xb0, 0x51, 0x59, 0x38, 0x68, 0x36, 0x83, 0x7b, 0xe9, 0x69, - 0x5d, 0x65, 0xa5, 0x58, 0x40, 0xd1, 0xb3, 0x50, 0x6a, 0x87, 0x64, 0xcf, 0x0b, 0x84, 0x90, 0xa9, - 0x3d, 0x75, 0xd4, 0x44, 0x39, 0x56, 0x18, 0xf4, 0x72, 0x16, 0x79, 0x7e, 0x83, 0xd4, 0x49, 0x23, - 0xf0, 0x5d, 0xae, 0xbf, 0x2e, 0x8a, 0xb4, 0x01, 0x5a, 0x39, 0x36, 0xb0, 0xd0, 0x5d, 0x28, 0xb3, - 0xff, 0x8c, 0xed, 0x1c, 0x3d, 0x01, 0xa5, 0x48, 0x48, 0x26, 0x08, 0xe0, 0x84, 0x16, 0x7a, 0x01, - 0x20, 0x96, 0x11, 0xb2, 0x23, 0x11, 0xe7, 0x48, 0x09, 0xe4, 0x2a, 0x76, 0x76, 0x84, 0x35, 0x2c, - 0xf4, 0x0c, 0x94, 0x63, 0xc7, 0x6b, 0xde, 0xf4, 0x7c, 0x12, 0x31, 0xbd, 0x74, 0x51, 0xe6, 0x05, - 0x13, 0x85, 0x38, 0x81, 0x53, 0x81, 0x88, 0x05, 0x01, 0xe0, 0xe9, 0x6b, 0x4b, 0x0c, 0x9b, 0x09, - 0x44, 0x37, 0x55, 0x29, 0xd6, 0x30, 0xd0, 0x0e, 0x9c, 0xf7, 0x7c, 0x16, 0x62, 0x9f, 0xd4, 0x77, - 0xbd, 0xf6, 0xc6, 0xcd, 0xfa, 0x1d, 0x12, 0x7a, 0x5b, 0xfb, 0x4b, 0x4e, 0x63, 0x97, 0xf8, 0x32, - 0xb5, 0xe0, 0x07, 0x45, 0x17, 0xcf, 0x57, 0x7b, 0xe0, 0xe2, 0x9e, 0x94, 0xec, 0x57, 0xe1, 0x4c, - 0x2d, 0x70, 0x6b, 0x41, 0x18, 0xaf, 0x06, 0xe1, 0x3d, 0x27, 0x74, 0xe5, 0x4a, 0x99, 0x97, 0x59, - 0x48, 0x28, 0x2b, 0x1c, 0xe6, 0x8c, 0xc2, 0xc8, 0x85, 0xf5, 0x22, 0x13, 0xbe, 0x8e, 0xe8, 0x8c, - 0xd2, 0x60, 0x62, 0x80, 0xca, 0x37, 0x71, 0xcd, 0x89, 0x09, 0xba, 0xc5, 0xf2, 0xe8, 0x26, 0x27, - 0xa2, 0xa8, 0xfe, 0xb4, 0x96, 0x47, 0x37, 0x01, 0x66, 0x1e, 0xa1, 0x66, 0x7d, 0xfb, 0xaf, 0x0d, - 0x33, 0xe6, 0x98, 0xca, 0x59, 0x80, 0x3e, 0x0b, 0x93, 0x11, 0xb9, 0xe9, 0xf9, 0x9d, 0xfb, 0x52, - 0x27, 0xd0, 0xc3, 0x9d, 0xa8, 0xbe, 0xa2, 0x63, 0x72, 0xcd, 0xa2, 0x59, 0x86, 0x53, 0xd4, 0x50, - 0x0b, 0x26, 0xef, 0x79, 0xbe, 0x1b, 0xdc, 0x8b, 0x24, 0xfd, 0x52, 0xbe, 0x82, 0xf1, 0x2e, 0xc7, - 0x4c, 0xf5, 0xd1, 0x68, 0xee, 0xae, 0x41, 0x0c, 0xa7, 0x88, 0xd3, 0x05, 0x18, 0x76, 0xfc, 0xc5, - 0xe8, 0x76, 0x44, 0x42, 0x91, 0x11, 0x99, 0x2d, 0x40, 0x2c, 0x0b, 0x71, 0x02, 0xa7, 0x0b, 0x90, - 0xfd, 0xb9, 0x16, 0x06, 0x1d, 0x1e, 0xc7, 0x5e, 0x2c, 0x40, 0xac, 0x4a, 0xb1, 0x86, 0x41, 0x37, - 0x28, 0xfb, 0xb7, 0x1e, 0xf8, 0x38, 0x08, 0x62, 0xb9, 0xa5, 0x59, 0x0e, 0x4e, 0xad, 0x1c, 0x1b, - 0x58, 0x68, 0x15, 0x50, 0xd4, 0x69, 0xb7, 0x9b, 0xcc, 0x4e, 0xc1, 0x69, 0x32, 0x52, 0xfc, 0x8d, - 0xb8, 0xc8, 0xa3, 0x74, 0xd6, 0xbb, 0xa0, 0x38, 0xa3, 0x06, 0xe5, 0xd5, 0x5b, 0xa2, 0xab, 0xc3, - 0xac, 0xab, 0xfc, 0x31, 0xa2, 0xce, 0xfb, 0x29, 0x61, 0x68, 0x05, 0x46, 0xa3, 0xfd, 0xa8, 0x11, - 0x8b, 0x70, 0x63, 0x39, 0x69, 0x69, 0xea, 0x0c, 0x45, 0xcb, 0x8a, 0xc6, 0xab, 0x60, 0x59, 0x17, - 0x35, 0xe0, 0x94, 0xa0, 0xb8, 0xbc, 0xe3, 0xf8, 0x2a, 0xc9, 0x07, 0x37, 0xd7, 0x7c, 0xfe, 0xc1, - 0xc1, 0xfc, 0x29, 0xd1, 0xb2, 0x0e, 0x3e, 0x3c, 0x98, 0x3f, 0x5b, 0x0b, 0xdc, 0x0c, 0x08, 0xce, - 0xa2, 0x66, 0x7f, 0x2b, 0x93, 0x37, 0x58, 0x92, 0xde, 0xb8, 0x13, 0x12, 0xd4, 0x82, 0x89, 0x36, - 0x5b, 0xc6, 0x22, 0xfa, 0xbb, 0x58, 0x8b, 0x2f, 0x0d, 0xa8, 0x38, 0xb8, 0x47, 0xd9, 0xb4, 0x52, - 0xec, 0xb1, 0x1b, 0x59, 0x4d, 0x27, 0x87, 0x4d, 0xea, 0xf6, 0x57, 0xce, 0xb2, 0x13, 0xab, 0xce, - 0xb5, 0x01, 0xa3, 0xc2, 0x7a, 0x5b, 0x5c, 0x7d, 0xe6, 0xf2, 0xd5, 0x52, 0xc9, 0xb0, 0x09, 0x0b, - 0x70, 0x2c, 0xeb, 0xa2, 0xcf, 0xc0, 0x24, 0xbd, 0x49, 0x68, 0xd9, 0x2f, 0x4e, 0xe7, 0x7b, 0xd9, - 0x27, 0x49, 0x2f, 0xb4, 0xcc, 0x10, 0x7a, 0x65, 0x9c, 0x22, 0x86, 0xde, 0x64, 0x76, 0x06, 0x66, - 0x62, 0x8d, 0x3e, 0xa4, 0x75, 0x93, 0x02, 0x49, 0x56, 0x23, 0x92, 0x97, 0xb4, 0xc3, 0x7e, 0xb4, - 0x49, 0x3b, 0xd0, 0x4d, 0x98, 0x10, 0x99, 0x6a, 0xc5, 0xca, 0x2a, 0x1a, 0xda, 0xb2, 0x09, 0xac, - 0x03, 0x0f, 0xd3, 0x05, 0xd8, 0xac, 0x8c, 0xb6, 0xe1, 0x82, 0x96, 0x39, 0xe6, 0x5a, 0xe8, 0xb0, - 0x27, 0x6f, 0x8f, 0xb1, 0x3b, 0xed, 0x2c, 0x7d, 0xe2, 0xc1, 0xc1, 0xfc, 0x85, 0x8d, 0x5e, 0x88, - 0xb8, 0x37, 0x1d, 0x74, 0x0b, 0xce, 0x70, 0x1f, 0xd1, 0x0a, 0x71, 0xdc, 0xa6, 0xe7, 0xab, 0xc3, - 0x9a, 0x6f, 0xc9, 0x73, 0x0f, 0x0e, 0xe6, 0xcf, 0x2c, 0x66, 0x21, 0xe0, 0xec, 0x7a, 0xe8, 0xe3, - 0x50, 0x76, 0xfd, 0x48, 0x8c, 0xc1, 0x88, 0x91, 0x9c, 0xa7, 0x5c, 0x59, 0xaf, 0xab, 0xef, 0x4f, - 0xfe, 0xe0, 0xa4, 0x02, 0xda, 0xe6, 0x1a, 0x55, 0xa5, 0xc0, 0x18, 0xed, 0x8a, 0x6e, 0x93, 0x56, - 0x85, 0x19, 0x5e, 0x62, 0xfc, 0x29, 0x41, 0x19, 0x4f, 0x1b, 0x0e, 0x64, 0x06, 0x61, 0xf4, 0x06, - 0x20, 0x2a, 0xe1, 0x7b, 0x0d, 0xb2, 0xd8, 0x60, 0xa9, 0x05, 0x98, 0x02, 0xba, 0x64, 0xfa, 0x2d, - 0xd5, 0xbb, 0x30, 0x70, 0x46, 0x2d, 0x74, 0x9d, 0x1e, 0x39, 0x7a, 0xa9, 0xe0, 0x2a, 0x2a, 0x95, - 0x5a, 0x85, 0xb4, 0x43, 0xd2, 0x70, 0x62, 0xe2, 0x9a, 0x14, 0x71, 0xaa, 0x1e, 0x72, 0xe1, 0xbc, - 0xd3, 0x89, 0x03, 0xa6, 0xac, 0x36, 0x51, 0x37, 0x82, 0x5d, 0xe2, 0xb3, 0x77, 0xa2, 0xd2, 0xd2, - 0x25, 0x2a, 0x0d, 0x2c, 0xf6, 0xc0, 0xc3, 0x3d, 0xa9, 0x50, 0x29, 0x4e, 0xe5, 0x4e, 0x05, 0x33, - 0x68, 0x4f, 0x46, 0xfe, 0xd4, 0x97, 0x61, 0x6c, 0x27, 0x88, 0xe2, 0x75, 0x12, 0xdf, 0x0b, 0xc2, - 0x5d, 0x11, 0x7a, 0x31, 0x09, 0xd7, 0x9b, 0x80, 0xb0, 0x8e, 0x47, 0xaf, 0x69, 0xcc, 0x8a, 0xa1, - 0x5a, 0x61, 0x0f, 0xc8, 0xa5, 0x84, 0xc7, 0x5c, 0xe7, 0xc5, 0x58, 0xc2, 0x25, 0x6a, 0xb5, 0xb6, - 0xcc, 0x1e, 0x83, 0x53, 0xa8, 0xd5, 0xda, 0x32, 0x96, 0x70, 0xba, 0x5c, 0xa3, 0x1d, 0x27, 0x24, - 0xb5, 0x30, 0x68, 0x90, 0x48, 0x0b, 0x12, 0xfd, 0x38, 0x0f, 0x2c, 0x49, 0x97, 0x6b, 0x3d, 0x0b, - 0x01, 0x67, 0xd7, 0x43, 0xa4, 0x3b, 0x6b, 0xd2, 0x64, 0xbe, 0x16, 0xbf, 0x5b, 0xde, 0x18, 0x30, - 0x71, 0x92, 0x0f, 0xd3, 0x2a, 0x5f, 0x13, 0x0f, 0x25, 0x19, 0xcd, 0x4e, 0xb1, 0xb5, 0x3d, 0x78, - 0x1c, 0x4a, 0xf5, 0x2e, 0x52, 0x4d, 0x51, 0xc2, 0x5d, 0xb4, 0x8d, 0xb8, 0x4c, 0xd3, 0x7d, 0x93, - 0xe9, 0x5e, 0x85, 0x72, 0xd4, 0xd9, 0x74, 0x83, 0x96, 0xe3, 0xf9, 0xec, 0x31, 0x58, 0xbb, 0x2f, - 0xd4, 0x25, 0x00, 0x27, 0x38, 0x68, 0x15, 0x4a, 0x8e, 0x7c, 0xf4, 0x40, 0xf9, 0xe1, 0x3c, 0xd4, - 0x53, 0x07, 0xf7, 0x70, 0x97, 0xcf, 0x1c, 0xaa, 0x2e, 0x7a, 0x0d, 0x26, 0x84, 0x8f, 0xa3, 0x48, - 0x15, 0x78, 0xca, 0x74, 0x44, 0xa9, 0xeb, 0x40, 0x6c, 0xe2, 0xa2, 0xdb, 0x30, 0x16, 0x07, 0x4d, - 0xe6, 0x4d, 0x41, 0xc5, 0xb0, 0xb3, 0xf9, 0x21, 0xc1, 0x36, 0x14, 0x9a, 0xae, 0x6f, 0x54, 0x55, - 0xb1, 0x4e, 0x07, 0x6d, 0xf0, 0xf5, 0xce, 0x82, 0x25, 0x93, 0x68, 0xf6, 0xb1, 0xfc, 0x33, 0x49, - 0xc5, 0x54, 0x36, 0xb7, 0x83, 0xa8, 0x89, 0x75, 0x32, 0xe8, 0x1a, 0xcc, 0xb4, 0x43, 0x2f, 0x60, - 0x6b, 0x42, 0xbd, 0x77, 0xcd, 0x9a, 0x29, 0x5e, 0x6a, 0x69, 0x04, 0xdc, 0x5d, 0x87, 0xb9, 0xa8, - 0x8a, 0xc2, 0xd9, 0x73, 0x3c, 0x9b, 0x30, 0xbf, 0x7e, 0xf1, 0x32, 0xac, 0xa0, 0x68, 0x8d, 0x71, - 0x62, 0xae, 0x39, 0x98, 0x9d, 0xcb, 0x8f, 0x20, 0xa2, 0x6b, 0x18, 0xb8, 0x70, 0xa9, 0xfe, 0xe2, - 0x84, 0x02, 0x72, 0xb5, 0xb4, 0x73, 0x54, 0xa2, 0x8f, 0x66, 0xcf, 0xf7, 0x30, 0x25, 0x4b, 0x89, - 0xff, 0x89, 0x40, 0x60, 0x14, 0x47, 0x38, 0x45, 0x13, 0x7d, 0x13, 0x4c, 0x8b, 0x88, 0x65, 0xc9, - 0x30, 0x5d, 0x48, 0x6c, 0x54, 0x71, 0x0a, 0x86, 0xbb, 0xb0, 0x79, 0x10, 0x79, 0x67, 0xb3, 0x49, - 0x04, 0xeb, 0xbb, 0xe9, 0xf9, 0xbb, 0xd1, 0xec, 0x45, 0xc6, 0x1f, 0x44, 0x10, 0xf9, 0x34, 0x14, - 0x67, 0xd4, 0x40, 0x1b, 0x30, 0xdd, 0x0e, 0x09, 0x69, 0x31, 0x41, 0x5c, 0x9c, 0x67, 0xf3, 0xdc, - 0x43, 0x9b, 0xf6, 0xa4, 0x96, 0x82, 0x1d, 0x66, 0x94, 0xe1, 0x2e, 0x0a, 0xe8, 0x1e, 0x94, 0x82, - 0x3d, 0x12, 0xee, 0x10, 0xc7, 0x9d, 0xbd, 0xd4, 0xc3, 0x66, 0x5a, 0x1c, 0x6e, 0xb7, 0x04, 0x6e, - 0xea, 0x8d, 0x5c, 0x16, 0xf7, 0x7f, 0x23, 0x97, 0x8d, 0xa1, 0xef, 0xb7, 0xe0, 0x9c, 0x54, 0xab, - 0xd7, 0xdb, 0x74, 0xd4, 0x97, 0x03, 0x3f, 0x8a, 0x43, 0xee, 0x53, 0xfc, 0x44, 0xbe, 0x9f, 0xed, - 0x46, 0x4e, 0x25, 0xa5, 0xbc, 0x3c, 0x97, 0x87, 0x11, 0xe1, 0xfc, 0x16, 0xe7, 0xbe, 0x11, 0x66, - 0xba, 0x4e, 0xee, 0xa3, 0xe4, 0xb5, 0x98, 0xdb, 0x85, 0x09, 0x63, 0x74, 0x1e, 0xe9, 0xf3, 0xe8, - 0xbf, 0x19, 0x85, 0xb2, 0x7a, 0x3a, 0x43, 0x57, 0xcd, 0x17, 0xd1, 0x73, 0xe9, 0x17, 0xd1, 0x12, - 0xbd, 0x32, 0xeb, 0x8f, 0xa0, 0x1b, 0x19, 0x11, 0x9c, 0xf2, 0xf6, 0xe2, 0xe0, 0xae, 0xb9, 0x9a, - 0x26, 0xb4, 0x38, 0xf0, 0xd3, 0xea, 0x50, 0x4f, 0xe5, 0xea, 0x35, 0x98, 0xf1, 0x03, 0x26, 0x2e, - 0x12, 0x57, 0xca, 0x02, 0xec, 0xc8, 0x2f, 0xeb, 0x21, 0x11, 0x52, 0x08, 0xb8, 0xbb, 0x0e, 0x6d, - 0x90, 0x9f, 0xd9, 0x69, 0x6d, 0x2e, 0x3f, 0xd2, 0xb1, 0x80, 0xa2, 0x27, 0x61, 0xb8, 0x1d, 0xb8, - 0xd5, 0x9a, 0x10, 0x15, 0xb5, 0x1c, 0xa7, 0x6e, 0xb5, 0x86, 0x39, 0x0c, 0x2d, 0xc2, 0x08, 0xfb, - 0x11, 0xcd, 0x8e, 0xe7, 0xfb, 0xbe, 0xb3, 0x1a, 0x5a, 0xd6, 0x10, 0x56, 0x01, 0x8b, 0x8a, 0x4c, - 0xab, 0x44, 0xe5, 0x6b, 0xa6, 0x55, 0x1a, 0x7d, 0x48, 0xad, 0x92, 0x24, 0x80, 0x13, 0x5a, 0xe8, - 0x3e, 0x9c, 0x31, 0xee, 0x34, 0x7c, 0x89, 0x90, 0x48, 0xf8, 0xdf, 0x3e, 0xd9, 0xf3, 0x32, 0x23, - 0x9e, 0x62, 0x2f, 0x88, 0x4e, 0x9f, 0xa9, 0x66, 0x51, 0xc2, 0xd9, 0x0d, 0xa0, 0x26, 0xcc, 0x34, - 0xba, 0x5a, 0x2d, 0x0d, 0xde, 0xaa, 0x9a, 0xd0, 0xee, 0x16, 0xbb, 0x09, 0xa3, 0xd7, 0xa0, 0xf4, - 0x76, 0x10, 0x31, 0x36, 0x2b, 0xc4, 0x5b, 0xe9, 0xbc, 0x59, 0x7a, 0xf3, 0x56, 0x9d, 0x95, 0x1f, - 0x1e, 0xcc, 0x8f, 0xd5, 0x02, 0x57, 0xfe, 0xc5, 0xaa, 0x02, 0xfa, 0x6e, 0x0b, 0xe6, 0xba, 0x2f, - 0x4d, 0xaa, 0xd3, 0x13, 0x83, 0x77, 0xda, 0x16, 0x8d, 0xce, 0xad, 0xe4, 0x92, 0xc3, 0x3d, 0x9a, - 0xb2, 0x7f, 0x91, 0x3f, 0x9b, 0x8a, 0xc7, 0x15, 0x12, 0x75, 0x9a, 0x27, 0x91, 0x65, 0x71, 0xc5, - 0x78, 0xf7, 0x79, 0xe8, 0xa7, 0xf9, 0x5f, 0xb5, 0xd8, 0xd3, 0xfc, 0x06, 0x69, 0xb5, 0x9b, 0x4e, - 0x7c, 0x12, 0xbe, 0x7f, 0x6f, 0x42, 0x29, 0x16, 0xad, 0xf5, 0x4a, 0x0c, 0xa9, 0x75, 0x8a, 0x99, - 0x27, 0x28, 0x61, 0x53, 0x96, 0x62, 0x45, 0xc6, 0xfe, 0xa7, 0x7c, 0x06, 0x24, 0xe4, 0x04, 0xd4, - 0xeb, 0x15, 0x53, 0xbd, 0x3e, 0xdf, 0xe7, 0x0b, 0x72, 0xd4, 0xec, 0xff, 0xc4, 0xec, 0x37, 0x53, - 0xb2, 0xbc, 0xd7, 0x6d, 0x42, 0xec, 0x1f, 0xb4, 0xe0, 0x74, 0x96, 0x11, 0x25, 0xbd, 0x20, 0x70, - 0x15, 0x8f, 0xb2, 0x91, 0x51, 0x23, 0x78, 0x47, 0x94, 0x63, 0x85, 0x31, 0x70, 0xce, 0xa5, 0xa3, - 0xc5, 0x20, 0xbd, 0x05, 0x13, 0xb5, 0x90, 0x68, 0x07, 0xda, 0xeb, 0xdc, 0x99, 0x97, 0xf7, 0xe7, - 0xd9, 0x23, 0x3b, 0xf2, 0xda, 0x3f, 0x55, 0x80, 0xd3, 0xfc, 0x91, 0x7b, 0x71, 0x2f, 0xf0, 0xdc, - 0x5a, 0xe0, 0x8a, 0x7c, 0x59, 0x9f, 0x86, 0xf1, 0xb6, 0xa6, 0x97, 0xeb, 0x15, 0x4f, 0x4f, 0xd7, - 0xdf, 0x25, 0x9a, 0x04, 0xbd, 0x14, 0x1b, 0xb4, 0x90, 0x0b, 0xe3, 0x64, 0xcf, 0x6b, 0xa8, 0x97, - 0xd2, 0xc2, 0x91, 0x0f, 0x17, 0xd5, 0xca, 0x8a, 0x46, 0x07, 0x1b, 0x54, 0x1f, 0x41, 0x0a, 0x55, - 0xfb, 0x87, 0x2c, 0x78, 0x2c, 0x27, 0xfa, 0x1e, 0x6d, 0xee, 0x1e, 0x33, 0x27, 0x10, 0xd9, 0x18, - 0x55, 0x73, 0xdc, 0xc8, 0x00, 0x0b, 0x28, 0xfa, 0x24, 0x00, 0x37, 0x12, 0xa0, 0x37, 0xd4, 0x7e, - 0x61, 0xca, 0x8c, 0x08, 0x4b, 0x5a, 0xb0, 0x1c, 0x59, 0x1f, 0x6b, 0xb4, 0xec, 0x1f, 0x2f, 0xc2, - 0x30, 0xcf, 0x23, 0xbd, 0x0a, 0xa3, 0x3b, 0x3c, 0x8b, 0xc0, 0x20, 0x09, 0x0b, 0x12, 0xdd, 0x01, - 0x2f, 0xc0, 0xb2, 0x32, 0x5a, 0x83, 0x53, 0x3c, 0x0b, 0x43, 0xb3, 0x42, 0x9a, 0xce, 0xbe, 0x54, - 0x74, 0xf1, 0x0c, 0x86, 0x4a, 0xe1, 0x57, 0xed, 0x46, 0xc1, 0x59, 0xf5, 0xd0, 0xeb, 0x30, 0x49, - 0x2f, 0x1e, 0x41, 0x27, 0x96, 0x94, 0x78, 0xfe, 0x05, 0x75, 0xd3, 0xd9, 0x30, 0xa0, 0x38, 0x85, - 0x4d, 0xef, 0xbe, 0xed, 0x2e, 0x95, 0xde, 0x70, 0x72, 0xf7, 0x35, 0xd5, 0x78, 0x26, 0x2e, 0xb3, - 0x9e, 0xec, 0x30, 0x5b, 0xd1, 0x8d, 0x9d, 0x90, 0x44, 0x3b, 0x41, 0xd3, 0x65, 0x82, 0xd6, 0xb0, - 0x66, 0x3d, 0x99, 0x82, 0xe3, 0xae, 0x1a, 0x94, 0xca, 0x96, 0xe3, 0x35, 0x3b, 0x21, 0x49, 0xa8, - 0x8c, 0x98, 0x54, 0x56, 0x53, 0x70, 0xdc, 0x55, 0x83, 0xae, 0xa3, 0x33, 0xb5, 0x30, 0xa0, 0xcc, - 0x4b, 0x86, 0x14, 0x51, 0x26, 0xb1, 0xa3, 0xd2, 0xfb, 0xb1, 0x47, 0xf0, 0x2d, 0x61, 0x34, 0xc8, - 0x29, 0x18, 0xef, 0xe1, 0x75, 0xe1, 0xf7, 0x28, 0xa9, 0xa0, 0xe7, 0x61, 0x4c, 0xc4, 0xd6, 0x67, - 0x96, 0x9b, 0x7c, 0xea, 0xd8, 0xfb, 0x7d, 0x25, 0x29, 0xc6, 0x3a, 0x8e, 0xfd, 0x3d, 0x05, 0x38, - 0x95, 0x61, 0x7a, 0xcf, 0x59, 0xd5, 0xb6, 0x17, 0xc5, 0x2a, 0x4b, 0x9b, 0xc6, 0xaa, 0x78, 0x39, - 0x56, 0x18, 0x74, 0x3f, 0x70, 0x66, 0x98, 0x66, 0x80, 0xc2, 0xb4, 0x55, 0x40, 0x8f, 0x98, 0xef, - 0xec, 0x12, 0x0c, 0x75, 0x22, 0x22, 0xc3, 0xe6, 0x29, 0xfe, 0xcd, 0x9e, 0x75, 0x18, 0x84, 0x8a, - 0xc7, 0xdb, 0xea, 0x85, 0x44, 0x13, 0x8f, 0xf9, 0x1b, 0x09, 0x87, 0xd1, 0xce, 0xc5, 0xc4, 0x77, - 0xfc, 0x58, 0x08, 0xd1, 0x49, 0xfc, 0x27, 0x56, 0x8a, 0x05, 0xd4, 0xfe, 0x52, 0x11, 0xce, 0xe5, - 0x3a, 0xe3, 0xd0, 0xae, 0xb7, 0x02, 0xdf, 0x8b, 0x03, 0x65, 0x18, 0xc1, 0x63, 0x3e, 0x91, 0xf6, - 0xce, 0x9a, 0x28, 0xc7, 0x0a, 0x03, 0x5d, 0x86, 0x61, 0xa6, 0x74, 0xea, 0xca, 0x57, 0xb7, 0x54, - 0xe1, 0x41, 0x40, 0x38, 0x78, 0xe0, 0x5c, 0xa0, 0x4f, 0xc2, 0x50, 0x3b, 0x08, 0x9a, 0x69, 0xa6, - 0x45, 0xbb, 0x1b, 0x04, 0x4d, 0xcc, 0x80, 0xe8, 0x43, 0x62, 0xbc, 0x52, 0x96, 0x00, 0xd8, 0x71, - 0x83, 0x48, 0x1b, 0xb4, 0xa7, 0x61, 0x74, 0x97, 0xec, 0x87, 0x9e, 0xbf, 0x9d, 0xb6, 0x10, 0xb9, - 0xc1, 0x8b, 0xb1, 0x84, 0x9b, 0xa9, 0x87, 0x46, 0x8f, 0x3b, 0x89, 0x67, 0xa9, 0xef, 0x11, 0xf8, - 0xbd, 0x45, 0x98, 0xc2, 0x4b, 0x95, 0xf7, 0x27, 0xe2, 0x76, 0xf7, 0x44, 0x1c, 0x77, 0x12, 0xcf, - 0xfe, 0xb3, 0xf1, 0x73, 0x16, 0x4c, 0xb1, 0x08, 0xff, 0x22, 0x5a, 0x90, 0x17, 0xf8, 0x27, 0x20, - 0xe2, 0x3d, 0x09, 0xc3, 0x21, 0x6d, 0x34, 0x9d, 0xa8, 0x8e, 0xf5, 0x04, 0x73, 0x18, 0x3a, 0x0f, - 0x43, 0xac, 0x0b, 0x74, 0xf2, 0xc6, 0x79, 0x8e, 0x9f, 0x8a, 0x13, 0x3b, 0x98, 0x95, 0xb2, 0x10, - 0x18, 0x98, 0xb4, 0x9b, 0x1e, 0xef, 0x74, 0xf2, 0x24, 0xf8, 0xde, 0x08, 0x81, 0x91, 0xd9, 0xb5, - 0x77, 0x17, 0x02, 0x23, 0x9b, 0x64, 0xef, 0xeb, 0xd3, 0x1f, 0x16, 0xe0, 0x62, 0x66, 0xbd, 0x81, - 0x43, 0x60, 0xf4, 0xae, 0xfd, 0x28, 0x23, 0xc1, 0x17, 0x4f, 0xd0, 0xfe, 0x6e, 0x68, 0x50, 0x09, - 0x73, 0x78, 0x80, 0xc8, 0x14, 0x99, 0x43, 0xf6, 0x1e, 0x89, 0x4c, 0x91, 0xd9, 0xb7, 0x9c, 0xeb, - 0xdf, 0x9f, 0x17, 0x72, 0xbe, 0x85, 0x5d, 0x04, 0xaf, 0x50, 0x3e, 0xc3, 0x80, 0x91, 0x90, 0x98, - 0xc7, 0x39, 0x8f, 0xe1, 0x65, 0x58, 0x41, 0xd1, 0x22, 0x4c, 0xb5, 0x3c, 0x9f, 0x32, 0x9f, 0x7d, - 0x53, 0xf0, 0x53, 0x81, 0x83, 0xd6, 0x4c, 0x30, 0x4e, 0xe3, 0x23, 0x4f, 0x8b, 0x5a, 0x51, 0xc8, - 0x4f, 0xfd, 0x9c, 0xdb, 0xdb, 0x05, 0xf3, 0xb9, 0x54, 0x8d, 0x62, 0x46, 0x04, 0x8b, 0x35, 0xed, - 0xfe, 0x5f, 0x1c, 0xfc, 0xfe, 0x3f, 0x9e, 0x7d, 0xf7, 0x9f, 0x7b, 0x0d, 0x26, 0x1e, 0x5a, 0xe1, - 0x6b, 0x7f, 0xa5, 0x08, 0x8f, 0xf7, 0xd8, 0xf6, 0x9c, 0xd7, 0x1b, 0x73, 0xa0, 0xf1, 0xfa, 0xae, - 0x79, 0xa8, 0xc1, 0xe9, 0xad, 0x4e, 0xb3, 0xb9, 0xcf, 0x4c, 0xdc, 0x89, 0x2b, 0x31, 0x84, 0x4c, - 0x79, 0x5e, 0x66, 0x55, 0x5a, 0xcd, 0xc0, 0xc1, 0x99, 0x35, 0xa9, 0x40, 0x4f, 0x4f, 0x92, 0x7d, - 0x45, 0x2a, 0x25, 0xd0, 0x63, 0x1d, 0x88, 0x4d, 0x5c, 0x74, 0x0d, 0x66, 0x9c, 0x3d, 0xc7, 0xe3, - 0xa1, 0x3f, 0x25, 0x01, 0x2e, 0xd1, 0x2b, 0x3d, 0xdd, 0x62, 0x1a, 0x01, 0x77, 0xd7, 0x41, 0x6f, - 0x00, 0x0a, 0x44, 0xea, 0xfa, 0x6b, 0xc4, 0x17, 0xaf, 0x5a, 0x6c, 0xee, 0x8a, 0x09, 0x4b, 0xb8, - 0xd5, 0x85, 0x81, 0x33, 0x6a, 0xa5, 0xa2, 0x40, 0x8c, 0xe4, 0x47, 0x81, 0xe8, 0xcd, 0x17, 0xfb, - 0x26, 0x21, 0xf8, 0x2f, 0x16, 0x3d, 0xbe, 0xb8, 0x90, 0x6f, 0x06, 0x33, 0x7b, 0x8d, 0x59, 0x8d, - 0x71, 0x1d, 0x9e, 0x16, 0x90, 0xe1, 0x8c, 0x66, 0x35, 0x96, 0x00, 0xb1, 0x89, 0xcb, 0x17, 0x44, - 0x94, 0xf8, 0x01, 0x1a, 0x22, 0xbe, 0x88, 0xb8, 0xa2, 0x30, 0xd0, 0xa7, 0x60, 0xd4, 0xf5, 0xf6, - 0xbc, 0x28, 0x08, 0xc5, 0x4a, 0x3f, 0xe2, 0x73, 0x41, 0xc2, 0x07, 0x2b, 0x9c, 0x0c, 0x96, 0xf4, - 0xec, 0xef, 0x2d, 0xc0, 0x84, 0x6c, 0xf1, 0xcd, 0x4e, 0x10, 0x3b, 0x27, 0x70, 0x2c, 0x5f, 0x33, - 0x8e, 0xe5, 0x0f, 0xf5, 0x0a, 0x3b, 0xc3, 0xba, 0x94, 0x7b, 0x1c, 0xdf, 0x4a, 0x1d, 0xc7, 0x4f, - 0xf5, 0x27, 0xd5, 0xfb, 0x18, 0xfe, 0x67, 0x16, 0xcc, 0x18, 0xf8, 0x27, 0x70, 0x1a, 0xac, 0x9a, - 0xa7, 0xc1, 0x13, 0x7d, 0xbf, 0x21, 0xe7, 0x14, 0xf8, 0xce, 0x62, 0xaa, 0xef, 0x8c, 0xfb, 0xbf, - 0x0d, 0x43, 0x3b, 0x4e, 0xe8, 0xf6, 0x0a, 0xb3, 0xdd, 0x55, 0x69, 0xe1, 0xba, 0x13, 0x8a, 0x67, - 0xbd, 0x67, 0x55, 0xe6, 0x65, 0x27, 0xec, 0xff, 0xa4, 0xc7, 0x9a, 0x42, 0xaf, 0xc2, 0x48, 0xd4, - 0x08, 0xda, 0xca, 0x28, 0xfd, 0x12, 0xcf, 0xca, 0x4c, 0x4b, 0x0e, 0x0f, 0xe6, 0x91, 0xd9, 0x1c, - 0x2d, 0xc6, 0x02, 0x1f, 0x7d, 0x1a, 0x26, 0xd8, 0x2f, 0x65, 0x63, 0x53, 0xcc, 0x4f, 0xc9, 0x53, - 0xd7, 0x11, 0xb9, 0x01, 0x9a, 0x51, 0x84, 0x4d, 0x52, 0x73, 0xdb, 0x50, 0x56, 0x9f, 0xf5, 0x48, - 0xdf, 0xe3, 0xfe, 0x43, 0x11, 0x4e, 0x65, 0xac, 0x39, 0x14, 0x19, 0x33, 0xf1, 0xfc, 0x80, 0x4b, - 0xf5, 0x5d, 0xce, 0x45, 0xc4, 0x6e, 0x43, 0xae, 0x58, 0x5b, 0x03, 0x37, 0x7a, 0x3b, 0x22, 0xe9, - 0x46, 0x69, 0x51, 0xff, 0x46, 0x69, 0x63, 0x27, 0x36, 0xd4, 0xb4, 0x21, 0xd5, 0xd3, 0x47, 0x3a, - 0xa7, 0x7f, 0x52, 0x84, 0xd3, 0x59, 0x91, 0xb0, 0xd0, 0xb7, 0xa4, 0xd2, 0xb3, 0xbd, 0x34, 0x68, - 0x0c, 0x2d, 0x9e, 0xb3, 0x8d, 0xeb, 0x80, 0x97, 0x16, 0xcc, 0x84, 0x6d, 0x7d, 0x87, 0x59, 0xb4, - 0xc9, 0x7c, 0xdc, 0x43, 0x9e, 0x56, 0x4f, 0xb2, 0x8f, 0x8f, 0x0e, 0xdc, 0x01, 0x91, 0x8f, 0x2f, - 0x4a, 0xbd, 0xdf, 0xcb, 0xe2, 0xfe, 0xef, 0xf7, 0xb2, 0xe5, 0x39, 0x0f, 0xc6, 0xb4, 0xaf, 0x79, - 0xa4, 0x33, 0xbe, 0x4b, 0x4f, 0x2b, 0xad, 0xdf, 0x8f, 0x74, 0xd6, 0x7f, 0xc8, 0x82, 0x94, 0xc9, - 0xb5, 0x52, 0x8b, 0x59, 0xb9, 0x6a, 0xb1, 0x4b, 0x30, 0x14, 0x06, 0x4d, 0x92, 0xce, 0x86, 0x86, - 0x83, 0x26, 0xc1, 0x0c, 0x42, 0x31, 0xe2, 0x44, 0xd9, 0x31, 0xae, 0x5f, 0xe4, 0xc4, 0x15, 0xed, - 0x49, 0x18, 0x6e, 0x92, 0x3d, 0xd2, 0x4c, 0x27, 0xad, 0xb8, 0x49, 0x0b, 0x31, 0x87, 0xd9, 0x3f, - 0x37, 0x04, 0x17, 0x7a, 0x46, 0x89, 0xa0, 0xd7, 0xa1, 0x6d, 0x27, 0x26, 0xf7, 0x9c, 0xfd, 0x74, - 0x74, 0xf9, 0x6b, 0xbc, 0x18, 0x4b, 0x38, 0x73, 0x8a, 0xe1, 0x41, 0x62, 0x53, 0x4a, 0x44, 0x11, - 0x1b, 0x56, 0x40, 0x4d, 0xa5, 0x54, 0xf1, 0x38, 0x94, 0x52, 0x2f, 0x00, 0x44, 0x51, 0x93, 0x1b, - 0xbe, 0xb8, 0xc2, 0xdb, 0x26, 0x09, 0x26, 0x5c, 0xbf, 0x29, 0x20, 0x58, 0xc3, 0x42, 0x15, 0x98, - 0x6e, 0x87, 0x41, 0xcc, 0x75, 0xb2, 0x15, 0x6e, 0x1b, 0x36, 0x6c, 0x3a, 0xe8, 0xd7, 0x52, 0x70, - 0xdc, 0x55, 0x03, 0xbd, 0x0c, 0x63, 0xc2, 0x69, 0xbf, 0x16, 0x04, 0x4d, 0xa1, 0x06, 0x52, 0xe6, - 0x52, 0xf5, 0x04, 0x84, 0x75, 0x3c, 0xad, 0x1a, 0x53, 0xf4, 0x8e, 0x66, 0x56, 0xe3, 0xca, 0x5e, - 0x0d, 0x2f, 0x15, 0x15, 0xaf, 0x34, 0x50, 0x54, 0xbc, 0x44, 0x31, 0x56, 0x1e, 0xf8, 0x6d, 0x0b, - 0xfa, 0xaa, 0x92, 0x7e, 0x7a, 0x08, 0x4e, 0x89, 0x85, 0xf3, 0xa8, 0x97, 0xcb, 0xed, 0xee, 0xe5, - 0x72, 0x1c, 0xaa, 0xb3, 0xf7, 0xd7, 0xcc, 0x49, 0xaf, 0x99, 0xef, 0xb3, 0xc0, 0x14, 0xaf, 0xd0, - 0xff, 0x9f, 0x9b, 0x9e, 0xe3, 0xe5, 0x5c, 0x71, 0xcd, 0x95, 0x07, 0xc8, 0xbb, 0x4c, 0xd4, 0x61, - 0xff, 0x27, 0x0b, 0x9e, 0xe8, 0x4b, 0x11, 0xad, 0x40, 0x99, 0xc9, 0x80, 0xda, 0xed, 0xec, 0x29, - 0x65, 0x3b, 0x2a, 0x01, 0x39, 0x22, 0x69, 0x52, 0x13, 0xad, 0x74, 0xe5, 0x41, 0x79, 0x3a, 0x23, - 0x0f, 0xca, 0x19, 0x63, 0x78, 0x1e, 0x32, 0x11, 0xca, 0x1f, 0x14, 0x61, 0x84, 0xaf, 0xf8, 0x13, - 0xb8, 0x86, 0x3d, 0x03, 0x65, 0xaf, 0xd5, 0xea, 0xf0, 0x6c, 0x12, 0xc3, 0xdc, 0xb3, 0x92, 0x0e, - 0x4d, 0x55, 0x16, 0xe2, 0x04, 0x8e, 0x56, 0x85, 0x92, 0xb7, 0x47, 0x8c, 0x3e, 0xde, 0xf1, 0x85, - 0x8a, 0x13, 0x3b, 0x5c, 0xa6, 0x50, 0x47, 0x5b, 0xa2, 0x0e, 0x46, 0x9f, 0x05, 0x88, 0xe2, 0xd0, - 0xf3, 0xb7, 0x69, 0x99, 0x88, 0xde, 0xf8, 0xe1, 0x1e, 0xd4, 0xea, 0x0a, 0x99, 0xd3, 0x4c, 0xb6, - 0xb9, 0x02, 0x60, 0x8d, 0x22, 0x5a, 0x30, 0x0e, 0xd7, 0xb9, 0x94, 0x96, 0x14, 0x38, 0xd5, 0xe4, - 0xa8, 0x9d, 0x7b, 0x05, 0xca, 0x8a, 0x78, 0x3f, 0x95, 0xcf, 0xb8, 0x2e, 0x89, 0x7c, 0x02, 0xa6, - 0x52, 0x7d, 0x3b, 0x92, 0xc6, 0xe8, 0xe7, 0x2d, 0x98, 0xe2, 0x9d, 0x59, 0xf1, 0xf7, 0x04, 0x03, - 0x7e, 0x07, 0x4e, 0x37, 0x33, 0x18, 0xa1, 0x98, 0xfe, 0xc1, 0x19, 0xa7, 0xd2, 0x10, 0x65, 0x41, - 0x71, 0x66, 0x1b, 0xe8, 0x0a, 0x5d, 0xe4, 0x94, 0xd1, 0x39, 0x4d, 0xe1, 0x68, 0x39, 0xce, 0x17, - 0x38, 0x2f, 0xc3, 0x0a, 0x6a, 0xff, 0xb6, 0x05, 0x33, 0xbc, 0xe7, 0x37, 0xc8, 0xbe, 0x62, 0x07, - 0x5f, 0xcb, 0xbe, 0x8b, 0x3c, 0x46, 0x85, 0x9c, 0x3c, 0x46, 0xfa, 0xa7, 0x15, 0x7b, 0x7e, 0xda, - 0x4f, 0x59, 0x20, 0x56, 0xc8, 0x09, 0xdc, 0xfb, 0xbf, 0xd1, 0xbc, 0xf7, 0xcf, 0xe5, 0x6f, 0x82, - 0x9c, 0x0b, 0xff, 0x9f, 0x59, 0x30, 0xcd, 0x11, 0x92, 0x07, 0xea, 0xaf, 0xe9, 0x3c, 0x0c, 0x92, - 0xed, 0xf4, 0x06, 0xd9, 0xdf, 0x08, 0x6a, 0x4e, 0xbc, 0x93, 0xfd, 0x51, 0xc6, 0x64, 0x0d, 0xf5, - 0x9c, 0x2c, 0x57, 0x6e, 0xa0, 0x23, 0xa4, 0x50, 0x3e, 0x72, 0x98, 0x7f, 0xfb, 0xab, 0x16, 0x20, - 0xde, 0x8c, 0x21, 0x2b, 0x51, 0x09, 0x84, 0x95, 0x6a, 0x67, 0x4b, 0xc2, 0x9a, 0x14, 0x04, 0x6b, - 0x58, 0xc7, 0x32, 0x3c, 0x29, 0x2b, 0x83, 0x62, 0x7f, 0x2b, 0x83, 0x23, 0x8c, 0xe8, 0x1f, 0x0c, - 0x43, 0xda, 0x5d, 0x04, 0xdd, 0x81, 0xf1, 0x86, 0xd3, 0x76, 0x36, 0xbd, 0xa6, 0x17, 0x7b, 0x24, - 0xea, 0x65, 0x9e, 0xb4, 0xac, 0xe1, 0x89, 0x77, 0x61, 0xad, 0x04, 0x1b, 0x74, 0xd0, 0x02, 0x40, - 0x3b, 0xf4, 0xf6, 0xbc, 0x26, 0xd9, 0x66, 0xea, 0x09, 0xe6, 0xda, 0xcd, 0x6d, 0x6e, 0x64, 0x29, - 0xd6, 0x30, 0x32, 0x7c, 0x67, 0x8b, 0x8f, 0xd8, 0x77, 0x16, 0x4e, 0xcc, 0x77, 0x76, 0xe8, 0x48, - 0xbe, 0xb3, 0xa5, 0x23, 0xfb, 0xce, 0x0e, 0x0f, 0xe4, 0x3b, 0x8b, 0xe1, 0xac, 0x14, 0xf7, 0xe8, - 0xff, 0x55, 0xaf, 0x49, 0x84, 0x8c, 0xcf, 0xfd, 0xd1, 0xe7, 0x1e, 0x1c, 0xcc, 0x9f, 0xc5, 0x99, - 0x18, 0x38, 0xa7, 0x26, 0xfa, 0x24, 0xcc, 0x3a, 0xcd, 0x66, 0x70, 0x4f, 0x4d, 0xea, 0x4a, 0xd4, - 0x70, 0x9a, 0x5c, 0xef, 0x3f, 0xca, 0xa8, 0x9e, 0x7f, 0x70, 0x30, 0x3f, 0xbb, 0x98, 0x83, 0x83, - 0x73, 0x6b, 0xa3, 0x8f, 0x43, 0xb9, 0x1d, 0x06, 0x8d, 0x35, 0xcd, 0xa7, 0xed, 0x22, 0x1d, 0xc0, - 0x9a, 0x2c, 0x3c, 0x3c, 0x98, 0x9f, 0x50, 0x7f, 0xd8, 0x81, 0x9f, 0x54, 0xb0, 0x77, 0xe1, 0x54, - 0x9d, 0x84, 0x1e, 0x4b, 0x88, 0xec, 0x26, 0xfc, 0x63, 0x03, 0xca, 0x61, 0x8a, 0x63, 0x0e, 0x14, - 0xd7, 0x4e, 0x8b, 0x87, 0x2e, 0x39, 0x64, 0x42, 0xc8, 0xfe, 0xdf, 0x16, 0x8c, 0x0a, 0xf7, 0x8d, - 0x13, 0x90, 0xea, 0x16, 0x0d, 0xe5, 0xfa, 0x7c, 0xf6, 0xa9, 0xc2, 0x3a, 0x93, 0xab, 0x56, 0xaf, - 0xa6, 0xd4, 0xea, 0x4f, 0xf4, 0x22, 0xd2, 0x5b, 0xa1, 0xfe, 0xb7, 0x8a, 0x30, 0x69, 0xfa, 0xf9, - 0x9d, 0xc0, 0x10, 0xac, 0xc3, 0x68, 0x24, 0x1c, 0xd9, 0x0a, 0xf9, 0xe6, 0xdb, 0xe9, 0x49, 0x4c, - 0x4c, 0xbb, 0x84, 0xeb, 0x9a, 0x24, 0x92, 0xe9, 0x21, 0x57, 0x7c, 0x84, 0x1e, 0x72, 0xfd, 0x5c, - 0x2d, 0x87, 0x8e, 0xc3, 0xd5, 0xd2, 0xfe, 0x32, 0x3b, 0xd9, 0xf4, 0xf2, 0x13, 0x10, 0x7a, 0xae, - 0x99, 0x67, 0xa0, 0xdd, 0x63, 0x65, 0x89, 0x4e, 0xe5, 0x08, 0x3f, 0x3f, 0x6b, 0xc1, 0x85, 0x8c, - 0xaf, 0xd2, 0x24, 0xa1, 0x67, 0xa1, 0xe4, 0x74, 0x5c, 0x4f, 0xed, 0x65, 0xed, 0x89, 0x6d, 0x51, - 0x94, 0x63, 0x85, 0x81, 0x96, 0x61, 0x86, 0xdc, 0x6f, 0x7b, 0xfc, 0x75, 0x51, 0xb7, 0xbf, 0x2c, - 0xf2, 0x58, 0xdf, 0x2b, 0x69, 0x20, 0xee, 0xc6, 0x57, 0xe1, 0x27, 0x8a, 0xb9, 0xe1, 0x27, 0xfe, - 0xa1, 0x05, 0x63, 0xca, 0x95, 0xeb, 0x91, 0x8f, 0xf6, 0x37, 0x99, 0xa3, 0xfd, 0x78, 0x8f, 0xd1, - 0xce, 0x19, 0xe6, 0xdf, 0x2a, 0xa8, 0xfe, 0xd6, 0x82, 0x30, 0x1e, 0x40, 0xc2, 0x7a, 0x15, 0x4a, - 0xed, 0x30, 0x88, 0x83, 0x46, 0xd0, 0x14, 0x02, 0xd6, 0xf9, 0x24, 0x0e, 0x0b, 0x2f, 0x3f, 0xd4, - 0x7e, 0x63, 0x85, 0x4d, 0x65, 0x1b, 0xa7, 0xdd, 0x96, 0x00, 0x69, 0x96, 0xc5, 0xa2, 0x94, 0x26, - 0xc5, 0x58, 0xc7, 0x61, 0x03, 0x1e, 0x84, 0xb1, 0x90, 0x83, 0x92, 0x01, 0x0f, 0xc2, 0x18, 0x33, - 0x08, 0x72, 0x01, 0x62, 0x27, 0xdc, 0x26, 0x31, 0x2d, 0x13, 0xa1, 0xa2, 0xf2, 0xf9, 0x4d, 0x27, - 0xf6, 0x9a, 0x0b, 0x9e, 0x1f, 0x47, 0x71, 0xb8, 0x50, 0xf5, 0xe3, 0x5b, 0x21, 0xbf, 0xe2, 0x69, - 0xb1, 0x58, 0x14, 0x2d, 0xac, 0xd1, 0x95, 0x6e, 0xcb, 0xac, 0x8d, 0x61, 0xf3, 0x7d, 0x7f, 0x5d, - 0x94, 0x63, 0x85, 0x61, 0xbf, 0xc2, 0x4e, 0x1f, 0x36, 0xa6, 0x47, 0x0b, 0x5e, 0xf2, 0x8b, 0x65, - 0x35, 0x1b, 0xec, 0x71, 0xaf, 0xa2, 0x87, 0x48, 0xe9, 0xcd, 0xec, 0x69, 0xc3, 0xba, 0x0b, 0x53, - 0x12, 0x47, 0x05, 0x7d, 0x73, 0x97, 0xcd, 0xc6, 0x73, 0x7d, 0x4e, 0x8d, 0x23, 0x58, 0x69, 0xb0, - 0x94, 0x05, 0x2c, 0xa0, 0x7b, 0xb5, 0x26, 0xf6, 0x85, 0x96, 0xb2, 0x40, 0x00, 0x70, 0x82, 0x83, - 0xae, 0x8a, 0x0b, 0x3c, 0x57, 0x7d, 0x3f, 0x9e, 0xba, 0xc0, 0xcb, 0xcf, 0xd7, 0x94, 0xe5, 0xcf, - 0xc3, 0x98, 0x4a, 0xd8, 0x59, 0xe3, 0x79, 0x20, 0xc5, 0xb2, 0x59, 0x49, 0x8a, 0xb1, 0x8e, 0x83, - 0x36, 0x60, 0x2a, 0xe2, 0xaa, 0x24, 0x15, 0x1f, 0x95, 0xab, 0xe4, 0x3e, 0x2c, 0x0d, 0x5d, 0xea, - 0x26, 0xf8, 0x90, 0x15, 0x71, 0x6e, 0x23, 0x5d, 0x85, 0xd3, 0x24, 0xd0, 0xeb, 0x30, 0xd9, 0x0c, - 0x1c, 0x77, 0xc9, 0x69, 0x3a, 0x7e, 0x83, 0x7d, 0x6f, 0xc9, 0xcc, 0xfb, 0x76, 0xd3, 0x80, 0xe2, - 0x14, 0x36, 0x15, 0x96, 0xf4, 0x12, 0x11, 0xd3, 0xd7, 0xf1, 0xb7, 0x49, 0x24, 0xd2, 0x2f, 0x32, - 0x61, 0xe9, 0x66, 0x0e, 0x0e, 0xce, 0xad, 0x8d, 0x5e, 0x85, 0x71, 0xf9, 0xf9, 0x9a, 0x67, 0x7d, - 0x62, 0xdb, 0xaf, 0xc1, 0xb0, 0x81, 0x89, 0xee, 0xc1, 0x19, 0xf9, 0x7f, 0x23, 0x74, 0xb6, 0xb6, - 0xbc, 0x86, 0x70, 0x37, 0xe5, 0x8e, 0x77, 0x8b, 0xd2, 0x3b, 0x6c, 0x25, 0x0b, 0xe9, 0xf0, 0x60, - 0xfe, 0x92, 0x18, 0xb5, 0x4c, 0x38, 0x9b, 0xc4, 0x6c, 0xfa, 0x68, 0x0d, 0x4e, 0xed, 0x10, 0xa7, - 0x19, 0xef, 0x2c, 0xef, 0x90, 0xc6, 0xae, 0xdc, 0x44, 0xcc, 0x5f, 0x5f, 0xb3, 0x88, 0xbf, 0xde, - 0x8d, 0x82, 0xb3, 0xea, 0xa1, 0xb7, 0x60, 0xb6, 0xdd, 0xd9, 0x6c, 0x7a, 0xd1, 0xce, 0x7a, 0x10, - 0x33, 0x6b, 0x17, 0x95, 0xff, 0x53, 0x38, 0xf6, 0xab, 0x88, 0x08, 0xb5, 0x1c, 0x3c, 0x9c, 0x4b, - 0x01, 0xbd, 0x03, 0x67, 0x52, 0x8b, 0x41, 0xb8, 0x36, 0x4f, 0xe6, 0x47, 0x48, 0xaf, 0x67, 0x55, - 0x10, 0x51, 0x02, 0xb2, 0x40, 0x38, 0xbb, 0x09, 0xf4, 0x12, 0x94, 0xbc, 0xf6, 0xaa, 0xd3, 0xf2, - 0x9a, 0xfb, 0x2c, 0xc4, 0x7b, 0x99, 0x85, 0x3d, 0x2f, 0x55, 0x6b, 0xbc, 0xec, 0x50, 0xfb, 0x8d, - 0x15, 0x26, 0xbd, 0x22, 0x68, 0x81, 0x2c, 0xa3, 0xd9, 0xe9, 0xc4, 0x98, 0x57, 0x8b, 0x76, 0x19, - 0x61, 0x03, 0xeb, 0xdd, 0xd9, 0x48, 0xbd, 0x4d, 0x2b, 0x6b, 0x32, 0x23, 0xfa, 0x1c, 0x8c, 0xeb, - 0x2b, 0x56, 0x9c, 0x7f, 0x97, 0xb3, 0x45, 0x2a, 0x6d, 0x65, 0x73, 0x89, 0x53, 0xad, 0x5e, 0x1d, - 0x86, 0x0d, 0x8a, 0x36, 0x81, 0xec, 0xb1, 0x44, 0x37, 0xa1, 0xd4, 0x68, 0x7a, 0xc4, 0x8f, 0xab, - 0xb5, 0x5e, 0x31, 0x98, 0x96, 0x05, 0x8e, 0x98, 0x1c, 0x11, 0xbe, 0x9a, 0x97, 0x61, 0x45, 0xc1, - 0xfe, 0x95, 0x02, 0xcc, 0xf7, 0x89, 0x85, 0x9e, 0x52, 0xe5, 0x5b, 0x03, 0xa9, 0xf2, 0x17, 0x65, - 0xe6, 0xd4, 0xf5, 0x94, 0xca, 0x22, 0x95, 0x15, 0x35, 0x51, 0x5c, 0xa4, 0xf1, 0x07, 0x36, 0xad, - 0xd6, 0x5f, 0x03, 0x86, 0xfa, 0x3a, 0x07, 0x18, 0xaf, 0x80, 0xc3, 0x83, 0xdf, 0x93, 0x72, 0x5f, - 0x74, 0xec, 0x2f, 0x17, 0xe0, 0x8c, 0x1a, 0xc2, 0xaf, 0xdf, 0x81, 0xbb, 0xdd, 0x3d, 0x70, 0xc7, - 0xf0, 0x1e, 0x66, 0xdf, 0x82, 0x11, 0x1e, 0x54, 0x6a, 0x00, 0xf9, 0xec, 0x49, 0x33, 0xfe, 0xa2, - 0x12, 0x09, 0x8c, 0x18, 0x8c, 0xdf, 0x6d, 0xc1, 0xd4, 0xc6, 0x72, 0xad, 0x1e, 0x34, 0x76, 0x49, - 0xbc, 0xc8, 0xe5, 0x69, 0x2c, 0x64, 0x2d, 0xeb, 0x21, 0x65, 0xa8, 0x2c, 0xe9, 0xec, 0x12, 0x0c, - 0xed, 0x04, 0x51, 0x9c, 0x7e, 0x2c, 0xbf, 0x1e, 0x44, 0x31, 0x66, 0x10, 0xfb, 0x77, 0x2c, 0x18, - 0x66, 0xb9, 0xc2, 0xfb, 0x65, 0xab, 0x1f, 0xe4, 0xbb, 0xd0, 0xcb, 0x30, 0x42, 0xb6, 0xb6, 0x48, - 0x23, 0x16, 0xb3, 0x2a, 0xbd, 0x9b, 0x47, 0x56, 0x58, 0x29, 0x15, 0x30, 0x58, 0x63, 0xfc, 0x2f, - 0x16, 0xc8, 0xe8, 0x2e, 0x94, 0x63, 0xaf, 0x45, 0x16, 0x5d, 0x57, 0x3c, 0x37, 0x3e, 0x84, 0x87, - 0xf6, 0x86, 0x24, 0x80, 0x13, 0x5a, 0xf6, 0x97, 0x0a, 0x00, 0x49, 0xb4, 0x8f, 0x7e, 0x9f, 0xb8, - 0xd4, 0xf5, 0x10, 0x75, 0x39, 0xe3, 0x21, 0x0a, 0x25, 0x04, 0x33, 0x5e, 0xa1, 0xd4, 0x30, 0x15, - 0x07, 0x1a, 0xa6, 0xa1, 0xa3, 0x0c, 0xd3, 0x32, 0xcc, 0x24, 0xd1, 0x4a, 0xcc, 0x60, 0x4d, 0xec, - 0x0e, 0xb5, 0x91, 0x06, 0xe2, 0x6e, 0x7c, 0x9b, 0xc0, 0x25, 0x15, 0xb4, 0x41, 0x9c, 0x35, 0xcc, - 0x9a, 0x55, 0x7f, 0xd8, 0xeb, 0x33, 0x4e, 0xc9, 0x4b, 0x5b, 0x21, 0xf7, 0xa5, 0xed, 0x47, 0x2d, - 0x38, 0x9d, 0x6e, 0x87, 0xb9, 0x17, 0x7e, 0xd1, 0x82, 0x33, 0xec, 0xbd, 0x91, 0xb5, 0xda, 0xfd, - 0xba, 0xf9, 0x52, 0xcf, 0x40, 0x14, 0x39, 0x3d, 0x4e, 0xdc, 0xe8, 0xd7, 0xb2, 0x48, 0xe3, 0xec, - 0x16, 0xed, 0xff, 0x58, 0x80, 0xd9, 0xbc, 0x08, 0x16, 0xcc, 0xd8, 0xdd, 0xb9, 0x5f, 0xdf, 0x25, - 0xf7, 0x84, 0x49, 0x71, 0x62, 0xec, 0xce, 0x8b, 0xb1, 0x84, 0xa7, 0xc3, 0x5b, 0x17, 0x06, 0x0b, - 0x6f, 0x8d, 0x76, 0x60, 0xe6, 0xde, 0x0e, 0xf1, 0x6f, 0xfb, 0x91, 0x13, 0x7b, 0xd1, 0x96, 0xc7, - 0x1e, 0x0a, 0xf9, 0xba, 0xf9, 0x98, 0x34, 0xfc, 0xbd, 0x9b, 0x46, 0x38, 0x3c, 0x98, 0xbf, 0x60, - 0x14, 0x24, 0x5d, 0xe6, 0x8c, 0x04, 0x77, 0x13, 0xed, 0x8e, 0x0e, 0x3e, 0xf4, 0x08, 0xa3, 0x83, - 0xdb, 0x5f, 0xb4, 0xe0, 0x5c, 0x6e, 0xf6, 0x3e, 0x74, 0x05, 0x4a, 0x4e, 0xdb, 0xe3, 0xba, 0x56, - 0xc1, 0x46, 0x99, 0xce, 0xa0, 0x56, 0xe5, 0x9a, 0x56, 0x05, 0x55, 0x59, 0x85, 0x0b, 0xb9, 0x59, - 0x85, 0xfb, 0x26, 0x09, 0xb6, 0xbf, 0xcb, 0x02, 0xe1, 0xa8, 0x37, 0x00, 0xef, 0xfe, 0xb4, 0x4c, - 0xca, 0x6e, 0x64, 0x10, 0xb9, 0x94, 0xef, 0xb9, 0x28, 0xf2, 0x86, 0x28, 0x59, 0xc9, 0xc8, 0x16, - 0x62, 0xd0, 0xb2, 0x5d, 0x10, 0xd0, 0x0a, 0x61, 0x9a, 0xca, 0xfe, 0xbd, 0x79, 0x01, 0xc0, 0x65, - 0xb8, 0x5a, 0x6a, 0x66, 0x75, 0x32, 0x57, 0x14, 0x04, 0x6b, 0x58, 0xf6, 0xbf, 0x2b, 0xc0, 0x98, - 0xcc, 0x58, 0xd1, 0xf1, 0x07, 0xd1, 0x27, 0x1c, 0x29, 0x85, 0x1d, 0xcb, 0x65, 0x4e, 0x09, 0xd7, - 0x12, 0x35, 0x4c, 0x92, 0xcb, 0x5c, 0x02, 0x70, 0x82, 0x43, 0x77, 0x51, 0xd4, 0xd9, 0x64, 0xe8, - 0x29, 0xb7, 0xb2, 0x3a, 0x2f, 0xc6, 0x12, 0x8e, 0x3e, 0x09, 0xd3, 0xbc, 0x5e, 0x18, 0xb4, 0x9d, - 0x6d, 0xae, 0xc4, 0x1e, 0x56, 0xfe, 0xe0, 0xd3, 0x6b, 0x29, 0xd8, 0xe1, 0xc1, 0xfc, 0xe9, 0x74, - 0x19, 0x7b, 0x9d, 0xe9, 0xa2, 0xc2, 0xcc, 0x43, 0x78, 0x23, 0x74, 0xf7, 0x77, 0x59, 0x95, 0x24, - 0x20, 0xac, 0xe3, 0xd9, 0x9f, 0x03, 0xd4, 0x9d, 0xbb, 0x03, 0xbd, 0xc1, 0x6d, 0x02, 0xbd, 0x90, - 0xb8, 0xbd, 0x5e, 0x6b, 0x74, 0xaf, 0x67, 0xe9, 0x11, 0xc2, 0x6b, 0x61, 0x55, 0xdf, 0xfe, 0xab, - 0x45, 0x98, 0x4e, 0xfb, 0xc0, 0xa2, 0xeb, 0x30, 0xc2, 0x45, 0x0f, 0x41, 0xbe, 0x87, 0x31, 0x80, - 0xe6, 0x39, 0xcb, 0x98, 0xb0, 0x90, 0x5e, 0x44, 0x7d, 0xf4, 0x16, 0x8c, 0xb9, 0xc1, 0x3d, 0xff, - 0x9e, 0x13, 0xba, 0x8b, 0xb5, 0xaa, 0x58, 0xce, 0x99, 0xb7, 0xa5, 0x4a, 0x82, 0xa6, 0x7b, 0xe3, - 0xb2, 0x87, 0xaf, 0x04, 0x84, 0x75, 0x72, 0x68, 0x83, 0x85, 0x1a, 0xde, 0xf2, 0xb6, 0xd7, 0x9c, - 0x76, 0x2f, 0x03, 0xf1, 0x65, 0x89, 0xa4, 0x51, 0x9e, 0x10, 0xf1, 0x88, 0x39, 0x00, 0x27, 0x84, - 0xd0, 0xb7, 0xc0, 0xa9, 0x28, 0x47, 0x27, 0x9b, 0x97, 0xca, 0xa9, 0x97, 0x9a, 0x72, 0xe9, 0x31, - 0x7a, 0x8f, 0xcd, 0xd2, 0xde, 0x66, 0x35, 0x63, 0xff, 0xea, 0x29, 0x30, 0x36, 0xb1, 0x91, 0xd9, - 0xcf, 0x3a, 0xa6, 0xcc, 0x7e, 0x18, 0x4a, 0xa4, 0xd5, 0x8e, 0xf7, 0x2b, 0x5e, 0xd8, 0x2b, 0x35, - 0xec, 0x8a, 0xc0, 0xe9, 0xa6, 0x29, 0x21, 0x58, 0xd1, 0xc9, 0x4e, 0xbf, 0x58, 0xfc, 0x1a, 0xa6, - 0x5f, 0x1c, 0x3a, 0xc1, 0xf4, 0x8b, 0xeb, 0x30, 0xba, 0xed, 0xc5, 0x98, 0xb4, 0x03, 0x21, 0xf4, - 0x67, 0xae, 0xc3, 0x6b, 0x1c, 0xa5, 0x3b, 0xd1, 0x97, 0x00, 0x60, 0x49, 0x04, 0xbd, 0xa1, 0x76, - 0xe0, 0x48, 0xfe, 0x9d, 0xb9, 0xfb, 0xd5, 0x3a, 0x73, 0x0f, 0x8a, 0x24, 0x8b, 0xa3, 0x0f, 0x9b, - 0x64, 0x71, 0x55, 0xa6, 0x46, 0x2c, 0xe5, 0x7b, 0x73, 0xb0, 0xcc, 0x87, 0x7d, 0x12, 0x22, 0xde, - 0xd1, 0xd3, 0x49, 0x96, 0xf3, 0x39, 0x81, 0xca, 0x14, 0x39, 0x60, 0x12, 0xc9, 0xef, 0xb2, 0xe0, - 0x4c, 0x3b, 0x2b, 0xb3, 0xaa, 0x78, 0xe0, 0x7d, 0x79, 0xe0, 0xd4, 0xb1, 0x46, 0x83, 0x4c, 0x51, - 0x93, 0x89, 0x86, 0xb3, 0x9b, 0xa3, 0x03, 0x1d, 0x6e, 0xba, 0x22, 0x0b, 0xe2, 0x93, 0x39, 0xd9, - 0x28, 0x7b, 0xe4, 0xa0, 0xdc, 0xc8, 0xc8, 0x7c, 0xf8, 0xc1, 0xbc, 0xcc, 0x87, 0x03, 0xe7, 0x3b, - 0x7c, 0x43, 0xe5, 0xa1, 0x9c, 0xc8, 0x5f, 0x4a, 0x3c, 0xcb, 0x64, 0xdf, 0xec, 0x93, 0x6f, 0xa8, - 0xec, 0x93, 0x3d, 0xe2, 0x54, 0xf2, 0xdc, 0x92, 0x7d, 0x73, 0x4e, 0x6a, 0x79, 0x23, 0xa7, 0x8e, - 0x27, 0x6f, 0xa4, 0x71, 0xd4, 0xf0, 0xd4, 0x85, 0xcf, 0xf4, 0x39, 0x6a, 0x0c, 0xba, 0xbd, 0x0f, - 0x1b, 0x9e, 0x23, 0x73, 0xe6, 0xa1, 0x72, 0x64, 0xde, 0xd1, 0x73, 0x4e, 0xa2, 0x3e, 0x49, 0x15, - 0x29, 0xd2, 0x80, 0x99, 0x26, 0xef, 0xe8, 0x07, 0xe0, 0xa9, 0x7c, 0xba, 0xea, 0x9c, 0xeb, 0xa6, - 0x9b, 0x79, 0x04, 0x76, 0x65, 0xb0, 0x3c, 0x7d, 0x32, 0x19, 0x2c, 0xcf, 0x1c, 0x7b, 0x06, 0xcb, - 0xb3, 0x27, 0x90, 0xc1, 0xf2, 0xb1, 0x13, 0xcc, 0x60, 0x79, 0x87, 0x59, 0x45, 0xf0, 0x70, 0x27, - 0x22, 0xae, 0x66, 0x76, 0x0c, 0xc7, 0xac, 0x98, 0x28, 0xfc, 0xe3, 0x14, 0x08, 0x27, 0xa4, 0x32, - 0x32, 0x63, 0xce, 0x3e, 0x82, 0xcc, 0x98, 0xeb, 0x49, 0x66, 0xcc, 0x73, 0xf9, 0x53, 0x9d, 0x61, - 0xba, 0x9e, 0x93, 0x0f, 0xf3, 0x8e, 0x9e, 0xc7, 0xf2, 0xf1, 0x1e, 0xaa, 0xf8, 0x2c, 0xc5, 0x63, - 0x8f, 0xec, 0x95, 0xaf, 0xf3, 0xec, 0x95, 0xe7, 0xf3, 0x39, 0x79, 0xfa, 0xb8, 0x33, 0x73, 0x56, - 0x7e, 0x4f, 0x01, 0x2e, 0xf6, 0xde, 0x17, 0x89, 0xd6, 0xb3, 0x96, 0xbc, 0x08, 0xa6, 0xb4, 0x9e, - 0xfc, 0x6e, 0x95, 0x60, 0x0d, 0x1c, 0x09, 0xeb, 0x1a, 0xcc, 0x28, 0xdb, 0xf4, 0xa6, 0xd7, 0xd8, - 0xd7, 0xd2, 0xf4, 0x2b, 0x7f, 0xde, 0x7a, 0x1a, 0x01, 0x77, 0xd7, 0x41, 0x8b, 0x30, 0x65, 0x14, - 0x56, 0x2b, 0xe2, 0x0e, 0xa5, 0xd4, 0xac, 0x75, 0x13, 0x8c, 0xd3, 0xf8, 0xf6, 0x4f, 0x5a, 0xf0, - 0x58, 0x4e, 0x72, 0xa8, 0x81, 0x03, 0x3d, 0x6d, 0xc1, 0x54, 0xdb, 0xac, 0xda, 0x27, 0x1e, 0x9c, - 0x91, 0x82, 0x4a, 0xf5, 0x35, 0x05, 0xc0, 0x69, 0xa2, 0xf6, 0x9f, 0x5a, 0x70, 0xa1, 0xa7, 0xe5, - 0x17, 0xc2, 0x70, 0x76, 0xbb, 0x15, 0x39, 0xcb, 0x21, 0x71, 0x89, 0x1f, 0x7b, 0x4e, 0xb3, 0xde, - 0x26, 0x0d, 0x4d, 0x6f, 0xcd, 0x4c, 0xa8, 0xae, 0xad, 0xd5, 0x17, 0xbb, 0x31, 0x70, 0x4e, 0x4d, - 0xb4, 0x0a, 0xa8, 0x1b, 0x22, 0x66, 0x98, 0xc5, 0x8c, 0xed, 0xa6, 0x87, 0x33, 0x6a, 0xa0, 0x57, - 0x60, 0x42, 0x59, 0x94, 0x69, 0x33, 0xce, 0x18, 0x30, 0xd6, 0x01, 0xd8, 0xc4, 0x5b, 0xba, 0xf2, - 0xeb, 0xbf, 0x77, 0xf1, 0x03, 0xbf, 0xf9, 0x7b, 0x17, 0x3f, 0xf0, 0xdb, 0xbf, 0x77, 0xf1, 0x03, - 0xdf, 0xf6, 0xe0, 0xa2, 0xf5, 0xeb, 0x0f, 0x2e, 0x5a, 0xbf, 0xf9, 0xe0, 0xa2, 0xf5, 0xdb, 0x0f, - 0x2e, 0x5a, 0xbf, 0xfb, 0xe0, 0xa2, 0xf5, 0xa5, 0xdf, 0xbf, 0xf8, 0x81, 0x4f, 0x17, 0xf6, 0x9e, - 0xff, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5c, 0x2b, 0xc8, 0x61, 0xd8, 0xfd, 0x00, 0x00, + // 13708 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x24, 0x59, + 0x56, 0x18, 0xbc, 0x59, 0xa5, 0x47, 0xd5, 0xd1, 0xfb, 0xf6, 0x63, 0xd4, 0x9a, 0xee, 0x56, 0x4f, + 0xce, 0x6e, 0x4f, 0xcf, 0xce, 0x8c, 0x7a, 0xe7, 0xb5, 0x3b, 0xec, 0xec, 0x0e, 0x48, 0x2a, 0xa9, + 0xbb, 0xa6, 0x5b, 0xea, 0x9a, 0x5b, 0xea, 0xee, 0xdd, 0x65, 0x76, 0xbf, 0x4d, 0x55, 0x5e, 0x49, + 0x39, 0xaa, 0xca, 0xac, 0xc9, 0xcc, 0x52, 0xb7, 0xe6, 0x83, 0xf8, 0xf8, 0x96, 0xe7, 0x7e, 0xc0, + 0x17, 0x6b, 0x07, 0xe1, 0x07, 0x10, 0x84, 0x03, 0xe3, 0x80, 0x35, 0xb6, 0xc3, 0x18, 0x0c, 0x98, + 0xc5, 0x06, 0x83, 0xed, 0xc0, 0xfe, 0x81, 0x31, 0x61, 0x7b, 0x89, 0x20, 0x2c, 0x43, 0xe3, 0x30, + 0xb1, 0x3f, 0x0c, 0x84, 0xc1, 0x3f, 0x2c, 0x13, 0xc6, 0x71, 0x9f, 0x79, 0x6f, 0x56, 0x66, 0x55, + 0xa9, 0x47, 0xad, 0x1d, 0x36, 0xe6, 0x5f, 0xd5, 0x3d, 0xe7, 0x9e, 0x7b, 0xf3, 0x3e, 0xce, 0x3d, + 0xf7, 0xdc, 0xf3, 0x80, 0x57, 0x77, 0x5f, 0x89, 0x16, 0xbc, 0xe0, 0xea, 0x6e, 0x67, 0x93, 0x84, + 0x3e, 0x89, 0x49, 0x74, 0x75, 0x8f, 0xf8, 0x6e, 0x10, 0x5e, 0x15, 0x00, 0xa7, 0xed, 0x5d, 0x6d, + 0x04, 0x21, 0xb9, 0xba, 0xf7, 0xfc, 0xd5, 0x6d, 0xe2, 0x93, 0xd0, 0x89, 0x89, 0xbb, 0xd0, 0x0e, + 0x83, 0x38, 0x40, 0x88, 0xe3, 0x2c, 0x38, 0x6d, 0x6f, 0x81, 0xe2, 0x2c, 0xec, 0x3d, 0x3f, 0xf7, + 0xdc, 0xb6, 0x17, 0xef, 0x74, 0x36, 0x17, 0x1a, 0x41, 0xeb, 0xea, 0x76, 0xb0, 0x1d, 0x5c, 0x65, + 0xa8, 0x9b, 0x9d, 0x2d, 0xf6, 0x8f, 0xfd, 0x61, 0xbf, 0x38, 0x89, 0xb9, 0x97, 0x92, 0x66, 0x5a, + 0x4e, 0x63, 0xc7, 0xf3, 0x49, 0xb8, 0x7f, 0xb5, 0xbd, 0xbb, 0xcd, 0xda, 0x0d, 0x49, 0x14, 0x74, + 0xc2, 0x06, 0x49, 0x37, 0xdc, 0xb3, 0x56, 0x74, 0xb5, 0x45, 0x62, 0x27, 0xa3, 0xbb, 0x73, 0x57, + 0xf3, 0x6a, 0x85, 0x1d, 0x3f, 0xf6, 0x5a, 0xdd, 0xcd, 0x7c, 0xb4, 0x5f, 0x85, 0xa8, 0xb1, 0x43, + 0x5a, 0x4e, 0x57, 0xbd, 0x17, 0xf3, 0xea, 0x75, 0x62, 0xaf, 0x79, 0xd5, 0xf3, 0xe3, 0x28, 0x0e, + 0xd3, 0x95, 0xec, 0xaf, 0x5a, 0x70, 0x69, 0xf1, 0x6e, 0x7d, 0xa5, 0xe9, 0x44, 0xb1, 0xd7, 0x58, + 0x6a, 0x06, 0x8d, 0xdd, 0x7a, 0x1c, 0x84, 0xe4, 0x4e, 0xd0, 0xec, 0xb4, 0x48, 0x9d, 0x0d, 0x04, + 0x7a, 0x16, 0x4a, 0x7b, 0xec, 0x7f, 0xb5, 0x32, 0x6b, 0x5d, 0xb2, 0xae, 0x94, 0x97, 0xa6, 0x7f, + 0xe3, 0x60, 0xfe, 0x03, 0x0f, 0x0e, 0xe6, 0x4b, 0x77, 0x44, 0x39, 0x56, 0x18, 0xe8, 0x32, 0x8c, + 0x6c, 0x45, 0x1b, 0xfb, 0x6d, 0x32, 0x5b, 0x60, 0xb8, 0x93, 0x02, 0x77, 0x64, 0xb5, 0x4e, 0x4b, + 0xb1, 0x80, 0xa2, 0xab, 0x50, 0x6e, 0x3b, 0x61, 0xec, 0xc5, 0x5e, 0xe0, 0xcf, 0x16, 0x2f, 0x59, + 0x57, 0x86, 0x97, 0x66, 0x04, 0x6a, 0xb9, 0x26, 0x01, 0x38, 0xc1, 0xa1, 0xdd, 0x08, 0x89, 0xe3, + 0xde, 0xf2, 0x9b, 0xfb, 0xb3, 0x43, 0x97, 0xac, 0x2b, 0xa5, 0xa4, 0x1b, 0x58, 0x94, 0x63, 0x85, + 0x61, 0xff, 0x70, 0x01, 0x4a, 0x8b, 0x5b, 0x5b, 0x9e, 0xef, 0xc5, 0xfb, 0xe8, 0x0e, 0x8c, 0xfb, + 0x81, 0x4b, 0xe4, 0x7f, 0xf6, 0x15, 0x63, 0x2f, 0x5c, 0x5a, 0xe8, 0x5e, 0x4a, 0x0b, 0xeb, 0x1a, + 0xde, 0xd2, 0xf4, 0x83, 0x83, 0xf9, 0x71, 0xbd, 0x04, 0x1b, 0x74, 0x10, 0x86, 0xb1, 0x76, 0xe0, + 0x2a, 0xb2, 0x05, 0x46, 0x76, 0x3e, 0x8b, 0x6c, 0x2d, 0x41, 0x5b, 0x9a, 0x7a, 0x70, 0x30, 0x3f, + 0xa6, 0x15, 0x60, 0x9d, 0x08, 0xda, 0x84, 0x29, 0xfa, 0xd7, 0x8f, 0x3d, 0x45, 0xb7, 0xc8, 0xe8, + 0x3e, 0x99, 0x47, 0x57, 0x43, 0x5d, 0x3a, 0xf5, 0xe0, 0x60, 0x7e, 0x2a, 0x55, 0x88, 0xd3, 0x04, + 0xed, 0x77, 0x60, 0x72, 0x31, 0x8e, 0x9d, 0xc6, 0x0e, 0x71, 0xf9, 0x0c, 0xa2, 0x97, 0x60, 0xc8, + 0x77, 0x5a, 0x44, 0xcc, 0xef, 0x25, 0x31, 0xb0, 0x43, 0xeb, 0x4e, 0x8b, 0x1c, 0x1e, 0xcc, 0x4f, + 0xdf, 0xf6, 0xbd, 0xb7, 0x3b, 0x62, 0x55, 0xd0, 0x32, 0xcc, 0xb0, 0xd1, 0x0b, 0x00, 0x2e, 0xd9, + 0xf3, 0x1a, 0xa4, 0xe6, 0xc4, 0x3b, 0x62, 0xbe, 0x91, 0xa8, 0x0b, 0x15, 0x05, 0xc1, 0x1a, 0x96, + 0x7d, 0x1f, 0xca, 0x8b, 0x7b, 0x81, 0xe7, 0xd6, 0x02, 0x37, 0x42, 0xbb, 0x30, 0xd5, 0x0e, 0xc9, + 0x16, 0x09, 0x55, 0xd1, 0xac, 0x75, 0xa9, 0x78, 0x65, 0xec, 0x85, 0x2b, 0x99, 0x1f, 0x6b, 0xa2, + 0xae, 0xf8, 0x71, 0xb8, 0xbf, 0xf4, 0x98, 0x68, 0x6f, 0x2a, 0x05, 0xc5, 0x69, 0xca, 0xf6, 0xbf, + 0x28, 0xc0, 0x99, 0xc5, 0x77, 0x3a, 0x21, 0xa9, 0x78, 0xd1, 0x6e, 0x7a, 0x85, 0xbb, 0x5e, 0xb4, + 0xbb, 0x9e, 0x8c, 0x80, 0x5a, 0x5a, 0x15, 0x51, 0x8e, 0x15, 0x06, 0x7a, 0x0e, 0x46, 0xe9, 0xef, + 0xdb, 0xb8, 0x2a, 0x3e, 0xf9, 0x94, 0x40, 0x1e, 0xab, 0x38, 0xb1, 0x53, 0xe1, 0x20, 0x2c, 0x71, + 0xd0, 0x1a, 0x8c, 0x35, 0xd8, 0x86, 0xdc, 0x5e, 0x0b, 0x5c, 0xc2, 0x26, 0xb3, 0xbc, 0xf4, 0x0c, + 0x45, 0x5f, 0x4e, 0x8a, 0x0f, 0x0f, 0xe6, 0x67, 0x79, 0xdf, 0x04, 0x09, 0x0d, 0x86, 0xf5, 0xfa, + 0xc8, 0x56, 0xfb, 0x6b, 0x88, 0x51, 0x82, 0x8c, 0xbd, 0x75, 0x45, 0xdb, 0x2a, 0xc3, 0x6c, 0xab, + 0x8c, 0x67, 0x6f, 0x13, 0xf4, 0x3c, 0x0c, 0xed, 0x7a, 0xbe, 0x3b, 0x3b, 0xc2, 0x68, 0x5d, 0xa0, + 0x73, 0x7e, 0xc3, 0xf3, 0xdd, 0xc3, 0x83, 0xf9, 0x19, 0xa3, 0x3b, 0xb4, 0x10, 0x33, 0x54, 0xfb, + 0x4f, 0x2d, 0x98, 0x67, 0xb0, 0x55, 0xaf, 0x49, 0x6a, 0x24, 0x8c, 0xbc, 0x28, 0x26, 0x7e, 0x6c, + 0x0c, 0xe8, 0x0b, 0x00, 0x11, 0x69, 0x84, 0x24, 0xd6, 0x86, 0x54, 0x2d, 0x8c, 0xba, 0x82, 0x60, + 0x0d, 0x8b, 0x32, 0x84, 0x68, 0xc7, 0x09, 0xd9, 0xfa, 0x12, 0x03, 0xab, 0x18, 0x42, 0x5d, 0x02, + 0x70, 0x82, 0x63, 0x30, 0x84, 0x62, 0x3f, 0x86, 0x80, 0x3e, 0x09, 0x53, 0x49, 0x63, 0x51, 0xdb, + 0x69, 0xc8, 0x01, 0x64, 0x5b, 0xa6, 0x6e, 0x82, 0x70, 0x1a, 0xd7, 0xfe, 0xbb, 0x96, 0x58, 0x3c, + 0xf4, 0xab, 0xdf, 0xe3, 0xdf, 0x6a, 0xff, 0xa2, 0x05, 0xa3, 0x4b, 0x9e, 0xef, 0x7a, 0xfe, 0x36, + 0xfa, 0x3c, 0x94, 0xe8, 0xd9, 0xe4, 0x3a, 0xb1, 0x23, 0xf8, 0xde, 0x47, 0xb4, 0xbd, 0xa5, 0x8e, + 0x8a, 0x85, 0xf6, 0xee, 0x36, 0x2d, 0x88, 0x16, 0x28, 0x36, 0xdd, 0x6d, 0xb7, 0x36, 0xdf, 0x22, + 0x8d, 0x78, 0x8d, 0xc4, 0x4e, 0xf2, 0x39, 0x49, 0x19, 0x56, 0x54, 0xd1, 0x0d, 0x18, 0x89, 0x9d, + 0x70, 0x9b, 0xc4, 0x82, 0x01, 0x66, 0x32, 0x2a, 0x5e, 0x13, 0xd3, 0x1d, 0x49, 0xfc, 0x06, 0x49, + 0x8e, 0x85, 0x0d, 0x56, 0x15, 0x0b, 0x12, 0xf6, 0x0f, 0x8e, 0xc2, 0xb9, 0xe5, 0x7a, 0x35, 0x67, + 0x5d, 0x5d, 0x86, 0x11, 0x37, 0xf4, 0xf6, 0x48, 0x28, 0xc6, 0x59, 0x51, 0xa9, 0xb0, 0x52, 0x2c, + 0xa0, 0xe8, 0x15, 0x18, 0xe7, 0x07, 0xd2, 0x75, 0xc7, 0x77, 0x9b, 0x72, 0x88, 0x4f, 0x0b, 0xec, + 0xf1, 0x3b, 0x1a, 0x0c, 0x1b, 0x98, 0x47, 0x5c, 0x54, 0x97, 0x53, 0x9b, 0x31, 0xef, 0xb0, 0xfb, + 0xa2, 0x05, 0xd3, 0xbc, 0x99, 0xc5, 0x38, 0x0e, 0xbd, 0xcd, 0x4e, 0x4c, 0xa2, 0xd9, 0x61, 0xc6, + 0xe9, 0x96, 0xb3, 0x46, 0x2b, 0x77, 0x04, 0x16, 0xee, 0xa4, 0xa8, 0x70, 0x26, 0x38, 0x2b, 0xda, + 0x9d, 0x4e, 0x83, 0x71, 0x57, 0xb3, 0xe8, 0x3b, 0x2d, 0x98, 0x6b, 0x04, 0x7e, 0x1c, 0x06, 0xcd, + 0x26, 0x09, 0x6b, 0x9d, 0xcd, 0xa6, 0x17, 0xed, 0xf0, 0x75, 0x8a, 0xc9, 0x16, 0xe3, 0x04, 0x39, + 0x73, 0xa8, 0x90, 0xc4, 0x1c, 0x5e, 0x7c, 0x70, 0x30, 0x3f, 0xb7, 0x9c, 0x4b, 0x0a, 0xf7, 0x68, + 0x06, 0xed, 0x02, 0xa2, 0x47, 0x69, 0x3d, 0x76, 0xb6, 0x49, 0xd2, 0xf8, 0xe8, 0xe0, 0x8d, 0x9f, + 0x7d, 0x70, 0x30, 0x8f, 0xd6, 0xbb, 0x48, 0xe0, 0x0c, 0xb2, 0xe8, 0x6d, 0x38, 0x4d, 0x4b, 0xbb, + 0xbe, 0xb5, 0x34, 0x78, 0x73, 0xb3, 0x0f, 0x0e, 0xe6, 0x4f, 0xaf, 0x67, 0x10, 0xc1, 0x99, 0xa4, + 0xd1, 0x77, 0x58, 0x70, 0x2e, 0xf9, 0xfc, 0x95, 0xfb, 0x6d, 0xc7, 0x77, 0x93, 0x86, 0xcb, 0x83, + 0x37, 0x4c, 0x79, 0xf2, 0xb9, 0xe5, 0x3c, 0x4a, 0x38, 0xbf, 0x91, 0xb9, 0x65, 0x38, 0x93, 0xb9, + 0x5a, 0xd0, 0x34, 0x14, 0x77, 0x09, 0x97, 0x82, 0xca, 0x98, 0xfe, 0x44, 0xa7, 0x61, 0x78, 0xcf, + 0x69, 0x76, 0xc4, 0x46, 0xc1, 0xfc, 0xcf, 0xc7, 0x0b, 0xaf, 0x58, 0xf6, 0xbf, 0x2c, 0xc2, 0xd4, + 0x72, 0xbd, 0xfa, 0x50, 0xbb, 0x50, 0x3f, 0x86, 0x0a, 0x3d, 0x8f, 0xa1, 0xe4, 0x50, 0x2b, 0xe6, + 0x1e, 0x6a, 0xff, 0x4f, 0xc6, 0x16, 0x1a, 0x62, 0x5b, 0xe8, 0x9b, 0x72, 0xb6, 0xd0, 0x31, 0x6f, + 0x9c, 0xbd, 0x9c, 0x55, 0x34, 0xcc, 0x26, 0x33, 0x53, 0x62, 0xb9, 0x19, 0x34, 0x9c, 0x66, 0x9a, + 0xf5, 0x1d, 0x71, 0x29, 0x1d, 0xcf, 0x3c, 0x36, 0x60, 0x7c, 0xd9, 0x69, 0x3b, 0x9b, 0x5e, 0xd3, + 0x8b, 0x3d, 0x12, 0xa1, 0xa7, 0xa0, 0xe8, 0xb8, 0x2e, 0x93, 0xb6, 0xca, 0x4b, 0x67, 0x1e, 0x1c, + 0xcc, 0x17, 0x17, 0x5d, 0x7a, 0xec, 0x83, 0xc2, 0xda, 0xc7, 0x14, 0x03, 0x7d, 0x18, 0x86, 0xdc, + 0x30, 0x68, 0xcf, 0x16, 0x18, 0x26, 0xdd, 0x75, 0x43, 0x95, 0x30, 0x68, 0xa7, 0x50, 0x19, 0x8e, + 0xfd, 0xab, 0x05, 0x38, 0xbf, 0x4c, 0xda, 0x3b, 0xab, 0xf5, 0x1c, 0xfe, 0x7d, 0x05, 0x4a, 0xad, + 0xc0, 0xf7, 0xe2, 0x20, 0x8c, 0x44, 0xd3, 0x6c, 0x45, 0xac, 0x89, 0x32, 0xac, 0xa0, 0xe8, 0x12, + 0x0c, 0xb5, 0x13, 0xa1, 0x72, 0x5c, 0x0a, 0xa4, 0x4c, 0x9c, 0x64, 0x10, 0x8a, 0xd1, 0x89, 0x48, + 0x28, 0x56, 0x8c, 0xc2, 0xb8, 0x1d, 0x91, 0x10, 0x33, 0x48, 0x72, 0x32, 0xd3, 0x33, 0x5b, 0x70, + 0xe8, 0xd4, 0xc9, 0x4c, 0x21, 0x58, 0xc3, 0x42, 0x35, 0x28, 0x47, 0xa9, 0x99, 0x1d, 0x68, 0x9b, + 0x4e, 0xb0, 0xa3, 0x5b, 0xcd, 0x64, 0x42, 0xc4, 0x38, 0x51, 0x46, 0xfa, 0x1e, 0xdd, 0x5f, 0x29, + 0x00, 0xe2, 0x43, 0xf8, 0x97, 0x6c, 0xe0, 0x6e, 0x77, 0x0f, 0xdc, 0xe0, 0x5b, 0xe2, 0xb8, 0x46, + 0xef, 0xcf, 0x2c, 0x38, 0xbf, 0xec, 0xf9, 0x2e, 0x09, 0x73, 0x16, 0xe0, 0xa3, 0xb9, 0xcb, 0x1e, + 0x4d, 0x68, 0x30, 0x96, 0xd8, 0xd0, 0x31, 0x2c, 0x31, 0xfb, 0x8f, 0x2d, 0x40, 0xfc, 0xb3, 0xdf, + 0x73, 0x1f, 0x7b, 0xbb, 0xfb, 0x63, 0x8f, 0x61, 0x59, 0xd8, 0x37, 0x61, 0x72, 0xb9, 0xe9, 0x11, + 0x3f, 0xae, 0xd6, 0x96, 0x03, 0x7f, 0xcb, 0xdb, 0x46, 0x1f, 0x87, 0xc9, 0xd8, 0x6b, 0x91, 0xa0, + 0x13, 0xd7, 0x49, 0x23, 0xf0, 0xd9, 0x4d, 0xd2, 0xba, 0x32, 0xbc, 0x84, 0x1e, 0x1c, 0xcc, 0x4f, + 0x6e, 0x18, 0x10, 0x9c, 0xc2, 0xb4, 0x7f, 0x97, 0x8e, 0x5f, 0xd0, 0x6a, 0x07, 0x3e, 0xf1, 0xe3, + 0xe5, 0xc0, 0x77, 0xb9, 0xc6, 0xe1, 0xe3, 0x30, 0x14, 0xd3, 0xf1, 0xe0, 0x63, 0x77, 0x59, 0x6e, + 0x14, 0x3a, 0x0a, 0x87, 0x07, 0xf3, 0x67, 0xbb, 0x6b, 0xb0, 0x71, 0x62, 0x75, 0xd0, 0x37, 0xc1, + 0x48, 0x14, 0x3b, 0x71, 0x27, 0x12, 0xa3, 0xf9, 0x84, 0x1c, 0xcd, 0x3a, 0x2b, 0x3d, 0x3c, 0x98, + 0x9f, 0x52, 0xd5, 0x78, 0x11, 0x16, 0x15, 0xd0, 0xd3, 0x30, 0xda, 0x22, 0x51, 0xe4, 0x6c, 0xcb, + 0xd3, 0x70, 0x4a, 0xd4, 0x1d, 0x5d, 0xe3, 0xc5, 0x58, 0xc2, 0xd1, 0x93, 0x30, 0x4c, 0xc2, 0x30, + 0x08, 0xc5, 0x1e, 0x9d, 0x10, 0x88, 0xc3, 0x2b, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0x6f, 0x2d, 0x98, + 0x52, 0x7d, 0xe5, 0x6d, 0x9d, 0xc0, 0xad, 0xe0, 0x33, 0x00, 0x0d, 0xf9, 0x81, 0x11, 0x3b, 0x3d, + 0xc6, 0x5e, 0xb8, 0x9c, 0x79, 0x50, 0x77, 0x0d, 0x63, 0x42, 0x59, 0x15, 0x45, 0x58, 0xa3, 0x66, + 0xff, 0x53, 0x0b, 0x4e, 0xa5, 0xbe, 0xe8, 0xa6, 0x17, 0xc5, 0xe8, 0xcd, 0xae, 0xaf, 0x5a, 0x18, + 0xec, 0xab, 0x68, 0x6d, 0xf6, 0x4d, 0x6a, 0x29, 0xcb, 0x12, 0xed, 0x8b, 0xae, 0xc3, 0xb0, 0x17, + 0x93, 0x96, 0xfc, 0x98, 0x27, 0x7b, 0x7e, 0x0c, 0xef, 0x55, 0x32, 0x23, 0x55, 0x5a, 0x13, 0x73, + 0x02, 0xf6, 0xaf, 0x16, 0xa1, 0xcc, 0x97, 0xed, 0x9a, 0xd3, 0x3e, 0x81, 0xb9, 0x78, 0x06, 0xca, + 0x5e, 0xab, 0xd5, 0x89, 0x9d, 0x4d, 0xc1, 0xce, 0x4b, 0x7c, 0x6b, 0x55, 0x65, 0x21, 0x4e, 0xe0, + 0xa8, 0x0a, 0x43, 0xac, 0x2b, 0xfc, 0x2b, 0x9f, 0xca, 0xfe, 0x4a, 0xd1, 0xf7, 0x85, 0x8a, 0x13, + 0x3b, 0x5c, 0x92, 0x52, 0xe7, 0x08, 0x2d, 0xc2, 0x8c, 0x04, 0x72, 0x00, 0x36, 0x3d, 0xdf, 0x09, + 0xf7, 0x69, 0xd9, 0x6c, 0x91, 0x11, 0x7c, 0xae, 0x37, 0xc1, 0x25, 0x85, 0xcf, 0xc9, 0xaa, 0x0f, + 0x4b, 0x00, 0x58, 0x23, 0x3a, 0xf7, 0x31, 0x28, 0x2b, 0xe4, 0xa3, 0x08, 0x44, 0x73, 0x9f, 0x84, + 0xa9, 0x54, 0x5b, 0xfd, 0xaa, 0x8f, 0xeb, 0xf2, 0xd4, 0x2f, 0x31, 0x96, 0x21, 0x7a, 0xbd, 0xe2, + 0xef, 0x09, 0x96, 0xfb, 0x0e, 0x9c, 0x6e, 0x66, 0x70, 0x32, 0x31, 0xaf, 0x83, 0x73, 0xbe, 0xf3, + 0xe2, 0xb3, 0x4f, 0x67, 0x41, 0x71, 0x66, 0x1b, 0x54, 0x46, 0x08, 0xda, 0x74, 0x83, 0x38, 0x4d, + 0x5d, 0xdc, 0xbe, 0x25, 0xca, 0xb0, 0x82, 0x52, 0x7e, 0x77, 0x5a, 0x75, 0xfe, 0x06, 0xd9, 0xaf, + 0x93, 0x26, 0x69, 0xc4, 0x41, 0xf8, 0x75, 0xed, 0xfe, 0x05, 0x3e, 0xfa, 0x9c, 0x5d, 0x8e, 0x09, + 0x02, 0xc5, 0x1b, 0x64, 0x9f, 0x4f, 0x85, 0xfe, 0x75, 0xc5, 0x9e, 0x5f, 0xf7, 0x33, 0x16, 0x4c, + 0xa8, 0xaf, 0x3b, 0x01, 0xbe, 0xb0, 0x64, 0xf2, 0x85, 0x0b, 0x3d, 0x17, 0x78, 0x0e, 0x47, 0xf8, + 0x4a, 0x01, 0xce, 0x29, 0x1c, 0x7a, 0x37, 0xe0, 0x7f, 0xc4, 0xaa, 0xba, 0x0a, 0x65, 0x5f, 0x69, + 0xad, 0x2c, 0x53, 0x5d, 0x94, 0xe8, 0xac, 0x12, 0x1c, 0x2a, 0xe2, 0xf9, 0x89, 0x6a, 0x69, 0x5c, + 0x57, 0xe7, 0x0a, 0xd5, 0xed, 0x12, 0x14, 0x3b, 0x9e, 0x2b, 0x0e, 0x98, 0x8f, 0xc8, 0xd1, 0xbe, + 0x5d, 0xad, 0x1c, 0x1e, 0xcc, 0x3f, 0x91, 0xf7, 0x94, 0x40, 0x4f, 0xb6, 0x68, 0xe1, 0x76, 0xb5, + 0x82, 0x69, 0x65, 0xb4, 0x08, 0x53, 0xf2, 0xb5, 0xe4, 0x0e, 0x15, 0xb7, 0x02, 0x5f, 0x9c, 0x43, + 0x4a, 0x27, 0x8b, 0x4d, 0x30, 0x4e, 0xe3, 0xa3, 0x0a, 0x4c, 0xef, 0x76, 0x36, 0x49, 0x93, 0xc4, + 0xfc, 0x83, 0x6f, 0x10, 0xae, 0xb1, 0x2c, 0x27, 0x37, 0xb3, 0x1b, 0x29, 0x38, 0xee, 0xaa, 0x61, + 0xff, 0x05, 0x3b, 0x0f, 0xc4, 0xe8, 0xd5, 0xc2, 0x80, 0x2e, 0x2c, 0x4a, 0xfd, 0xeb, 0xb9, 0x9c, + 0x07, 0x59, 0x15, 0x37, 0xc8, 0xfe, 0x46, 0x40, 0x25, 0xf3, 0xec, 0x55, 0x61, 0xac, 0xf9, 0xa1, + 0x9e, 0x6b, 0xfe, 0xe7, 0x0a, 0x70, 0x46, 0x8d, 0x80, 0x21, 0x04, 0xfe, 0x65, 0x1f, 0x83, 0xe7, + 0x61, 0xcc, 0x25, 0x5b, 0x4e, 0xa7, 0x19, 0x2b, 0xf5, 0xf9, 0x30, 0x7f, 0x42, 0xa9, 0x24, 0xc5, + 0x58, 0xc7, 0x39, 0xc2, 0xb0, 0xfd, 0x8f, 0x31, 0x76, 0x10, 0xc7, 0x0e, 0x5d, 0xe3, 0x6a, 0xd7, + 0x58, 0xb9, 0xbb, 0xe6, 0x49, 0x18, 0xf6, 0x5a, 0x54, 0x30, 0x2b, 0x98, 0xf2, 0x56, 0x95, 0x16, + 0x62, 0x0e, 0x43, 0x1f, 0x82, 0xd1, 0x46, 0xd0, 0x6a, 0x39, 0xbe, 0xcb, 0x8e, 0xbc, 0xf2, 0xd2, + 0x18, 0x95, 0xdd, 0x96, 0x79, 0x11, 0x96, 0x30, 0x74, 0x1e, 0x86, 0x9c, 0x70, 0x9b, 0xeb, 0x30, + 0xca, 0x4b, 0x25, 0xda, 0xd2, 0x62, 0xb8, 0x1d, 0x61, 0x56, 0x4a, 0xaf, 0x60, 0xf7, 0x82, 0x70, + 0xd7, 0xf3, 0xb7, 0x2b, 0x5e, 0x28, 0xb6, 0x84, 0x3a, 0x0b, 0xef, 0x2a, 0x08, 0xd6, 0xb0, 0xd0, + 0x2a, 0x0c, 0xb7, 0x83, 0x30, 0x8e, 0x66, 0x47, 0xd8, 0x70, 0x3f, 0x91, 0xc3, 0x88, 0xf8, 0xd7, + 0xd6, 0x82, 0x30, 0x4e, 0x3e, 0x80, 0xfe, 0x8b, 0x30, 0xaf, 0x8e, 0x6e, 0xc2, 0x28, 0xf1, 0xf7, + 0x56, 0xc3, 0xa0, 0x35, 0x7b, 0x2a, 0x9f, 0xd2, 0x0a, 0x47, 0xe1, 0xcb, 0x2c, 0x91, 0x51, 0x45, + 0x31, 0x96, 0x24, 0xd0, 0x37, 0x41, 0x91, 0xf8, 0x7b, 0xb3, 0xa3, 0x8c, 0xd2, 0x5c, 0x0e, 0xa5, + 0x3b, 0x4e, 0x98, 0xf0, 0xfc, 0x15, 0x7f, 0x0f, 0xd3, 0x3a, 0xe8, 0xd3, 0x50, 0x96, 0x0c, 0x23, + 0x12, 0xca, 0xba, 0xcc, 0x05, 0x2b, 0xd9, 0x0c, 0x26, 0x6f, 0x77, 0xbc, 0x90, 0xb4, 0x88, 0x1f, + 0x47, 0x09, 0x87, 0x94, 0xd0, 0x08, 0x27, 0xd4, 0xd0, 0xa7, 0xa5, 0x86, 0x78, 0x2d, 0xe8, 0xf8, + 0x71, 0x34, 0x5b, 0x66, 0xdd, 0xcb, 0x7c, 0xbb, 0xbb, 0x93, 0xe0, 0xa5, 0x55, 0xc8, 0xbc, 0x32, + 0x36, 0x48, 0xa1, 0xcf, 0xc2, 0x04, 0xff, 0xcf, 0x5f, 0xc0, 0xa2, 0xd9, 0x33, 0x8c, 0xf6, 0xa5, + 0x7c, 0xda, 0x1c, 0x71, 0xe9, 0x8c, 0x20, 0x3e, 0xa1, 0x97, 0x46, 0xd8, 0xa4, 0x86, 0x30, 0x4c, + 0x34, 0xbd, 0x3d, 0xe2, 0x93, 0x28, 0xaa, 0x85, 0xc1, 0x26, 0x99, 0x05, 0x36, 0x30, 0xe7, 0xb2, + 0x5f, 0xcc, 0x82, 0x4d, 0xb2, 0x34, 0x43, 0x69, 0xde, 0xd4, 0xeb, 0x60, 0x93, 0x04, 0xba, 0x0d, + 0x93, 0xf4, 0xc6, 0xe6, 0x25, 0x44, 0xc7, 0xfa, 0x11, 0x65, 0xf7, 0x2a, 0x6c, 0x54, 0xc2, 0x29, + 0x22, 0xe8, 0x16, 0x8c, 0x47, 0xb1, 0x13, 0xc6, 0x9d, 0x36, 0x27, 0x7a, 0xb6, 0x1f, 0x51, 0xf6, + 0xe0, 0x5a, 0xd7, 0xaa, 0x60, 0x83, 0x00, 0x7a, 0x1d, 0xca, 0x4d, 0x6f, 0x8b, 0x34, 0xf6, 0x1b, + 0x4d, 0x32, 0x3b, 0xce, 0xa8, 0x65, 0x32, 0x95, 0x9b, 0x12, 0x89, 0xcb, 0xb9, 0xea, 0x2f, 0x4e, + 0xaa, 0xa3, 0x3b, 0x70, 0x36, 0x26, 0x61, 0xcb, 0xf3, 0x1d, 0xca, 0x0c, 0xc4, 0xd5, 0x8a, 0x3d, + 0x64, 0x4e, 0xb0, 0xdd, 0x76, 0x51, 0xcc, 0xc6, 0xd9, 0x8d, 0x4c, 0x2c, 0x9c, 0x53, 0x1b, 0xdd, + 0x87, 0xd9, 0x0c, 0x48, 0xd0, 0xf4, 0x1a, 0xfb, 0xb3, 0xa7, 0x19, 0xe5, 0x4f, 0x08, 0xca, 0xb3, + 0x1b, 0x39, 0x78, 0x87, 0x3d, 0x60, 0x38, 0x97, 0x3a, 0xba, 0x05, 0x53, 0x8c, 0x03, 0xd5, 0x3a, + 0xcd, 0xa6, 0x68, 0x70, 0x92, 0x35, 0xf8, 0x21, 0x79, 0x1e, 0x57, 0x4d, 0xf0, 0xe1, 0xc1, 0x3c, + 0x24, 0xff, 0x70, 0xba, 0x36, 0xda, 0x64, 0x6f, 0x66, 0x9d, 0xd0, 0x8b, 0xf7, 0x29, 0xdf, 0x20, + 0xf7, 0xe3, 0xd9, 0xa9, 0x9e, 0xfa, 0x0a, 0x1d, 0x55, 0x3d, 0xac, 0xe9, 0x85, 0x38, 0x4d, 0x90, + 0xb2, 0xd4, 0x28, 0x76, 0x3d, 0x7f, 0x76, 0x9a, 0xdf, 0x4b, 0x24, 0x47, 0xaa, 0xd3, 0x42, 0xcc, + 0x61, 0xec, 0xbd, 0x8c, 0xfe, 0xb8, 0x45, 0x4f, 0xae, 0x19, 0x86, 0x98, 0xbc, 0x97, 0x49, 0x00, + 0x4e, 0x70, 0xa8, 0x30, 0x19, 0xc7, 0xfb, 0xb3, 0x88, 0xa1, 0x2a, 0xc6, 0xb2, 0xb1, 0xf1, 0x69, + 0x4c, 0xcb, 0xed, 0x4d, 0x98, 0x54, 0x8c, 0x90, 0x8d, 0x09, 0x9a, 0x87, 0x61, 0x26, 0x3e, 0x09, + 0xed, 0x5a, 0x99, 0x76, 0x81, 0x89, 0x56, 0x98, 0x97, 0xb3, 0x2e, 0x78, 0xef, 0x90, 0xa5, 0xfd, + 0x98, 0xf0, 0x3b, 0x7d, 0x51, 0xeb, 0x82, 0x04, 0xe0, 0x04, 0xc7, 0xfe, 0xdf, 0x5c, 0x0c, 0x4d, + 0xb8, 0xed, 0x00, 0xe7, 0xcb, 0xb3, 0x50, 0xda, 0x09, 0xa2, 0x98, 0x62, 0xb3, 0x36, 0x86, 0x13, + 0xc1, 0xf3, 0xba, 0x28, 0xc7, 0x0a, 0x03, 0xbd, 0x0a, 0x13, 0x0d, 0xbd, 0x01, 0x71, 0x38, 0x2a, + 0x36, 0x62, 0xb4, 0x8e, 0x4d, 0x5c, 0xf4, 0x0a, 0x94, 0x98, 0x0d, 0x48, 0x23, 0x68, 0x0a, 0xa9, + 0x4d, 0x9e, 0xf0, 0xa5, 0x9a, 0x28, 0x3f, 0xd4, 0x7e, 0x63, 0x85, 0x8d, 0x2e, 0xc3, 0x08, 0xed, + 0x42, 0xb5, 0x26, 0x8e, 0x25, 0xa5, 0x28, 0xba, 0xce, 0x4a, 0xb1, 0x80, 0xda, 0x7f, 0xb5, 0xa0, + 0x8d, 0x32, 0xbd, 0x0f, 0x13, 0x54, 0x83, 0xd1, 0x7b, 0x8e, 0x17, 0x7b, 0xfe, 0xb6, 0x90, 0x3f, + 0x9e, 0xee, 0x79, 0x46, 0xb1, 0x4a, 0x77, 0x79, 0x05, 0x7e, 0x8a, 0x8a, 0x3f, 0x58, 0x92, 0xa1, + 0x14, 0xc3, 0x8e, 0xef, 0x53, 0x8a, 0x85, 0x41, 0x29, 0x62, 0x5e, 0x81, 0x53, 0x14, 0x7f, 0xb0, + 0x24, 0x83, 0xde, 0x04, 0x90, 0x3b, 0x8c, 0xb8, 0xc2, 0xf6, 0xe2, 0xd9, 0xfe, 0x44, 0x37, 0x54, + 0x9d, 0xa5, 0x49, 0x7a, 0x46, 0x27, 0xff, 0xb1, 0x46, 0xcf, 0x8e, 0x99, 0x9c, 0xd6, 0xdd, 0x19, + 0xf4, 0xad, 0x74, 0x89, 0x3b, 0x61, 0x4c, 0xdc, 0xc5, 0x58, 0x0c, 0xce, 0x87, 0x07, 0xbb, 0xa4, + 0x6c, 0x78, 0x2d, 0xa2, 0x6f, 0x07, 0x41, 0x04, 0x27, 0xf4, 0xec, 0x5f, 0x28, 0xc2, 0x6c, 0x5e, + 0x77, 0xe9, 0xa2, 0x23, 0xf7, 0xbd, 0x78, 0x99, 0x8a, 0x57, 0x96, 0xb9, 0xe8, 0x56, 0x44, 0x39, + 0x56, 0x18, 0x74, 0xf6, 0x23, 0x6f, 0x5b, 0xde, 0x31, 0x87, 0x93, 0xd9, 0xaf, 0xb3, 0x52, 0x2c, + 0xa0, 0x14, 0x2f, 0x24, 0x4e, 0x24, 0x8c, 0x7b, 0xb4, 0x55, 0x82, 0x59, 0x29, 0x16, 0x50, 0x5d, + 0xdb, 0x35, 0xd4, 0x47, 0xdb, 0x65, 0x0c, 0xd1, 0xf0, 0xf1, 0x0e, 0x11, 0xfa, 0x1c, 0xc0, 0x96, + 0xe7, 0x7b, 0xd1, 0x0e, 0xa3, 0x3e, 0x72, 0x64, 0xea, 0x4a, 0x38, 0x5b, 0x55, 0x54, 0xb0, 0x46, + 0x11, 0xbd, 0x0c, 0x63, 0x6a, 0x03, 0x56, 0x2b, 0xec, 0xa5, 0x53, 0xb3, 0x1c, 0x49, 0xb8, 0x51, + 0x05, 0xeb, 0x78, 0xf6, 0x5b, 0xe9, 0xf5, 0x22, 0x76, 0x80, 0x36, 0xbe, 0xd6, 0xa0, 0xe3, 0x5b, + 0xe8, 0x3d, 0xbe, 0xf6, 0xd7, 0x8a, 0x30, 0x65, 0x34, 0xd6, 0x89, 0x06, 0xe0, 0x59, 0xd7, 0x28, + 0x03, 0x77, 0x62, 0x22, 0xf6, 0x9f, 0xdd, 0x7f, 0xab, 0xe8, 0x4c, 0x9e, 0xee, 0x00, 0x5e, 0x1f, + 0x7d, 0x0e, 0xca, 0x4d, 0x27, 0x62, 0x9a, 0x33, 0x22, 0xf6, 0xdd, 0x20, 0xc4, 0x92, 0x8b, 0x89, + 0x13, 0xc5, 0xda, 0xa9, 0xc9, 0x69, 0x27, 0x24, 0xe9, 0x49, 0x43, 0xe5, 0x13, 0x69, 0x3d, 0xa6, + 0x3a, 0x41, 0x85, 0x98, 0x7d, 0xcc, 0x61, 0xe8, 0x15, 0x18, 0x0f, 0x09, 0x5b, 0x15, 0xcb, 0x54, + 0x9a, 0x63, 0xcb, 0x6c, 0x38, 0x11, 0xfb, 0xb0, 0x06, 0xc3, 0x06, 0x66, 0x72, 0x37, 0x18, 0xe9, + 0x71, 0x37, 0x78, 0x1a, 0x46, 0xd9, 0x0f, 0xb5, 0x02, 0xd4, 0x6c, 0x54, 0x79, 0x31, 0x96, 0xf0, + 0xf4, 0x82, 0x29, 0x0d, 0xb6, 0x60, 0xe8, 0xed, 0x43, 0x2c, 0x6a, 0xf6, 0xca, 0x5c, 0xe2, 0x5c, + 0x4e, 0x2c, 0x79, 0x2c, 0x61, 0xf6, 0x87, 0x61, 0xb2, 0xe2, 0x90, 0x56, 0xe0, 0xaf, 0xf8, 0x6e, + 0x3b, 0xf0, 0xfc, 0x18, 0xcd, 0xc2, 0x10, 0x3b, 0x44, 0x38, 0x0b, 0x18, 0xa2, 0x0d, 0xe1, 0x21, + 0x7a, 0x21, 0xb0, 0xb7, 0xe1, 0x4c, 0x25, 0xb8, 0xe7, 0xdf, 0x73, 0x42, 0x77, 0xb1, 0x56, 0xd5, + 0xee, 0xd7, 0xeb, 0xf2, 0x7e, 0xc7, 0x8d, 0xb6, 0x32, 0x59, 0xaf, 0x56, 0x93, 0x8b, 0xb5, 0xab, + 0x5e, 0x93, 0xe4, 0x68, 0x41, 0xfe, 0x7a, 0xc1, 0x68, 0x29, 0xc1, 0x57, 0xaf, 0x5a, 0x56, 0xee, + 0xab, 0xd6, 0x1b, 0x50, 0xda, 0xf2, 0x48, 0xd3, 0xc5, 0x64, 0x4b, 0xac, 0xc4, 0xa7, 0xf2, 0xed, + 0x50, 0x56, 0x29, 0xa6, 0xd4, 0x7a, 0xf1, 0xdb, 0xe1, 0xaa, 0xa8, 0x8c, 0x15, 0x19, 0xb4, 0x0b, + 0xd3, 0xf2, 0xc2, 0x20, 0xa1, 0x62, 0x5d, 0x3e, 0xdd, 0xeb, 0x16, 0x62, 0x12, 0x3f, 0xfd, 0xe0, + 0x60, 0x7e, 0x1a, 0xa7, 0xc8, 0xe0, 0x2e, 0xc2, 0xf4, 0x3a, 0xd8, 0xa2, 0x1c, 0x78, 0x88, 0x0d, + 0x3f, 0xbb, 0x0e, 0xb2, 0x9b, 0x2d, 0x2b, 0xb5, 0x7f, 0xd4, 0x82, 0xc7, 0xba, 0x46, 0x46, 0xdc, + 0xf0, 0x8f, 0x79, 0x16, 0xd2, 0x37, 0xee, 0x42, 0xff, 0x1b, 0xb7, 0xfd, 0xf7, 0x2c, 0x38, 0xbd, + 0xd2, 0x6a, 0xc7, 0xfb, 0x15, 0xcf, 0x7c, 0x82, 0xfa, 0x18, 0x8c, 0xb4, 0x88, 0xeb, 0x75, 0x5a, + 0x62, 0xe6, 0xe6, 0x25, 0x97, 0x5a, 0x63, 0xa5, 0x87, 0x07, 0xf3, 0x13, 0xf5, 0x38, 0x08, 0x9d, + 0x6d, 0xc2, 0x0b, 0xb0, 0x40, 0x67, 0xbc, 0xde, 0x7b, 0x87, 0xdc, 0xf4, 0x5a, 0x9e, 0xb4, 0x2b, + 0xea, 0xa9, 0xb3, 0x5b, 0x90, 0x03, 0xba, 0xf0, 0x46, 0xc7, 0xf1, 0x63, 0x2f, 0xde, 0x17, 0xaf, + 0x47, 0x92, 0x08, 0x4e, 0xe8, 0xd9, 0x5f, 0xb5, 0x60, 0x4a, 0xae, 0xfb, 0x45, 0xd7, 0x0d, 0x49, + 0x14, 0xa1, 0x39, 0x28, 0x78, 0x6d, 0xd1, 0x4b, 0x10, 0xbd, 0x2c, 0x54, 0x6b, 0xb8, 0xe0, 0xb5, + 0xa5, 0x58, 0xc6, 0x18, 0x61, 0xd1, 0x7c, 0x48, 0xbb, 0x2e, 0xca, 0xb1, 0xc2, 0x40, 0x57, 0xa0, + 0xe4, 0x07, 0x2e, 0xb7, 0xed, 0xe2, 0x47, 0x1a, 0x5b, 0x60, 0xeb, 0xa2, 0x0c, 0x2b, 0x28, 0xaa, + 0x41, 0x99, 0x9b, 0x3d, 0x25, 0x8b, 0x76, 0x20, 0xe3, 0x29, 0xf6, 0x65, 0x1b, 0xb2, 0x26, 0x4e, + 0x88, 0xd8, 0xbf, 0x62, 0xc1, 0xb8, 0xfc, 0xb2, 0x01, 0x65, 0x4e, 0xba, 0xb5, 0x12, 0x79, 0x33, + 0xd9, 0x5a, 0x54, 0x66, 0x64, 0x10, 0x43, 0x54, 0x2c, 0x1e, 0x49, 0x54, 0x7c, 0x1e, 0xc6, 0x9c, + 0x76, 0xbb, 0x66, 0xca, 0x99, 0x6c, 0x29, 0x2d, 0x26, 0xc5, 0x58, 0xc7, 0xb1, 0x7f, 0xa4, 0x00, + 0x93, 0xf2, 0x0b, 0xea, 0x9d, 0xcd, 0x88, 0xc4, 0x68, 0x03, 0xca, 0x0e, 0x9f, 0x25, 0x22, 0x17, + 0xf9, 0x93, 0xd9, 0x7a, 0x04, 0x63, 0x4a, 0x93, 0x03, 0x7f, 0x51, 0xd6, 0xc6, 0x09, 0x21, 0xd4, + 0x84, 0x19, 0x3f, 0x88, 0x19, 0xf3, 0x57, 0xf0, 0x5e, 0x4f, 0x3b, 0x69, 0xea, 0xe7, 0x04, 0xf5, + 0x99, 0xf5, 0x34, 0x15, 0xdc, 0x4d, 0x18, 0xad, 0x48, 0xdd, 0x4c, 0x31, 0x5f, 0x19, 0xa0, 0x4f, + 0x5c, 0xb6, 0x6a, 0xc6, 0xfe, 0x65, 0x0b, 0xca, 0x12, 0xed, 0x24, 0x5e, 0xf1, 0xd6, 0x60, 0x34, + 0x62, 0x93, 0x20, 0x87, 0xc6, 0xee, 0xd5, 0x71, 0x3e, 0x5f, 0xc9, 0x99, 0xc6, 0xff, 0x47, 0x58, + 0xd2, 0x60, 0xaa, 0x79, 0xd5, 0xfd, 0xf7, 0x88, 0x6a, 0x5e, 0xf5, 0x27, 0xe7, 0x50, 0xfa, 0x43, + 0xd6, 0x67, 0x4d, 0xd7, 0x45, 0x45, 0xaf, 0x76, 0x48, 0xb6, 0xbc, 0xfb, 0x69, 0xd1, 0xab, 0xc6, + 0x4a, 0xb1, 0x80, 0xa2, 0x37, 0x61, 0xbc, 0x21, 0x75, 0xb2, 0xc9, 0x0e, 0xbf, 0xdc, 0xf3, 0x7d, + 0x40, 0x3d, 0x25, 0x71, 0x5d, 0xc8, 0xb2, 0x56, 0x1f, 0x1b, 0xd4, 0x4c, 0x33, 0x82, 0x62, 0x3f, + 0x33, 0x82, 0x84, 0x6e, 0xfe, 0xa3, 0xfa, 0x8f, 0x59, 0x30, 0xc2, 0x75, 0x71, 0x83, 0xa9, 0x42, + 0xb5, 0x97, 0xb5, 0x64, 0xec, 0xee, 0xd0, 0x42, 0xf1, 0x52, 0x86, 0xd6, 0xa0, 0xcc, 0x7e, 0x30, + 0x5d, 0x62, 0x31, 0xdf, 0xea, 0x9e, 0xb7, 0xaa, 0x77, 0xf0, 0x8e, 0xac, 0x86, 0x13, 0x0a, 0xf6, + 0x0f, 0x15, 0x29, 0x77, 0x4b, 0x50, 0x8d, 0x43, 0xdf, 0x7a, 0x74, 0x87, 0x7e, 0xe1, 0x51, 0x1d, + 0xfa, 0xdb, 0x30, 0xd5, 0xd0, 0xde, 0xe1, 0x92, 0x99, 0xbc, 0xd2, 0x73, 0x91, 0x68, 0x4f, 0x76, + 0x5c, 0xcb, 0xb2, 0x6c, 0x12, 0xc1, 0x69, 0xaa, 0xe8, 0x5b, 0x61, 0x9c, 0xcf, 0xb3, 0x68, 0x85, + 0x5b, 0x62, 0x7c, 0x28, 0x7f, 0xbd, 0xe8, 0x4d, 0x70, 0xad, 0x9c, 0x56, 0x1d, 0x1b, 0xc4, 0xec, + 0x3f, 0xb1, 0x00, 0xad, 0xb4, 0x77, 0x48, 0x8b, 0x84, 0x4e, 0x33, 0x51, 0xa7, 0xff, 0x7f, 0x16, + 0xcc, 0x92, 0xae, 0xe2, 0xe5, 0xa0, 0xd5, 0x12, 0x97, 0x96, 0x9c, 0x7b, 0xf5, 0x4a, 0x4e, 0x1d, + 0xe5, 0x96, 0x30, 0x9b, 0x87, 0x81, 0x73, 0xdb, 0x43, 0x6b, 0x70, 0x8a, 0x9f, 0x92, 0x0a, 0xa0, + 0xd9, 0x5e, 0x3f, 0x2e, 0x08, 0x9f, 0xda, 0xe8, 0x46, 0xc1, 0x59, 0xf5, 0xec, 0xef, 0x1a, 0x87, + 0xdc, 0x5e, 0xbc, 0xff, 0x8e, 0xf0, 0xfe, 0x3b, 0xc2, 0xfb, 0xef, 0x08, 0xef, 0xbf, 0x23, 0xbc, + 0xff, 0x8e, 0xf0, 0x0d, 0xff, 0x8e, 0xf0, 0x47, 0x16, 0x9c, 0xea, 0x3e, 0x06, 0x4e, 0x42, 0x30, + 0xef, 0xc0, 0xa9, 0xee, 0xb3, 0xae, 0xa7, 0x9d, 0x5d, 0x77, 0x3f, 0x93, 0x73, 0x2f, 0xe3, 0x1b, + 0x70, 0x16, 0x7d, 0xfb, 0x17, 0x4a, 0x30, 0xbc, 0xb2, 0x47, 0xfc, 0xf8, 0x04, 0x3e, 0xb1, 0x01, + 0x93, 0x9e, 0xbf, 0x17, 0x34, 0xf7, 0x88, 0xcb, 0xe1, 0x47, 0xb9, 0x22, 0x9f, 0x15, 0xa4, 0x27, + 0xab, 0x06, 0x09, 0x9c, 0x22, 0xf9, 0x28, 0xd4, 0xd4, 0xd7, 0x60, 0x84, 0x9f, 0x0e, 0x42, 0x47, + 0x9d, 0x79, 0x18, 0xb0, 0x41, 0x14, 0x67, 0x5e, 0xa2, 0x42, 0xe7, 0xa7, 0x8f, 0xa8, 0x8e, 0xde, + 0x82, 0xc9, 0x2d, 0x2f, 0x8c, 0xe2, 0x0d, 0xaf, 0x45, 0xa2, 0xd8, 0x69, 0xb5, 0x1f, 0x42, 0x2d, + 0xad, 0xc6, 0x61, 0xd5, 0xa0, 0x84, 0x53, 0x94, 0xd1, 0x36, 0x4c, 0x34, 0x1d, 0xbd, 0xa9, 0xd1, + 0x23, 0x37, 0xa5, 0x8e, 0x9d, 0x9b, 0x3a, 0x21, 0x6c, 0xd2, 0xa5, 0xfb, 0xb4, 0xc1, 0x34, 0xab, + 0x25, 0xa6, 0x6f, 0x50, 0xfb, 0x94, 0xab, 0x54, 0x39, 0x8c, 0x4a, 0x50, 0xcc, 0xf2, 0xb6, 0x6c, + 0x4a, 0x50, 0x9a, 0x7d, 0xed, 0xe7, 0xa1, 0x4c, 0xe8, 0x10, 0x52, 0xc2, 0xe2, 0xe4, 0xba, 0x3a, + 0x58, 0x5f, 0xd7, 0xbc, 0x46, 0x18, 0x98, 0x0f, 0x02, 0x2b, 0x92, 0x12, 0x4e, 0x88, 0xa2, 0x65, + 0x18, 0x89, 0x48, 0xe8, 0x91, 0x48, 0x9c, 0x61, 0x3d, 0xa6, 0x91, 0xa1, 0x71, 0xa7, 0x15, 0xfe, + 0x1b, 0x8b, 0xaa, 0x74, 0x79, 0x39, 0x4c, 0x57, 0xca, 0x4e, 0x19, 0x6d, 0x79, 0x2d, 0xb2, 0x52, + 0x2c, 0xa0, 0xe8, 0x75, 0x18, 0x0d, 0x49, 0x93, 0xbd, 0x38, 0x4d, 0x0c, 0xbe, 0xc8, 0xf9, 0x03, + 0x16, 0xaf, 0x87, 0x25, 0x01, 0x74, 0x03, 0x50, 0x48, 0xa8, 0x04, 0xe6, 0xf9, 0xdb, 0xca, 0x1e, + 0x55, 0x70, 0x70, 0xb5, 0xe3, 0x71, 0x82, 0x21, 0xfd, 0x87, 0x70, 0x46, 0x35, 0x74, 0x0d, 0x66, + 0x54, 0x69, 0xd5, 0x8f, 0x62, 0x87, 0x72, 0xce, 0x29, 0x46, 0x4b, 0x29, 0x40, 0x70, 0x1a, 0x01, + 0x77, 0xd7, 0xb1, 0xbf, 0x6c, 0x01, 0x1f, 0xe7, 0x13, 0xb8, 0xf6, 0xbf, 0x66, 0x5e, 0xfb, 0xcf, + 0xe5, 0xce, 0x5c, 0xce, 0x95, 0xff, 0xcb, 0x16, 0x8c, 0x69, 0x33, 0x9b, 0xac, 0x59, 0xab, 0xc7, + 0x9a, 0xed, 0xc0, 0x34, 0x5d, 0xe9, 0xb7, 0x36, 0x23, 0x12, 0xee, 0x11, 0x97, 0x2d, 0xcc, 0xc2, + 0xc3, 0x2d, 0x4c, 0x65, 0xfb, 0x76, 0x33, 0x45, 0x10, 0x77, 0x35, 0x61, 0x7f, 0x5e, 0x76, 0x55, + 0x99, 0x0a, 0x36, 0xd4, 0x9c, 0xa7, 0x4c, 0x05, 0xd5, 0xac, 0xe2, 0x04, 0x87, 0x6e, 0xb5, 0x9d, + 0x20, 0x8a, 0xd3, 0xa6, 0x82, 0xd7, 0x83, 0x28, 0xc6, 0x0c, 0x62, 0xbf, 0x08, 0xb0, 0x72, 0x9f, + 0x34, 0xf8, 0x8a, 0xd5, 0x6f, 0x25, 0x56, 0xfe, 0xad, 0xc4, 0xfe, 0x6d, 0x0b, 0x26, 0x57, 0x97, + 0x0d, 0x5d, 0xf0, 0x02, 0x00, 0xbf, 0x4a, 0xdd, 0xbd, 0xbb, 0x2e, 0xdf, 0xd9, 0xf9, 0x53, 0xa9, + 0x2a, 0xc5, 0x1a, 0x06, 0x3a, 0x07, 0xc5, 0x66, 0xc7, 0x17, 0x7a, 0xc9, 0x51, 0x7a, 0xee, 0xde, + 0xec, 0xf8, 0x98, 0x96, 0x69, 0xbe, 0x0a, 0xc5, 0x81, 0x7d, 0x15, 0xfa, 0xc6, 0x0c, 0x40, 0xf3, + 0x30, 0x7c, 0xef, 0x9e, 0xe7, 0x72, 0xcf, 0x4c, 0x61, 0x03, 0x70, 0xf7, 0x6e, 0xb5, 0x12, 0x61, + 0x5e, 0x6e, 0x7f, 0xa9, 0x08, 0x73, 0xab, 0x4d, 0x72, 0xff, 0x5d, 0x7a, 0xa7, 0x0e, 0xea, 0x69, + 0x71, 0x34, 0x0d, 0xcf, 0x51, 0xbd, 0x69, 0xfa, 0x8f, 0xc7, 0x16, 0x8c, 0x72, 0x4b, 0x39, 0xe9, + 0xab, 0xfa, 0x6a, 0x56, 0xeb, 0xf9, 0x03, 0xb2, 0xc0, 0x2d, 0xee, 0x84, 0xab, 0x9d, 0x3a, 0x30, + 0x45, 0x29, 0x96, 0xc4, 0xe7, 0x3e, 0x0e, 0xe3, 0x3a, 0xe6, 0x91, 0xfc, 0xda, 0xfe, 0xdf, 0x22, + 0x4c, 0xd3, 0x1e, 0x3c, 0xd2, 0x89, 0xb8, 0xdd, 0x3d, 0x11, 0xc7, 0xed, 0xdb, 0xd4, 0x7f, 0x36, + 0xde, 0x4c, 0xcf, 0xc6, 0xf3, 0x79, 0xb3, 0x71, 0xd2, 0x73, 0xf0, 0x9d, 0x16, 0x9c, 0x5a, 0x6d, + 0x06, 0x8d, 0xdd, 0x94, 0xff, 0xd1, 0xcb, 0x30, 0x46, 0xd9, 0x71, 0x64, 0xb8, 0xc6, 0x1b, 0xc1, + 0x12, 0x04, 0x08, 0xeb, 0x78, 0x5a, 0xb5, 0xdb, 0xb7, 0xab, 0x95, 0xac, 0x18, 0x0b, 0x02, 0x84, + 0x75, 0x3c, 0xfb, 0x37, 0x2d, 0xb8, 0x70, 0x6d, 0x79, 0x25, 0x59, 0x8a, 0x5d, 0x61, 0x1e, 0x2e, + 0xc3, 0x48, 0xdb, 0xd5, 0xba, 0x92, 0xe8, 0x6d, 0x2b, 0xac, 0x17, 0x02, 0xfa, 0x5e, 0x09, 0x61, + 0xf2, 0x53, 0x16, 0x9c, 0xba, 0xe6, 0xc5, 0xf4, 0x74, 0x4d, 0x07, 0x1c, 0xa0, 0xc7, 0x6b, 0xe4, + 0xc5, 0x41, 0xb8, 0x9f, 0x0e, 0x38, 0x80, 0x15, 0x04, 0x6b, 0x58, 0xbc, 0xe5, 0x3d, 0x8f, 0xd9, + 0x68, 0x17, 0xcc, 0x17, 0x2c, 0x2c, 0xca, 0xb1, 0xc2, 0xa0, 0x1f, 0xe6, 0x7a, 0x21, 0x53, 0xfe, + 0xed, 0x0b, 0x0e, 0xab, 0x3e, 0xac, 0x22, 0x01, 0x38, 0xc1, 0xa1, 0xf7, 0xa0, 0xf9, 0x6b, 0xcd, + 0x4e, 0x14, 0x93, 0x70, 0x2b, 0xca, 0xe1, 0x8e, 0x2f, 0x42, 0x99, 0x48, 0x55, 0xbb, 0xe8, 0xb5, + 0x92, 0x18, 0x95, 0x0e, 0x9e, 0xc7, 0x3d, 0x50, 0x78, 0x03, 0x78, 0x33, 0x1e, 0xcd, 0x1d, 0x6d, + 0x15, 0x10, 0xd1, 0xdb, 0xd2, 0x03, 0x41, 0x30, 0x8f, 0xf2, 0x95, 0x2e, 0x28, 0xce, 0xa8, 0x61, + 0xff, 0xa8, 0x05, 0x67, 0xd4, 0x07, 0xbf, 0xe7, 0x3e, 0xd3, 0xfe, 0xd9, 0x02, 0x4c, 0x5c, 0xdf, + 0xd8, 0xa8, 0x5d, 0x23, 0xb1, 0x38, 0xb6, 0xfb, 0x3f, 0xa0, 0x63, 0xed, 0x1d, 0xb0, 0xd7, 0x65, + 0xae, 0x13, 0x7b, 0xcd, 0x05, 0x1e, 0x4f, 0x68, 0xa1, 0xea, 0xc7, 0xb7, 0xc2, 0x7a, 0x1c, 0x7a, + 0xfe, 0x76, 0xe6, 0xcb, 0xa1, 0x14, 0x2e, 0x8a, 0x79, 0xc2, 0x05, 0x7a, 0x11, 0x46, 0x58, 0x40, + 0x23, 0x39, 0x09, 0x8f, 0xab, 0xbb, 0x10, 0x2b, 0x3d, 0x3c, 0x98, 0x2f, 0xdf, 0xc6, 0x55, 0xfe, + 0x07, 0x0b, 0x54, 0x74, 0x1b, 0xc6, 0x76, 0xe2, 0xb8, 0x7d, 0x9d, 0x38, 0x2e, 0xbd, 0xf4, 0x72, + 0x76, 0x78, 0x31, 0x8b, 0x1d, 0xd2, 0x41, 0xe0, 0x68, 0x09, 0x07, 0x49, 0xca, 0x22, 0xac, 0xd3, + 0xb1, 0xeb, 0x00, 0x09, 0xec, 0x98, 0x9e, 0x40, 0xec, 0x3f, 0xb0, 0x60, 0x94, 0xc7, 0x96, 0x08, + 0xd1, 0x27, 0x60, 0x88, 0xdc, 0x27, 0x0d, 0x21, 0xf1, 0x66, 0x76, 0x38, 0x91, 0xb4, 0xb8, 0x2a, + 0x97, 0xfe, 0xc7, 0xac, 0x16, 0xba, 0x0e, 0xa3, 0xb4, 0xb7, 0xd7, 0x54, 0xa0, 0x8d, 0x27, 0xf2, + 0xbe, 0x58, 0x4d, 0x3b, 0x17, 0xce, 0x44, 0x11, 0x96, 0xd5, 0xd9, 0xbb, 0x73, 0xa3, 0x5d, 0xa7, + 0x1c, 0x3b, 0xee, 0x25, 0x58, 0x6c, 0x2c, 0xd7, 0x38, 0x92, 0xa0, 0xc6, 0xdf, 0x9d, 0x65, 0x21, + 0x4e, 0x88, 0xd8, 0x1b, 0x50, 0xa6, 0x93, 0xba, 0xd8, 0xf4, 0x9c, 0xde, 0x4f, 0xe9, 0xcf, 0x40, + 0x59, 0x3e, 0x94, 0x47, 0xc2, 0xa7, 0x9c, 0x51, 0x95, 0xef, 0xe8, 0x11, 0x4e, 0xe0, 0xf6, 0x16, + 0x9c, 0x66, 0x66, 0x8f, 0x4e, 0xbc, 0x63, 0xec, 0xb1, 0xfe, 0x8b, 0xf9, 0x59, 0x71, 0x81, 0xe4, + 0x33, 0x33, 0xab, 0xb9, 0x6d, 0x8e, 0x4b, 0x8a, 0xc9, 0x65, 0xd2, 0xfe, 0xda, 0x10, 0x3c, 0x5e, + 0xad, 0xe7, 0x87, 0x1d, 0x79, 0x05, 0xc6, 0xb9, 0x5c, 0x4a, 0x97, 0xb6, 0xd3, 0x14, 0xed, 0x2a, + 0x1d, 0xee, 0x86, 0x06, 0xc3, 0x06, 0x26, 0xba, 0x00, 0x45, 0xef, 0x6d, 0x3f, 0xed, 0xd4, 0x54, + 0x7d, 0x63, 0x1d, 0xd3, 0x72, 0x0a, 0xa6, 0x22, 0x2e, 0x3f, 0x3b, 0x14, 0x58, 0x89, 0xb9, 0xaf, + 0xc1, 0xa4, 0x17, 0x35, 0x22, 0xaf, 0xea, 0x53, 0x3e, 0xa3, 0x71, 0x2a, 0xa5, 0xdc, 0xa0, 0x9d, + 0x56, 0x50, 0x9c, 0xc2, 0xd6, 0x0e, 0xb2, 0xe1, 0x81, 0xc5, 0xe4, 0xbe, 0x4e, 0xd6, 0xf4, 0x06, + 0xd0, 0x66, 0x5f, 0x17, 0x31, 0x65, 0xbc, 0xb8, 0x01, 0xf0, 0x0f, 0x8e, 0xb0, 0x84, 0xd1, 0x9b, + 0x63, 0x63, 0xc7, 0x69, 0x2f, 0x76, 0xe2, 0x9d, 0x8a, 0x17, 0x35, 0x82, 0x3d, 0x12, 0xee, 0xb3, + 0x4b, 0x7f, 0x29, 0xb9, 0x39, 0x2a, 0xc0, 0xf2, 0xf5, 0xc5, 0x1a, 0xc5, 0xc4, 0xdd, 0x75, 0xd0, + 0x22, 0x4c, 0xc9, 0xc2, 0x3a, 0x89, 0xd8, 0x11, 0x36, 0xc6, 0xc8, 0x28, 0x37, 0x23, 0x51, 0xac, + 0x88, 0xa4, 0xf1, 0x4d, 0x49, 0x1a, 0x8e, 0x43, 0x92, 0xfe, 0x18, 0x4c, 0x78, 0xbe, 0x17, 0x7b, + 0x4e, 0x1c, 0xf0, 0x97, 0x24, 0x7e, 0xbf, 0x67, 0x2a, 0xf2, 0xaa, 0x0e, 0xc0, 0x26, 0x9e, 0xfd, + 0x5f, 0x86, 0x60, 0x86, 0x4d, 0xdb, 0xfb, 0x2b, 0xec, 0x1b, 0x69, 0x85, 0xdd, 0xee, 0x5e, 0x61, + 0xc7, 0x71, 0x45, 0x78, 0xe8, 0x65, 0xf6, 0x16, 0x94, 0x95, 0x67, 0x95, 0x74, 0xad, 0xb4, 0x72, + 0x5c, 0x2b, 0xfb, 0x4b, 0x1f, 0xd2, 0x38, 0xad, 0x98, 0x69, 0x9c, 0xf6, 0x37, 0x2d, 0x48, 0x9e, + 0x46, 0xd0, 0x75, 0x28, 0xb7, 0x03, 0x66, 0x73, 0x19, 0x4a, 0x43, 0xe6, 0xc7, 0x33, 0x0f, 0x2a, + 0x7e, 0x28, 0xf2, 0x8f, 0xaf, 0xc9, 0x1a, 0x38, 0xa9, 0x8c, 0x96, 0x60, 0xb4, 0x1d, 0x92, 0x7a, + 0xcc, 0xa2, 0x8f, 0xf4, 0xa5, 0xc3, 0xd7, 0x08, 0xc7, 0xc7, 0xb2, 0xa2, 0xfd, 0x73, 0x16, 0x00, + 0xb7, 0xff, 0x72, 0xfc, 0x6d, 0x72, 0x02, 0x5a, 0xeb, 0x0a, 0x0c, 0x45, 0x6d, 0xd2, 0xe8, 0x65, + 0x0d, 0x9b, 0xf4, 0xa7, 0xde, 0x26, 0x8d, 0x64, 0xc0, 0xe9, 0x3f, 0xcc, 0x6a, 0xdb, 0xdf, 0x0d, + 0x30, 0x99, 0xa0, 0x55, 0x63, 0xd2, 0x42, 0xcf, 0x19, 0xd1, 0x08, 0xce, 0xa5, 0xa2, 0x11, 0x94, + 0x19, 0xb6, 0xa6, 0x20, 0x7d, 0x0b, 0x8a, 0x2d, 0xe7, 0xbe, 0xd0, 0x80, 0x3d, 0xd3, 0xbb, 0x1b, + 0x94, 0xfe, 0xc2, 0x9a, 0x73, 0x9f, 0x5f, 0x12, 0x9f, 0x91, 0x0b, 0x64, 0xcd, 0xb9, 0x7f, 0xc8, + 0x6d, 0x5e, 0x19, 0x93, 0xba, 0xe9, 0x45, 0xf1, 0x17, 0xfe, 0x73, 0xf2, 0x9f, 0x2d, 0x3b, 0xda, + 0x08, 0x6b, 0xcb, 0xf3, 0x85, 0x69, 0xd3, 0x40, 0x6d, 0x79, 0x7e, 0xba, 0x2d, 0xcf, 0x1f, 0xa0, + 0x2d, 0xcf, 0x47, 0xef, 0xc0, 0xa8, 0xb0, 0x3c, 0x14, 0xd1, 0x7f, 0xae, 0x0e, 0xd0, 0x9e, 0x30, + 0x5c, 0xe4, 0x6d, 0x5e, 0x95, 0x97, 0x60, 0x51, 0xda, 0xb7, 0x5d, 0xd9, 0x20, 0xfa, 0x6b, 0x16, + 0x4c, 0x8a, 0xdf, 0x98, 0xbc, 0xdd, 0x21, 0x51, 0x2c, 0x64, 0xcf, 0x8f, 0x0e, 0xde, 0x07, 0x51, + 0x91, 0x77, 0xe5, 0xa3, 0x92, 0xcd, 0x9a, 0xc0, 0xbe, 0x3d, 0x4a, 0xf5, 0x02, 0xfd, 0x03, 0x0b, + 0x4e, 0xb7, 0x9c, 0xfb, 0xbc, 0x45, 0x5e, 0x86, 0x9d, 0xd8, 0x0b, 0xc4, 0x0b, 0xfe, 0x27, 0x06, + 0x9b, 0xfe, 0xae, 0xea, 0xbc, 0x93, 0xf2, 0x99, 0xf1, 0x74, 0x16, 0x4a, 0xdf, 0xae, 0x66, 0xf6, + 0x6b, 0x6e, 0x0b, 0x4a, 0x72, 0xbd, 0x65, 0xa8, 0x1a, 0x2a, 0xba, 0x60, 0x7d, 0x64, 0xc3, 0x4f, + 0xdd, 0xcb, 0x9f, 0xb6, 0x23, 0xd6, 0xda, 0x23, 0x6d, 0xe7, 0x2d, 0x18, 0xd7, 0xd7, 0xd8, 0x23, + 0x6d, 0xeb, 0x6d, 0x38, 0x95, 0xb1, 0x96, 0x1e, 0x69, 0x93, 0xf7, 0xe0, 0x5c, 0xee, 0xfa, 0x78, + 0x94, 0x0d, 0xdb, 0x3f, 0x6b, 0xe9, 0x7c, 0xf0, 0x04, 0x9e, 0x0e, 0x96, 0xcd, 0xa7, 0x83, 0x8b, + 0xbd, 0x77, 0x4e, 0xce, 0xfb, 0xc1, 0x9b, 0x7a, 0xa7, 0x29, 0x57, 0x47, 0xaf, 0xc3, 0x48, 0x93, + 0x96, 0x48, 0xfb, 0x55, 0xbb, 0xff, 0x8e, 0x4c, 0x64, 0x29, 0x56, 0x1e, 0x61, 0x41, 0xc1, 0xfe, + 0x45, 0x0b, 0x86, 0x4e, 0x60, 0x24, 0xb0, 0x39, 0x12, 0xcf, 0xe5, 0x92, 0x16, 0x81, 0x89, 0x17, + 0xb0, 0x73, 0x6f, 0xe5, 0x7e, 0x4c, 0xfc, 0x88, 0x5d, 0x15, 0x33, 0x07, 0xe6, 0xff, 0x82, 0x53, + 0x37, 0x03, 0xc7, 0x5d, 0x72, 0x9a, 0x8e, 0xdf, 0x20, 0x61, 0xd5, 0xdf, 0x3e, 0x92, 0xed, 0x75, + 0xa1, 0x9f, 0xed, 0xb5, 0xbd, 0x03, 0x48, 0x6f, 0x40, 0x38, 0xb1, 0x60, 0x18, 0xf5, 0x78, 0x53, + 0x62, 0xf8, 0x9f, 0xca, 0x16, 0xcd, 0xba, 0x7a, 0xa6, 0xb9, 0x67, 0xf0, 0x02, 0x2c, 0x09, 0xd9, + 0xaf, 0x40, 0xa6, 0x27, 0x7c, 0x7f, 0xb5, 0x81, 0xfd, 0x69, 0x98, 0x61, 0x35, 0x8f, 0x78, 0xa5, + 0xb5, 0x53, 0x5a, 0xc9, 0x8c, 0x18, 0x79, 0xf6, 0x17, 0x2d, 0x98, 0x5a, 0x4f, 0x85, 0x0e, 0xbb, + 0xcc, 0xde, 0x31, 0x33, 0x94, 0xe1, 0x75, 0x56, 0x8a, 0x05, 0xf4, 0xd8, 0x75, 0x50, 0x7f, 0x61, + 0x41, 0x12, 0x9c, 0xe2, 0x04, 0x04, 0xaf, 0x65, 0x43, 0xf0, 0xca, 0xd4, 0x8d, 0xa8, 0xee, 0xe4, + 0xc9, 0x5d, 0xe8, 0x86, 0x0a, 0xdb, 0xd4, 0x43, 0x2d, 0x92, 0x90, 0xe1, 0x41, 0x7e, 0x26, 0xcd, + 0xd8, 0x4e, 0x32, 0x90, 0x93, 0xfd, 0x1f, 0x0b, 0x80, 0x14, 0xee, 0xc0, 0x61, 0xa5, 0xba, 0x6b, + 0x1c, 0x4f, 0x58, 0xa9, 0x3d, 0x40, 0xec, 0x25, 0x3e, 0x74, 0xfc, 0x88, 0x93, 0xf5, 0x84, 0xd6, + 0xed, 0x68, 0xcf, 0xfc, 0x73, 0xa2, 0x49, 0x74, 0xb3, 0x8b, 0x1a, 0xce, 0x68, 0x41, 0xb3, 0xb0, + 0x18, 0x1e, 0xd4, 0xc2, 0x62, 0xa4, 0x8f, 0xa3, 0xda, 0xcf, 0x58, 0x30, 0xa1, 0x86, 0xe9, 0x3d, + 0x62, 0x46, 0xae, 0xfa, 0x93, 0xc3, 0xfa, 0x6a, 0x5a, 0x97, 0xd9, 0x91, 0xf0, 0xcd, 0xcc, 0xe1, + 0xd0, 0x69, 0x7a, 0xef, 0x10, 0x15, 0xd4, 0x6f, 0x5e, 0x38, 0x10, 0x8a, 0xd2, 0xc3, 0x83, 0xf9, + 0x09, 0xf5, 0x8f, 0x07, 0x11, 0x4e, 0xaa, 0xd8, 0x3f, 0x41, 0x37, 0xbb, 0xb9, 0x14, 0xd1, 0xcb, + 0x30, 0xdc, 0xde, 0x71, 0x22, 0x92, 0x72, 0xb7, 0x19, 0xae, 0xd1, 0xc2, 0xc3, 0x83, 0xf9, 0x49, + 0x55, 0x81, 0x95, 0x60, 0x8e, 0x3d, 0x78, 0xb0, 0xae, 0xee, 0xc5, 0xd9, 0x37, 0x58, 0xd7, 0x9f, + 0x58, 0x30, 0xb4, 0x1e, 0xb8, 0x27, 0xc1, 0x02, 0x5e, 0x33, 0x58, 0xc0, 0xf9, 0xbc, 0xf8, 0xee, + 0xb9, 0xbb, 0x7f, 0x35, 0xb5, 0xfb, 0x2f, 0xe6, 0x52, 0xe8, 0xbd, 0xf1, 0x5b, 0x30, 0xc6, 0xa2, + 0xc6, 0x0b, 0xd7, 0xa2, 0x17, 0x8d, 0x0d, 0x3f, 0x9f, 0xda, 0xf0, 0x53, 0x1a, 0xaa, 0xb6, 0xd3, + 0x9f, 0x86, 0x51, 0xe1, 0xab, 0x92, 0xf6, 0xdb, 0x14, 0xb8, 0x58, 0xc2, 0xed, 0x1f, 0x2b, 0x82, + 0x11, 0xa5, 0x1e, 0xfd, 0xb2, 0x05, 0x0b, 0x21, 0xb7, 0x61, 0x75, 0x2b, 0x9d, 0xd0, 0xf3, 0xb7, + 0xeb, 0x8d, 0x1d, 0xe2, 0x76, 0x9a, 0x9e, 0xbf, 0x5d, 0xdd, 0xf6, 0x03, 0x55, 0xbc, 0x72, 0x9f, + 0x34, 0x3a, 0xec, 0xf9, 0xaa, 0x4f, 0x48, 0x7c, 0x65, 0x0b, 0xfe, 0xc2, 0x83, 0x83, 0xf9, 0x05, + 0x7c, 0x24, 0xda, 0xf8, 0x88, 0x7d, 0x41, 0xbf, 0x69, 0xc1, 0x55, 0x1e, 0xbc, 0x7d, 0xf0, 0xfe, + 0xf7, 0xb8, 0xe7, 0xd6, 0x24, 0xa9, 0x84, 0xc8, 0x06, 0x09, 0x5b, 0x4b, 0x1f, 0x13, 0x03, 0x7a, + 0xb5, 0x76, 0xb4, 0xb6, 0xf0, 0x51, 0x3b, 0x67, 0xff, 0xf3, 0x22, 0x4c, 0x88, 0xa0, 0x4e, 0xe2, + 0x0c, 0x78, 0xd9, 0x58, 0x12, 0x4f, 0xa4, 0x96, 0xc4, 0x8c, 0x81, 0x7c, 0x3c, 0xec, 0x3f, 0x82, + 0x19, 0xca, 0x9c, 0xaf, 0x13, 0x27, 0x8c, 0x37, 0x89, 0xc3, 0x0d, 0xa7, 0x8a, 0x47, 0xe6, 0xfe, + 0x4a, 0xb1, 0x76, 0x33, 0x4d, 0x0c, 0x77, 0xd3, 0xff, 0x46, 0x3a, 0x73, 0x7c, 0x98, 0xee, 0x8a, + 0xcb, 0xf5, 0x19, 0x28, 0x2b, 0x47, 0x0b, 0xc1, 0x74, 0x7a, 0x87, 0xb7, 0x4b, 0x53, 0xe0, 0xca, + 0xaf, 0xc4, 0xc9, 0x27, 0x21, 0x67, 0xff, 0xc3, 0x82, 0xd1, 0x20, 0x9f, 0xc4, 0x75, 0x28, 0x39, + 0x51, 0xe4, 0x6d, 0xfb, 0xc4, 0x15, 0x3b, 0xf6, 0x83, 0x79, 0x3b, 0xd6, 0x68, 0x86, 0x39, 0xbb, + 0x2c, 0x8a, 0x9a, 0x58, 0xd1, 0x40, 0xd7, 0xb9, 0x79, 0xda, 0x9e, 0xbc, 0xa9, 0x0d, 0x46, 0x0d, + 0xa4, 0x01, 0xdb, 0x1e, 0xc1, 0xa2, 0x3e, 0xfa, 0x2c, 0xb7, 0x1f, 0xbc, 0xe1, 0x07, 0xf7, 0xfc, + 0x6b, 0x41, 0x20, 0x03, 0x27, 0x0c, 0x46, 0x70, 0x46, 0x5a, 0x0d, 0xaa, 0xea, 0xd8, 0xa4, 0x36, + 0x58, 0xa0, 0xcb, 0x6f, 0x83, 0x53, 0x94, 0xb4, 0xe9, 0xd7, 0x1c, 0x21, 0x02, 0x53, 0x22, 0x62, + 0x98, 0x2c, 0x13, 0x63, 0x97, 0x79, 0x09, 0x33, 0x6b, 0x27, 0x1a, 0xe0, 0x1b, 0x26, 0x09, 0x9c, + 0xa6, 0x69, 0xff, 0xa4, 0x05, 0xcc, 0xc7, 0xf3, 0x04, 0xe4, 0x91, 0x4f, 0x9a, 0xf2, 0xc8, 0x6c, + 0xde, 0x20, 0xe7, 0x88, 0x22, 0x2f, 0xf1, 0x95, 0x55, 0x0b, 0x83, 0xfb, 0xfb, 0xc2, 0xe8, 0xa3, + 0xff, 0xfd, 0xc3, 0xfe, 0x5f, 0x16, 0x67, 0x62, 0xca, 0x0d, 0x02, 0x7d, 0x3b, 0x94, 0x1a, 0x4e, + 0xdb, 0x69, 0xf0, 0x94, 0x2a, 0xb9, 0xba, 0x38, 0xa3, 0xd2, 0xc2, 0xb2, 0xa8, 0xc1, 0x75, 0x4b, + 0x32, 0xf2, 0x5c, 0x49, 0x16, 0xf7, 0xd5, 0x27, 0xa9, 0x26, 0xe7, 0x76, 0x61, 0xc2, 0x20, 0xf6, + 0x48, 0x15, 0x11, 0xdf, 0xce, 0x8f, 0x58, 0x15, 0x29, 0xb1, 0x05, 0x33, 0xbe, 0xf6, 0x9f, 0x1e, + 0x28, 0xf2, 0x72, 0xf9, 0xc1, 0x7e, 0x87, 0x28, 0x3b, 0x7d, 0x34, 0xf7, 0xd1, 0x14, 0x19, 0xdc, + 0x4d, 0xd9, 0xfe, 0x71, 0x0b, 0x1e, 0xd3, 0x11, 0x35, 0x0f, 0x95, 0x7e, 0xda, 0xfd, 0x0a, 0x94, + 0x82, 0x36, 0x09, 0x9d, 0x38, 0x08, 0xc5, 0xa9, 0x71, 0x45, 0x0e, 0xfa, 0x2d, 0x51, 0x7e, 0x28, + 0x02, 0x92, 0x4b, 0xea, 0xb2, 0x1c, 0xab, 0x9a, 0xf4, 0xf6, 0xc9, 0x06, 0x23, 0x12, 0xbe, 0x48, + 0x8c, 0x07, 0xb0, 0x87, 0xee, 0x08, 0x0b, 0x88, 0xfd, 0x35, 0x8b, 0x2f, 0x2c, 0xbd, 0xeb, 0xe8, + 0x6d, 0x98, 0x6e, 0x39, 0x71, 0x63, 0x67, 0xe5, 0x7e, 0x3b, 0xe4, 0x6f, 0x25, 0x72, 0x9c, 0x9e, + 0xe9, 0x37, 0x4e, 0xda, 0x47, 0x26, 0x26, 0x91, 0x6b, 0x29, 0x62, 0xb8, 0x8b, 0x3c, 0xda, 0x84, + 0x31, 0x56, 0xc6, 0xdc, 0xec, 0xa2, 0x5e, 0xa2, 0x41, 0x5e, 0x6b, 0xca, 0x56, 0x60, 0x2d, 0xa1, + 0x83, 0x75, 0xa2, 0xf6, 0x4f, 0x17, 0xf9, 0x6e, 0x67, 0xa2, 0xfc, 0xd3, 0x30, 0xda, 0x0e, 0xdc, + 0xe5, 0x6a, 0x05, 0x8b, 0x59, 0x50, 0xc7, 0x48, 0x8d, 0x17, 0x63, 0x09, 0x47, 0x57, 0xa0, 0x24, + 0x7e, 0xca, 0xb7, 0x2d, 0xc6, 0x9b, 0x05, 0x5e, 0x84, 0x15, 0x14, 0xbd, 0x00, 0xd0, 0x0e, 0x83, + 0x3d, 0xcf, 0x65, 0xe1, 0x1f, 0x8a, 0xa6, 0x99, 0x4f, 0x4d, 0x41, 0xb0, 0x86, 0x85, 0x5e, 0x85, + 0x89, 0x8e, 0x1f, 0x71, 0x71, 0x44, 0x0b, 0xf6, 0xaa, 0x0c, 0x50, 0x6e, 0xeb, 0x40, 0x6c, 0xe2, + 0xa2, 0x45, 0x18, 0x89, 0x1d, 0x66, 0xb6, 0x32, 0x9c, 0x6f, 0x36, 0xbb, 0x41, 0x31, 0xf4, 0xec, + 0x1d, 0xb4, 0x02, 0x16, 0x15, 0xd1, 0x67, 0xa4, 0xc7, 0x2b, 0x67, 0xec, 0xc2, 0x5e, 0x7d, 0xb0, + 0x43, 0x40, 0xf3, 0x77, 0x15, 0x76, 0xf0, 0x06, 0x2d, 0xf4, 0x71, 0x00, 0x72, 0x3f, 0x26, 0xa1, + 0xef, 0x34, 0x95, 0x55, 0x98, 0x92, 0x0b, 0x2a, 0xc1, 0x7a, 0x10, 0xdf, 0x8e, 0xc8, 0x8a, 0xc2, + 0xc0, 0x1a, 0xb6, 0xfd, 0x9b, 0x65, 0x80, 0x44, 0x6e, 0x47, 0xef, 0x74, 0x31, 0xae, 0x67, 0x7b, + 0x4b, 0xfa, 0xc7, 0xc7, 0xb5, 0xd0, 0xf7, 0x58, 0x30, 0xe6, 0x34, 0x9b, 0x41, 0xc3, 0xe1, 0xe1, + 0x78, 0x0b, 0xbd, 0x19, 0xa7, 0x68, 0x7f, 0x31, 0xa9, 0xc1, 0xbb, 0xf0, 0xa2, 0x5c, 0xa1, 0x1a, + 0xa4, 0x6f, 0x2f, 0xf4, 0x86, 0xd1, 0x47, 0xe4, 0x55, 0xb1, 0x68, 0x0c, 0xa5, 0xba, 0x2a, 0x96, + 0xd9, 0x19, 0xa1, 0xdf, 0x12, 0x6f, 0x1b, 0xb7, 0xc4, 0xa1, 0x7c, 0x97, 0x3e, 0x43, 0x7c, 0xed, + 0x77, 0x41, 0x44, 0x35, 0xdd, 0xbd, 0x7f, 0x38, 0xdf, 0x7f, 0x4e, 0xbb, 0x27, 0xf5, 0x71, 0xed, + 0x7f, 0x0b, 0xa6, 0x5c, 0x53, 0x08, 0x10, 0x2b, 0xf1, 0xa9, 0x3c, 0xba, 0x29, 0x99, 0x21, 0x39, + 0xf6, 0x53, 0x00, 0x9c, 0x26, 0x8c, 0x6a, 0x3c, 0xda, 0x43, 0xd5, 0xdf, 0x0a, 0x84, 0xcf, 0x84, + 0x9d, 0x3b, 0x97, 0xfb, 0x51, 0x4c, 0x5a, 0x14, 0x33, 0x39, 0xdd, 0xd7, 0x45, 0x5d, 0xac, 0xa8, + 0xa0, 0xd7, 0x61, 0x84, 0x39, 0x50, 0x45, 0xb3, 0xa5, 0x7c, 0x5d, 0xb1, 0x19, 0xbe, 0x2c, 0xd9, + 0x90, 0xec, 0x6f, 0x84, 0x05, 0x05, 0x74, 0x5d, 0xba, 0x27, 0x46, 0x55, 0xff, 0x76, 0x44, 0x98, + 0x7b, 0x62, 0x79, 0xe9, 0x83, 0x89, 0xe7, 0x21, 0x2f, 0xcf, 0xcc, 0xf1, 0x65, 0xd4, 0xa4, 0x52, + 0x94, 0xf8, 0x2f, 0x53, 0x87, 0xcd, 0x42, 0x7e, 0xf7, 0xcc, 0xf4, 0x62, 0xc9, 0x70, 0xde, 0x31, + 0x49, 0xe0, 0x34, 0x4d, 0x2a, 0x91, 0xf2, 0x5d, 0x2f, 0xbc, 0x2e, 0xfa, 0xf1, 0x0e, 0x7e, 0x11, + 0x67, 0xa7, 0x11, 0x2f, 0xc1, 0xa2, 0xfe, 0x89, 0x8a, 0x07, 0x73, 0x3e, 0x4c, 0xa7, 0xb7, 0xe8, + 0x23, 0x15, 0x47, 0xfe, 0x60, 0x08, 0x26, 0xcd, 0x25, 0x85, 0xae, 0x42, 0x59, 0x10, 0x51, 0xe1, + 0xfe, 0xd5, 0x2e, 0x59, 0x93, 0x00, 0x9c, 0xe0, 0xb0, 0x2c, 0x0f, 0xac, 0xba, 0x66, 0x66, 0x9b, + 0x64, 0x79, 0x50, 0x10, 0xac, 0x61, 0xd1, 0x8b, 0xd5, 0x66, 0x10, 0xc4, 0xea, 0x40, 0x52, 0xeb, + 0x6e, 0x89, 0x95, 0x62, 0x01, 0xa5, 0x07, 0xd1, 0x2e, 0x09, 0x7d, 0xd2, 0x34, 0x03, 0x03, 0xab, + 0x83, 0xe8, 0x86, 0x0e, 0xc4, 0x26, 0x2e, 0x3d, 0x4e, 0x83, 0x88, 0x2d, 0x64, 0x71, 0x7d, 0x4b, + 0xcc, 0x96, 0xeb, 0xdc, 0x43, 0x5a, 0xc2, 0xd1, 0xa7, 0xe1, 0x31, 0x15, 0xfc, 0x08, 0xf3, 0x77, + 0x08, 0xd9, 0xe2, 0x88, 0xa1, 0x6d, 0x79, 0x6c, 0x39, 0x1b, 0x0d, 0xe7, 0xd5, 0x47, 0xaf, 0xc1, + 0xa4, 0x10, 0xf1, 0x25, 0xc5, 0x51, 0xd3, 0x34, 0xe6, 0x86, 0x01, 0xc5, 0x29, 0x6c, 0x19, 0xda, + 0x98, 0x49, 0xd9, 0x92, 0x42, 0xa9, 0x3b, 0xb4, 0xb1, 0x0e, 0xc7, 0x5d, 0x35, 0xd0, 0x22, 0x4c, + 0x71, 0x19, 0xcc, 0xf3, 0xb7, 0xf9, 0x9c, 0x08, 0xa7, 0x28, 0xb5, 0xa5, 0x6e, 0x99, 0x60, 0x9c, + 0xc6, 0x47, 0xaf, 0xc0, 0xb8, 0x13, 0x36, 0x76, 0xbc, 0x98, 0x34, 0xe2, 0x4e, 0xc8, 0xbd, 0xa5, + 0x34, 0xdb, 0xa2, 0x45, 0x0d, 0x86, 0x0d, 0x4c, 0xfb, 0x1d, 0x38, 0x95, 0x11, 0x3a, 0x81, 0x2e, + 0x1c, 0xa7, 0xed, 0xc9, 0x6f, 0x4a, 0x19, 0x20, 0x2f, 0xd6, 0xaa, 0xf2, 0x6b, 0x34, 0x2c, 0xba, + 0x3a, 0x59, 0x88, 0x05, 0x2d, 0x53, 0xa0, 0x5a, 0x9d, 0xab, 0x12, 0x80, 0x13, 0x1c, 0xfb, 0xbf, + 0x17, 0x60, 0x2a, 0xe3, 0x6d, 0x85, 0x65, 0xab, 0x4b, 0x5d, 0x52, 0x92, 0xe4, 0x74, 0x66, 0xa4, + 0xec, 0xc2, 0x11, 0x22, 0x65, 0x17, 0xfb, 0x45, 0xca, 0x1e, 0x7a, 0x37, 0x91, 0xb2, 0xcd, 0x11, + 0x1b, 0x1e, 0x68, 0xc4, 0x32, 0xa2, 0x6b, 0x8f, 0x1c, 0x31, 0xba, 0xb6, 0x31, 0xe8, 0xa3, 0x03, + 0x0c, 0xfa, 0x0f, 0x15, 0x60, 0x3a, 0x6d, 0x03, 0x79, 0x02, 0x7a, 0xdb, 0xd7, 0x0d, 0xbd, 0x6d, + 0x76, 0xee, 0xc7, 0xb4, 0x65, 0x66, 0x9e, 0x0e, 0x17, 0xa7, 0x74, 0xb8, 0x1f, 0x1e, 0x88, 0x5a, + 0x6f, 0x7d, 0xee, 0xdf, 0x2e, 0xc0, 0x99, 0x74, 0x95, 0xe5, 0xa6, 0xe3, 0xb5, 0x4e, 0x60, 0x6c, + 0x6e, 0x19, 0x63, 0xf3, 0xdc, 0x20, 0x5f, 0xc3, 0xba, 0x96, 0x3b, 0x40, 0x77, 0x53, 0x03, 0x74, + 0x75, 0x70, 0x92, 0xbd, 0x47, 0xe9, 0xab, 0x45, 0xb8, 0x98, 0x59, 0x2f, 0x51, 0x7b, 0xae, 0x1a, + 0x6a, 0xcf, 0x17, 0x52, 0x6a, 0x4f, 0xbb, 0x77, 0xed, 0xe3, 0xd1, 0x83, 0x0a, 0x47, 0x57, 0x16, + 0x07, 0xe0, 0x21, 0x75, 0xa0, 0x86, 0xa3, 0xab, 0x22, 0x84, 0x4d, 0xba, 0xdf, 0x48, 0xba, 0xcf, + 0x7f, 0x6d, 0xc1, 0xb9, 0xcc, 0xb9, 0x39, 0x01, 0x5d, 0xd7, 0xba, 0xa9, 0xeb, 0x7a, 0x7a, 0xe0, + 0xd5, 0x9a, 0xa3, 0xfc, 0xfa, 0xf5, 0xa1, 0x9c, 0x6f, 0x61, 0x37, 0xf9, 0x5b, 0x30, 0xe6, 0x34, + 0x1a, 0x24, 0x8a, 0xd6, 0x02, 0x57, 0x05, 0x03, 0x7e, 0x8e, 0xdd, 0xb3, 0x92, 0xe2, 0xc3, 0x83, + 0xf9, 0xb9, 0x34, 0x89, 0x04, 0x8c, 0x75, 0x0a, 0xe8, 0xb3, 0x50, 0x8a, 0xc4, 0xb9, 0x29, 0xe6, + 0xfe, 0xc5, 0x01, 0x07, 0xc7, 0xd9, 0x24, 0x4d, 0x33, 0x5a, 0x91, 0xd2, 0x54, 0x28, 0x92, 0x66, + 0x64, 0x93, 0xc2, 0xb1, 0x46, 0x36, 0x79, 0x01, 0x60, 0x4f, 0x5d, 0x06, 0xd2, 0xfa, 0x07, 0xed, + 0x9a, 0xa0, 0x61, 0xa1, 0x6f, 0x81, 0xe9, 0x88, 0x87, 0xf3, 0x5b, 0x6e, 0x3a, 0x11, 0x73, 0x73, + 0x11, 0xab, 0x90, 0x45, 0x44, 0xaa, 0xa7, 0x60, 0xb8, 0x0b, 0x1b, 0xad, 0xca, 0x56, 0x59, 0xec, + 0x41, 0xbe, 0x30, 0x2f, 0x27, 0x2d, 0x8a, 0x5c, 0xb9, 0xa7, 0xd3, 0xc3, 0xcf, 0x06, 0x5e, 0xab, + 0x89, 0x3e, 0x0b, 0x40, 0x97, 0x8f, 0xd0, 0x43, 0x8c, 0xe6, 0x33, 0x4f, 0xca, 0x55, 0xdc, 0x4c, + 0xab, 0x5c, 0xe6, 0x9b, 0x5a, 0x51, 0x44, 0xb0, 0x46, 0xd0, 0xfe, 0xa1, 0x21, 0x78, 0xbc, 0x07, + 0x8f, 0x44, 0x8b, 0xe6, 0x3b, 0xec, 0x33, 0xe9, 0xcb, 0xf5, 0x5c, 0x66, 0x65, 0xe3, 0xb6, 0x9d, + 0x5a, 0x8a, 0x85, 0x77, 0xbd, 0x14, 0xbf, 0xdf, 0xd2, 0xd4, 0x1e, 0xdc, 0x56, 0xf3, 0x93, 0x47, + 0xe4, 0xfd, 0xc7, 0xa8, 0x07, 0xd9, 0xca, 0x50, 0x26, 0xbc, 0x30, 0x70, 0x77, 0x06, 0xd6, 0x2e, + 0x9c, 0xac, 0x96, 0xf8, 0x0b, 0x16, 0x3c, 0x91, 0xd9, 0x5f, 0xc3, 0x22, 0xe7, 0x2a, 0x94, 0x1b, + 0xb4, 0x50, 0x73, 0x45, 0x4c, 0x7c, 0xb4, 0x25, 0x00, 0x27, 0x38, 0x86, 0xe1, 0x4d, 0xa1, 0xaf, + 0xe1, 0xcd, 0xaf, 0x58, 0xd0, 0xb5, 0x3f, 0x4e, 0x80, 0x51, 0x57, 0x4d, 0x46, 0xfd, 0xc1, 0x41, + 0xe6, 0x32, 0x87, 0x47, 0xff, 0xf1, 0x14, 0x9c, 0xcd, 0x71, 0xc5, 0xd9, 0x83, 0x99, 0xed, 0x06, + 0x31, 0x9d, 0x3c, 0xc5, 0xc7, 0x64, 0xfa, 0xc3, 0xf6, 0xf4, 0x08, 0x65, 0x89, 0x2f, 0x67, 0xba, + 0x50, 0x70, 0x77, 0x13, 0xe8, 0x0b, 0x16, 0x9c, 0x76, 0xee, 0x45, 0x5d, 0x99, 0xf2, 0xc5, 0x9a, + 0x79, 0x29, 0x53, 0x09, 0xd2, 0x27, 0xb3, 0x3e, 0xcf, 0x04, 0x9a, 0x85, 0x85, 0x33, 0xdb, 0x42, + 0x58, 0x84, 0x87, 0xa7, 0xe2, 0x7c, 0x0f, 0x37, 0xe4, 0x2c, 0x9f, 0x29, 0x7e, 0x82, 0x48, 0x08, + 0x56, 0x74, 0xd0, 0xe7, 0xa1, 0xbc, 0x2d, 0x1d, 0x19, 0x33, 0x4e, 0xa8, 0x64, 0x20, 0x7b, 0xbb, + 0x77, 0xf2, 0x97, 0x4c, 0x85, 0x84, 0x13, 0xa2, 0xe8, 0x35, 0x28, 0xfa, 0x5b, 0x51, 0xaf, 0x64, + 0x9a, 0x29, 0x93, 0x35, 0xee, 0xec, 0xbf, 0xbe, 0x5a, 0xc7, 0xb4, 0x22, 0xba, 0x0e, 0xc5, 0x70, + 0xd3, 0x15, 0x1a, 0xbc, 0x4c, 0x1e, 0x8e, 0x97, 0x2a, 0x39, 0xbd, 0x62, 0x94, 0xf0, 0x52, 0x05, + 0x53, 0x12, 0xa8, 0x06, 0xc3, 0xcc, 0x7f, 0x45, 0x9c, 0x07, 0x99, 0x92, 0x6f, 0x0f, 0x3f, 0x30, + 0x1e, 0x11, 0x80, 0x21, 0x60, 0x4e, 0x08, 0x6d, 0xc0, 0x48, 0x83, 0x25, 0x5e, 0x14, 0x61, 0xc5, + 0x3e, 0x92, 0xa9, 0xab, 0xeb, 0x91, 0x91, 0x52, 0xa8, 0xae, 0x18, 0x06, 0x16, 0xb4, 0x18, 0x55, + 0xd2, 0xde, 0xd9, 0x8a, 0x44, 0xa2, 0xe0, 0x6c, 0xaa, 0x3d, 0x12, 0xad, 0x0a, 0xaa, 0x0c, 0x03, + 0x0b, 0x5a, 0xe8, 0xe3, 0x50, 0xd8, 0x6a, 0x08, 0xdf, 0x94, 0x4c, 0xa5, 0x9d, 0x19, 0xaf, 0x61, + 0x69, 0xe4, 0xc1, 0xc1, 0x7c, 0x61, 0x75, 0x19, 0x17, 0xb6, 0x1a, 0x68, 0x1d, 0x46, 0xb7, 0xb8, + 0x87, 0xb7, 0xd0, 0xcb, 0x3d, 0x95, 0xed, 0x7c, 0xde, 0xe5, 0x04, 0xce, 0xdd, 0x32, 0x04, 0x00, + 0x4b, 0x22, 0x2c, 0xda, 0xba, 0xf2, 0x54, 0x17, 0x11, 0xb8, 0x16, 0x8e, 0x16, 0x5d, 0x80, 0x9f, + 0xcf, 0x89, 0xbf, 0x3b, 0xd6, 0x28, 0xd2, 0x55, 0xed, 0xc8, 0x6c, 0xed, 0x22, 0xa2, 0x4a, 0xe6, + 0xaa, 0xee, 0x93, 0xc8, 0x9e, 0xaf, 0x6a, 0x85, 0x84, 0x13, 0xa2, 0x68, 0x17, 0x26, 0xf6, 0xa2, + 0xf6, 0x0e, 0x91, 0x5b, 0x9a, 0x05, 0x58, 0xc9, 0x39, 0xc2, 0xee, 0x08, 0x44, 0x2f, 0x8c, 0x3b, + 0x4e, 0xb3, 0x8b, 0x0b, 0xb1, 0xe7, 0xef, 0x3b, 0x3a, 0x31, 0x6c, 0xd2, 0xa6, 0xc3, 0xff, 0x76, + 0x27, 0xd8, 0xdc, 0x8f, 0x89, 0x08, 0x9c, 0x95, 0x39, 0xfc, 0x6f, 0x70, 0x94, 0xee, 0xe1, 0x17, + 0x00, 0x2c, 0x89, 0xa0, 0x3b, 0x62, 0x78, 0x18, 0xf7, 0x9c, 0xce, 0x8f, 0x6e, 0xb9, 0x28, 0x91, + 0x72, 0x06, 0x85, 0x71, 0xcb, 0x84, 0x14, 0xe3, 0x92, 0xed, 0x9d, 0x20, 0x0e, 0xfc, 0x14, 0x87, + 0x9e, 0xc9, 0xe7, 0x92, 0xb5, 0x0c, 0xfc, 0x6e, 0x2e, 0x99, 0x85, 0x85, 0x33, 0xdb, 0x42, 0x2e, + 0x4c, 0xb6, 0x83, 0x30, 0xbe, 0x17, 0x84, 0x72, 0x7d, 0xa1, 0x1e, 0x7a, 0x05, 0x03, 0x53, 0xb4, + 0xc8, 0x62, 0xd2, 0x99, 0x10, 0x9c, 0xa2, 0x89, 0x3e, 0x05, 0xa3, 0x51, 0xc3, 0x69, 0x92, 0xea, + 0xad, 0xd9, 0x53, 0xf9, 0xc7, 0x4f, 0x9d, 0xa3, 0xe4, 0xac, 0x2e, 0x1e, 0x9a, 0x9d, 0xa3, 0x60, + 0x49, 0x0e, 0xad, 0xc2, 0x30, 0xcb, 0xa6, 0xc5, 0xa2, 0xbc, 0xe5, 0x04, 0xe9, 0xec, 0x32, 0x20, + 0xe6, 0xbc, 0x89, 0x15, 0x63, 0x5e, 0x9d, 0xee, 0x01, 0x21, 0x5e, 0x07, 0xd1, 0xec, 0x99, 0xfc, + 0x3d, 0x20, 0xa4, 0xf2, 0x5b, 0xf5, 0x5e, 0x7b, 0x40, 0x21, 0xe1, 0x84, 0x28, 0xe5, 0xcc, 0x94, + 0x9b, 0x9e, 0xed, 0x61, 0xf9, 0x92, 0xcb, 0x4b, 0x19, 0x67, 0xa6, 0x9c, 0x94, 0x92, 0xb0, 0x7f, + 0x6f, 0xb4, 0x5b, 0x66, 0x61, 0x17, 0xb2, 0xef, 0xb2, 0xba, 0xde, 0xea, 0x3e, 0x3a, 0xa8, 0x7e, + 0xe8, 0x18, 0xa5, 0xd5, 0x2f, 0x58, 0x70, 0xb6, 0x9d, 0xf9, 0x21, 0x42, 0x00, 0x18, 0x4c, 0xcd, + 0xc4, 0x3f, 0x5d, 0x45, 0x04, 0xcc, 0x86, 0xe3, 0x9c, 0x96, 0xd2, 0x37, 0x82, 0xe2, 0xbb, 0xbe, + 0x11, 0xac, 0x41, 0x89, 0x09, 0x99, 0x7d, 0x12, 0x11, 0xa7, 0x2f, 0x46, 0x4c, 0x94, 0x58, 0x16, + 0x15, 0xb1, 0x22, 0x81, 0x7e, 0xc0, 0x82, 0x0b, 0xe9, 0xae, 0x63, 0xc2, 0xc0, 0x22, 0x8c, 0x20, + 0xbf, 0x0b, 0xae, 0x8a, 0xef, 0xbf, 0x50, 0xeb, 0x85, 0x7c, 0xd8, 0x0f, 0x01, 0xf7, 0x6e, 0x0c, + 0x55, 0x32, 0x2e, 0xa3, 0x23, 0xa6, 0x02, 0x7e, 0x80, 0x0b, 0xe9, 0x4b, 0x30, 0xde, 0x0a, 0x3a, + 0x7e, 0x2c, 0x0c, 0x65, 0xc4, 0xa3, 0x3d, 0x7b, 0xac, 0x5e, 0xd3, 0xca, 0xb1, 0x81, 0x95, 0xba, + 0xc6, 0x96, 0x1e, 0xfa, 0x1a, 0xfb, 0x26, 0x8c, 0xfb, 0x9a, 0x65, 0xa7, 0x90, 0x07, 0x2e, 0xe7, + 0x87, 0x00, 0xd5, 0xed, 0x40, 0x79, 0x2f, 0xf5, 0x12, 0x6c, 0x50, 0x3b, 0xd9, 0xbb, 0xd1, 0x97, + 0xad, 0x0c, 0xa1, 0x9e, 0xdf, 0x96, 0x3f, 0x61, 0xde, 0x96, 0x2f, 0xa7, 0x6f, 0xcb, 0x5d, 0xca, + 0x57, 0xe3, 0xa2, 0x3c, 0x78, 0x86, 0x93, 0x41, 0xa3, 0xfd, 0xd9, 0x4d, 0xb8, 0xd4, 0xef, 0x58, + 0x62, 0x16, 0x53, 0xae, 0x7a, 0x6a, 0x4b, 0x2c, 0xa6, 0xdc, 0x6a, 0x05, 0x33, 0xc8, 0xa0, 0x71, + 0x64, 0xec, 0xff, 0x66, 0x41, 0xb1, 0x16, 0xb8, 0x27, 0xa0, 0x4c, 0xfe, 0xa4, 0xa1, 0x4c, 0x7e, + 0x3c, 0xfb, 0x40, 0x74, 0x73, 0x55, 0xc7, 0x2b, 0x29, 0xd5, 0xf1, 0x85, 0x3c, 0x02, 0xbd, 0x15, + 0xc5, 0x3f, 0x51, 0x84, 0xb1, 0x5a, 0xe0, 0x2a, 0x73, 0xe5, 0x5f, 0x7f, 0x18, 0x73, 0xe5, 0xdc, + 0x38, 0xfd, 0x1a, 0x65, 0x66, 0x68, 0x25, 0x7d, 0x2c, 0xff, 0x92, 0x59, 0x2d, 0xdf, 0x25, 0xde, + 0xf6, 0x4e, 0x4c, 0xdc, 0xf4, 0xe7, 0x9c, 0x9c, 0xd5, 0xf2, 0x7f, 0xb5, 0x60, 0x2a, 0xd5, 0x3a, + 0x6a, 0xc2, 0x44, 0x53, 0x57, 0x4c, 0x8a, 0x75, 0xfa, 0x50, 0x3a, 0x4d, 0x61, 0xf5, 0xa9, 0x15, + 0x61, 0x93, 0x38, 0x5a, 0x00, 0x50, 0x2f, 0x75, 0x52, 0x03, 0xc6, 0xa4, 0x7e, 0xf5, 0x94, 0x17, + 0x61, 0x0d, 0x03, 0xbd, 0x0c, 0x63, 0x71, 0xd0, 0x0e, 0x9a, 0xc1, 0xf6, 0xfe, 0x0d, 0x22, 0x23, + 0x17, 0x29, 0x5b, 0xae, 0x8d, 0x04, 0x84, 0x75, 0x3c, 0xfb, 0xa7, 0x8a, 0xfc, 0x43, 0xfd, 0xd8, + 0x7b, 0x7f, 0x4d, 0xbe, 0xb7, 0xd7, 0xe4, 0x57, 0x2d, 0x98, 0xa6, 0xad, 0x33, 0x73, 0x11, 0x79, + 0xd8, 0xaa, 0xd0, 0xbf, 0x56, 0x8f, 0xd0, 0xbf, 0x97, 0x29, 0xef, 0x72, 0x83, 0x4e, 0x2c, 0x34, + 0x68, 0x1a, 0x73, 0xa2, 0xa5, 0x58, 0x40, 0x05, 0x1e, 0x09, 0x43, 0xe1, 0xe2, 0xa6, 0xe3, 0x91, + 0x30, 0xc4, 0x02, 0x2a, 0x23, 0x03, 0x0f, 0x65, 0x47, 0x06, 0xe6, 0x71, 0x18, 0x85, 0x61, 0x81, + 0x10, 0x7b, 0xb4, 0x38, 0x8c, 0xd2, 0xe2, 0x20, 0xc1, 0xb1, 0x7f, 0xb6, 0x08, 0xe3, 0xb5, 0xc0, + 0x4d, 0xde, 0xca, 0x5e, 0x32, 0xde, 0xca, 0x2e, 0xa5, 0xde, 0xca, 0xa6, 0x75, 0xdc, 0xf7, 0x5f, + 0xc6, 0xbe, 0x5e, 0x2f, 0x63, 0xff, 0xcc, 0x62, 0xb3, 0x56, 0x59, 0xaf, 0x73, 0xeb, 0x23, 0xf4, + 0x3c, 0x8c, 0x31, 0x86, 0xc4, 0x7c, 0x2a, 0xe5, 0x03, 0x12, 0xcb, 0x78, 0xb3, 0x9e, 0x14, 0x63, + 0x1d, 0x07, 0x5d, 0x81, 0x52, 0x44, 0x9c, 0xb0, 0xb1, 0xa3, 0x78, 0x9c, 0x78, 0xed, 0xe1, 0x65, + 0x58, 0x41, 0xd1, 0x1b, 0x49, 0x08, 0xc0, 0x62, 0xbe, 0x8f, 0x96, 0xde, 0x1f, 0xbe, 0x45, 0xf2, + 0xe3, 0xfe, 0xd9, 0x77, 0x01, 0x75, 0xe3, 0x0f, 0x10, 0xfb, 0x6a, 0xde, 0x8c, 0x7d, 0x55, 0xee, + 0x8a, 0x7b, 0xf5, 0xe7, 0x16, 0x4c, 0xd6, 0x02, 0x97, 0x6e, 0xdd, 0x6f, 0xa4, 0x7d, 0xaa, 0xc7, + 0x3f, 0x1d, 0xe9, 0x11, 0xff, 0xf4, 0x49, 0x18, 0xae, 0x05, 0x6e, 0xb5, 0xd6, 0xcb, 0xb7, 0xd9, + 0xfe, 0x3b, 0x16, 0x8c, 0xd6, 0x02, 0xf7, 0x04, 0x94, 0xf3, 0x9f, 0x30, 0x95, 0xf3, 0x8f, 0xe5, + 0xac, 0x9b, 0x1c, 0x7d, 0xfc, 0xdf, 0x1a, 0x82, 0x09, 0xda, 0xcf, 0x60, 0x5b, 0x4e, 0xa5, 0x31, + 0x6c, 0xd6, 0x00, 0xc3, 0x46, 0x65, 0xe1, 0xa0, 0xd9, 0x0c, 0xee, 0xa5, 0xa7, 0x75, 0x95, 0x95, + 0x62, 0x01, 0x45, 0xcf, 0x42, 0xa9, 0x1d, 0x92, 0x3d, 0x2f, 0x10, 0x42, 0xa6, 0xf6, 0xd4, 0x51, + 0x13, 0xe5, 0x58, 0x61, 0xd0, 0xcb, 0x59, 0xe4, 0xf9, 0x0d, 0x52, 0x27, 0x8d, 0xc0, 0x77, 0xb9, + 0xfe, 0xba, 0x28, 0xa2, 0xff, 0x6b, 0xe5, 0xd8, 0xc0, 0x42, 0x77, 0xa1, 0xcc, 0xfe, 0x33, 0xb6, + 0x73, 0xf4, 0x3c, 0x92, 0x22, 0xaf, 0x98, 0x20, 0x80, 0x13, 0x5a, 0xe8, 0x05, 0x80, 0x58, 0x06, + 0xba, 0x8e, 0x44, 0x9c, 0x23, 0x25, 0x90, 0xab, 0x10, 0xd8, 0x11, 0xd6, 0xb0, 0xd0, 0x33, 0x50, + 0x8e, 0x1d, 0xaf, 0x79, 0xd3, 0xf3, 0x49, 0xc4, 0xf4, 0xd2, 0x45, 0x99, 0xde, 0x4b, 0x14, 0xe2, + 0x04, 0x4e, 0x05, 0x22, 0x16, 0x04, 0x80, 0x67, 0xa1, 0x2d, 0x31, 0x6c, 0x26, 0x10, 0xdd, 0x54, + 0xa5, 0x58, 0xc3, 0x40, 0x3b, 0x70, 0xde, 0xf3, 0x59, 0xa4, 0x7c, 0x52, 0xdf, 0xf5, 0xda, 0x1b, + 0x37, 0xeb, 0x77, 0x48, 0xe8, 0x6d, 0xed, 0x2f, 0x39, 0x8d, 0x5d, 0xe2, 0xcb, 0x0c, 0x81, 0x1f, + 0x14, 0x5d, 0x3c, 0x5f, 0xed, 0x81, 0x8b, 0x7b, 0x52, 0xb2, 0x5f, 0x81, 0x33, 0xb5, 0xc0, 0xad, + 0x05, 0x61, 0xbc, 0x1a, 0x84, 0xf7, 0x9c, 0xd0, 0x95, 0x2b, 0x65, 0x5e, 0x26, 0x13, 0xa1, 0xac, + 0x70, 0x98, 0x33, 0x0a, 0x23, 0xa5, 0xd5, 0x8b, 0x4c, 0xf8, 0x3a, 0xa2, 0x33, 0x4a, 0x83, 0x89, + 0x01, 0x2a, 0x6d, 0xc4, 0x35, 0x27, 0x26, 0xe8, 0x16, 0x4b, 0x87, 0x9b, 0x9c, 0x88, 0xa2, 0xfa, + 0xd3, 0x5a, 0x3a, 0xdc, 0x04, 0x98, 0x79, 0x84, 0x9a, 0xf5, 0xed, 0xbf, 0x32, 0xcc, 0x98, 0x63, + 0x2a, 0xf5, 0x00, 0xfa, 0x1c, 0x4c, 0x46, 0xe4, 0xa6, 0xe7, 0x77, 0xee, 0x4b, 0x9d, 0x40, 0x0f, + 0x77, 0xa2, 0xfa, 0x8a, 0x8e, 0xc9, 0x35, 0x8b, 0x66, 0x19, 0x4e, 0x51, 0x43, 0x2d, 0x98, 0xbc, + 0xe7, 0xf9, 0x6e, 0x70, 0x2f, 0x92, 0xf4, 0x4b, 0xf9, 0x0a, 0xc6, 0xbb, 0x1c, 0x33, 0xd5, 0x47, + 0xa3, 0xb9, 0xbb, 0x06, 0x31, 0x9c, 0x22, 0x4e, 0x17, 0x60, 0xd8, 0xf1, 0x17, 0xa3, 0xdb, 0x11, + 0x09, 0x45, 0x62, 0x63, 0xb6, 0x00, 0xb1, 0x2c, 0xc4, 0x09, 0x9c, 0x2e, 0x40, 0xf6, 0xe7, 0x5a, + 0x18, 0x74, 0x78, 0x38, 0x7a, 0xb1, 0x00, 0xb1, 0x2a, 0xc5, 0x1a, 0x06, 0xdd, 0xa0, 0xec, 0xdf, + 0x7a, 0xe0, 0xe3, 0x20, 0x88, 0xe5, 0x96, 0x66, 0xa9, 0x34, 0xb5, 0x72, 0x6c, 0x60, 0xa1, 0x55, + 0x40, 0x51, 0xa7, 0xdd, 0x6e, 0x32, 0x3b, 0x05, 0xa7, 0xc9, 0x48, 0xf1, 0x37, 0xe2, 0x22, 0x8f, + 0xd2, 0x59, 0xef, 0x82, 0xe2, 0x8c, 0x1a, 0x94, 0x57, 0x6f, 0x89, 0xae, 0x0e, 0xb3, 0xae, 0xf2, + 0xc7, 0x88, 0x3a, 0xef, 0xa7, 0x84, 0xa1, 0x15, 0x18, 0x8d, 0xf6, 0xa3, 0x46, 0x2c, 0xc2, 0x8d, + 0xe5, 0x64, 0x97, 0xa9, 0x33, 0x14, 0x2d, 0xb9, 0x19, 0xaf, 0x82, 0x65, 0x5d, 0xd4, 0x80, 0x53, + 0x82, 0xe2, 0xf2, 0x8e, 0xe3, 0xab, 0x5c, 0x1d, 0xdc, 0x5c, 0xf3, 0xf9, 0x07, 0x07, 0xf3, 0xa7, + 0x44, 0xcb, 0x3a, 0xf8, 0xf0, 0x60, 0xfe, 0x6c, 0x2d, 0x70, 0x33, 0x20, 0x38, 0x8b, 0x9a, 0xfd, + 0xed, 0x4c, 0xde, 0x60, 0xb9, 0x76, 0xe3, 0x4e, 0x48, 0x50, 0x0b, 0x26, 0xda, 0x6c, 0x19, 0x8b, + 0x20, 0xee, 0x62, 0x2d, 0xbe, 0x34, 0xa0, 0xe2, 0xe0, 0x1e, 0x65, 0xd3, 0x4a, 0xb1, 0xc7, 0x6e, + 0x64, 0x35, 0x9d, 0x1c, 0x36, 0xa9, 0xdb, 0x5f, 0x3d, 0xcb, 0x4e, 0xac, 0x3a, 0xd7, 0x06, 0x8c, + 0x0a, 0xeb, 0x6d, 0x71, 0xf5, 0x99, 0xcb, 0x57, 0x4b, 0x25, 0xc3, 0x26, 0x2c, 0xc0, 0xb1, 0xac, + 0x8b, 0x3e, 0x0b, 0x93, 0xf4, 0x26, 0xa1, 0x25, 0xb1, 0x38, 0x9d, 0xef, 0x65, 0x9f, 0xe4, 0xae, + 0xd0, 0x12, 0x3c, 0xe8, 0x95, 0x71, 0x8a, 0x18, 0x7a, 0x83, 0xd9, 0x19, 0x98, 0xf9, 0x31, 0xfa, + 0x90, 0xd6, 0x4d, 0x0a, 0x24, 0x59, 0x8d, 0x48, 0x5e, 0xee, 0x0d, 0xfb, 0xd1, 0xe6, 0xde, 0x40, + 0x37, 0x61, 0x42, 0x24, 0x9c, 0x15, 0x2b, 0xab, 0x68, 0x68, 0xcb, 0x26, 0xb0, 0x0e, 0x3c, 0x4c, + 0x17, 0x60, 0xb3, 0x32, 0xda, 0x86, 0x0b, 0x5a, 0x02, 0x98, 0x6b, 0xa1, 0xc3, 0x9e, 0xbc, 0x3d, + 0xc6, 0xee, 0xb4, 0xb3, 0xf4, 0x89, 0x07, 0x07, 0xf3, 0x17, 0x36, 0x7a, 0x21, 0xe2, 0xde, 0x74, + 0xd0, 0x2d, 0x38, 0xc3, 0x7d, 0x44, 0x2b, 0xc4, 0x71, 0x9b, 0x9e, 0xaf, 0x0e, 0x6b, 0xbe, 0x25, + 0xcf, 0x3d, 0x38, 0x98, 0x3f, 0xb3, 0x98, 0x85, 0x80, 0xb3, 0xeb, 0xa1, 0x4f, 0x40, 0xd9, 0xf5, + 0x23, 0x31, 0x06, 0x23, 0x46, 0x8e, 0x9d, 0x72, 0x65, 0xbd, 0xae, 0xbe, 0x3f, 0xf9, 0x83, 0x93, + 0x0a, 0x68, 0x9b, 0x6b, 0x54, 0x95, 0x02, 0x63, 0xb4, 0x2b, 0xba, 0x4d, 0x5a, 0x15, 0x66, 0x78, + 0x89, 0xf1, 0xa7, 0x04, 0x65, 0x3c, 0x6d, 0x38, 0x90, 0x19, 0x84, 0xd1, 0xeb, 0x80, 0xa8, 0x84, + 0xef, 0x35, 0xc8, 0x62, 0x83, 0x65, 0x08, 0x60, 0x0a, 0xe8, 0x92, 0xe9, 0xb7, 0x54, 0xef, 0xc2, + 0xc0, 0x19, 0xb5, 0xd0, 0x75, 0x7a, 0xe4, 0xe8, 0xa5, 0x82, 0xab, 0xa8, 0x8c, 0x68, 0x15, 0xd2, + 0x0e, 0x49, 0xc3, 0x89, 0x89, 0x6b, 0x52, 0xc4, 0xa9, 0x7a, 0xc8, 0x85, 0xf3, 0x4e, 0x27, 0x0e, + 0x98, 0xb2, 0xda, 0x44, 0xdd, 0x08, 0x76, 0x89, 0xcf, 0xde, 0x89, 0x4a, 0x4b, 0x97, 0xa8, 0x34, + 0xb0, 0xd8, 0x03, 0x0f, 0xf7, 0xa4, 0x42, 0xa5, 0x38, 0x95, 0x02, 0x15, 0xcc, 0xa0, 0x3d, 0x19, + 0x69, 0x50, 0x5f, 0x86, 0xb1, 0x9d, 0x20, 0x8a, 0xd7, 0x49, 0x7c, 0x2f, 0x08, 0x77, 0x45, 0xe8, + 0xc5, 0x24, 0x5c, 0x6f, 0x02, 0xc2, 0x3a, 0x1e, 0xbd, 0xa6, 0x31, 0x2b, 0x86, 0x6a, 0x85, 0x3d, + 0x20, 0x97, 0x12, 0x1e, 0x73, 0x9d, 0x17, 0x63, 0x09, 0x97, 0xa8, 0xd5, 0xda, 0x32, 0x7b, 0x0c, + 0x4e, 0xa1, 0x56, 0x6b, 0xcb, 0x58, 0xc2, 0xe9, 0x72, 0x8d, 0x76, 0x9c, 0x90, 0xd4, 0xc2, 0xa0, + 0x41, 0x22, 0x2d, 0x48, 0xf4, 0xe3, 0x3c, 0xb0, 0x24, 0x5d, 0xae, 0xf5, 0x2c, 0x04, 0x9c, 0x5d, + 0x0f, 0x91, 0xee, 0xe4, 0x47, 0x93, 0xf9, 0x5a, 0xfc, 0x6e, 0x79, 0x63, 0xc0, 0xfc, 0x47, 0x3e, + 0x4c, 0xab, 0xb4, 0x4b, 0x3c, 0x94, 0x64, 0x34, 0x3b, 0xc5, 0xd6, 0xf6, 0xe0, 0x71, 0x28, 0xd5, + 0xbb, 0x48, 0x35, 0x45, 0x09, 0x77, 0xd1, 0x36, 0xe2, 0x32, 0x4d, 0xf7, 0xcd, 0x89, 0x7b, 0x15, + 0xca, 0x51, 0x67, 0xd3, 0x0d, 0x5a, 0x8e, 0xe7, 0xb3, 0xc7, 0x60, 0xed, 0xbe, 0x50, 0x97, 0x00, + 0x9c, 0xe0, 0xa0, 0x55, 0x28, 0x39, 0xf2, 0xd1, 0x03, 0xe5, 0x87, 0xf3, 0x50, 0x4f, 0x1d, 0xdc, + 0xc3, 0x5d, 0x3e, 0x73, 0xa8, 0xba, 0xe8, 0x55, 0x98, 0x10, 0x3e, 0x8e, 0x22, 0xe3, 0xdf, 0x29, + 0xd3, 0x11, 0xa5, 0xae, 0x03, 0xb1, 0x89, 0x8b, 0x6e, 0xc3, 0x58, 0x1c, 0x34, 0x99, 0x37, 0x05, + 0x15, 0xc3, 0xce, 0xe6, 0x87, 0x04, 0xdb, 0x50, 0x68, 0xba, 0xbe, 0x51, 0x55, 0xc5, 0x3a, 0x1d, + 0xb4, 0xc1, 0xd7, 0x3b, 0x0b, 0x96, 0x4c, 0xa2, 0xd9, 0xc7, 0xf2, 0xcf, 0x24, 0x15, 0x53, 0xd9, + 0xdc, 0x0e, 0xa2, 0x26, 0xd6, 0xc9, 0xa0, 0x6b, 0x30, 0xd3, 0x0e, 0xbd, 0x80, 0xad, 0x09, 0xf5, + 0xde, 0x35, 0x6b, 0x66, 0x6a, 0xa9, 0xa5, 0x11, 0x70, 0x77, 0x1d, 0xe6, 0xa2, 0x2a, 0x0a, 0x67, + 0xcf, 0xf1, 0xa4, 0xc0, 0xfc, 0xfa, 0xc5, 0xcb, 0xb0, 0x82, 0xa2, 0x35, 0xc6, 0x89, 0xb9, 0xe6, + 0x60, 0x76, 0x2e, 0x3f, 0x82, 0x88, 0xae, 0x61, 0xe0, 0xc2, 0xa5, 0xfa, 0x8b, 0x13, 0x0a, 0xc8, + 0xd5, 0xb2, 0xc7, 0x51, 0x89, 0x3e, 0x9a, 0x3d, 0xdf, 0xc3, 0x94, 0x2c, 0x25, 0xfe, 0x27, 0x02, + 0x81, 0x51, 0x1c, 0xe1, 0x14, 0x4d, 0xf4, 0x2d, 0x30, 0x2d, 0x22, 0x96, 0x25, 0xc3, 0x74, 0x21, + 0xb1, 0x51, 0xc5, 0x29, 0x18, 0xee, 0xc2, 0xe6, 0x41, 0xe4, 0x9d, 0xcd, 0x26, 0x11, 0xac, 0xef, + 0xa6, 0xe7, 0xef, 0x46, 0xb3, 0x17, 0x19, 0x7f, 0x10, 0x41, 0xe4, 0xd3, 0x50, 0x9c, 0x51, 0x03, + 0x6d, 0xc0, 0x74, 0x3b, 0x24, 0xa4, 0xc5, 0x04, 0x71, 0x71, 0x9e, 0xcd, 0x73, 0x0f, 0x6d, 0xda, + 0x93, 0x5a, 0x0a, 0x76, 0x98, 0x51, 0x86, 0xbb, 0x28, 0xa0, 0x7b, 0x50, 0x0a, 0xf6, 0x48, 0xb8, + 0x43, 0x1c, 0x77, 0xf6, 0x52, 0x0f, 0x9b, 0x69, 0x71, 0xb8, 0xdd, 0x12, 0xb8, 0xa9, 0x37, 0x72, + 0x59, 0xdc, 0xff, 0x8d, 0x5c, 0x36, 0x86, 0x7e, 0xd0, 0x82, 0x73, 0x52, 0xad, 0x5e, 0x6f, 0xd3, + 0x51, 0x5f, 0x0e, 0xfc, 0x28, 0x0e, 0xb9, 0x4f, 0xf1, 0x13, 0xf9, 0x7e, 0xb6, 0x1b, 0x39, 0x95, + 0x94, 0xf2, 0xf2, 0x5c, 0x1e, 0x46, 0x84, 0xf3, 0x5b, 0x9c, 0xfb, 0x66, 0x98, 0xe9, 0x3a, 0xb9, + 0x8f, 0x92, 0xd7, 0x62, 0x6e, 0x17, 0x26, 0x8c, 0xd1, 0x79, 0xa4, 0xcf, 0xa3, 0xff, 0x6a, 0x14, + 0xca, 0xea, 0xe9, 0x0c, 0x5d, 0x35, 0x5f, 0x44, 0xcf, 0xa5, 0x5f, 0x44, 0x4b, 0xf4, 0xca, 0xac, + 0x3f, 0x82, 0x6e, 0x64, 0x44, 0x70, 0xca, 0xdb, 0x8b, 0x83, 0xbb, 0xe6, 0x6a, 0x9a, 0xd0, 0xe2, + 0xc0, 0x4f, 0xab, 0x43, 0x3d, 0x95, 0xab, 0xd7, 0x60, 0xc6, 0x0f, 0x98, 0xb8, 0x48, 0x5c, 0x29, + 0x0b, 0xb0, 0x23, 0xbf, 0xac, 0x87, 0x44, 0x48, 0x21, 0xe0, 0xee, 0x3a, 0xb4, 0x41, 0x7e, 0x66, + 0xa7, 0xb5, 0xb9, 0xfc, 0x48, 0xc7, 0x02, 0x8a, 0x9e, 0x84, 0xe1, 0x76, 0xe0, 0x56, 0x6b, 0x42, + 0x54, 0xd4, 0x52, 0x95, 0xba, 0xd5, 0x1a, 0xe6, 0x30, 0xb4, 0x08, 0x23, 0xec, 0x47, 0x34, 0x3b, + 0x9e, 0xef, 0xfb, 0xce, 0x6a, 0x68, 0x59, 0x43, 0x58, 0x05, 0x2c, 0x2a, 0x32, 0xad, 0x12, 0x95, + 0xaf, 0x99, 0x56, 0x69, 0xf4, 0x21, 0xb5, 0x4a, 0x92, 0x00, 0x4e, 0x68, 0xa1, 0xfb, 0x70, 0xc6, + 0xb8, 0xd3, 0xf0, 0x25, 0x42, 0x22, 0xe1, 0x7f, 0xfb, 0x64, 0xcf, 0xcb, 0x8c, 0x78, 0x8a, 0xbd, + 0x20, 0x3a, 0x7d, 0xa6, 0x9a, 0x45, 0x09, 0x67, 0x37, 0x80, 0x9a, 0x30, 0xd3, 0xe8, 0x6a, 0xb5, + 0x34, 0x78, 0xab, 0x6a, 0x42, 0xbb, 0x5b, 0xec, 0x26, 0x8c, 0x5e, 0x85, 0xd2, 0xdb, 0x41, 0xc4, + 0xd8, 0xac, 0x10, 0x6f, 0xa5, 0xf3, 0x66, 0xe9, 0x8d, 0x5b, 0x75, 0x56, 0x7e, 0x78, 0x30, 0x3f, + 0x56, 0x0b, 0x5c, 0xf9, 0x17, 0xab, 0x0a, 0xe8, 0x7b, 0x2d, 0x98, 0xeb, 0xbe, 0x34, 0xa9, 0x4e, + 0x4f, 0x0c, 0xde, 0x69, 0x5b, 0x34, 0x3a, 0xb7, 0x92, 0x4b, 0x0e, 0xf7, 0x68, 0xca, 0xfe, 0x25, + 0xfe, 0x6c, 0x2a, 0x1e, 0x57, 0x48, 0xd4, 0x69, 0x9e, 0x44, 0xb2, 0xc4, 0x15, 0xe3, 0xdd, 0xe7, + 0xa1, 0x9f, 0xe6, 0x7f, 0xcd, 0x62, 0x4f, 0xf3, 0x1b, 0xa4, 0xd5, 0x6e, 0x3a, 0xf1, 0x49, 0xf8, + 0xfe, 0xbd, 0x01, 0xa5, 0x58, 0xb4, 0xd6, 0x2b, 0xbf, 0xa3, 0xd6, 0x29, 0x66, 0x9e, 0xa0, 0x84, + 0x4d, 0x59, 0x8a, 0x15, 0x19, 0xfb, 0x1f, 0xf3, 0x19, 0x90, 0x90, 0x13, 0x50, 0xaf, 0x57, 0x4c, + 0xf5, 0xfa, 0x7c, 0x9f, 0x2f, 0xc8, 0x51, 0xb3, 0xff, 0x23, 0xb3, 0xdf, 0x4c, 0xc9, 0xf2, 0x5e, + 0xb7, 0x09, 0xb1, 0x7f, 0xd8, 0x82, 0xd3, 0x59, 0x46, 0x94, 0xf4, 0x82, 0xc0, 0x55, 0x3c, 0xca, + 0x46, 0x46, 0x8d, 0xe0, 0x1d, 0x51, 0x8e, 0x15, 0xc6, 0xc0, 0x39, 0x97, 0x8e, 0x16, 0x83, 0xf4, + 0x16, 0x4c, 0xd4, 0x42, 0xa2, 0x1d, 0x68, 0xaf, 0x71, 0x67, 0x5e, 0xde, 0x9f, 0x67, 0x8f, 0xec, + 0xc8, 0x6b, 0xff, 0x74, 0x01, 0x4e, 0xf3, 0x47, 0xee, 0xc5, 0xbd, 0xc0, 0x73, 0x6b, 0x81, 0x2b, + 0xf2, 0x65, 0x7d, 0x06, 0xc6, 0xdb, 0x9a, 0x5e, 0xae, 0x57, 0x3c, 0x3d, 0x5d, 0x7f, 0x97, 0x68, + 0x12, 0xf4, 0x52, 0x6c, 0xd0, 0x42, 0x2e, 0x8c, 0x93, 0x3d, 0xaf, 0xa1, 0x5e, 0x4a, 0x0b, 0x47, + 0x3e, 0x5c, 0x54, 0x2b, 0x2b, 0x1a, 0x1d, 0x6c, 0x50, 0x7d, 0x04, 0x99, 0x50, 0xed, 0x1f, 0xb1, + 0xe0, 0xb1, 0x9c, 0xe8, 0x7b, 0xb4, 0xb9, 0x7b, 0xcc, 0x9c, 0x40, 0x24, 0x55, 0x54, 0xcd, 0x71, + 0x23, 0x03, 0x2c, 0xa0, 0xe8, 0x53, 0x00, 0xdc, 0x48, 0x80, 0xde, 0x50, 0xfb, 0x85, 0x29, 0x33, + 0x22, 0x2c, 0x69, 0xc1, 0x72, 0x64, 0x7d, 0xac, 0xd1, 0xb2, 0x7f, 0xb2, 0x08, 0xc3, 0x3c, 0x1d, + 0xf4, 0x2a, 0x8c, 0xee, 0xf0, 0x2c, 0x02, 0x83, 0x24, 0x2c, 0x48, 0x74, 0x07, 0xbc, 0x00, 0xcb, + 0xca, 0x68, 0x0d, 0x4e, 0xf1, 0x2c, 0x0c, 0xcd, 0x0a, 0x69, 0x3a, 0xfb, 0x52, 0xd1, 0xc5, 0x33, + 0x18, 0x2a, 0x85, 0x5f, 0xb5, 0x1b, 0x05, 0x67, 0xd5, 0x43, 0xaf, 0xc1, 0x24, 0xbd, 0x78, 0x04, + 0x9d, 0x58, 0x52, 0xe2, 0xf9, 0x17, 0xd4, 0x4d, 0x67, 0xc3, 0x80, 0xe2, 0x14, 0x36, 0xbd, 0xfb, + 0xb6, 0xbb, 0x54, 0x7a, 0xc3, 0xc9, 0xdd, 0xd7, 0x54, 0xe3, 0x99, 0xb8, 0xcc, 0x7a, 0xb2, 0xc3, + 0x6c, 0x45, 0x37, 0x76, 0x42, 0x12, 0xed, 0x04, 0x4d, 0x97, 0x09, 0x5a, 0xc3, 0x9a, 0xf5, 0x64, + 0x0a, 0x8e, 0xbb, 0x6a, 0x50, 0x2a, 0x5b, 0x8e, 0xd7, 0xec, 0x84, 0x24, 0xa1, 0x32, 0x62, 0x52, + 0x59, 0x4d, 0xc1, 0x71, 0x57, 0x0d, 0xba, 0x8e, 0xce, 0xd4, 0xc2, 0x80, 0x32, 0x2f, 0x19, 0x52, + 0x44, 0x99, 0xc4, 0x8e, 0x4a, 0xef, 0xc7, 0x1e, 0xc1, 0xb7, 0x84, 0xd1, 0x20, 0xa7, 0x60, 0xbc, + 0x87, 0xd7, 0x85, 0xdf, 0xa3, 0xa4, 0x82, 0x9e, 0x87, 0x31, 0x11, 0x5b, 0x9f, 0x59, 0x6e, 0xf2, + 0xa9, 0x63, 0xef, 0xf7, 0x95, 0xa4, 0x18, 0xeb, 0x38, 0xf6, 0xf7, 0x15, 0xe0, 0x54, 0x86, 0xe9, + 0x3d, 0x67, 0x55, 0xdb, 0x5e, 0x14, 0xab, 0x2c, 0x6d, 0x1a, 0xab, 0xe2, 0xe5, 0x58, 0x61, 0xd0, + 0xfd, 0xc0, 0x99, 0x61, 0x9a, 0x01, 0x0a, 0xd3, 0x56, 0x01, 0x3d, 0x62, 0xbe, 0xb3, 0x4b, 0x30, + 0xd4, 0x89, 0x88, 0x0c, 0x9b, 0xa7, 0xf8, 0x37, 0x7b, 0xd6, 0x61, 0x10, 0x2a, 0x1e, 0x6f, 0xab, + 0x17, 0x12, 0x4d, 0x3c, 0xe6, 0x6f, 0x24, 0x1c, 0x46, 0x3b, 0x17, 0x13, 0xdf, 0xf1, 0x63, 0x21, + 0x44, 0x27, 0xf1, 0x9f, 0x58, 0x29, 0x16, 0x50, 0xfb, 0x4b, 0x45, 0x38, 0x97, 0xeb, 0x8c, 0x43, + 0xbb, 0xde, 0x0a, 0x7c, 0x2f, 0x0e, 0x94, 0x61, 0x04, 0x8f, 0xf9, 0x44, 0xda, 0x3b, 0x6b, 0xa2, + 0x1c, 0x2b, 0x0c, 0x74, 0x19, 0x86, 0x99, 0xd2, 0xa9, 0x2b, 0x5f, 0xdd, 0x52, 0x85, 0x07, 0x01, + 0xe1, 0xe0, 0x81, 0x73, 0x81, 0x3e, 0x09, 0x43, 0xed, 0x20, 0x68, 0xa6, 0x99, 0x16, 0xed, 0x6e, + 0x10, 0x34, 0x31, 0x03, 0xa2, 0x0f, 0x89, 0xf1, 0x4a, 0x59, 0x02, 0x60, 0xc7, 0x0d, 0x22, 0x6d, + 0xd0, 0x9e, 0x86, 0xd1, 0x5d, 0xb2, 0x1f, 0x7a, 0xfe, 0x76, 0xda, 0x42, 0xe4, 0x06, 0x2f, 0xc6, + 0x12, 0x6e, 0xa6, 0x1e, 0x1a, 0x3d, 0xee, 0x24, 0x9e, 0xa5, 0xbe, 0x47, 0xe0, 0xf7, 0x17, 0x61, + 0x0a, 0x2f, 0x55, 0xde, 0x9f, 0x88, 0xdb, 0xdd, 0x13, 0x71, 0xdc, 0x49, 0x3c, 0xfb, 0xcf, 0xc6, + 0xcf, 0x5b, 0x30, 0xc5, 0x22, 0xfc, 0x8b, 0x68, 0x41, 0x5e, 0xe0, 0x9f, 0x80, 0x88, 0xf7, 0x24, + 0x0c, 0x87, 0xb4, 0xd1, 0x74, 0xa2, 0x3a, 0xd6, 0x13, 0xcc, 0x61, 0xe8, 0x3c, 0x0c, 0xb1, 0x2e, + 0xd0, 0xc9, 0x1b, 0xe7, 0x39, 0x7e, 0x2a, 0x4e, 0xec, 0x60, 0x56, 0xca, 0x42, 0x60, 0x60, 0xd2, + 0x6e, 0x7a, 0xbc, 0xd3, 0xc9, 0x93, 0xe0, 0x7b, 0x23, 0x04, 0x46, 0x66, 0xd7, 0xde, 0x5d, 0x08, + 0x8c, 0x6c, 0x92, 0xbd, 0xaf, 0x4f, 0x7f, 0x54, 0x80, 0x8b, 0x99, 0xf5, 0x06, 0x0e, 0x81, 0xd1, + 0xbb, 0xf6, 0xa3, 0x8c, 0x04, 0x5f, 0x3c, 0x41, 0xfb, 0xbb, 0xa1, 0x41, 0x25, 0xcc, 0xe1, 0x01, + 0x22, 0x53, 0x64, 0x0e, 0xd9, 0x7b, 0x24, 0x32, 0x45, 0x66, 0xdf, 0x72, 0xae, 0x7f, 0x7f, 0x51, + 0xc8, 0xf9, 0x16, 0x76, 0x11, 0xbc, 0x42, 0xf9, 0x0c, 0x03, 0x46, 0x42, 0x62, 0x1e, 0xe7, 0x3c, + 0x86, 0x97, 0x61, 0x05, 0x45, 0x8b, 0x30, 0xd5, 0xf2, 0x7c, 0xca, 0x7c, 0xf6, 0x4d, 0xc1, 0x4f, + 0x05, 0x0e, 0x5a, 0x33, 0xc1, 0x38, 0x8d, 0x8f, 0x3c, 0x2d, 0x6a, 0x45, 0x21, 0x3f, 0xf5, 0x73, + 0x6e, 0x6f, 0x17, 0xcc, 0xe7, 0x52, 0x35, 0x8a, 0x19, 0x11, 0x2c, 0xd6, 0xb4, 0xfb, 0x7f, 0x71, + 0xf0, 0xfb, 0xff, 0x78, 0xf6, 0xdd, 0x7f, 0xee, 0x55, 0x98, 0x78, 0x68, 0x85, 0xaf, 0xfd, 0xd5, + 0x22, 0x3c, 0xde, 0x63, 0xdb, 0x73, 0x5e, 0x6f, 0xcc, 0x81, 0xc6, 0xeb, 0xbb, 0xe6, 0xa1, 0x06, + 0xa7, 0xb7, 0x3a, 0xcd, 0xe6, 0x3e, 0x33, 0x71, 0x27, 0xae, 0xc4, 0x10, 0x32, 0xe5, 0x79, 0x99, + 0x55, 0x69, 0x35, 0x03, 0x07, 0x67, 0xd6, 0xa4, 0x02, 0x3d, 0x3d, 0x49, 0xf6, 0x15, 0xa9, 0x94, + 0x40, 0x8f, 0x75, 0x20, 0x36, 0x71, 0xd1, 0x35, 0x98, 0x71, 0xf6, 0x1c, 0x8f, 0x87, 0xfe, 0x94, + 0x04, 0xb8, 0x44, 0xaf, 0xf4, 0x74, 0x8b, 0x69, 0x04, 0xdc, 0x5d, 0x07, 0xbd, 0x0e, 0x28, 0x10, + 0x19, 0xe8, 0xaf, 0x11, 0x5f, 0xbc, 0x6a, 0xb1, 0xb9, 0x2b, 0x26, 0x2c, 0xe1, 0x56, 0x17, 0x06, + 0xce, 0xa8, 0x95, 0x8a, 0x02, 0x31, 0x92, 0x1f, 0x05, 0xa2, 0x37, 0x5f, 0xec, 0x9b, 0x84, 0xe0, + 0x3f, 0x59, 0xf4, 0xf8, 0xe2, 0x42, 0xbe, 0x19, 0xcc, 0xec, 0x55, 0x66, 0x35, 0xc6, 0x75, 0x78, + 0x5a, 0x40, 0x86, 0x33, 0x9a, 0xd5, 0x58, 0x02, 0xc4, 0x26, 0x2e, 0x5f, 0x10, 0x51, 0xe2, 0x07, + 0x68, 0x88, 0xf8, 0x22, 0xe2, 0x8a, 0xc2, 0x40, 0x9f, 0x86, 0x51, 0xd7, 0xdb, 0xf3, 0xa2, 0x20, + 0x14, 0x2b, 0xfd, 0x88, 0xcf, 0x05, 0x09, 0x1f, 0xac, 0x70, 0x32, 0x58, 0xd2, 0xb3, 0xbf, 0xbf, + 0x00, 0x13, 0xb2, 0xc5, 0x37, 0x3a, 0x41, 0xec, 0x9c, 0xc0, 0xb1, 0x7c, 0xcd, 0x38, 0x96, 0x3f, + 0xd4, 0x2b, 0xec, 0x0c, 0xeb, 0x52, 0xee, 0x71, 0x7c, 0x2b, 0x75, 0x1c, 0x3f, 0xd5, 0x9f, 0x54, + 0xef, 0x63, 0xf8, 0x9f, 0x58, 0x30, 0x63, 0xe0, 0x9f, 0xc0, 0x69, 0xb0, 0x6a, 0x9e, 0x06, 0x4f, + 0xf4, 0xfd, 0x86, 0x9c, 0x53, 0xe0, 0xbb, 0x8b, 0xa9, 0xbe, 0x33, 0xee, 0xff, 0x36, 0x0c, 0xed, + 0x38, 0xa1, 0xdb, 0x2b, 0xcc, 0x76, 0x57, 0xa5, 0x85, 0xeb, 0x4e, 0x28, 0x9e, 0xf5, 0x9e, 0x55, + 0x99, 0x97, 0x9d, 0xb0, 0xff, 0x93, 0x1e, 0x6b, 0x0a, 0xbd, 0x02, 0x23, 0x51, 0x23, 0x68, 0x2b, + 0xa3, 0xf4, 0x4b, 0x3c, 0x2b, 0x33, 0x2d, 0x39, 0x3c, 0x98, 0x47, 0x66, 0x73, 0xb4, 0x18, 0x0b, + 0x7c, 0xf4, 0x19, 0x98, 0x60, 0xbf, 0x94, 0x8d, 0x4d, 0x31, 0x3f, 0x25, 0x4f, 0x5d, 0x47, 0xe4, + 0x06, 0x68, 0x46, 0x11, 0x36, 0x49, 0xcd, 0x6d, 0x43, 0x59, 0x7d, 0xd6, 0x23, 0x7d, 0x8f, 0xfb, + 0x77, 0x45, 0x38, 0x95, 0xb1, 0xe6, 0x50, 0x64, 0xcc, 0xc4, 0xf3, 0x03, 0x2e, 0xd5, 0x77, 0x39, + 0x17, 0x11, 0xbb, 0x0d, 0xb9, 0x62, 0x6d, 0x0d, 0xdc, 0xe8, 0xed, 0x88, 0xa4, 0x1b, 0xa5, 0x45, + 0xfd, 0x1b, 0xa5, 0x8d, 0x9d, 0xd8, 0x50, 0xd3, 0x86, 0x54, 0x4f, 0x1f, 0xe9, 0x9c, 0xfe, 0x69, + 0x11, 0x4e, 0x67, 0x45, 0xc2, 0x42, 0xdf, 0x96, 0x4a, 0xcf, 0xf6, 0xd2, 0xa0, 0x31, 0xb4, 0x78, + 0xce, 0x36, 0xae, 0x03, 0x5e, 0x5a, 0x30, 0x13, 0xb6, 0xf5, 0x1d, 0x66, 0xd1, 0x26, 0xf3, 0x71, + 0x0f, 0x79, 0x5a, 0x3d, 0xc9, 0x3e, 0x3e, 0x3a, 0x70, 0x07, 0x44, 0x3e, 0xbe, 0x28, 0xf5, 0x7e, + 0x2f, 0x8b, 0xfb, 0xbf, 0xdf, 0xcb, 0x96, 0xe7, 0x3c, 0x18, 0xd3, 0xbe, 0xe6, 0x91, 0xce, 0xf8, + 0x2e, 0x3d, 0xad, 0xb4, 0x7e, 0x3f, 0xd2, 0x59, 0xff, 0x11, 0x0b, 0x52, 0x26, 0xd7, 0x4a, 0x2d, + 0x66, 0xe5, 0xaa, 0xc5, 0x2e, 0xc1, 0x50, 0x18, 0x34, 0x49, 0x3a, 0x1b, 0x1a, 0x0e, 0x9a, 0x04, + 0x33, 0x08, 0xc5, 0x88, 0x13, 0x65, 0xc7, 0xb8, 0x7e, 0x91, 0x13, 0x57, 0xb4, 0x27, 0x61, 0xb8, + 0x49, 0xf6, 0x48, 0x33, 0x9d, 0xb4, 0xe2, 0x26, 0x2d, 0xc4, 0x1c, 0x66, 0xff, 0xfc, 0x10, 0x5c, + 0xe8, 0x19, 0x25, 0x82, 0x5e, 0x87, 0xb6, 0x9d, 0x98, 0xdc, 0x73, 0xf6, 0xd3, 0xd1, 0xe5, 0xaf, + 0xf1, 0x62, 0x2c, 0xe1, 0xcc, 0x29, 0x86, 0x07, 0x89, 0x4d, 0x29, 0x11, 0x45, 0x6c, 0x58, 0x01, + 0x35, 0x95, 0x52, 0xc5, 0xe3, 0x50, 0x4a, 0xbd, 0x00, 0x10, 0x45, 0x4d, 0x6e, 0xf8, 0xe2, 0x0a, + 0x6f, 0x9b, 0x24, 0x98, 0x70, 0xfd, 0xa6, 0x80, 0x60, 0x0d, 0x0b, 0x55, 0x60, 0xba, 0x1d, 0x06, + 0x31, 0xd7, 0xc9, 0x56, 0xb8, 0x6d, 0xd8, 0xb0, 0xe9, 0xa0, 0x5f, 0x4b, 0xc1, 0x71, 0x57, 0x0d, + 0xf4, 0x32, 0x8c, 0x09, 0xa7, 0xfd, 0x5a, 0x10, 0x34, 0x85, 0x1a, 0x48, 0x99, 0x4b, 0xd5, 0x13, + 0x10, 0xd6, 0xf1, 0xb4, 0x6a, 0x4c, 0xd1, 0x3b, 0x9a, 0x59, 0x8d, 0x2b, 0x7b, 0x35, 0xbc, 0x54, + 0x54, 0xbc, 0xd2, 0x40, 0x51, 0xf1, 0x12, 0xc5, 0x58, 0x79, 0xe0, 0xb7, 0x2d, 0xe8, 0xab, 0x4a, + 0xfa, 0x99, 0x21, 0x38, 0x25, 0x16, 0xce, 0xa3, 0x5e, 0x2e, 0xb7, 0xbb, 0x97, 0xcb, 0x71, 0xa8, + 0xce, 0xde, 0x5f, 0x33, 0x27, 0xbd, 0x66, 0x7e, 0xc0, 0x02, 0x53, 0xbc, 0x42, 0xff, 0x77, 0x6e, + 0x7a, 0x8e, 0x97, 0x73, 0xc5, 0x35, 0x57, 0x1e, 0x20, 0xef, 0x32, 0x51, 0x87, 0xfd, 0x1f, 0x2c, + 0x78, 0xa2, 0x2f, 0x45, 0xb4, 0x02, 0x65, 0x26, 0x03, 0x6a, 0xb7, 0xb3, 0xa7, 0x94, 0xed, 0xa8, + 0x04, 0xe4, 0x88, 0xa4, 0x49, 0x4d, 0xb4, 0xd2, 0x95, 0x07, 0xe5, 0xe9, 0x8c, 0x3c, 0x28, 0x67, + 0x8c, 0xe1, 0x79, 0xc8, 0x44, 0x28, 0x7f, 0x58, 0x84, 0x11, 0xbe, 0xe2, 0x4f, 0xe0, 0x1a, 0xf6, + 0x0c, 0x94, 0xbd, 0x56, 0xab, 0xc3, 0xb3, 0x49, 0x0c, 0x73, 0xcf, 0x4a, 0x3a, 0x34, 0x55, 0x59, + 0x88, 0x13, 0x38, 0x5a, 0x15, 0x4a, 0xde, 0x1e, 0x31, 0xfa, 0x78, 0xc7, 0x17, 0x2a, 0x4e, 0xec, + 0x70, 0x99, 0x42, 0x1d, 0x6d, 0x89, 0x3a, 0x18, 0x7d, 0x0e, 0x20, 0x8a, 0x43, 0xcf, 0xdf, 0xa6, + 0x65, 0x22, 0x7a, 0xe3, 0x87, 0x7b, 0x50, 0xab, 0x2b, 0x64, 0x4e, 0x33, 0xd9, 0xe6, 0x0a, 0x80, + 0x35, 0x8a, 0x68, 0xc1, 0x38, 0x5c, 0xe7, 0x52, 0x5a, 0x52, 0xe0, 0x54, 0x93, 0xa3, 0x76, 0xee, + 0x63, 0x50, 0x56, 0xc4, 0xfb, 0xa9, 0x7c, 0xc6, 0x75, 0x49, 0xe4, 0x93, 0x30, 0x95, 0xea, 0xdb, + 0x91, 0x34, 0x46, 0xbf, 0x60, 0xc1, 0x14, 0xef, 0xcc, 0x8a, 0xbf, 0x27, 0x18, 0xf0, 0x3b, 0x70, + 0xba, 0x99, 0xc1, 0x08, 0xc5, 0xf4, 0x0f, 0xce, 0x38, 0x95, 0x86, 0x28, 0x0b, 0x8a, 0x33, 0xdb, + 0x40, 0x57, 0xe8, 0x22, 0xa7, 0x8c, 0xce, 0x69, 0x0a, 0x47, 0xcb, 0x71, 0xbe, 0xc0, 0x79, 0x19, + 0x56, 0x50, 0xfb, 0x77, 0x2c, 0x98, 0xe1, 0x3d, 0xbf, 0x41, 0xf6, 0x15, 0x3b, 0xf8, 0x7a, 0xf6, + 0x5d, 0xe4, 0x31, 0x2a, 0xe4, 0xe4, 0x31, 0xd2, 0x3f, 0xad, 0xd8, 0xf3, 0xd3, 0x7e, 0xda, 0x02, + 0xb1, 0x42, 0x4e, 0xe0, 0xde, 0xff, 0xcd, 0xe6, 0xbd, 0x7f, 0x2e, 0x7f, 0x13, 0xe4, 0x5c, 0xf8, + 0xff, 0xdc, 0x82, 0x69, 0x8e, 0x90, 0x3c, 0x50, 0x7f, 0x5d, 0xe7, 0x61, 0x90, 0x6c, 0xa7, 0x37, + 0xc8, 0xfe, 0x46, 0x50, 0x73, 0xe2, 0x9d, 0xec, 0x8f, 0x32, 0x26, 0x6b, 0xa8, 0xe7, 0x64, 0xb9, + 0x72, 0x03, 0x1d, 0x21, 0x85, 0xf2, 0x91, 0xc3, 0xfc, 0xdb, 0x5f, 0xb3, 0x00, 0xf1, 0x66, 0x0c, + 0x59, 0x89, 0x4a, 0x20, 0xac, 0x54, 0x3b, 0x5b, 0x12, 0xd6, 0xa4, 0x20, 0x58, 0xc3, 0x3a, 0x96, + 0xe1, 0x49, 0x59, 0x19, 0x14, 0xfb, 0x5b, 0x19, 0x1c, 0x61, 0x44, 0xff, 0x70, 0x18, 0xd2, 0xee, + 0x22, 0xe8, 0x0e, 0x8c, 0x37, 0x9c, 0xb6, 0xb3, 0xe9, 0x35, 0xbd, 0xd8, 0x23, 0x51, 0x2f, 0xf3, + 0xa4, 0x65, 0x0d, 0x4f, 0xbc, 0x0b, 0x6b, 0x25, 0xd8, 0xa0, 0x83, 0x16, 0x00, 0xda, 0xa1, 0xb7, + 0xe7, 0x35, 0xc9, 0x36, 0x53, 0x4f, 0x30, 0xd7, 0x6e, 0x6e, 0x73, 0x23, 0x4b, 0xb1, 0x86, 0x91, + 0xe1, 0x3b, 0x5b, 0x7c, 0xc4, 0xbe, 0xb3, 0x70, 0x62, 0xbe, 0xb3, 0x43, 0x47, 0xf2, 0x9d, 0x2d, + 0x1d, 0xd9, 0x77, 0x76, 0x78, 0x20, 0xdf, 0x59, 0x0c, 0x67, 0xa5, 0xb8, 0x47, 0xff, 0xaf, 0x7a, + 0x4d, 0x22, 0x64, 0x7c, 0xee, 0x8f, 0x3e, 0xf7, 0xe0, 0x60, 0xfe, 0x2c, 0xce, 0xc4, 0xc0, 0x39, + 0x35, 0xd1, 0xa7, 0x60, 0xd6, 0x69, 0x36, 0x83, 0x7b, 0x6a, 0x52, 0x57, 0xa2, 0x86, 0xd3, 0xe4, + 0x7a, 0xff, 0x51, 0x46, 0xf5, 0xfc, 0x83, 0x83, 0xf9, 0xd9, 0xc5, 0x1c, 0x1c, 0x9c, 0x5b, 0x1b, + 0x7d, 0x02, 0xca, 0xed, 0x30, 0x68, 0xac, 0x69, 0x3e, 0x6d, 0x17, 0xe9, 0x00, 0xd6, 0x64, 0xe1, + 0xe1, 0xc1, 0xfc, 0x84, 0xfa, 0xc3, 0x0e, 0xfc, 0xa4, 0x82, 0xbd, 0x0b, 0xa7, 0xea, 0x24, 0xf4, + 0x58, 0x42, 0x64, 0x37, 0xe1, 0x1f, 0x1b, 0x50, 0x0e, 0x53, 0x1c, 0x73, 0xa0, 0xb8, 0x76, 0x5a, + 0x3c, 0x74, 0xc9, 0x21, 0x13, 0x42, 0xf6, 0xff, 0xb4, 0x60, 0x54, 0xb8, 0x6f, 0x9c, 0x80, 0x54, + 0xb7, 0x68, 0x28, 0xd7, 0xe7, 0xb3, 0x4f, 0x15, 0xd6, 0x99, 0x5c, 0xb5, 0x7a, 0x35, 0xa5, 0x56, + 0x7f, 0xa2, 0x17, 0x91, 0xde, 0x0a, 0xf5, 0xbf, 0x51, 0x84, 0x49, 0xd3, 0xcf, 0xef, 0x04, 0x86, + 0x60, 0x1d, 0x46, 0x23, 0xe1, 0xc8, 0x56, 0xc8, 0x37, 0xdf, 0x4e, 0x4f, 0x62, 0x62, 0xda, 0x25, + 0x5c, 0xd7, 0x24, 0x91, 0x4c, 0x0f, 0xb9, 0xe2, 0x23, 0xf4, 0x90, 0xeb, 0xe7, 0x6a, 0x39, 0x74, + 0x1c, 0xae, 0x96, 0xf6, 0x57, 0xd8, 0xc9, 0xa6, 0x97, 0x9f, 0x80, 0xd0, 0x73, 0xcd, 0x3c, 0x03, + 0xed, 0x1e, 0x2b, 0x4b, 0x74, 0x2a, 0x47, 0xf8, 0xf9, 0x39, 0x0b, 0x2e, 0x64, 0x7c, 0x95, 0x26, + 0x09, 0x3d, 0x0b, 0x25, 0xa7, 0xe3, 0x7a, 0x6a, 0x2f, 0x6b, 0x4f, 0x6c, 0x8b, 0xa2, 0x1c, 0x2b, + 0x0c, 0xb4, 0x0c, 0x33, 0xe4, 0x7e, 0xdb, 0xe3, 0xaf, 0x8b, 0xba, 0xfd, 0x65, 0x91, 0xc7, 0xfa, + 0x5e, 0x49, 0x03, 0x71, 0x37, 0xbe, 0x0a, 0x3f, 0x51, 0xcc, 0x0d, 0x3f, 0xf1, 0xf7, 0x2d, 0x18, + 0x53, 0xae, 0x5c, 0x8f, 0x7c, 0xb4, 0xbf, 0xc5, 0x1c, 0xed, 0xc7, 0x7b, 0x8c, 0x76, 0xce, 0x30, + 0xff, 0x76, 0x41, 0xf5, 0xb7, 0x16, 0x84, 0xf1, 0x00, 0x12, 0xd6, 0x2b, 0x50, 0x6a, 0x87, 0x41, + 0x1c, 0x34, 0x82, 0xa6, 0x10, 0xb0, 0xce, 0x27, 0x71, 0x58, 0x78, 0xf9, 0xa1, 0xf6, 0x1b, 0x2b, + 0x6c, 0x2a, 0xdb, 0x38, 0xed, 0xb6, 0x04, 0x48, 0xb3, 0x2c, 0x16, 0xa5, 0x34, 0x29, 0xc6, 0x3a, + 0x0e, 0x1b, 0xf0, 0x20, 0x8c, 0x85, 0x1c, 0x94, 0x0c, 0x78, 0x10, 0xc6, 0x98, 0x41, 0x90, 0x0b, + 0x10, 0x3b, 0xe1, 0x36, 0x89, 0x69, 0x99, 0x08, 0x15, 0x95, 0xcf, 0x6f, 0x3a, 0xb1, 0xd7, 0x5c, + 0xf0, 0xfc, 0x38, 0x8a, 0xc3, 0x85, 0xaa, 0x1f, 0xdf, 0x0a, 0xf9, 0x15, 0x4f, 0x8b, 0xc5, 0xa2, + 0x68, 0x61, 0x8d, 0xae, 0x74, 0x5b, 0x66, 0x6d, 0x0c, 0x9b, 0xef, 0xfb, 0xeb, 0xa2, 0x1c, 0x2b, + 0x0c, 0xfb, 0x63, 0xec, 0xf4, 0x61, 0x63, 0x7a, 0xb4, 0xe0, 0x25, 0xbf, 0x54, 0x56, 0xb3, 0xc1, + 0x1e, 0xf7, 0x2a, 0x7a, 0x88, 0x94, 0xde, 0xcc, 0x9e, 0x36, 0xac, 0xbb, 0x30, 0x25, 0x71, 0x54, + 0xd0, 0xb7, 0x76, 0xd9, 0x6c, 0x3c, 0xd7, 0xe7, 0xd4, 0x38, 0x82, 0x95, 0x06, 0x4b, 0x59, 0xc0, + 0x02, 0xba, 0x57, 0x6b, 0x62, 0x5f, 0x68, 0x29, 0x0b, 0x04, 0x00, 0x27, 0x38, 0xe8, 0xaa, 0xb8, + 0xc0, 0x73, 0xd5, 0xf7, 0xe3, 0xa9, 0x0b, 0xbc, 0xfc, 0x7c, 0x4d, 0x59, 0xfe, 0x3c, 0x8c, 0xa9, + 0x84, 0x9d, 0x35, 0x9e, 0x07, 0x52, 0x2c, 0x9b, 0x95, 0xa4, 0x18, 0xeb, 0x38, 0x68, 0x03, 0xa6, + 0x22, 0xae, 0x4a, 0x52, 0xf1, 0x51, 0xb9, 0x4a, 0xee, 0xc3, 0xd2, 0xd0, 0xa5, 0x6e, 0x82, 0x0f, + 0x59, 0x11, 0xe7, 0x36, 0xd2, 0x55, 0x38, 0x4d, 0x02, 0xbd, 0x06, 0x93, 0xcd, 0xc0, 0x71, 0x97, + 0x9c, 0xa6, 0xe3, 0x37, 0xd8, 0xf7, 0x96, 0xcc, 0xbc, 0x6f, 0x37, 0x0d, 0x28, 0x4e, 0x61, 0x53, + 0x61, 0x49, 0x2f, 0x11, 0x31, 0x7d, 0x1d, 0x7f, 0x9b, 0x44, 0x22, 0xfd, 0x22, 0x13, 0x96, 0x6e, + 0xe6, 0xe0, 0xe0, 0xdc, 0xda, 0xe8, 0x15, 0x18, 0x97, 0x9f, 0xaf, 0x79, 0xd6, 0x27, 0xb6, 0xfd, + 0x1a, 0x0c, 0x1b, 0x98, 0xe8, 0x1e, 0x9c, 0x91, 0xff, 0x37, 0x42, 0x67, 0x6b, 0xcb, 0x6b, 0x08, + 0x77, 0x53, 0xee, 0x78, 0xb7, 0x28, 0xbd, 0xc3, 0x56, 0xb2, 0x90, 0x0e, 0x0f, 0xe6, 0x2f, 0x89, + 0x51, 0xcb, 0x84, 0xb3, 0x49, 0xcc, 0xa6, 0x8f, 0xd6, 0xe0, 0xd4, 0x0e, 0x71, 0x9a, 0xf1, 0xce, + 0xf2, 0x0e, 0x69, 0xec, 0xca, 0x4d, 0xc4, 0xfc, 0xf5, 0x35, 0x8b, 0xf8, 0xeb, 0xdd, 0x28, 0x38, + 0xab, 0x1e, 0x7a, 0x13, 0x66, 0xdb, 0x9d, 0xcd, 0xa6, 0x17, 0xed, 0xac, 0x07, 0x31, 0xb3, 0x76, + 0x51, 0xf9, 0x3f, 0x85, 0x63, 0xbf, 0x8a, 0x88, 0x50, 0xcb, 0xc1, 0xc3, 0xb9, 0x14, 0xd0, 0x3b, + 0x70, 0x26, 0xb5, 0x18, 0x84, 0x6b, 0xf3, 0x64, 0x7e, 0x84, 0xf4, 0x7a, 0x56, 0x05, 0x11, 0x25, + 0x20, 0x0b, 0x84, 0xb3, 0x9b, 0x40, 0x2f, 0x41, 0xc9, 0x6b, 0xaf, 0x3a, 0x2d, 0xaf, 0xb9, 0xcf, + 0x42, 0xbc, 0x97, 0x59, 0xd8, 0xf3, 0x52, 0xb5, 0xc6, 0xcb, 0x0e, 0xb5, 0xdf, 0x58, 0x61, 0xd2, + 0x2b, 0x82, 0x16, 0xc8, 0x32, 0x9a, 0x9d, 0x4e, 0x8c, 0x79, 0xb5, 0x68, 0x97, 0x11, 0x36, 0xb0, + 0xde, 0x9d, 0x8d, 0xd4, 0xdb, 0xb4, 0xb2, 0x26, 0x33, 0xa2, 0xcf, 0xc3, 0xb8, 0xbe, 0x62, 0xc5, + 0xf9, 0x77, 0x39, 0x5b, 0xa4, 0xd2, 0x56, 0x36, 0x97, 0x38, 0xd5, 0xea, 0xd5, 0x61, 0xd8, 0xa0, + 0x68, 0x13, 0xc8, 0x1e, 0x4b, 0x74, 0x13, 0x4a, 0x8d, 0xa6, 0x47, 0xfc, 0xb8, 0x5a, 0xeb, 0x15, + 0x83, 0x69, 0x59, 0xe0, 0x88, 0xc9, 0x11, 0xe1, 0xab, 0x79, 0x19, 0x56, 0x14, 0xec, 0x5f, 0x2d, + 0xc0, 0x7c, 0x9f, 0x58, 0xe8, 0x29, 0x55, 0xbe, 0x35, 0x90, 0x2a, 0x7f, 0x51, 0x66, 0x4e, 0x5d, + 0x4f, 0xa9, 0x2c, 0x52, 0x59, 0x51, 0x13, 0xc5, 0x45, 0x1a, 0x7f, 0x60, 0xd3, 0x6a, 0xfd, 0x35, + 0x60, 0xa8, 0xaf, 0x73, 0x80, 0xf1, 0x0a, 0x38, 0x3c, 0xf8, 0x3d, 0x29, 0xf7, 0x45, 0xc7, 0xfe, + 0x4a, 0x01, 0xce, 0xa8, 0x21, 0xfc, 0xc6, 0x1d, 0xb8, 0xdb, 0xdd, 0x03, 0x77, 0x0c, 0xef, 0x61, + 0xf6, 0x2d, 0x18, 0xe1, 0x41, 0xa5, 0x06, 0x90, 0xcf, 0x9e, 0x34, 0xe3, 0x2f, 0x2a, 0x91, 0xc0, + 0x88, 0xc1, 0xf8, 0xbd, 0x16, 0x4c, 0x6d, 0x2c, 0xd7, 0xea, 0x41, 0x63, 0x97, 0xc4, 0x8b, 0x5c, + 0x9e, 0xc6, 0x42, 0xd6, 0xb2, 0x1e, 0x52, 0x86, 0xca, 0x92, 0xce, 0x2e, 0xc1, 0xd0, 0x4e, 0x10, + 0xc5, 0xe9, 0xc7, 0xf2, 0xeb, 0x41, 0x14, 0x63, 0x06, 0xb1, 0x7f, 0xd7, 0x82, 0x61, 0x96, 0x2b, + 0xbc, 0x5f, 0xb6, 0xfa, 0x41, 0xbe, 0x0b, 0xbd, 0x0c, 0x23, 0x64, 0x6b, 0x8b, 0x34, 0x62, 0x31, + 0xab, 0xd2, 0xbb, 0x79, 0x64, 0x85, 0x95, 0x52, 0x01, 0x83, 0x35, 0xc6, 0xff, 0x62, 0x81, 0x8c, + 0xee, 0x42, 0x39, 0xf6, 0x5a, 0x64, 0xd1, 0x75, 0xc5, 0x73, 0xe3, 0x43, 0x78, 0x68, 0x6f, 0x48, + 0x02, 0x38, 0xa1, 0x65, 0x7f, 0xa9, 0x00, 0x90, 0x44, 0xfb, 0xe8, 0xf7, 0x89, 0x4b, 0x5d, 0x0f, + 0x51, 0x97, 0x33, 0x1e, 0xa2, 0x50, 0x42, 0x30, 0xe3, 0x15, 0x4a, 0x0d, 0x53, 0x71, 0xa0, 0x61, + 0x1a, 0x3a, 0xca, 0x30, 0x2d, 0xc3, 0x4c, 0x12, 0xad, 0xc4, 0x0c, 0xd6, 0xc4, 0xee, 0x50, 0x1b, + 0x69, 0x20, 0xee, 0xc6, 0xb7, 0x09, 0x5c, 0x52, 0x41, 0x1b, 0xc4, 0x59, 0xc3, 0xac, 0x59, 0xf5, + 0x87, 0xbd, 0x3e, 0xe3, 0x94, 0xbc, 0xb4, 0x15, 0x72, 0x5f, 0xda, 0x7e, 0xdc, 0x82, 0xd3, 0xe9, + 0x76, 0x98, 0x7b, 0xe1, 0x17, 0x2d, 0x38, 0xc3, 0xde, 0x1b, 0x59, 0xab, 0xdd, 0xaf, 0x9b, 0x2f, + 0xf5, 0x0c, 0x44, 0x91, 0xd3, 0xe3, 0xc4, 0x8d, 0x7e, 0x2d, 0x8b, 0x34, 0xce, 0x6e, 0xd1, 0xfe, + 0xf7, 0x05, 0x98, 0xcd, 0x8b, 0x60, 0xc1, 0x8c, 0xdd, 0x9d, 0xfb, 0xf5, 0x5d, 0x72, 0x4f, 0x98, + 0x14, 0x27, 0xc6, 0xee, 0xbc, 0x18, 0x4b, 0x78, 0x3a, 0xbc, 0x75, 0x61, 0xb0, 0xf0, 0xd6, 0x68, + 0x07, 0x66, 0xee, 0xed, 0x10, 0xff, 0xb6, 0x1f, 0x39, 0xb1, 0x17, 0x6d, 0x79, 0xec, 0xa1, 0x90, + 0xaf, 0x9b, 0x8f, 0x4b, 0xc3, 0xdf, 0xbb, 0x69, 0x84, 0xc3, 0x83, 0xf9, 0x0b, 0x46, 0x41, 0xd2, + 0x65, 0xce, 0x48, 0x70, 0x37, 0xd1, 0xee, 0xe8, 0xe0, 0x43, 0x8f, 0x30, 0x3a, 0xb8, 0xfd, 0x45, + 0x0b, 0xce, 0xe5, 0x66, 0xef, 0x43, 0x57, 0xa0, 0xe4, 0xb4, 0x3d, 0xae, 0x6b, 0x15, 0x6c, 0x94, + 0xe9, 0x0c, 0x6a, 0x55, 0xae, 0x69, 0x55, 0x50, 0x95, 0x55, 0xb8, 0x90, 0x9b, 0x55, 0xb8, 0x6f, + 0x92, 0x60, 0xfb, 0x7b, 0x2c, 0x10, 0x8e, 0x7a, 0x03, 0xf0, 0xee, 0xcf, 0xc8, 0xa4, 0xec, 0x46, + 0x06, 0x91, 0x4b, 0xf9, 0x9e, 0x8b, 0x22, 0x6f, 0x88, 0x92, 0x95, 0x8c, 0x6c, 0x21, 0x06, 0x2d, + 0xdb, 0x05, 0x01, 0xad, 0x10, 0xa6, 0xa9, 0xec, 0xdf, 0x9b, 0x17, 0x00, 0x5c, 0x86, 0xab, 0xa5, + 0x66, 0x56, 0x27, 0x73, 0x45, 0x41, 0xb0, 0x86, 0x65, 0xff, 0x9b, 0x02, 0x8c, 0xc9, 0x8c, 0x15, + 0x1d, 0x7f, 0x10, 0x7d, 0xc2, 0x91, 0x52, 0xd8, 0xb1, 0x5c, 0xe6, 0x94, 0x70, 0x2d, 0x51, 0xc3, + 0x24, 0xb9, 0xcc, 0x25, 0x00, 0x27, 0x38, 0x74, 0x17, 0x45, 0x9d, 0x4d, 0x86, 0x9e, 0x72, 0x2b, + 0xab, 0xf3, 0x62, 0x2c, 0xe1, 0xe8, 0x53, 0x30, 0xcd, 0xeb, 0x85, 0x41, 0xdb, 0xd9, 0xe6, 0x4a, + 0xec, 0x61, 0xe5, 0x0f, 0x3e, 0xbd, 0x96, 0x82, 0x1d, 0x1e, 0xcc, 0x9f, 0x4e, 0x97, 0xb1, 0xd7, + 0x99, 0x2e, 0x2a, 0xcc, 0x3c, 0x84, 0x37, 0x42, 0x77, 0x7f, 0x97, 0x55, 0x49, 0x02, 0xc2, 0x3a, + 0x9e, 0xfd, 0x79, 0x40, 0xdd, 0xb9, 0x3b, 0xd0, 0xeb, 0xdc, 0x26, 0xd0, 0x0b, 0x89, 0xdb, 0xeb, + 0xb5, 0x46, 0xf7, 0x7a, 0x96, 0x1e, 0x21, 0xbc, 0x16, 0x56, 0xf5, 0xed, 0xff, 0xbf, 0x08, 0xd3, + 0x69, 0x1f, 0x58, 0x74, 0x1d, 0x46, 0xb8, 0xe8, 0x21, 0xc8, 0xf7, 0x30, 0x06, 0xd0, 0x3c, 0x67, + 0x19, 0x13, 0x16, 0xd2, 0x8b, 0xa8, 0x8f, 0xde, 0x84, 0x31, 0x37, 0xb8, 0xe7, 0xdf, 0x73, 0x42, + 0x77, 0xb1, 0x56, 0x15, 0xcb, 0x39, 0xf3, 0xb6, 0x54, 0x49, 0xd0, 0x74, 0x6f, 0x5c, 0xf6, 0xf0, + 0x95, 0x80, 0xb0, 0x4e, 0x0e, 0x6d, 0xb0, 0x50, 0xc3, 0x5b, 0xde, 0xf6, 0x9a, 0xd3, 0xee, 0x65, + 0x20, 0xbe, 0x2c, 0x91, 0x34, 0xca, 0x13, 0x22, 0x1e, 0x31, 0x07, 0xe0, 0x84, 0x10, 0xfa, 0x36, + 0x38, 0x15, 0xe5, 0xe8, 0x64, 0xf3, 0x52, 0x39, 0xf5, 0x52, 0x53, 0x2e, 0x3d, 0x46, 0xef, 0xb1, + 0x59, 0xda, 0xdb, 0xac, 0x66, 0xec, 0x5f, 0x3b, 0x05, 0xc6, 0x26, 0x36, 0x32, 0xfb, 0x59, 0xc7, + 0x94, 0xd9, 0x0f, 0x43, 0x89, 0xb4, 0xda, 0xf1, 0x7e, 0xc5, 0x0b, 0x7b, 0xa5, 0x86, 0x5d, 0x11, + 0x38, 0xdd, 0x34, 0x25, 0x04, 0x2b, 0x3a, 0xd9, 0xe9, 0x17, 0x8b, 0x5f, 0xc7, 0xf4, 0x8b, 0x43, + 0x27, 0x98, 0x7e, 0x71, 0x1d, 0x46, 0xb7, 0xbd, 0x18, 0x93, 0x76, 0x20, 0x84, 0xfe, 0xcc, 0x75, + 0x78, 0x8d, 0xa3, 0x74, 0x27, 0xfa, 0x12, 0x00, 0x2c, 0x89, 0xa0, 0xd7, 0xd5, 0x0e, 0x1c, 0xc9, + 0xbf, 0x33, 0x77, 0xbf, 0x5a, 0x67, 0xee, 0x41, 0x91, 0x64, 0x71, 0xf4, 0x61, 0x93, 0x2c, 0xae, + 0xca, 0xd4, 0x88, 0xa5, 0x7c, 0x6f, 0x0e, 0x96, 0xf9, 0xb0, 0x4f, 0x42, 0xc4, 0x3b, 0x7a, 0x3a, + 0xc9, 0x72, 0x3e, 0x27, 0x50, 0x99, 0x22, 0x07, 0x4c, 0x22, 0xf9, 0x3d, 0x16, 0x9c, 0x69, 0x67, + 0x65, 0x56, 0x15, 0x0f, 0xbc, 0x2f, 0x0f, 0x9c, 0x3a, 0xd6, 0x68, 0x90, 0x29, 0x6a, 0x32, 0xd1, + 0x70, 0x76, 0x73, 0x74, 0xa0, 0xc3, 0x4d, 0x57, 0x64, 0x41, 0x7c, 0x32, 0x27, 0x1b, 0x65, 0x8f, + 0x1c, 0x94, 0x1b, 0x19, 0x99, 0x0f, 0x3f, 0x98, 0x97, 0xf9, 0x70, 0xe0, 0x7c, 0x87, 0xaf, 0xab, + 0x3c, 0x94, 0x13, 0xf9, 0x4b, 0x89, 0x67, 0x99, 0xec, 0x9b, 0x7d, 0xf2, 0x75, 0x95, 0x7d, 0xb2, + 0x47, 0x9c, 0x4a, 0x9e, 0x5b, 0xb2, 0x6f, 0xce, 0x49, 0x2d, 0x6f, 0xe4, 0xd4, 0xf1, 0xe4, 0x8d, + 0x34, 0x8e, 0x1a, 0x9e, 0xba, 0xf0, 0x99, 0x3e, 0x47, 0x8d, 0x41, 0xb7, 0xf7, 0x61, 0xc3, 0x73, + 0x64, 0xce, 0x3c, 0x54, 0x8e, 0xcc, 0x3b, 0x7a, 0xce, 0x49, 0xd4, 0x27, 0xa9, 0x22, 0x45, 0x1a, + 0x30, 0xd3, 0xe4, 0x1d, 0xfd, 0x00, 0x3c, 0x95, 0x4f, 0x57, 0x9d, 0x73, 0xdd, 0x74, 0x33, 0x8f, + 0xc0, 0xae, 0x0c, 0x96, 0xa7, 0x4f, 0x26, 0x83, 0xe5, 0x99, 0x63, 0xcf, 0x60, 0x79, 0xf6, 0x04, + 0x32, 0x58, 0x3e, 0x76, 0x82, 0x19, 0x2c, 0xef, 0x30, 0xab, 0x08, 0x1e, 0xee, 0x44, 0xc4, 0xd5, + 0xcc, 0x8e, 0xe1, 0x98, 0x15, 0x13, 0x85, 0x7f, 0x9c, 0x02, 0xe1, 0x84, 0x54, 0x46, 0x66, 0xcc, + 0xd9, 0x47, 0x90, 0x19, 0x73, 0x3d, 0xc9, 0x8c, 0x79, 0x2e, 0x7f, 0xaa, 0x33, 0x4c, 0xd7, 0x73, + 0xf2, 0x61, 0xde, 0xd1, 0xf3, 0x58, 0x3e, 0xde, 0x43, 0x15, 0x9f, 0xa5, 0x78, 0xec, 0x91, 0xbd, + 0xf2, 0x35, 0x9e, 0xbd, 0xf2, 0x7c, 0x3e, 0x27, 0x4f, 0x1f, 0x77, 0x66, 0xce, 0xca, 0xef, 0x2b, + 0xc0, 0xc5, 0xde, 0xfb, 0x22, 0xd1, 0x7a, 0xd6, 0x92, 0x17, 0xc1, 0x94, 0xd6, 0x93, 0xdf, 0xad, + 0x12, 0xac, 0x81, 0x23, 0x61, 0x5d, 0x83, 0x19, 0x65, 0x9b, 0xde, 0xf4, 0x1a, 0xfb, 0x5a, 0x9a, + 0x7e, 0xe5, 0xcf, 0x5b, 0x4f, 0x23, 0xe0, 0xee, 0x3a, 0x68, 0x11, 0xa6, 0x8c, 0xc2, 0x6a, 0x45, + 0xdc, 0xa1, 0x94, 0x9a, 0xb5, 0x6e, 0x82, 0x71, 0x1a, 0xdf, 0xfe, 0xb2, 0x05, 0x8f, 0xe5, 0x24, + 0x87, 0x1a, 0x38, 0xd0, 0xd3, 0x16, 0x4c, 0xb5, 0xcd, 0xaa, 0x7d, 0xe2, 0xc1, 0x19, 0x29, 0xa8, + 0x54, 0x5f, 0x53, 0x00, 0x9c, 0x26, 0x6a, 0xff, 0x99, 0x05, 0x17, 0x7a, 0x5a, 0x7e, 0x21, 0x0c, + 0x67, 0xb7, 0x5b, 0x91, 0xb3, 0x1c, 0x12, 0x97, 0xf8, 0xb1, 0xe7, 0x34, 0xeb, 0x6d, 0xd2, 0xd0, + 0xf4, 0xd6, 0xcc, 0x84, 0xea, 0xda, 0x5a, 0x7d, 0xb1, 0x1b, 0x03, 0xe7, 0xd4, 0x44, 0xab, 0x80, + 0xba, 0x21, 0x62, 0x86, 0x59, 0xcc, 0xd8, 0x6e, 0x7a, 0x38, 0xa3, 0x06, 0xfa, 0x18, 0x4c, 0x28, + 0x8b, 0x32, 0x6d, 0xc6, 0x19, 0x03, 0xc6, 0x3a, 0x00, 0x9b, 0x78, 0x4b, 0x57, 0x7e, 0xe3, 0xf7, + 0x2f, 0x7e, 0xe0, 0xb7, 0x7e, 0xff, 0xe2, 0x07, 0x7e, 0xe7, 0xf7, 0x2f, 0x7e, 0xe0, 0x3b, 0x1e, + 0x5c, 0xb4, 0x7e, 0xe3, 0xc1, 0x45, 0xeb, 0xb7, 0x1e, 0x5c, 0xb4, 0x7e, 0xe7, 0xc1, 0x45, 0xeb, + 0xf7, 0x1e, 0x5c, 0xb4, 0xbe, 0xf4, 0x07, 0x17, 0x3f, 0xf0, 0x99, 0xc2, 0xde, 0xf3, 0xff, 0x27, + 0x00, 0x00, 0xff, 0xff, 0x1d, 0x3a, 0x6e, 0xe7, 0x9f, 0xfd, 0x00, 0x00, } func (m *AWSElasticBlockStoreVolumeSource) Marshal() (dAtA []byte, err error) { @@ -10039,11 +10038,6 @@ func (m *EventSeries) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l - i -= len(m.State) - copy(dAtA[i:], m.State) - i = encodeVarintGenerated(dAtA, i, uint64(len(m.State))) - i-- - dAtA[i] = 0x1a { size, err := m.LastObservedTime.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -20260,8 +20254,6 @@ func (m *EventSeries) Size() (n int) { n += 1 + sovGenerated(uint64(m.Count)) l = m.LastObservedTime.Size() n += 1 + l + sovGenerated(uint64(l)) - l = len(m.State) - n += 1 + l + sovGenerated(uint64(l)) return n } @@ -24424,7 +24416,6 @@ func (this *EventSeries) String() string { s := strings.Join([]string{`&EventSeries{`, `Count:` + fmt.Sprintf("%v", this.Count) + `,`, `LastObservedTime:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.LastObservedTime), "MicroTime", "v1.MicroTime", 1), `&`, ``, 1) + `,`, - `State:` + fmt.Sprintf("%v", this.State) + `,`, `}`, }, "") return s @@ -37033,38 +37024,6 @@ func (m *EventSeries) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 3: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field State", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowGenerated - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthGenerated - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.State = EventSeriesState(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/vendor/k8s.io/api/core/v1/generated.proto b/vendor/k8s.io/api/core/v1/generated.proto index d1cd8ebb4..5c5339aa7 100644 --- a/vendor/k8s.io/api/core/v1/generated.proto +++ b/vendor/k8s.io/api/core/v1/generated.proto @@ -459,7 +459,7 @@ message ConfigMap { // be updated (only object metadata can be modified). // If not set to true, the field can be modified at any time. // Defaulted to nil. - // This is an alpha field enabled by ImmutableEphemeralVolumes feature gate. + // This is a beta field enabled by ImmutableEphemeralVolumes feature gate. // +optional optional bool immutable = 4; @@ -588,8 +588,10 @@ message ConfigMapVolumeSource { // +optional repeated KeyToPath items = 2; - // Optional: mode bits to use on created files by default. Must be a - // value between 0 and 0777. Defaults to 0644. + // Optional: mode bits used to set permissions on created files by default. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. + // Defaults to 0644. // Directories within the path are not affected by this setting. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. @@ -957,8 +959,10 @@ message DownwardAPIVolumeFile { // +optional optional ResourceFieldSelector resourceFieldRef = 3; - // Optional: mode bits to use on this file, must be a value between 0 - // and 0777. If not specified, the volume defaultMode will be used. + // Optional: mode bits used to set permissions on this file, must be an octal value + // between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. + // If not specified, the volume defaultMode will be used. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. // +optional @@ -973,7 +977,10 @@ message DownwardAPIVolumeSource { repeated DownwardAPIVolumeFile items = 1; // Optional: mode bits to use on created files by default. Must be a - // value between 0 and 0777. Defaults to 0644. + // Optional: mode bits used to set permissions on created files by default. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. + // Defaults to 0644. // Directories within the path are not affected by this setting. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. @@ -1048,7 +1055,8 @@ message EndpointPort { // RFC-6335 and http://www.iana.org/assignments/service-names). // Non-standard protocols should use prefixed names such as // mycompany.com/my-custom-protocol. - // Field can be enabled with ServiceAppProtocol feature gate. + // This is a beta field that is guarded by the ServiceAppProtocol feature + // gate and enabled by default. // +optional optional string appProtocol = 4; } @@ -1158,7 +1166,7 @@ message EnvVar { // EnvVarSource represents a source for the value of an EnvVar. message EnvVarSource { - // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, + // Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, // spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. // +optional optional ObjectFieldSelector fieldRef = 1; @@ -1447,10 +1455,6 @@ message EventSeries { // Time of the last occurrence observed optional k8s.io.apimachinery.pkg.apis.meta.v1.MicroTime lastObservedTime = 2; - - // State of this Series: Ongoing or Finished - // Deprecated. Planned removal for 1.18 - optional string state = 3; } // EventSource contains information for an event. @@ -1880,8 +1884,10 @@ message KeyToPath { // May not start with the string '..'. optional string path = 2; - // Optional: mode bits to use on this file, must be a value between 0 - // and 0777. If not specified, the volume defaultMode will be used. + // Optional: mode bits used to set permissions on this file. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. + // If not specified, the volume defaultMode will be used. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. // +optional @@ -2277,7 +2283,7 @@ message NodeProxyOptions { } // NodeResources is an object for conveying resource information about a node. -// see http://releases.k8s.io/HEAD/docs/design/resources.md for more details. +// see https://kubernetes.io/docs/concepts/architecture/nodes/#capacity for more details. message NodeResources { // Capacity represents the available resources of a node map capacity = 1; @@ -2431,7 +2437,7 @@ message NodeSystemInfo { // SystemUUID reported by the node. For unique machine identification // MachineID is preferred. This field is specific to Red Hat hosts - // https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html + // https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid optional string systemUUID = 2; // Boot ID reported by the node. @@ -3537,7 +3543,6 @@ message PodSpec { // TopologySpreadConstraints describes how a group of pods ought to spread across topology // domains. Scheduler will schedule pods in a way which abides by the constraints. - // This field is only honored by clusters that enable the EvenPodsSpread feature. // All topologySpreadConstraints are ANDed. // +optional // +patchMergeKey=topologyKey @@ -3788,8 +3793,9 @@ message ProjectedVolumeSource { // list of volume projections repeated VolumeProjection sources = 1; - // Mode bits to use on created files by default. Must be a value between - // 0 and 0777. + // Mode bits used to set permissions on created files by default. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. // Directories within the path are not affected by this setting. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. @@ -4299,7 +4305,7 @@ message Secret { // be updated (only object metadata can be modified). // If not set to true, the field can be modified at any time. // Defaulted to nil. - // This is an alpha field enabled by ImmutableEphemeralVolumes feature gate. + // This is a beta field enabled by ImmutableEphemeralVolumes feature gate. // +optional optional bool immutable = 5; @@ -4419,8 +4425,10 @@ message SecretVolumeSource { // +optional repeated KeyToPath items = 2; - // Optional: mode bits to use on created files by default. Must be a - // value between 0 and 0777. Defaults to 0644. + // Optional: mode bits used to set permissions on created files by default. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values + // for mode bits. Defaults to 0644. // Directories within the path are not affected by this setting. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. @@ -4634,7 +4642,8 @@ message ServicePort { // RFC-6335 and http://www.iana.org/assignments/service-names). // Non-standard protocols should use prefixed names such as // mycompany.com/my-custom-protocol. - // Field can be enabled with ServiceAppProtocol feature gate. + // This is a beta field that is guarded by the ServiceAppProtocol feature + // gate and enabled by default. // +optional optional string appProtocol = 6; @@ -4994,8 +5003,8 @@ message TopologySelectorTerm { // TopologySpreadConstraint specifies how to spread matching pods among the given topology. message TopologySpreadConstraint { // MaxSkew describes the degree to which pods may be unevenly distributed. - // It's the maximum permitted difference between the number of matching pods in - // any two topology domains of a given topology type. + // When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference + // between the number of matching pods in the target topology and the global minimum. // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // labelSelector spread as 1/1/0: // +-------+-------+-------+ @@ -5007,6 +5016,8 @@ message TopologySpreadConstraint { // scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) // violate MaxSkew(1). // - if MaxSkew is 2, incoming pod can be scheduled onto any zone. + // When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence + // to topologies that satisfy it. // It's a required field. Default value is 1 and 0 is not allowed. optional int32 maxSkew = 1; @@ -5019,10 +5030,13 @@ message TopologySpreadConstraint { // WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy // the spread constraint. - // - DoNotSchedule (default) tells the scheduler not to schedule it - // - ScheduleAnyway tells the scheduler to still schedule it - // It's considered as "Unsatisfiable" if and only if placing incoming pod on any - // topology violates "MaxSkew". + // - DoNotSchedule (default) tells the scheduler not to schedule it. + // - ScheduleAnyway tells the scheduler to schedule the pod in any location, + // but giving higher precedence to topologies that would help reduce the + // skew. + // A constraint is considered "Unsatisfiable" for an incoming pod + // if and only if every possible node assigment for that pod would violate + // "MaxSkew" on some topology. // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // labelSelector spread as 3/1/1: // +-------+-------+-------+ diff --git a/vendor/k8s.io/api/core/v1/types.go b/vendor/k8s.io/api/core/v1/types.go index b61a86aba..ba0b4152b 100644 --- a/vendor/k8s.io/api/core/v1/types.go +++ b/vendor/k8s.io/api/core/v1/types.go @@ -1092,8 +1092,10 @@ type SecretVolumeSource struct { // relative and may not contain the '..' path or start with '..'. // +optional Items []KeyToPath `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` - // Optional: mode bits to use on created files by default. Must be a - // value between 0 and 0777. Defaults to 0644. + // Optional: mode bits used to set permissions on created files by default. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values + // for mode bits. Defaults to 0644. // Directories within the path are not affected by this setting. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. @@ -1518,8 +1520,10 @@ type ConfigMapVolumeSource struct { // relative and may not contain the '..' path or start with '..'. // +optional Items []KeyToPath `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` - // Optional: mode bits to use on created files by default. Must be a - // value between 0 and 0777. Defaults to 0644. + // Optional: mode bits used to set permissions on created files by default. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. + // Defaults to 0644. // Directories within the path are not affected by this setting. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. @@ -1585,8 +1589,9 @@ type ServiceAccountTokenProjection struct { type ProjectedVolumeSource struct { // list of volume projections Sources []VolumeProjection `json:"sources" protobuf:"bytes,1,rep,name=sources"` - // Mode bits to use on created files by default. Must be a value between - // 0 and 0777. + // Mode bits used to set permissions on created files by default. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. // Directories within the path are not affected by this setting. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. @@ -1626,8 +1631,10 @@ type KeyToPath struct { // May not contain the path element '..'. // May not start with the string '..'. Path string `json:"path" protobuf:"bytes,2,opt,name=path"` - // Optional: mode bits to use on this file, must be a value between 0 - // and 0777. If not specified, the volume defaultMode will be used. + // Optional: mode bits used to set permissions on this file. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. + // If not specified, the volume defaultMode will be used. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. // +optional @@ -1850,7 +1857,7 @@ type EnvVar struct { // EnvVarSource represents a source for the value of an EnvVar. type EnvVarSource struct { - // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, + // Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, // spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. // +optional FieldRef *ObjectFieldSelector `json:"fieldRef,omitempty" protobuf:"bytes,1,opt,name=fieldRef"` @@ -3040,7 +3047,6 @@ type PodSpec struct { Overhead ResourceList `json:"overhead,omitempty" protobuf:"bytes,32,opt,name=overhead"` // TopologySpreadConstraints describes how a group of pods ought to spread across topology // domains. Scheduler will schedule pods in a way which abides by the constraints. - // This field is only honored by clusters that enable the EvenPodsSpread feature. // All topologySpreadConstraints are ANDed. // +optional // +patchMergeKey=topologyKey @@ -3065,8 +3071,8 @@ const ( // TopologySpreadConstraint specifies how to spread matching pods among the given topology. type TopologySpreadConstraint struct { // MaxSkew describes the degree to which pods may be unevenly distributed. - // It's the maximum permitted difference between the number of matching pods in - // any two topology domains of a given topology type. + // When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference + // between the number of matching pods in the target topology and the global minimum. // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // labelSelector spread as 1/1/0: // +-------+-------+-------+ @@ -3078,6 +3084,8 @@ type TopologySpreadConstraint struct { // scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) // violate MaxSkew(1). // - if MaxSkew is 2, incoming pod can be scheduled onto any zone. + // When `whenUnsatisfiable=ScheduleAnyway`, it is used to give higher precedence + // to topologies that satisfy it. // It's a required field. Default value is 1 and 0 is not allowed. MaxSkew int32 `json:"maxSkew" protobuf:"varint,1,opt,name=maxSkew"` // TopologyKey is the key of node labels. Nodes that have a label with this key @@ -3088,10 +3096,13 @@ type TopologySpreadConstraint struct { TopologyKey string `json:"topologyKey" protobuf:"bytes,2,opt,name=topologyKey"` // WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy // the spread constraint. - // - DoNotSchedule (default) tells the scheduler not to schedule it - // - ScheduleAnyway tells the scheduler to still schedule it - // It's considered as "Unsatisfiable" if and only if placing incoming pod on any - // topology violates "MaxSkew". + // - DoNotSchedule (default) tells the scheduler not to schedule it. + // - ScheduleAnyway tells the scheduler to schedule the pod in any location, + // but giving higher precedence to topologies that would help reduce the + // skew. + // A constraint is considered "Unsatisfiable" for an incoming pod + // if and only if every possible node assigment for that pod would violate + // "MaxSkew" on some topology. // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same // labelSelector spread as 3/1/1: // +-------+-------+-------+ @@ -4020,7 +4031,8 @@ type ServicePort struct { // RFC-6335 and http://www.iana.org/assignments/service-names). // Non-standard protocols should use prefixed names such as // mycompany.com/my-custom-protocol. - // Field can be enabled with ServiceAppProtocol feature gate. + // This is a beta field that is guarded by the ServiceAppProtocol feature + // gate and enabled by default. // +optional AppProtocol *string `json:"appProtocol,omitempty" protobuf:"bytes,6,opt,name=appProtocol"` @@ -4246,7 +4258,8 @@ type EndpointPort struct { // RFC-6335 and http://www.iana.org/assignments/service-names). // Non-standard protocols should use prefixed names such as // mycompany.com/my-custom-protocol. - // Field can be enabled with ServiceAppProtocol feature gate. + // This is a beta field that is guarded by the ServiceAppProtocol feature + // gate and enabled by default. // +optional AppProtocol *string `json:"appProtocol,omitempty" protobuf:"bytes,4,opt,name=appProtocol"` } @@ -4368,7 +4381,7 @@ type NodeSystemInfo struct { MachineID string `json:"machineID" protobuf:"bytes,1,opt,name=machineID"` // SystemUUID reported by the node. For unique machine identification // MachineID is preferred. This field is specific to Red Hat hosts - // https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html + // https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid SystemUUID string `json:"systemUUID" protobuf:"bytes,2,opt,name=systemUUID"` // Boot ID reported by the node. BootID string `json:"bootID" protobuf:"bytes,3,opt,name=bootID"` @@ -5206,19 +5219,10 @@ type EventSeries struct { Count int32 `json:"count,omitempty" protobuf:"varint,1,name=count"` // Time of the last occurrence observed LastObservedTime metav1.MicroTime `json:"lastObservedTime,omitempty" protobuf:"bytes,2,name=lastObservedTime"` - // State of this Series: Ongoing or Finished - // Deprecated. Planned removal for 1.18 - State EventSeriesState `json:"state,omitempty" protobuf:"bytes,3,name=state"` + + // +k8s:deprecated=state,protobuf=3 } -type EventSeriesState string - -const ( - EventSeriesStateOngoing EventSeriesState = "Ongoing" - EventSeriesStateFinished EventSeriesState = "Finished" - EventSeriesStateUnknown EventSeriesState = "Unknown" -) - // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object // EventList is a list of events. @@ -5486,7 +5490,7 @@ type Secret struct { // be updated (only object metadata can be modified). // If not set to true, the field can be modified at any time. // Defaulted to nil. - // This is an alpha field enabled by ImmutableEphemeralVolumes feature gate. + // This is a beta field enabled by ImmutableEphemeralVolumes feature gate. // +optional Immutable *bool `json:"immutable,omitempty" protobuf:"varint,5,opt,name=immutable"` @@ -5627,7 +5631,7 @@ type ConfigMap struct { // be updated (only object metadata can be modified). // If not set to true, the field can be modified at any time. // Defaulted to nil. - // This is an alpha field enabled by ImmutableEphemeralVolumes feature gate. + // This is a beta field enabled by ImmutableEphemeralVolumes feature gate. // +optional Immutable *bool `json:"immutable,omitempty" protobuf:"varint,4,opt,name=immutable"` @@ -5730,7 +5734,10 @@ type DownwardAPIVolumeSource struct { // +optional Items []DownwardAPIVolumeFile `json:"items,omitempty" protobuf:"bytes,1,rep,name=items"` // Optional: mode bits to use on created files by default. Must be a - // value between 0 and 0777. Defaults to 0644. + // Optional: mode bits used to set permissions on created files by default. + // Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. + // Defaults to 0644. // Directories within the path are not affected by this setting. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. @@ -5753,8 +5760,10 @@ type DownwardAPIVolumeFile struct { // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. // +optional ResourceFieldRef *ResourceFieldSelector `json:"resourceFieldRef,omitempty" protobuf:"bytes,3,opt,name=resourceFieldRef"` - // Optional: mode bits to use on this file, must be a value between 0 - // and 0777. If not specified, the volume defaultMode will be used. + // Optional: mode bits used to set permissions on this file, must be an octal value + // between 0000 and 0777 or a decimal value between 0 and 511. + // YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. + // If not specified, the volume defaultMode will be used. // This might be in conflict with other options that affect the file // mode, like fsGroup, and the result can be other mode bits set. // +optional @@ -5920,7 +5929,7 @@ type Sysctl struct { } // NodeResources is an object for conveying resource information about a node. -// see http://releases.k8s.io/HEAD/docs/design/resources.md for more details. +// see https://kubernetes.io/docs/concepts/architecture/nodes/#capacity for more details. type NodeResources struct { // Capacity represents the available resources of a node Capacity ResourceList `protobuf:"bytes,1,rep,name=capacity,casttype=ResourceList,castkey=ResourceName"` 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 331451fe2..ebba6a55a 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 @@ -252,7 +252,7 @@ func (ComponentStatusList) SwaggerDoc() map[string]string { var map_ConfigMap = map[string]string{ "": "ConfigMap holds configuration data for pods to consume.", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "immutable": "Immutable, if set to true, ensures that data stored in the ConfigMap cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil. This is an alpha field enabled by ImmutableEphemeralVolumes feature gate.", + "immutable": "Immutable, if set to true, ensures that data stored in the ConfigMap cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil. This is a beta field enabled by ImmutableEphemeralVolumes feature gate.", "data": "Data contains the configuration data. Each key must consist of alphanumeric characters, '-', '_' or '.'. Values with non-UTF-8 byte sequences must use the BinaryData field. The keys stored in Data must not overlap with the keys in the BinaryData field, this is enforced during validation process.", "binaryData": "BinaryData contains the binary data. Each key must consist of alphanumeric characters, '-', '_' or '.'. BinaryData can contain byte sequences that are not in the UTF-8 range. The keys stored in BinaryData must not overlap with the ones in the Data field, this is enforced during validation process. Using this field will require 1.10+ apiserver and kubelet.", } @@ -316,7 +316,7 @@ func (ConfigMapProjection) SwaggerDoc() map[string]string { var map_ConfigMapVolumeSource = map[string]string{ "": "Adapts a ConfigMap into a volume.\n\nThe contents of the target ConfigMap's Data field will be presented in a volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. ConfigMap volumes support ownership management and SELinux relabeling.", "items": "If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "defaultMode": "Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", "optional": "Specify whether the ConfigMap or its keys must be defined", } @@ -462,7 +462,7 @@ var map_DownwardAPIVolumeFile = map[string]string{ "path": "Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..'", "fieldRef": "Required: Selects a field of the pod: only annotations, labels, name and namespace are supported.", "resourceFieldRef": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.", - "mode": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "mode": "Optional: mode bits used to set permissions on this file, must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (DownwardAPIVolumeFile) SwaggerDoc() map[string]string { @@ -472,7 +472,7 @@ func (DownwardAPIVolumeFile) SwaggerDoc() map[string]string { var map_DownwardAPIVolumeSource = map[string]string{ "": "DownwardAPIVolumeSource represents a volume containing downward API info. Downward API volumes support ownership management and SELinux relabeling.", "items": "Items is a list of downward API volume file", - "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "defaultMode": "Optional: mode bits to use on created files by default. Must be a Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (DownwardAPIVolumeSource) SwaggerDoc() map[string]string { @@ -506,7 +506,7 @@ var map_EndpointPort = map[string]string{ "name": "The name of this port. This must match the 'name' field in the corresponding ServicePort. Must be a DNS_LABEL. Optional only if one port is defined.", "port": "The port number of the endpoint.", "protocol": "The IP protocol for this port. Must be UDP, TCP, or SCTP. Default is TCP.", - "appProtocol": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. Field can be enabled with ServiceAppProtocol feature gate.", + "appProtocol": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. This is a beta field that is guarded by the ServiceAppProtocol feature gate and enabled by default.", } func (EndpointPort) SwaggerDoc() map[string]string { @@ -568,7 +568,7 @@ func (EnvVar) SwaggerDoc() map[string]string { var map_EnvVarSource = map[string]string{ "": "EnvVarSource represents a source for the value of an EnvVar.", - "fieldRef": "Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.", + "fieldRef": "Selects a field of the pod: supports metadata.name, metadata.namespace, `metadata.labels['']`, `metadata.annotations['']`, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs.", "resourceFieldRef": "Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported.", "configMapKeyRef": "Selects a key of a ConfigMap.", "secretKeyRef": "Selects a key of a secret in the pod's namespace", @@ -663,7 +663,6 @@ var map_EventSeries = map[string]string{ "": "EventSeries contain information on series of events, i.e. thing that was/is happening continuously for some time.", "count": "Number of occurrences in this series up to the last heartbeat time", "lastObservedTime": "Time of the last occurrence observed", - "state": "State of this Series: Ongoing or Finished Deprecated. Planned removal for 1.18", } func (EventSeries) SwaggerDoc() map[string]string { @@ -880,7 +879,7 @@ var map_KeyToPath = map[string]string{ "": "Maps a string key to a path within a volume.", "key": "The key to project.", "path": "The relative path of the file to map the key to. May not be an absolute path. May not contain the path element '..'. May not start with the string '..'.", - "mode": "Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "mode": "Optional: mode bits used to set permissions on this file. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (KeyToPath) SwaggerDoc() map[string]string { @@ -1134,7 +1133,7 @@ func (NodeProxyOptions) SwaggerDoc() map[string]string { } var map_NodeResources = map[string]string{ - "": "NodeResources is an object for conveying resource information about a node. see http://releases.k8s.io/HEAD/docs/design/resources.md for more details.", + "": "NodeResources is an object for conveying resource information about a node. see https://kubernetes.io/docs/concepts/architecture/nodes/#capacity for more details.", "Capacity": "Capacity represents the available resources of a node", } @@ -1209,7 +1208,7 @@ func (NodeStatus) SwaggerDoc() map[string]string { var map_NodeSystemInfo = map[string]string{ "": "NodeSystemInfo is a set of ids/uuids to uniquely identify the node.", "machineID": "MachineID reported by the node. For unique machine identification in the cluster this field is preferred. Learn more from man(5) machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html", - "systemUUID": "SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html", + "systemUUID": "SystemUUID reported by the node. For unique machine identification MachineID is preferred. This field is specific to Red Hat hosts https://access.redhat.com/documentation/en-us/red_hat_subscription_management/1/html/rhsm/uuid", "bootID": "Boot ID reported by the node.", "kernelVersion": "Kernel Version reported by the node from 'uname -r' (e.g. 3.16.0-0.bpo.4-amd64).", "osImage": "OS Image reported by the node from /etc/os-release (e.g. Debian GNU/Linux 7 (wheezy)).", @@ -1634,7 +1633,7 @@ var map_PodSpec = map[string]string{ "enableServiceLinks": "EnableServiceLinks indicates whether information about services should be injected into pod's environment variables, matching the syntax of Docker links. Optional: Defaults to true.", "preemptionPolicy": "PreemptionPolicy is the Policy for preempting pods with lower priority. One of Never, PreemptLowerPriority. Defaults to PreemptLowerPriority if unset. This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature.", "overhead": "Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. This field will be autopopulated at admission time by the RuntimeClass admission controller. If the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. The RuntimeClass admission controller will reject Pod create requests which have the overhead already set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature.", - "topologySpreadConstraints": "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. This field is only honored by clusters that enable the EvenPodsSpread feature. All topologySpreadConstraints are ANDed.", + "topologySpreadConstraints": "TopologySpreadConstraints describes how a group of pods ought to spread across topology domains. Scheduler will schedule pods in a way which abides by the constraints. All topologySpreadConstraints are ANDed.", } func (PodSpec) SwaggerDoc() map[string]string { @@ -1760,7 +1759,7 @@ func (Probe) SwaggerDoc() map[string]string { var map_ProjectedVolumeSource = map[string]string{ "": "Represents a projected volume source", "sources": "list of volume projections", - "defaultMode": "Mode bits to use on created files by default. Must be a value between 0 and 0777. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "defaultMode": "Mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", } func (ProjectedVolumeSource) SwaggerDoc() map[string]string { @@ -2018,7 +2017,7 @@ func (ScopedResourceSelectorRequirement) SwaggerDoc() map[string]string { var map_Secret = map[string]string{ "": "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.", "metadata": "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata", - "immutable": "Immutable, if set to true, ensures that data stored in the Secret cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil. This is an alpha field enabled by ImmutableEphemeralVolumes feature gate.", + "immutable": "Immutable, if set to true, ensures that data stored in the Secret cannot be updated (only object metadata can be modified). If not set to true, the field can be modified at any time. Defaulted to nil. This is a beta field enabled by ImmutableEphemeralVolumes feature gate.", "data": "Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4", "stringData": "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.", "type": "Used to facilitate programmatic handling of secret data.", @@ -2081,7 +2080,7 @@ var map_SecretVolumeSource = map[string]string{ "": "Adapts a Secret into a volume.\n\nThe contents of the target Secret's Data field will be presented in a volume as files using the keys in the Data field as the file names. Secret volumes support ownership management and SELinux relabeling.", "secretName": "Name of the secret in the pod's namespace to use. More info: https://kubernetes.io/docs/concepts/storage/volumes#secret", "items": "If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the '..' path or start with '..'.", - "defaultMode": "Optional: mode bits to use on created files by default. Must be a value between 0 and 0777. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", + "defaultMode": "Optional: mode bits used to set permissions on created files by default. Must be an octal value between 0000 and 0777 or a decimal value between 0 and 511. YAML accepts both octal and decimal values, JSON requires decimal values for mode bits. Defaults to 0644. Directories within the path are not affected by this setting. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.", "optional": "Specify whether the Secret or its keys must be defined", } @@ -2174,7 +2173,7 @@ var map_ServicePort = map[string]string{ "": "ServicePort contains information on service's port.", "name": "The name of this port within the service. This must be a DNS_LABEL. All ports within a ServiceSpec must have unique names. When considering the endpoints for a Service, this must match the 'name' field in the EndpointPort. Optional if only one ServicePort is defined on this service.", "protocol": "The IP protocol for this port. Supports \"TCP\", \"UDP\", and \"SCTP\". Default is TCP.", - "appProtocol": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. Field can be enabled with ServiceAppProtocol feature gate.", + "appProtocol": "The application protocol for this port. This field follows standard Kubernetes label syntax. Un-prefixed names are reserved for IANA standard service names (as per RFC-6335 and http://www.iana.org/assignments/service-names). Non-standard protocols should use prefixed names such as mycompany.com/my-custom-protocol. This is a beta field that is guarded by the ServiceAppProtocol feature gate and enabled by default.", "port": "The port that will be exposed by this service.", "targetPort": "Number or name of the port to access on the pods targeted by the service. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME. If this is a string, it will be looked up as a named port in the target Pod's container ports. If this is not specified, the value of the 'port' field is used (an identity map). This field is ignored for services with clusterIP=None, and should be omitted or set equal to the 'port' field. More info: https://kubernetes.io/docs/concepts/services-networking/service/#defining-a-service", "nodePort": "The port on each node on which this service is exposed when type=NodePort or LoadBalancer. Usually assigned by the system. If specified, it will be allocated to the service if unused or else creation of the service will fail. Default is to auto-allocate a port if the ServiceType of this Service requires one. More info: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport", @@ -2326,9 +2325,9 @@ func (TopologySelectorTerm) SwaggerDoc() map[string]string { var map_TopologySpreadConstraint = map[string]string{ "": "TopologySpreadConstraint specifies how to spread matching pods among the given topology.", - "maxSkew": "MaxSkew describes the degree to which pods may be unevenly distributed. It's the maximum permitted difference between the number of matching pods in any two topology domains of a given topology type. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: ", + "maxSkew": "MaxSkew describes the degree to which pods may be unevenly distributed. When `whenUnsatisfiable=DoNotSchedule`, it is the maximum permitted difference between the number of matching pods in the target topology and the global minimum. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 1/1/0: ", "topologyKey": "TopologyKey is the key of node labels. Nodes that have a label with this key and identical values are considered to be in the same topology. We consider each as a \"bucket\", and try to put balanced number of pods into each bucket. It's a required field.", - "whenUnsatisfiable": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it - ScheduleAnyway tells the scheduler to still schedule it It's considered as \"Unsatisfiable\" if and only if placing incoming pod on any topology violates \"MaxSkew\". For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: ", + "whenUnsatisfiable": "WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy the spread constraint. - DoNotSchedule (default) tells the scheduler not to schedule it. - ScheduleAnyway tells the scheduler to schedule the pod in any location,\n but giving higher precedence to topologies that would help reduce the\n skew.\nA constraint is considered \"Unsatisfiable\" for an incoming pod if and only if every possible node assigment for that pod would violate \"MaxSkew\" on some topology. For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same labelSelector spread as 3/1/1: ", "labelSelector": "LabelSelector is used to find matching pods. Pods that match this label selector are counted to determine the number of pods in their corresponding topology domain.", } diff --git a/vendor/k8s.io/api/go.mod b/vendor/k8s.io/api/go.mod index a762d201d..cefa5bf24 100644 --- a/vendor/k8s.io/api/go.mod +++ b/vendor/k8s.io/api/go.mod @@ -7,11 +7,11 @@ go 1.13 require ( github.com/gogo/protobuf v1.3.1 github.com/stretchr/testify v1.4.0 - k8s.io/apimachinery v0.18.2 + k8s.io/apimachinery v0.19.0-beta.2 ) replace ( golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 - k8s.io/apimachinery => k8s.io/apimachinery v0.18.2 + k8s.io/apimachinery => k8s.io/apimachinery v0.19.0-beta.2 ) diff --git a/vendor/k8s.io/apimachinery/go.mod b/vendor/k8s.io/apimachinery/go.mod index 99c25891b..bc7734919 100644 --- a/vendor/k8s.io/apimachinery/go.mod +++ b/vendor/k8s.io/apimachinery/go.mod @@ -9,30 +9,29 @@ require ( github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 github.com/evanphx/json-patch v4.2.0+incompatible + github.com/fsnotify/fsnotify v1.4.9 // indirect github.com/gogo/protobuf v1.3.1 - github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 - github.com/golang/protobuf v1.3.2 - github.com/google/go-cmp v0.3.0 + github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 + github.com/golang/protobuf v1.4.2 + github.com/google/go-cmp v0.4.0 github.com/google/gofuzz v1.1.0 github.com/google/uuid v1.1.1 - github.com/googleapis/gnostic v0.1.0 + github.com/googleapis/gnostic v0.4.1 github.com/hashicorp/golang-lru v0.5.1 - github.com/json-iterator/go v1.1.8 - github.com/kr/pretty v0.1.0 // indirect + github.com/json-iterator/go v1.1.9 github.com/modern-go/reflect2 v1.0.1 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f github.com/onsi/ginkgo v1.11.0 // indirect github.com/onsi/gomega v1.7.0 // indirect github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.4.0 - golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 - golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7 // indirect + golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e + golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f // indirect golang.org/x/text v0.3.2 // indirect - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect gopkg.in/inf.v0 v0.9.1 gopkg.in/yaml.v2 v2.2.8 - k8s.io/klog v1.0.0 - k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c + k8s.io/klog/v2 v2.1.0 + k8s.io/kube-openapi v0.0.0-20200427153329-656914f816f9 sigs.k8s.io/structured-merge-diff/v3 v3.0.0 sigs.k8s.io/yaml v1.2.0 ) diff --git a/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go b/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go index e53c3e61f..d3927d817 100644 --- a/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go +++ b/vendor/k8s.io/apimachinery/pkg/api/errors/errors.go @@ -18,6 +18,7 @@ package errors import ( "encoding/json" + "errors" "fmt" "net/http" "reflect" @@ -29,14 +30,6 @@ import ( "k8s.io/apimachinery/pkg/util/validation/field" ) -const ( - // StatusTooManyRequests means the server experienced too many requests within a - // given window and that the client must wait to perform the action again. - // DEPRECATED: please use http.StatusTooManyRequests, this will be removed in - // the future version. - StatusTooManyRequests = http.StatusTooManyRequests -) - // StatusError is an error intended for consumption by a REST API server; it can also be // reconstructed by clients from a REST response. Public to allow easy type switches. type StatusError struct { @@ -483,127 +476,141 @@ func NewGenericServerResponse(code int, verb string, qualifiedResource schema.Gr } // IsNotFound returns true if the specified error was created by NewNotFound. +// It supports wrapped errors. func IsNotFound(err error) bool { return ReasonForError(err) == metav1.StatusReasonNotFound } // IsAlreadyExists determines if the err is an error which indicates that a specified resource already exists. +// It supports wrapped errors. func IsAlreadyExists(err error) bool { return ReasonForError(err) == metav1.StatusReasonAlreadyExists } // IsConflict determines if the err is an error which indicates the provided update conflicts. +// It supports wrapped errors. func IsConflict(err error) bool { return ReasonForError(err) == metav1.StatusReasonConflict } // IsInvalid determines if the err is an error which indicates the provided resource is not valid. +// It supports wrapped errors. func IsInvalid(err error) bool { return ReasonForError(err) == metav1.StatusReasonInvalid } // IsGone is true if the error indicates the requested resource is no longer available. +// It supports wrapped errors. func IsGone(err error) bool { return ReasonForError(err) == metav1.StatusReasonGone } // IsResourceExpired is true if the error indicates the resource has expired and the current action is // no longer possible. +// It supports wrapped errors. func IsResourceExpired(err error) bool { return ReasonForError(err) == metav1.StatusReasonExpired } // IsNotAcceptable determines if err is an error which indicates that the request failed due to an invalid Accept header +// It supports wrapped errors. func IsNotAcceptable(err error) bool { return ReasonForError(err) == metav1.StatusReasonNotAcceptable } // IsUnsupportedMediaType determines if err is an error which indicates that the request failed due to an invalid Content-Type header +// It supports wrapped errors. func IsUnsupportedMediaType(err error) bool { return ReasonForError(err) == metav1.StatusReasonUnsupportedMediaType } // IsMethodNotSupported determines if the err is an error which indicates the provided action could not // be performed because it is not supported by the server. +// It supports wrapped errors. func IsMethodNotSupported(err error) bool { return ReasonForError(err) == metav1.StatusReasonMethodNotAllowed } // IsServiceUnavailable is true if the error indicates the underlying service is no longer available. +// It supports wrapped errors. func IsServiceUnavailable(err error) bool { return ReasonForError(err) == metav1.StatusReasonServiceUnavailable } // IsBadRequest determines if err is an error which indicates that the request is invalid. +// It supports wrapped errors. func IsBadRequest(err error) bool { return ReasonForError(err) == metav1.StatusReasonBadRequest } // IsUnauthorized determines if err is an error which indicates that the request is unauthorized and // requires authentication by the user. +// It supports wrapped errors. func IsUnauthorized(err error) bool { return ReasonForError(err) == metav1.StatusReasonUnauthorized } // IsForbidden determines if err is an error which indicates that the request is forbidden and cannot // be completed as requested. +// It supports wrapped errors. func IsForbidden(err error) bool { return ReasonForError(err) == metav1.StatusReasonForbidden } // IsTimeout determines if err is an error which indicates that request times out due to long // processing. +// It supports wrapped errors. func IsTimeout(err error) bool { return ReasonForError(err) == metav1.StatusReasonTimeout } // IsServerTimeout determines if err is an error which indicates that the request needs to be retried // by the client. +// It supports wrapped errors. func IsServerTimeout(err error) bool { return ReasonForError(err) == metav1.StatusReasonServerTimeout } // IsInternalError determines if err is an error which indicates an internal server error. +// It supports wrapped errors. func IsInternalError(err error) bool { return ReasonForError(err) == metav1.StatusReasonInternalError } // IsTooManyRequests determines if err is an error which indicates that there are too many requests // that the server cannot handle. +// It supports wrapped errors. func IsTooManyRequests(err error) bool { if ReasonForError(err) == metav1.StatusReasonTooManyRequests { return true } - switch t := err.(type) { - case APIStatus: - return t.Status().Code == http.StatusTooManyRequests + if status := APIStatus(nil); errors.As(err, &status) { + return status.Status().Code == http.StatusTooManyRequests } return false } // IsRequestEntityTooLargeError determines if err is an error which indicates // the request entity is too large. +// It supports wrapped errors. func IsRequestEntityTooLargeError(err error) bool { if ReasonForError(err) == metav1.StatusReasonRequestEntityTooLarge { return true } - switch t := err.(type) { - case APIStatus: - return t.Status().Code == http.StatusRequestEntityTooLarge + if status := APIStatus(nil); errors.As(err, &status) { + return status.Status().Code == http.StatusRequestEntityTooLarge } return false } // IsUnexpectedServerError returns true if the server response was not in the expected API format, // and may be the result of another HTTP actor. +// It supports wrapped errors. func IsUnexpectedServerError(err error) bool { - switch t := err.(type) { - case APIStatus: - if d := t.Status().Details; d != nil { - for _, cause := range d.Causes { - if cause.Type == metav1.CauseTypeUnexpectedServerResponse { - return true - } + if status := APIStatus(nil); errors.As(err, &status) && status.Status().Details != nil { + for _, cause := range status.Status().Details.Causes { + if cause.Type == metav1.CauseTypeUnexpectedServerResponse { + return true } } } @@ -611,38 +618,37 @@ func IsUnexpectedServerError(err error) bool { } // IsUnexpectedObjectError determines if err is due to an unexpected object from the master. +// It supports wrapped errors. func IsUnexpectedObjectError(err error) bool { - _, ok := err.(*UnexpectedObjectError) - return err != nil && ok + uoe := &UnexpectedObjectError{} + return err != nil && errors.As(err, &uoe) } // SuggestsClientDelay returns true if this error suggests a client delay as well as the // suggested seconds to wait, or false if the error does not imply a wait. It does not // address whether the error *should* be retried, since some errors (like a 3xx) may // request delay without retry. +// It supports wrapped errors. func SuggestsClientDelay(err error) (int, bool) { - switch t := err.(type) { - case APIStatus: - if t.Status().Details != nil { - switch t.Status().Reason { - // this StatusReason explicitly requests the caller to delay the action - case metav1.StatusReasonServerTimeout: - return int(t.Status().Details.RetryAfterSeconds), true - } - // If the client requests that we retry after a certain number of seconds - if t.Status().Details.RetryAfterSeconds > 0 { - return int(t.Status().Details.RetryAfterSeconds), true - } + if t := APIStatus(nil); errors.As(err, &t) && t.Status().Details != nil { + switch t.Status().Reason { + // this StatusReason explicitly requests the caller to delay the action + case metav1.StatusReasonServerTimeout: + return int(t.Status().Details.RetryAfterSeconds), true + } + // If the client requests that we retry after a certain number of seconds + if t.Status().Details.RetryAfterSeconds > 0 { + return int(t.Status().Details.RetryAfterSeconds), true } } return 0, false } // ReasonForError returns the HTTP status for a particular error. +// It supports wrapped errors. func ReasonForError(err error) metav1.StatusReason { - switch t := err.(type) { - case APIStatus: - return t.Status().Reason + if status := APIStatus(nil); errors.As(err, &status) { + return status.Status().Reason } return metav1.StatusReasonUnknown } diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go deleted file mode 100644 index 2741ee2c8..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/doc.go +++ /dev/null @@ -1,20 +0,0 @@ -/* -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. -*/ - -// +k8s:deepcopy-gen=package -// +k8s:conversion-gen=k8s.io/apimachinery/pkg/apis/meta/v1 - -package internalversion // import "k8s.io/apimachinery/pkg/apis/meta/internalversion" diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go deleted file mode 100644 index ceb645278..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/register.go +++ /dev/null @@ -1,86 +0,0 @@ -/* -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 internalversion - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - metav1beta1 "k8s.io/apimachinery/pkg/apis/meta/v1beta1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// GroupName is the group name for this API. -const GroupName = "meta.k8s.io" - -var ( - // TODO: move SchemeBuilder with zz_generated.deepcopy.go to k8s.io/api. - // localSchemeBuilder and AddToScheme will stay in k8s.io/kubernetes. - SchemeBuilder runtime.SchemeBuilder - localSchemeBuilder = &SchemeBuilder - AddToScheme = localSchemeBuilder.AddToScheme -) - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} - -// Kind takes an unqualified kind and returns a Group qualified GroupKind -func Kind(kind string) schema.GroupKind { - return SchemeGroupVersion.WithKind(kind).GroupKind() -} - -// addToGroupVersion registers common meta types into schemas. -func addToGroupVersion(scheme *runtime.Scheme) error { - if err := scheme.AddIgnoredConversionType(&metav1.TypeMeta{}, &metav1.TypeMeta{}); err != nil { - return err - } - // ListOptions is the only options struct which needs conversion (it exposes labels and fields - // as selectors for convenience). The other types have only a single representation today. - scheme.AddKnownTypes(SchemeGroupVersion, - &ListOptions{}, - &metav1.GetOptions{}, - &metav1.ExportOptions{}, - &metav1.DeleteOptions{}, - &metav1.CreateOptions{}, - &metav1.UpdateOptions{}, - ) - scheme.AddKnownTypes(SchemeGroupVersion, - &metav1.Table{}, - &metav1.TableOptions{}, - &metav1beta1.PartialObjectMetadata{}, - &metav1beta1.PartialObjectMetadataList{}, - ) - if err := metav1beta1.AddMetaToScheme(scheme); err != nil { - return err - } - if err := metav1.AddMetaToScheme(scheme); err != nil { - return err - } - // Allow delete options to be decoded across all version in this scheme (we may want to be more clever than this) - scheme.AddUnversionedTypes(SchemeGroupVersion, - &metav1.DeleteOptions{}, - &metav1.CreateOptions{}, - &metav1.UpdateOptions{}) - - metav1.AddToGroupVersion(scheme, metav1.SchemeGroupVersion) - return nil -} - -// Unlike other API groups, meta internal knows about all meta external versions, but keeps -// the logic for conversion private. -func init() { - localSchemeBuilder.Register(addToGroupVersion) -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go deleted file mode 100644 index 8d2544168..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/types.go +++ /dev/null @@ -1,76 +0,0 @@ -/* -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 internalversion - -import ( - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/fields" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/runtime" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ListOptions is the query options to a standard REST list call. -type ListOptions struct { - metav1.TypeMeta - - // A selector based on labels - LabelSelector labels.Selector - // A selector based on fields - FieldSelector fields.Selector - // If true, watch for changes to this list - Watch bool - // allowWatchBookmarks requests watch events with type "BOOKMARK". - // Servers that do not implement bookmarks may ignore this flag and - // bookmarks are sent at the server's discretion. Clients should not - // assume bookmarks are returned at any specific interval, nor may they - // assume the server will send any BOOKMARK event during a session. - // If this is not a watch, this field is ignored. - // If the feature gate WatchBookmarks is not enabled in apiserver, - // this field is ignored. - AllowWatchBookmarks bool - // When specified with a watch call, shows changes that occur after that particular version of a resource. - // Defaults to changes from the beginning of history. - // When specified for list: - // - if unset, then the result is returned from remote storage based on quorum-read flag; - // - if it's 0, then we simply return what we currently have in cache, no guarantee; - // - if set to non zero, then the result is at least as fresh as given rv. - ResourceVersion string - // Timeout for the list/watch call. - TimeoutSeconds *int64 - // Limit specifies the maximum number of results to return from the server. The server may - // not support this field on all resource types, but if it does and more results remain it - // will set the continue field on the returned list object. - Limit int64 - // Continue is a token returned by the server that lets a client retrieve chunks of results - // from the server by specifying limit. The server may reject requests for continuation tokens - // it does not recognize and will return a 410 error if the token can no longer be used because - // it has expired. - Continue string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// List holds a list of objects, which may not be known by the server. -type List struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []runtime.Object -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go deleted file mode 100644 index 35adbca12..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.conversion.go +++ /dev/null @@ -1,143 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 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 conversion-gen. DO NOT EDIT. - -package internalversion - -import ( - unsafe "unsafe" - - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - conversion "k8s.io/apimachinery/pkg/conversion" - runtime "k8s.io/apimachinery/pkg/runtime" -) - -func init() { - localSchemeBuilder.Register(RegisterConversions) -} - -// RegisterConversions adds conversion functions to the given scheme. -// Public to allow building arbitrary schemes. -func RegisterConversions(s *runtime.Scheme) error { - if err := s.AddGeneratedConversionFunc((*List)(nil), (*v1.List)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_internalversion_List_To_v1_List(a.(*List), b.(*v1.List), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1.List)(nil), (*List)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1_List_To_internalversion_List(a.(*v1.List), b.(*List), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*ListOptions)(nil), (*v1.ListOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_internalversion_ListOptions_To_v1_ListOptions(a.(*ListOptions), b.(*v1.ListOptions), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*v1.ListOptions)(nil), (*ListOptions)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1_ListOptions_To_internalversion_ListOptions(a.(*v1.ListOptions), b.(*ListOptions), scope) - }); err != nil { - return err - } - return nil -} - -func autoConvert_internalversion_List_To_v1_List(in *List, out *v1.List, s conversion.Scope) error { - out.ListMeta = in.ListMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]runtime.RawExtension, len(*in)) - for i := range *in { - if err := runtime.Convert_runtime_Object_To_runtime_RawExtension(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -// Convert_internalversion_List_To_v1_List is an autogenerated conversion function. -func Convert_internalversion_List_To_v1_List(in *List, out *v1.List, s conversion.Scope) error { - return autoConvert_internalversion_List_To_v1_List(in, out, s) -} - -func autoConvert_v1_List_To_internalversion_List(in *v1.List, out *List, s conversion.Scope) error { - out.ListMeta = in.ListMeta - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]runtime.Object, len(*in)) - for i := range *in { - if err := runtime.Convert_runtime_RawExtension_To_runtime_Object(&(*in)[i], &(*out)[i], s); err != nil { - return err - } - } - } else { - out.Items = nil - } - return nil -} - -// Convert_v1_List_To_internalversion_List is an autogenerated conversion function. -func Convert_v1_List_To_internalversion_List(in *v1.List, out *List, s conversion.Scope) error { - return autoConvert_v1_List_To_internalversion_List(in, out, s) -} - -func autoConvert_internalversion_ListOptions_To_v1_ListOptions(in *ListOptions, out *v1.ListOptions, s conversion.Scope) error { - if err := v1.Convert_labels_Selector_To_string(&in.LabelSelector, &out.LabelSelector, s); err != nil { - return err - } - if err := v1.Convert_fields_Selector_To_string(&in.FieldSelector, &out.FieldSelector, s); err != nil { - return err - } - out.Watch = in.Watch - out.AllowWatchBookmarks = in.AllowWatchBookmarks - out.ResourceVersion = in.ResourceVersion - out.TimeoutSeconds = (*int64)(unsafe.Pointer(in.TimeoutSeconds)) - out.Limit = in.Limit - out.Continue = in.Continue - return nil -} - -// Convert_internalversion_ListOptions_To_v1_ListOptions is an autogenerated conversion function. -func Convert_internalversion_ListOptions_To_v1_ListOptions(in *ListOptions, out *v1.ListOptions, s conversion.Scope) error { - return autoConvert_internalversion_ListOptions_To_v1_ListOptions(in, out, s) -} - -func autoConvert_v1_ListOptions_To_internalversion_ListOptions(in *v1.ListOptions, out *ListOptions, s conversion.Scope) error { - if err := v1.Convert_string_To_labels_Selector(&in.LabelSelector, &out.LabelSelector, s); err != nil { - return err - } - if err := v1.Convert_string_To_fields_Selector(&in.FieldSelector, &out.FieldSelector, s); err != nil { - return err - } - out.Watch = in.Watch - out.AllowWatchBookmarks = in.AllowWatchBookmarks - out.ResourceVersion = in.ResourceVersion - out.TimeoutSeconds = (*int64)(unsafe.Pointer(in.TimeoutSeconds)) - out.Limit = in.Limit - out.Continue = in.Continue - return nil -} - -// Convert_v1_ListOptions_To_internalversion_ListOptions is an autogenerated conversion function. -func Convert_v1_ListOptions_To_internalversion_ListOptions(in *v1.ListOptions, out *ListOptions, s conversion.Scope) error { - return autoConvert_v1_ListOptions_To_internalversion_ListOptions(in, out, s) -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.deepcopy.go deleted file mode 100644 index d5e4fc680..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/internalversion/zz_generated.deepcopy.go +++ /dev/null @@ -1,96 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 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 deepcopy-gen. DO NOT EDIT. - -package internalversion - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *List) DeepCopyInto(out *List) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]runtime.Object, len(*in)) - for i := range *in { - if (*in)[i] != nil { - (*out)[i] = (*in)[i].DeepCopyObject() - } - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new List. -func (in *List) DeepCopy() *List { - if in == nil { - return nil - } - out := new(List) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *List) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ListOptions) DeepCopyInto(out *ListOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.LabelSelector != nil { - out.LabelSelector = in.LabelSelector.DeepCopySelector() - } - if in.FieldSelector != nil { - out.FieldSelector = in.FieldSelector.DeepCopySelector() - } - if in.TimeoutSeconds != nil { - in, out := &in.TimeoutSeconds, &out.TimeoutSeconds - *out = new(int64) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ListOptions. -func (in *ListOptions) DeepCopy() *ListOptions { - if in == nil { - return nil - } - out := new(ListOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ListOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go index 3288c5649..3189839ca 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.pb.go @@ -1297,177 +1297,177 @@ func init() { } var fileDescriptor_cf52fa777ced5367 = []byte{ - // 2713 bytes of a gzipped FileDescriptorProto + // 2714 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x19, 0xcd, 0x6f, 0x1b, 0x59, - 0x3d, 0x63, 0xc7, 0x8e, 0xfd, 0x73, 0x9c, 0x8f, 0x97, 0x16, 0xdc, 0x00, 0x71, 0x76, 0x16, 0xad, + 0x3d, 0x63, 0xc7, 0x8e, 0xfd, 0x73, 0x9c, 0x8f, 0x97, 0x16, 0xdc, 0x20, 0xe2, 0xec, 0x2c, 0xaa, 0x52, 0xe8, 0x3a, 0x9b, 0x02, 0xab, 0xd2, 0x65, 0x0b, 0x71, 0x9c, 0x74, 0xc3, 0x36, 0x4d, 0xf4, 0xd2, 0x16, 0x28, 0x15, 0xea, 0x64, 0xe6, 0xc5, 0x19, 0x32, 0x9e, 0xf1, 0xbe, 0x19, 0x27, 0x35, 0x1c, 0xd8, 0x03, 0x08, 0x90, 0x60, 0xd5, 0x23, 0xe2, 0x80, 0xb6, 0x82, 0xbf, 0x80, 0x13, 0x7f, 0x00, 0x12, 0xbd, 0x20, 0xad, 0xc4, 0x65, 0x25, 0x90, 0xb5, 0x0d, 0x07, 0x8e, 0x88, 0x6b, 0x4e, - 0xe8, 0x7d, 0xcd, 0x87, 0x1d, 0x37, 0x63, 0xba, 0xac, 0xf6, 0xe6, 0xf9, 0x7d, 0xff, 0xde, 0xfb, - 0xbd, 0xdf, 0x97, 0x61, 0xeb, 0xf0, 0x9a, 0x5f, 0xb3, 0xbd, 0xe5, 0xc3, 0xce, 0x1e, 0xa1, 0x2e, - 0x09, 0x88, 0xbf, 0x7c, 0x44, 0x5c, 0xcb, 0xa3, 0xcb, 0x12, 0x61, 0xb4, 0xed, 0x96, 0x61, 0x1e, - 0xd8, 0x2e, 0xa1, 0xdd, 0xe5, 0xf6, 0x61, 0x93, 0x01, 0xfc, 0xe5, 0x16, 0x09, 0x8c, 0xe5, 0xa3, - 0x95, 0xe5, 0x26, 0x71, 0x09, 0x35, 0x02, 0x62, 0xd5, 0xda, 0xd4, 0x0b, 0x3c, 0xf4, 0x45, 0xc1, - 0x55, 0x8b, 0x73, 0xd5, 0xda, 0x87, 0x4d, 0x06, 0xf0, 0x6b, 0x8c, 0xab, 0x76, 0xb4, 0x32, 0xff, - 0x6a, 0xd3, 0x0e, 0x0e, 0x3a, 0x7b, 0x35, 0xd3, 0x6b, 0x2d, 0x37, 0xbd, 0xa6, 0xb7, 0xcc, 0x99, - 0xf7, 0x3a, 0xfb, 0xfc, 0x8b, 0x7f, 0xf0, 0x5f, 0x42, 0xe8, 0xfc, 0x50, 0x53, 0x68, 0xc7, 0x0d, - 0xec, 0x16, 0xe9, 0xb7, 0x62, 0xfe, 0xf5, 0xf3, 0x18, 0x7c, 0xf3, 0x80, 0xb4, 0x8c, 0x7e, 0x3e, - 0xfd, 0x2f, 0x59, 0x28, 0xac, 0xee, 0x6c, 0xde, 0xa4, 0x5e, 0xa7, 0x8d, 0x16, 0x61, 0xdc, 0x35, - 0x5a, 0xa4, 0xa2, 0x2d, 0x6a, 0x4b, 0xc5, 0xfa, 0xe4, 0xd3, 0x5e, 0x75, 0xec, 0xa4, 0x57, 0x1d, - 0xbf, 0x6d, 0xb4, 0x08, 0xe6, 0x18, 0xe4, 0x40, 0xe1, 0x88, 0x50, 0xdf, 0xf6, 0x5c, 0xbf, 0x92, - 0x59, 0xcc, 0x2e, 0x95, 0xae, 0xde, 0xa8, 0xa5, 0xf1, 0xbf, 0xc6, 0x15, 0xdc, 0x13, 0xac, 0x1b, - 0x1e, 0x6d, 0xd8, 0xbe, 0xe9, 0x1d, 0x11, 0xda, 0xad, 0xcf, 0x48, 0x2d, 0x05, 0x89, 0xf4, 0x71, - 0xa8, 0x01, 0xfd, 0x54, 0x83, 0x99, 0x36, 0x25, 0xfb, 0x84, 0x52, 0x62, 0x49, 0x7c, 0x25, 0xbb, - 0xa8, 0x7d, 0x0c, 0x6a, 0x2b, 0x52, 0xed, 0xcc, 0x4e, 0x9f, 0x7c, 0x3c, 0xa0, 0x11, 0xfd, 0x5e, - 0x83, 0x79, 0x9f, 0xd0, 0x23, 0x42, 0x57, 0x2d, 0x8b, 0x12, 0xdf, 0xaf, 0x77, 0xd7, 0x1c, 0x9b, - 0xb8, 0xc1, 0xda, 0x66, 0x03, 0xfb, 0x95, 0x71, 0x7e, 0x0e, 0xdf, 0x4c, 0x67, 0xd0, 0xee, 0x30, - 0x39, 0x75, 0x5d, 0x5a, 0x34, 0x3f, 0x94, 0xc4, 0xc7, 0xcf, 0x31, 0x43, 0xdf, 0x87, 0x49, 0x75, - 0x91, 0xb7, 0x6c, 0x3f, 0x40, 0xf7, 0x20, 0xdf, 0x64, 0x1f, 0x7e, 0x45, 0xe3, 0x06, 0xd6, 0xd2, - 0x19, 0xa8, 0x64, 0xd4, 0xa7, 0xa4, 0x3d, 0x79, 0xfe, 0xe9, 0x63, 0x29, 0x4d, 0xff, 0xe5, 0x38, - 0x94, 0x56, 0x77, 0x36, 0x31, 0xf1, 0xbd, 0x0e, 0x35, 0x49, 0x8a, 0xa0, 0xb9, 0x06, 0x93, 0xbe, - 0xed, 0x36, 0x3b, 0x8e, 0x41, 0x19, 0xb4, 0x92, 0xe7, 0x94, 0x17, 0x24, 0xe5, 0xe4, 0x6e, 0x0c, - 0x87, 0x13, 0x94, 0xe8, 0x2a, 0x00, 0x93, 0xe0, 0xb7, 0x0d, 0x93, 0x58, 0x95, 0xcc, 0xa2, 0xb6, - 0x54, 0xa8, 0x23, 0xc9, 0x07, 0xb7, 0x43, 0x0c, 0x8e, 0x51, 0xa1, 0x97, 0x21, 0xc7, 0x2d, 0xad, - 0x14, 0xb8, 0x9a, 0xb2, 0x24, 0xcf, 0x71, 0x37, 0xb0, 0xc0, 0xa1, 0xcb, 0x30, 0x21, 0xa3, 0xac, - 0x52, 0xe4, 0x64, 0xd3, 0x92, 0x6c, 0x42, 0x85, 0x81, 0xc2, 0x33, 0xff, 0x0e, 0x6d, 0xd7, 0xe2, - 0x71, 0x17, 0xf3, 0xef, 0x6d, 0xdb, 0xb5, 0x30, 0xc7, 0xa0, 0x5b, 0x90, 0x3b, 0x22, 0x74, 0x8f, - 0x45, 0x02, 0x0b, 0xcd, 0x2f, 0xa7, 0x3b, 0xe8, 0x7b, 0x8c, 0xa5, 0x5e, 0x64, 0xa6, 0xf1, 0x9f, - 0x58, 0x08, 0x41, 0x35, 0x00, 0xff, 0xc0, 0xa3, 0x01, 0x77, 0xaf, 0x92, 0x5b, 0xcc, 0x2e, 0x15, - 0xeb, 0x53, 0xcc, 0xdf, 0xdd, 0x10, 0x8a, 0x63, 0x14, 0x8c, 0xde, 0x34, 0x02, 0xd2, 0xf4, 0xa8, - 0x4d, 0xfc, 0xca, 0x44, 0x44, 0xbf, 0x16, 0x42, 0x71, 0x8c, 0x02, 0x7d, 0x1b, 0x90, 0x1f, 0x78, - 0xd4, 0x68, 0x12, 0xe9, 0xea, 0x5b, 0x86, 0x7f, 0x50, 0x01, 0xee, 0xdd, 0xbc, 0xf4, 0x0e, 0xed, - 0x0e, 0x50, 0xe0, 0x33, 0xb8, 0xf4, 0x3f, 0x6a, 0x30, 0x1d, 0x8b, 0x05, 0x1e, 0x77, 0xd7, 0x60, - 0xb2, 0x19, 0x7b, 0x75, 0x32, 0x2e, 0xc2, 0xdb, 0x8e, 0xbf, 0x48, 0x9c, 0xa0, 0x44, 0x04, 0x8a, - 0x54, 0x4a, 0x52, 0xd9, 0x65, 0x25, 0x75, 0xd0, 0x2a, 0x1b, 0x22, 0x4d, 0x31, 0xa0, 0x8f, 0x23, - 0xc9, 0xfa, 0xbf, 0x34, 0x1e, 0xc0, 0x2a, 0xdf, 0xa0, 0xa5, 0x58, 0x4e, 0xd3, 0xf8, 0xf1, 0x4d, - 0x0e, 0xc9, 0x47, 0xe7, 0x24, 0x82, 0xcc, 0xa7, 0x22, 0x11, 0x5c, 0x2f, 0xfc, 0xe6, 0xfd, 0xea, - 0xd8, 0xbb, 0xff, 0x58, 0x1c, 0xd3, 0x5b, 0x50, 0x5e, 0xa3, 0xc4, 0x08, 0xc8, 0x76, 0x3b, 0xe0, - 0x0e, 0xe8, 0x90, 0xb7, 0x68, 0x17, 0x77, 0x5c, 0xe9, 0x28, 0xb0, 0xf7, 0xdd, 0xe0, 0x10, 0x2c, - 0x31, 0xec, 0xfe, 0xf6, 0x6d, 0xe2, 0x58, 0x5b, 0x86, 0x6b, 0x34, 0x09, 0x95, 0x71, 0x1f, 0x9e, - 0xea, 0x46, 0x0c, 0x87, 0x13, 0x94, 0xfa, 0xcf, 0xb3, 0x50, 0x6e, 0x10, 0x87, 0x44, 0xfa, 0x36, - 0x00, 0x35, 0xa9, 0x61, 0x92, 0x1d, 0x42, 0x6d, 0xcf, 0xda, 0x25, 0xa6, 0xe7, 0x5a, 0x3e, 0x8f, - 0x88, 0x6c, 0xfd, 0x33, 0x2c, 0xce, 0x6e, 0x0e, 0x60, 0xf1, 0x19, 0x1c, 0xc8, 0x81, 0x72, 0x9b, - 0xf2, 0xdf, 0x76, 0x20, 0x6b, 0x0f, 0x7b, 0x69, 0x5f, 0x49, 0x77, 0xd4, 0x3b, 0x71, 0xd6, 0xfa, - 0xec, 0x49, 0xaf, 0x5a, 0x4e, 0x80, 0x70, 0x52, 0x38, 0xfa, 0x16, 0xcc, 0x78, 0xb4, 0x7d, 0x60, - 0xb8, 0x0d, 0xd2, 0x26, 0xae, 0x45, 0xdc, 0xc0, 0xe7, 0xa7, 0x50, 0xa8, 0x5f, 0x60, 0x15, 0x63, - 0xbb, 0x0f, 0x87, 0x07, 0xa8, 0xd1, 0x7d, 0x98, 0x6d, 0x53, 0xaf, 0x6d, 0x34, 0x0d, 0x26, 0x71, - 0xc7, 0x73, 0x6c, 0xb3, 0xcb, 0xb3, 0x43, 0xb1, 0x7e, 0xe5, 0xa4, 0x57, 0x9d, 0xdd, 0xe9, 0x47, - 0x9e, 0xf6, 0xaa, 0x73, 0xfc, 0xe8, 0x18, 0x24, 0x42, 0xe2, 0x41, 0x31, 0xb1, 0x3b, 0xcc, 0x0d, - 0xbb, 0x43, 0x7d, 0x13, 0x0a, 0x8d, 0x0e, 0xe5, 0x5c, 0xe8, 0x4d, 0x28, 0x58, 0xf2, 0xb7, 0x3c, - 0xf9, 0x97, 0x54, 0xc9, 0x55, 0x34, 0xa7, 0xbd, 0x6a, 0x99, 0x35, 0x09, 0x35, 0x05, 0xc0, 0x21, - 0x8b, 0xfe, 0x00, 0xca, 0xeb, 0x8f, 0xda, 0x1e, 0x0d, 0xd4, 0x9d, 0xbe, 0x02, 0x79, 0xc2, 0x01, - 0x5c, 0x5a, 0x21, 0xaa, 0x13, 0x82, 0x0c, 0x4b, 0x2c, 0xcb, 0xc3, 0xe4, 0x91, 0x61, 0x06, 0x32, - 0x6d, 0x87, 0x79, 0x78, 0x9d, 0x01, 0xb1, 0xc0, 0xe9, 0x9f, 0x87, 0x02, 0x0f, 0x28, 0xff, 0xde, - 0x0a, 0x9a, 0x81, 0x2c, 0x36, 0x8e, 0xb9, 0xd4, 0x49, 0x9c, 0xa5, 0xc6, 0xb1, 0xbe, 0x0d, 0x70, - 0x93, 0x84, 0x8a, 0x57, 0x61, 0x5a, 0x3d, 0xe2, 0x64, 0x6e, 0xf9, 0xac, 0x14, 0x3d, 0x8d, 0x93, - 0x68, 0xdc, 0x4f, 0xaf, 0x3f, 0x80, 0x22, 0xcf, 0x3f, 0x2c, 0x79, 0x47, 0x85, 0x42, 0x7b, 0x4e, - 0xa1, 0x50, 0xd9, 0x3f, 0x33, 0x2c, 0xfb, 0xc7, 0x9e, 0x9b, 0x03, 0x65, 0xc1, 0xab, 0x4a, 0x63, - 0x2a, 0x0d, 0x57, 0xa0, 0xa0, 0xcc, 0x94, 0x5a, 0xc2, 0x96, 0x48, 0x09, 0xc2, 0x21, 0x45, 0x4c, - 0xdb, 0x01, 0x24, 0x72, 0x69, 0x3a, 0x65, 0xb1, 0xba, 0x97, 0x79, 0x7e, 0xdd, 0x8b, 0x69, 0xfa, - 0x09, 0x54, 0x86, 0xf5, 0x51, 0x2f, 0x90, 0xed, 0xd3, 0x9b, 0xa2, 0xbf, 0xa7, 0xc1, 0x4c, 0x5c, - 0x52, 0xfa, 0xeb, 0x4b, 0xaf, 0xe4, 0xfc, 0x3a, 0x1f, 0x3b, 0x91, 0xdf, 0x69, 0x70, 0x21, 0xe1, - 0xda, 0x48, 0x37, 0x3e, 0x82, 0x51, 0xf1, 0xe0, 0xc8, 0x8e, 0x10, 0x1c, 0x7f, 0xcb, 0x40, 0xf9, - 0x96, 0xb1, 0x47, 0x9c, 0x5d, 0xe2, 0x10, 0x33, 0xf0, 0x28, 0xfa, 0x31, 0x94, 0x5a, 0x46, 0x60, - 0x1e, 0x70, 0xa8, 0xea, 0x09, 0x1b, 0xe9, 0x12, 0x68, 0x42, 0x52, 0x6d, 0x2b, 0x12, 0xb3, 0xee, - 0x06, 0xb4, 0x5b, 0x9f, 0x93, 0x26, 0x95, 0x62, 0x18, 0x1c, 0xd7, 0xc6, 0x1b, 0x79, 0xfe, 0xbd, - 0xfe, 0xa8, 0xcd, 0x0a, 0xd6, 0xe8, 0xf3, 0x43, 0xc2, 0x04, 0x4c, 0xde, 0xe9, 0xd8, 0x94, 0xb4, - 0x88, 0x1b, 0x44, 0x8d, 0xfc, 0x56, 0x9f, 0x7c, 0x3c, 0xa0, 0x71, 0xfe, 0x06, 0xcc, 0xf4, 0x1b, - 0xcf, 0xb2, 0xce, 0x21, 0xe9, 0x8a, 0xfb, 0xc2, 0xec, 0x27, 0xba, 0x00, 0xb9, 0x23, 0xc3, 0xe9, - 0xc8, 0xd7, 0x88, 0xc5, 0xc7, 0xf5, 0xcc, 0x35, 0x4d, 0xff, 0x83, 0x06, 0x95, 0x61, 0x86, 0xa0, - 0x2f, 0xc4, 0x04, 0xd5, 0x4b, 0xd2, 0xaa, 0xec, 0xdb, 0xa4, 0x2b, 0xa4, 0xae, 0x43, 0xc1, 0x6b, - 0xb3, 0xd1, 0xcb, 0xa3, 0xf2, 0xd6, 0x2f, 0xab, 0x9b, 0xdc, 0x96, 0xf0, 0xd3, 0x5e, 0xf5, 0x62, - 0x42, 0xbc, 0x42, 0xe0, 0x90, 0x95, 0x65, 0x7f, 0x6e, 0x0f, 0xab, 0x48, 0x61, 0xf6, 0xbf, 0xc7, - 0x21, 0x58, 0x62, 0xf4, 0x3f, 0x69, 0x30, 0xce, 0x5b, 0xb1, 0x07, 0x50, 0x60, 0xe7, 0x67, 0x19, - 0x81, 0xc1, 0xed, 0x4a, 0x3d, 0x04, 0x30, 0xee, 0x2d, 0x12, 0x18, 0x51, 0xb4, 0x29, 0x08, 0x0e, - 0x25, 0x22, 0x0c, 0x39, 0x3b, 0x20, 0x2d, 0x75, 0x91, 0xaf, 0x0e, 0x15, 0x2d, 0x47, 0xd0, 0x1a, - 0x36, 0x8e, 0xd7, 0x1f, 0x05, 0xc4, 0x65, 0x97, 0x11, 0x3d, 0x8d, 0x4d, 0x26, 0x03, 0x0b, 0x51, - 0xfa, 0x7f, 0x34, 0x08, 0x55, 0xb1, 0xe0, 0xf7, 0x89, 0xb3, 0x7f, 0xcb, 0x76, 0x0f, 0xe5, 0xb1, - 0x86, 0xe6, 0xec, 0x4a, 0x38, 0x0e, 0x29, 0xce, 0x2a, 0x0f, 0x99, 0xd1, 0xca, 0x03, 0x53, 0x68, - 0x7a, 0x6e, 0x60, 0xbb, 0x9d, 0x81, 0xd7, 0xb6, 0x26, 0xe1, 0x38, 0xa4, 0x60, 0xcd, 0x0d, 0x25, - 0x2d, 0xc3, 0x76, 0x6d, 0xb7, 0xc9, 0x9c, 0x58, 0xf3, 0x3a, 0x6e, 0xc0, 0xab, 0xbc, 0x6c, 0x6e, - 0xf0, 0x00, 0x16, 0x9f, 0xc1, 0xa1, 0xff, 0x35, 0x0b, 0x25, 0xe6, 0xb3, 0xaa, 0x73, 0x6f, 0x40, - 0xd9, 0x89, 0x47, 0x81, 0xf4, 0xfd, 0xa2, 0x34, 0x25, 0xf9, 0xae, 0x71, 0x92, 0x96, 0x31, 0xf3, - 0x9e, 0x2c, 0x64, 0xce, 0x24, 0x99, 0x37, 0xe2, 0x48, 0x9c, 0xa4, 0x65, 0xd9, 0xeb, 0x98, 0xbd, - 0x0f, 0xd9, 0xed, 0x84, 0x57, 0xf4, 0x1d, 0x06, 0xc4, 0x02, 0x87, 0xb6, 0x60, 0xce, 0x70, 0x1c, - 0xef, 0x98, 0x03, 0xeb, 0x9e, 0x77, 0xd8, 0x32, 0xe8, 0xa1, 0xcf, 0xc7, 0xa8, 0x42, 0xfd, 0x73, - 0x92, 0x65, 0x6e, 0x75, 0x90, 0x04, 0x9f, 0xc5, 0x77, 0xd6, 0xb5, 0x8d, 0x8f, 0x78, 0x6d, 0xd7, - 0x61, 0x8a, 0xc5, 0x97, 0xd7, 0x09, 0x54, 0x87, 0x99, 0xe3, 0x97, 0x80, 0x4e, 0x7a, 0xd5, 0xa9, - 0x3b, 0x09, 0x0c, 0xee, 0xa3, 0x64, 0x2e, 0x3b, 0x76, 0xcb, 0x0e, 0x2a, 0x13, 0x9c, 0x25, 0x74, - 0xf9, 0x16, 0x03, 0x62, 0x81, 0x4b, 0xc4, 0x45, 0xe1, 0xbc, 0xb8, 0xd0, 0x7f, 0x9b, 0x05, 0x24, - 0x5a, 0x62, 0x4b, 0xf4, 0x36, 0x22, 0xd1, 0x5c, 0x86, 0x89, 0x96, 0x6c, 0xa9, 0xb5, 0x64, 0xd6, - 0x57, 0xdd, 0xb4, 0xc2, 0xa3, 0x2d, 0x28, 0x8a, 0x07, 0x1f, 0x05, 0xf1, 0xb2, 0x24, 0x2e, 0x6e, - 0x2b, 0xc4, 0x69, 0xaf, 0x3a, 0x9f, 0x50, 0x13, 0x62, 0xee, 0x74, 0xdb, 0x04, 0x47, 0x12, 0xd8, - 0x14, 0x6d, 0xb4, 0xed, 0xf8, 0xfe, 0xa4, 0x18, 0x4d, 0xd1, 0xd1, 0x24, 0x84, 0x63, 0x54, 0xe8, - 0x2d, 0x18, 0x67, 0x27, 0x25, 0x47, 0xda, 0x2f, 0xa5, 0x4b, 0x1b, 0xec, 0xac, 0xeb, 0x05, 0x56, - 0x35, 0xd9, 0x2f, 0xcc, 0x25, 0x30, 0xed, 0x3c, 0xca, 0x7c, 0x66, 0x96, 0x9c, 0xfd, 0x43, 0xed, - 0x1b, 0x21, 0x06, 0xc7, 0xa8, 0xd0, 0x77, 0xa1, 0xb0, 0x2f, 0xdb, 0x42, 0x7e, 0x31, 0xa9, 0x13, - 0x97, 0x6a, 0x26, 0xc5, 0x08, 0xa7, 0xbe, 0x70, 0x28, 0x4d, 0x7f, 0x07, 0x8a, 0x5b, 0xb6, 0x49, - 0x3d, 0x66, 0x20, 0xbb, 0x12, 0x3f, 0x31, 0x93, 0x84, 0x57, 0xa2, 0xc2, 0x45, 0xe1, 0x59, 0x9c, - 0xb8, 0x86, 0xeb, 0x89, 0xc9, 0x23, 0x17, 0xc5, 0xc9, 0x6d, 0x06, 0xc4, 0x02, 0x77, 0xfd, 0x02, - 0xab, 0xbf, 0xbf, 0x78, 0x52, 0x1d, 0x7b, 0xfc, 0xa4, 0x3a, 0xf6, 0xfe, 0x13, 0x59, 0x8b, 0x4f, - 0x01, 0x60, 0x7b, 0xef, 0x87, 0xc4, 0x14, 0x59, 0x2d, 0xd5, 0xbe, 0x44, 0xad, 0xe9, 0xf8, 0xbe, - 0x24, 0xd3, 0xd7, 0x53, 0xc5, 0x70, 0x38, 0x41, 0x89, 0x96, 0xa1, 0x18, 0x6e, 0x42, 0xe4, 0x45, - 0xcf, 0xaa, 0xc0, 0x09, 0xd7, 0x25, 0x38, 0xa2, 0x49, 0xa4, 0xd8, 0xf1, 0x73, 0x53, 0x6c, 0x1d, - 0xb2, 0x1d, 0xdb, 0xe2, 0xaf, 0xab, 0x58, 0x7f, 0x4d, 0x95, 0xb8, 0xbb, 0x9b, 0x8d, 0xd3, 0x5e, - 0xf5, 0xa5, 0x61, 0x0b, 0xc8, 0xa0, 0xdb, 0x26, 0x7e, 0xed, 0xee, 0x66, 0x03, 0x33, 0xe6, 0xb3, - 0xde, 0x7b, 0x7e, 0xc4, 0xf7, 0x7e, 0x15, 0x40, 0x7a, 0xcd, 0xb8, 0xc5, 0xc3, 0x0d, 0x23, 0xea, - 0x66, 0x88, 0xc1, 0x31, 0x2a, 0xe4, 0xc3, 0xac, 0xc9, 0x46, 0x61, 0xf6, 0x3c, 0xec, 0x16, 0xf1, - 0x03, 0xa3, 0x25, 0x36, 0x44, 0xa3, 0x05, 0xf7, 0x25, 0xa9, 0x66, 0x76, 0xad, 0x5f, 0x18, 0x1e, - 0x94, 0x8f, 0x3c, 0x98, 0xb5, 0xe4, 0x50, 0x17, 0x29, 0x2d, 0x8e, 0xac, 0xf4, 0x22, 0x53, 0xd8, - 0xe8, 0x17, 0x84, 0x07, 0x65, 0xa3, 0x1f, 0xc0, 0xbc, 0x02, 0x0e, 0x4e, 0xd6, 0x7c, 0xc7, 0x93, - 0xad, 0x2f, 0x9c, 0xf4, 0xaa, 0xf3, 0x8d, 0xa1, 0x54, 0xf8, 0x39, 0x12, 0x90, 0x05, 0x79, 0x47, - 0xf4, 0x8f, 0x25, 0x5e, 0xf3, 0xbf, 0x91, 0xce, 0x8b, 0x28, 0xfa, 0x6b, 0xf1, 0xbe, 0x31, 0x9c, - 0x1c, 0x65, 0xcb, 0x28, 0x65, 0xa3, 0x47, 0x50, 0x32, 0x5c, 0xd7, 0x0b, 0x0c, 0x31, 0xeb, 0x4f, - 0x72, 0x55, 0xab, 0x23, 0xab, 0x5a, 0x8d, 0x64, 0xf4, 0xf5, 0xa9, 0x31, 0x0c, 0x8e, 0xab, 0x42, - 0xc7, 0x30, 0xed, 0x1d, 0xbb, 0x84, 0x62, 0xb2, 0x4f, 0x28, 0x71, 0x4d, 0xe2, 0x57, 0xca, 0x5c, - 0xfb, 0x57, 0x53, 0x6a, 0x4f, 0x30, 0x47, 0x21, 0x9d, 0x84, 0xfb, 0xb8, 0x5f, 0x0b, 0xaa, 0xb1, - 0x24, 0xe9, 0x1a, 0x8e, 0xfd, 0x23, 0x42, 0xfd, 0xca, 0x54, 0xb4, 0xc4, 0xdb, 0x08, 0xa1, 0x38, - 0x46, 0x81, 0xbe, 0x06, 0x25, 0xd3, 0xe9, 0xf8, 0x01, 0x11, 0x1b, 0xd5, 0x69, 0xfe, 0x82, 0x42, - 0xff, 0xd6, 0x22, 0x14, 0x8e, 0xd3, 0xa1, 0x0e, 0x94, 0x5b, 0xf1, 0x92, 0x51, 0x99, 0xe5, 0xde, - 0x5d, 0x4b, 0xe7, 0xdd, 0x60, 0x51, 0x8b, 0xfa, 0x8a, 0x04, 0x0e, 0x27, 0xb5, 0xcc, 0x7f, 0x1d, - 0x4a, 0xff, 0x63, 0xcb, 0xcd, 0x5a, 0xf6, 0xfe, 0x7b, 0x1c, 0xa9, 0x65, 0xff, 0x73, 0x06, 0xa6, - 0x92, 0xa7, 0xdf, 0x57, 0x0e, 0x73, 0xa9, 0xca, 0xa1, 0x1a, 0x0e, 0xb5, 0xa1, 0x4b, 0x60, 0x95, - 0xd6, 0xb3, 0x43, 0xd3, 0xba, 0xcc, 0x9e, 0xe3, 0x2f, 0x92, 0x3d, 0x6b, 0x00, 0xac, 0xcf, 0xa0, - 0x9e, 0xe3, 0x10, 0xca, 0x13, 0x67, 0x41, 0x2e, 0x7b, 0x43, 0x28, 0x8e, 0x51, 0xb0, 0x1e, 0x75, - 0xcf, 0xf1, 0xcc, 0x43, 0x7e, 0x04, 0xea, 0xd1, 0xf3, 0x94, 0x59, 0x10, 0x3d, 0x6a, 0x7d, 0x00, - 0x8b, 0xcf, 0xe0, 0xd0, 0xbb, 0x70, 0x71, 0xc7, 0xa0, 0x81, 0x6d, 0x38, 0xd1, 0x03, 0xe3, 0x43, - 0xc0, 0xc3, 0x81, 0x11, 0xe3, 0xb5, 0x51, 0x1f, 0x6a, 0x74, 0xf8, 0x11, 0x2c, 0x1a, 0x33, 0xf4, - 0xbf, 0x6b, 0x70, 0xe9, 0x4c, 0xdd, 0x9f, 0xc0, 0x88, 0xf3, 0x30, 0x39, 0xe2, 0xbc, 0x91, 0x72, - 0xdf, 0x78, 0x96, 0xb5, 0x43, 0x06, 0x9e, 0x09, 0xc8, 0xed, 0xb0, 0x86, 0x58, 0xff, 0xb5, 0x06, - 0x93, 0xfc, 0xd7, 0x28, 0xbb, 0xda, 0x2a, 0xe4, 0xf6, 0x3d, 0xb5, 0x38, 0x2a, 0x88, 0x3f, 0x13, - 0x36, 0x18, 0x00, 0x0b, 0xf8, 0x0b, 0x2c, 0x73, 0xdf, 0xd3, 0x20, 0xb9, 0x25, 0x45, 0x37, 0x44, - 0xfc, 0x6a, 0xe1, 0x1a, 0x73, 0xc4, 0xd8, 0x7d, 0x73, 0xd8, 0x80, 0x36, 0x97, 0x6a, 0x77, 0x77, - 0x05, 0x8a, 0xd8, 0xf3, 0x82, 0x1d, 0x23, 0x38, 0xf0, 0x99, 0xe3, 0x6d, 0xf6, 0x43, 0x9e, 0x0d, - 0x77, 0x9c, 0x63, 0xb0, 0x80, 0xeb, 0xbf, 0xd2, 0xe0, 0xd2, 0xd0, 0xfd, 0x39, 0x4b, 0x01, 0x66, - 0xf8, 0x25, 0x3d, 0x0a, 0xa3, 0x30, 0xa2, 0xc3, 0x31, 0x2a, 0x36, 0x59, 0x25, 0x96, 0xee, 0xfd, - 0x93, 0x55, 0x42, 0x1b, 0x4e, 0xd2, 0xea, 0xff, 0xce, 0x40, 0x7e, 0x37, 0x30, 0x82, 0x8e, 0xff, - 0x7f, 0x8e, 0xd8, 0x57, 0x20, 0xef, 0x73, 0x3d, 0xd2, 0xbc, 0xb0, 0xc6, 0x0a, 0xed, 0x58, 0x62, - 0xf9, 0x34, 0x42, 0x7c, 0xdf, 0x68, 0xaa, 0x8c, 0x15, 0x4d, 0x23, 0x02, 0x8c, 0x15, 0x1e, 0xbd, - 0x0e, 0x79, 0x4a, 0x0c, 0x3f, 0x1c, 0xcc, 0x16, 0x94, 0x48, 0xcc, 0xa1, 0xa7, 0xbd, 0xea, 0xa4, - 0x14, 0xce, 0xbf, 0xb1, 0xa4, 0x46, 0xf7, 0x61, 0xc2, 0x22, 0x81, 0x61, 0x3b, 0x62, 0x1e, 0x4b, - 0xbd, 0xae, 0x17, 0xc2, 0x1a, 0x82, 0xb5, 0x5e, 0x62, 0x36, 0xc9, 0x0f, 0xac, 0x04, 0xb2, 0x6c, - 0x6b, 0x7a, 0x96, 0x18, 0x27, 0x72, 0x51, 0xb6, 0x5d, 0xf3, 0x2c, 0x82, 0x39, 0x46, 0x7f, 0xac, - 0x41, 0x49, 0x48, 0x5a, 0x33, 0x3a, 0x3e, 0x41, 0x2b, 0xa1, 0x17, 0xe2, 0xba, 0x55, 0x27, 0x37, - 0xce, 0x06, 0x8e, 0xd3, 0x5e, 0xb5, 0xc8, 0xc9, 0xf8, 0x24, 0xa2, 0x1c, 0x88, 0x9d, 0x51, 0xe6, - 0x9c, 0x33, 0x7a, 0x19, 0x72, 0xfc, 0xf5, 0xc8, 0xc3, 0x0c, 0xdf, 0x3a, 0x7f, 0x60, 0x58, 0xe0, - 0xf4, 0x8f, 0x32, 0x50, 0x4e, 0x38, 0x97, 0x62, 0x16, 0x08, 0x17, 0x8a, 0x99, 0x14, 0x4b, 0xea, - 0xe1, 0x7f, 0x51, 0xca, 0xda, 0x93, 0x7f, 0x91, 0xda, 0xf3, 0x3d, 0xc8, 0x9b, 0xec, 0x8c, 0xd4, - 0x3f, 0xde, 0x2b, 0xa3, 0x5c, 0x27, 0x3f, 0xdd, 0x28, 0x1a, 0xf9, 0xa7, 0x8f, 0xa5, 0x40, 0x74, - 0x13, 0x66, 0x29, 0x09, 0x68, 0x77, 0x75, 0x3f, 0x20, 0x34, 0x3e, 0xc4, 0xe7, 0xa2, 0x8e, 0x1b, - 0xf7, 0x13, 0xe0, 0x41, 0x1e, 0x7d, 0x0f, 0x26, 0xef, 0x18, 0x7b, 0x4e, 0xf8, 0x07, 0x14, 0x86, - 0xb2, 0xed, 0x9a, 0x4e, 0xc7, 0x22, 0x22, 0x1b, 0xab, 0xec, 0xa5, 0x1e, 0xed, 0x66, 0x1c, 0x79, - 0xda, 0xab, 0xce, 0x25, 0x00, 0xe2, 0x1f, 0x17, 0x9c, 0x14, 0xa1, 0x3b, 0x30, 0xfe, 0x09, 0x4e, - 0x8f, 0xdf, 0x87, 0x62, 0xd4, 0xdf, 0x7f, 0xcc, 0x2a, 0xf5, 0x87, 0x50, 0x60, 0x11, 0xaf, 0xe6, - 0xd2, 0x73, 0x5a, 0x9c, 0x64, 0xe3, 0x94, 0x49, 0xd3, 0x38, 0xe9, 0x2d, 0x28, 0xdf, 0x6d, 0x5b, - 0x2f, 0xf8, 0x17, 0x64, 0x26, 0x75, 0xd5, 0xba, 0x0a, 0xe2, 0xcf, 0x74, 0x56, 0x20, 0x44, 0xe5, - 0x8e, 0x15, 0x88, 0x78, 0xe1, 0x8d, 0xed, 0xca, 0x7f, 0xa6, 0x01, 0xf0, 0xa5, 0xd4, 0xfa, 0x11, - 0x71, 0x03, 0x76, 0x0e, 0x2c, 0xf0, 0xfb, 0xcf, 0x81, 0x67, 0x06, 0x8e, 0x41, 0x77, 0x21, 0xef, - 0x89, 0x68, 0x12, 0x7f, 0x43, 0x8e, 0xb8, 0xf9, 0x0c, 0x1f, 0x81, 0x88, 0x27, 0x2c, 0x85, 0xd5, - 0x97, 0x9e, 0x3e, 0x5b, 0x18, 0xfb, 0xe0, 0xd9, 0xc2, 0xd8, 0x87, 0xcf, 0x16, 0xc6, 0xde, 0x3d, - 0x59, 0xd0, 0x9e, 0x9e, 0x2c, 0x68, 0x1f, 0x9c, 0x2c, 0x68, 0x1f, 0x9e, 0x2c, 0x68, 0x1f, 0x9d, - 0x2c, 0x68, 0x8f, 0xff, 0xb9, 0x30, 0x76, 0x3f, 0x73, 0xb4, 0xf2, 0xdf, 0x00, 0x00, 0x00, 0xff, - 0xff, 0x61, 0xb7, 0xc5, 0x7c, 0xc2, 0x24, 0x00, 0x00, + 0xe8, 0x7d, 0xcd, 0x87, 0x1d, 0x37, 0x63, 0xba, 0xac, 0xb8, 0x79, 0x7e, 0xdf, 0xbf, 0xf7, 0x7e, + 0xef, 0xf7, 0x65, 0xd8, 0x3a, 0xbc, 0xee, 0xd7, 0x6c, 0x6f, 0xf9, 0xb0, 0xb3, 0x47, 0xa8, 0x4b, + 0x02, 0xe2, 0x2f, 0x1f, 0x11, 0xd7, 0xf2, 0xe8, 0xb2, 0x44, 0x18, 0x6d, 0xbb, 0x65, 0x98, 0x07, + 0xb6, 0x4b, 0x68, 0x77, 0xb9, 0x7d, 0xd8, 0x64, 0x00, 0x7f, 0xb9, 0x45, 0x02, 0x63, 0xf9, 0x68, + 0x65, 0xb9, 0x49, 0x5c, 0x42, 0x8d, 0x80, 0x58, 0xb5, 0x36, 0xf5, 0x02, 0x0f, 0x7d, 0x41, 0x70, + 0xd5, 0xe2, 0x5c, 0xb5, 0xf6, 0x61, 0x93, 0x01, 0xfc, 0x1a, 0xe3, 0xaa, 0x1d, 0xad, 0xcc, 0xbf, + 0xd6, 0xb4, 0x83, 0x83, 0xce, 0x5e, 0xcd, 0xf4, 0x5a, 0xcb, 0x4d, 0xaf, 0xe9, 0x2d, 0x73, 0xe6, + 0xbd, 0xce, 0x3e, 0xff, 0xe2, 0x1f, 0xfc, 0x97, 0x10, 0x3a, 0x3f, 0xd4, 0x14, 0xda, 0x71, 0x03, + 0xbb, 0x45, 0xfa, 0xad, 0x98, 0x7f, 0xe3, 0x3c, 0x06, 0xdf, 0x3c, 0x20, 0x2d, 0xa3, 0x9f, 0x4f, + 0xff, 0x73, 0x16, 0x0a, 0xab, 0x3b, 0x9b, 0xb7, 0xa8, 0xd7, 0x69, 0xa3, 0x45, 0x18, 0x77, 0x8d, + 0x16, 0xa9, 0x68, 0x8b, 0xda, 0x52, 0xb1, 0x3e, 0xf9, 0xac, 0x57, 0x1d, 0x3b, 0xe9, 0x55, 0xc7, + 0xef, 0x18, 0x2d, 0x82, 0x39, 0x06, 0x39, 0x50, 0x38, 0x22, 0xd4, 0xb7, 0x3d, 0xd7, 0xaf, 0x64, + 0x16, 0xb3, 0x4b, 0xa5, 0x6b, 0x37, 0x6b, 0x69, 0xfc, 0xaf, 0x71, 0x05, 0xf7, 0x05, 0xeb, 0x86, + 0x47, 0x1b, 0xb6, 0x6f, 0x7a, 0x47, 0x84, 0x76, 0xeb, 0x33, 0x52, 0x4b, 0x41, 0x22, 0x7d, 0x1c, + 0x6a, 0x40, 0x3f, 0xd1, 0x60, 0xa6, 0x4d, 0xc9, 0x3e, 0xa1, 0x94, 0x58, 0x12, 0x5f, 0xc9, 0x2e, + 0x6a, 0x9f, 0x80, 0xda, 0x8a, 0x54, 0x3b, 0xb3, 0xd3, 0x27, 0x1f, 0x0f, 0x68, 0x44, 0xbf, 0xd3, + 0x60, 0xde, 0x27, 0xf4, 0x88, 0xd0, 0x55, 0xcb, 0xa2, 0xc4, 0xf7, 0xeb, 0xdd, 0x35, 0xc7, 0x26, + 0x6e, 0xb0, 0xb6, 0xd9, 0xc0, 0x7e, 0x65, 0x9c, 0x9f, 0xc3, 0x37, 0xd2, 0x19, 0xb4, 0x3b, 0x4c, + 0x4e, 0x5d, 0x97, 0x16, 0xcd, 0x0f, 0x25, 0xf1, 0xf1, 0x0b, 0xcc, 0xd0, 0xf7, 0x61, 0x52, 0x5d, + 0xe4, 0x6d, 0xdb, 0x0f, 0xd0, 0x7d, 0xc8, 0x37, 0xd9, 0x87, 0x5f, 0xd1, 0xb8, 0x81, 0xb5, 0x74, + 0x06, 0x2a, 0x19, 0xf5, 0x29, 0x69, 0x4f, 0x9e, 0x7f, 0xfa, 0x58, 0x4a, 0xd3, 0x7f, 0x31, 0x0e, + 0xa5, 0xd5, 0x9d, 0x4d, 0x4c, 0x7c, 0xaf, 0x43, 0x4d, 0x92, 0x22, 0x68, 0xae, 0xc3, 0xa4, 0x6f, + 0xbb, 0xcd, 0x8e, 0x63, 0x50, 0x06, 0xad, 0xe4, 0x39, 0xe5, 0x05, 0x49, 0x39, 0xb9, 0x1b, 0xc3, + 0xe1, 0x04, 0x25, 0xba, 0x06, 0xc0, 0x24, 0xf8, 0x6d, 0xc3, 0x24, 0x56, 0x25, 0xb3, 0xa8, 0x2d, + 0x15, 0xea, 0x48, 0xf2, 0xc1, 0x9d, 0x10, 0x83, 0x63, 0x54, 0xe8, 0x55, 0xc8, 0x71, 0x4b, 0x2b, + 0x05, 0xae, 0xa6, 0x2c, 0xc9, 0x73, 0xdc, 0x0d, 0x2c, 0x70, 0xe8, 0x0a, 0x4c, 0xc8, 0x28, 0xab, + 0x14, 0x39, 0xd9, 0xb4, 0x24, 0x9b, 0x50, 0x61, 0xa0, 0xf0, 0xcc, 0xbf, 0x43, 0xdb, 0xb5, 0x78, + 0xdc, 0xc5, 0xfc, 0x7b, 0xc7, 0x76, 0x2d, 0xcc, 0x31, 0xe8, 0x36, 0xe4, 0x8e, 0x08, 0xdd, 0x63, + 0x91, 0xc0, 0x42, 0xf3, 0x4b, 0xe9, 0x0e, 0xfa, 0x3e, 0x63, 0xa9, 0x17, 0x99, 0x69, 0xfc, 0x27, + 0x16, 0x42, 0x50, 0x0d, 0xc0, 0x3f, 0xf0, 0x68, 0xc0, 0xdd, 0xab, 0xe4, 0x16, 0xb3, 0x4b, 0xc5, + 0xfa, 0x14, 0xf3, 0x77, 0x37, 0x84, 0xe2, 0x18, 0x05, 0xa3, 0x37, 0x8d, 0x80, 0x34, 0x3d, 0x6a, + 0x13, 0xbf, 0x32, 0x11, 0xd1, 0xaf, 0x85, 0x50, 0x1c, 0xa3, 0x40, 0xdf, 0x02, 0xe4, 0x07, 0x1e, + 0x35, 0x9a, 0x44, 0xba, 0xfa, 0xb6, 0xe1, 0x1f, 0x54, 0x80, 0x7b, 0x37, 0x2f, 0xbd, 0x43, 0xbb, + 0x03, 0x14, 0xf8, 0x0c, 0x2e, 0xfd, 0x0f, 0x1a, 0x4c, 0xc7, 0x62, 0x81, 0xc7, 0xdd, 0x75, 0x98, + 0x6c, 0xc6, 0x5e, 0x9d, 0x8c, 0x8b, 0xf0, 0xb6, 0xe3, 0x2f, 0x12, 0x27, 0x28, 0x11, 0x81, 0x22, + 0x95, 0x92, 0x54, 0x76, 0x59, 0x49, 0x1d, 0xb4, 0xca, 0x86, 0x48, 0x53, 0x0c, 0xe8, 0xe3, 0x48, + 0xb2, 0xfe, 0x4f, 0x8d, 0x07, 0xb0, 0xca, 0x37, 0x68, 0x29, 0x96, 0xd3, 0x34, 0x7e, 0x7c, 0x93, + 0x43, 0xf2, 0xd1, 0x39, 0x89, 0x20, 0xf3, 0x7f, 0x91, 0x08, 0x6e, 0x14, 0x7e, 0xfd, 0x41, 0x75, + 0xec, 0xbd, 0xbf, 0x2f, 0x8e, 0xe9, 0x2d, 0x28, 0xaf, 0x51, 0x62, 0x04, 0x64, 0xbb, 0x1d, 0x70, + 0x07, 0x74, 0xc8, 0x5b, 0xb4, 0x8b, 0x3b, 0xae, 0x74, 0x14, 0xd8, 0xfb, 0x6e, 0x70, 0x08, 0x96, + 0x18, 0x76, 0x7f, 0xfb, 0x36, 0x71, 0xac, 0x2d, 0xc3, 0x35, 0x9a, 0x84, 0xca, 0xb8, 0x0f, 0x4f, + 0x75, 0x23, 0x86, 0xc3, 0x09, 0x4a, 0xfd, 0x67, 0x59, 0x28, 0x37, 0x88, 0x43, 0x22, 0x7d, 0x1b, + 0x80, 0x9a, 0xd4, 0x30, 0xc9, 0x0e, 0xa1, 0xb6, 0x67, 0xed, 0x12, 0xd3, 0x73, 0x2d, 0x9f, 0x47, + 0x44, 0xb6, 0xfe, 0x19, 0x16, 0x67, 0xb7, 0x06, 0xb0, 0xf8, 0x0c, 0x0e, 0xe4, 0x40, 0xb9, 0x4d, + 0xf9, 0x6f, 0x3b, 0x90, 0xb5, 0x87, 0xbd, 0xb4, 0x2f, 0xa7, 0x3b, 0xea, 0x9d, 0x38, 0x6b, 0x7d, + 0xf6, 0xa4, 0x57, 0x2d, 0x27, 0x40, 0x38, 0x29, 0x1c, 0x7d, 0x13, 0x66, 0x3c, 0xda, 0x3e, 0x30, + 0xdc, 0x06, 0x69, 0x13, 0xd7, 0x22, 0x6e, 0xe0, 0xf3, 0x53, 0x28, 0xd4, 0x2f, 0xb0, 0x8a, 0xb1, + 0xdd, 0x87, 0xc3, 0x03, 0xd4, 0xe8, 0x01, 0xcc, 0xb6, 0xa9, 0xd7, 0x36, 0x9a, 0x06, 0x93, 0xb8, + 0xe3, 0x39, 0xb6, 0xd9, 0xe5, 0xd9, 0xa1, 0x58, 0xbf, 0x7a, 0xd2, 0xab, 0xce, 0xee, 0xf4, 0x23, + 0x4f, 0x7b, 0xd5, 0x39, 0x7e, 0x74, 0x0c, 0x12, 0x21, 0xf1, 0xa0, 0x98, 0xd8, 0x1d, 0xe6, 0x86, + 0xdd, 0xa1, 0xbe, 0x09, 0x85, 0x46, 0x87, 0x72, 0x2e, 0xf4, 0x16, 0x14, 0x2c, 0xf9, 0x5b, 0x9e, + 0xfc, 0x2b, 0xaa, 0xe4, 0x2a, 0x9a, 0xd3, 0x5e, 0xb5, 0xcc, 0x9a, 0x84, 0x9a, 0x02, 0xe0, 0x90, + 0x45, 0x7f, 0x08, 0xe5, 0xf5, 0xc7, 0x6d, 0x8f, 0x06, 0xea, 0x4e, 0x2f, 0x43, 0x9e, 0x70, 0x00, + 0x97, 0x56, 0x88, 0xea, 0x84, 0x20, 0xc3, 0x12, 0xcb, 0xf2, 0x30, 0x79, 0x6c, 0x98, 0x81, 0x4c, + 0xdb, 0x61, 0x1e, 0x5e, 0x67, 0x40, 0x2c, 0x70, 0xfa, 0x65, 0x28, 0xf0, 0x80, 0xf2, 0xef, 0xaf, + 0xa0, 0x19, 0xc8, 0x62, 0xe3, 0x98, 0x4b, 0x9d, 0xc4, 0x59, 0x6a, 0x1c, 0xc7, 0x22, 0x79, 0x1b, + 0xe0, 0x16, 0x09, 0x4d, 0x58, 0x85, 0x69, 0xf5, 0x9c, 0x93, 0x59, 0xe6, 0xb3, 0x52, 0xc9, 0x34, + 0x4e, 0xa2, 0x71, 0x3f, 0xbd, 0xfe, 0x10, 0x8a, 0x3c, 0x13, 0xb1, 0x34, 0x1e, 0x95, 0x0c, 0xed, + 0x05, 0x25, 0x43, 0xd5, 0x81, 0xcc, 0xb0, 0x3a, 0x10, 0x33, 0xd7, 0x81, 0xb2, 0xe0, 0x55, 0x45, + 0x32, 0x95, 0x86, 0xab, 0x50, 0x50, 0x66, 0x4a, 0x2d, 0x61, 0x73, 0xa4, 0x04, 0xe1, 0x90, 0x22, + 0xa6, 0xed, 0x00, 0x12, 0x59, 0x35, 0x9d, 0xb2, 0x58, 0x05, 0xcc, 0xbc, 0xb8, 0x02, 0xc6, 0x34, + 0xfd, 0x18, 0x2a, 0xc3, 0x3a, 0xaa, 0x97, 0xc8, 0xfb, 0xe9, 0x4d, 0xd1, 0xdf, 0xd7, 0x60, 0x26, + 0x2e, 0x29, 0xfd, 0xf5, 0xa5, 0x57, 0x72, 0x7e, 0xc5, 0x8f, 0x9d, 0xc8, 0x6f, 0x35, 0xb8, 0x90, + 0x70, 0x6d, 0xa4, 0x1b, 0x1f, 0xc1, 0xa8, 0x78, 0x70, 0x64, 0x47, 0x08, 0x8e, 0xbf, 0x66, 0xa0, + 0x7c, 0xdb, 0xd8, 0x23, 0xce, 0x2e, 0x71, 0x88, 0x19, 0x78, 0x14, 0xfd, 0x08, 0x4a, 0x2d, 0x23, + 0x30, 0x0f, 0x38, 0x54, 0x75, 0x87, 0x8d, 0x74, 0xa9, 0x34, 0x21, 0xa9, 0xb6, 0x15, 0x89, 0x59, + 0x77, 0x03, 0xda, 0xad, 0xcf, 0x49, 0x93, 0x4a, 0x31, 0x0c, 0x8e, 0x6b, 0xe3, 0x2d, 0x3d, 0xff, + 0x5e, 0x7f, 0xdc, 0x66, 0xa5, 0x6b, 0xf4, 0x49, 0x22, 0x61, 0x02, 0x26, 0xef, 0x76, 0x6c, 0x4a, + 0x5a, 0xc4, 0x0d, 0xa2, 0x96, 0x7e, 0xab, 0x4f, 0x3e, 0x1e, 0xd0, 0x38, 0x7f, 0x13, 0x66, 0xfa, + 0x8d, 0x67, 0xf9, 0xe7, 0x90, 0x74, 0xc5, 0x7d, 0x61, 0xf6, 0x13, 0x5d, 0x80, 0xdc, 0x91, 0xe1, + 0x74, 0xe4, 0x6b, 0xc4, 0xe2, 0xe3, 0x46, 0xe6, 0xba, 0xa6, 0xff, 0x5e, 0x83, 0xca, 0x30, 0x43, + 0xd0, 0xe7, 0x63, 0x82, 0xea, 0x25, 0x69, 0x55, 0xf6, 0x1d, 0xd2, 0x15, 0x52, 0xd7, 0xa1, 0xe0, + 0xb5, 0xd9, 0x10, 0xe6, 0x51, 0x79, 0xeb, 0x57, 0xd4, 0x4d, 0x6e, 0x4b, 0xf8, 0x69, 0xaf, 0x7a, + 0x31, 0x21, 0x5e, 0x21, 0x70, 0xc8, 0xca, 0xea, 0x00, 0xb7, 0x87, 0xd5, 0xa6, 0xb0, 0x0e, 0xdc, + 0xe7, 0x10, 0x2c, 0x31, 0xfa, 0x1f, 0x35, 0x18, 0xe7, 0x4d, 0xd9, 0x43, 0x28, 0xb0, 0xf3, 0xb3, + 0x8c, 0xc0, 0xe0, 0x76, 0xa5, 0x1e, 0x07, 0x18, 0xf7, 0x16, 0x09, 0x8c, 0x28, 0xda, 0x14, 0x04, + 0x87, 0x12, 0x11, 0x86, 0x9c, 0x1d, 0x90, 0x96, 0xba, 0xc8, 0xd7, 0x86, 0x8a, 0x96, 0xc3, 0x68, + 0x0d, 0x1b, 0xc7, 0xeb, 0x8f, 0x03, 0xe2, 0xb2, 0xcb, 0x88, 0x9e, 0xc6, 0x26, 0x93, 0x81, 0x85, + 0x28, 0xfd, 0xdf, 0x1a, 0x84, 0xaa, 0x58, 0xf0, 0xfb, 0xc4, 0xd9, 0xbf, 0x6d, 0xbb, 0x87, 0xf2, + 0x58, 0x43, 0x73, 0x76, 0x25, 0x1c, 0x87, 0x14, 0x67, 0x95, 0x87, 0xcc, 0x68, 0xe5, 0x81, 0x29, + 0x34, 0x3d, 0x37, 0xb0, 0xdd, 0xce, 0xc0, 0x6b, 0x5b, 0x93, 0x70, 0x1c, 0x52, 0xb0, 0x36, 0x87, + 0x92, 0x96, 0x61, 0xbb, 0xb6, 0xdb, 0x64, 0x4e, 0xac, 0x79, 0x1d, 0x37, 0xe0, 0xf5, 0x5e, 0xb6, + 0x39, 0x78, 0x00, 0x8b, 0xcf, 0xe0, 0xd0, 0xff, 0x92, 0x85, 0x12, 0xf3, 0x59, 0xd5, 0xb9, 0x37, + 0xa1, 0xec, 0xc4, 0xa3, 0x40, 0xfa, 0x7e, 0x51, 0x9a, 0x92, 0x7c, 0xd7, 0x38, 0x49, 0xcb, 0x98, + 0x79, 0x77, 0x16, 0x32, 0x67, 0x92, 0xcc, 0x1b, 0x71, 0x24, 0x4e, 0xd2, 0xb2, 0xec, 0x75, 0xcc, + 0xde, 0x87, 0xec, 0x7b, 0xc2, 0x2b, 0xfa, 0x36, 0x03, 0x62, 0x81, 0x43, 0x5b, 0x30, 0x67, 0x38, + 0x8e, 0x77, 0xcc, 0x81, 0x75, 0xcf, 0x3b, 0x6c, 0x19, 0xf4, 0xd0, 0xe7, 0x03, 0x55, 0xa1, 0xfe, + 0x39, 0xc9, 0x32, 0xb7, 0x3a, 0x48, 0x82, 0xcf, 0xe2, 0x3b, 0xeb, 0xda, 0xc6, 0x47, 0xbc, 0xb6, + 0x1b, 0x30, 0xc5, 0xe2, 0xcb, 0xeb, 0x04, 0xaa, 0xd7, 0xcc, 0xf1, 0x4b, 0x40, 0x27, 0xbd, 0xea, + 0xd4, 0xdd, 0x04, 0x06, 0xf7, 0x51, 0x32, 0x97, 0x1d, 0xbb, 0x65, 0x07, 0x95, 0x09, 0xce, 0x12, + 0xba, 0x7c, 0x9b, 0x01, 0xb1, 0xc0, 0x25, 0xe2, 0xa2, 0x70, 0x5e, 0x5c, 0xe8, 0xbf, 0xc9, 0x02, + 0x12, 0xcd, 0xb1, 0x25, 0xba, 0x1c, 0x91, 0x68, 0xae, 0xc0, 0x44, 0x4b, 0x36, 0xd7, 0x5a, 0x32, + 0xeb, 0xab, 0xbe, 0x5a, 0xe1, 0xd1, 0x16, 0x14, 0xc5, 0x83, 0x8f, 0x82, 0x78, 0x59, 0x12, 0x17, + 0xb7, 0x15, 0xe2, 0xb4, 0x57, 0x9d, 0x4f, 0xa8, 0x09, 0x31, 0x77, 0xbb, 0x6d, 0x82, 0x23, 0x09, + 0x6c, 0x9e, 0x36, 0xda, 0x76, 0x7c, 0x93, 0x52, 0x8c, 0xe6, 0xe9, 0x68, 0x26, 0xc2, 0x31, 0x2a, + 0xf4, 0x36, 0x8c, 0xb3, 0x93, 0x92, 0xc3, 0xed, 0x17, 0xd3, 0xa5, 0x0d, 0x76, 0xd6, 0xf5, 0x02, + 0xab, 0x9a, 0xec, 0x17, 0xe6, 0x12, 0x98, 0x76, 0x1e, 0x65, 0x3e, 0x33, 0x4b, 0x6e, 0x01, 0x42, + 0xed, 0x1b, 0x21, 0x06, 0xc7, 0xa8, 0xd0, 0x77, 0xa0, 0xb0, 0x2f, 0x1b, 0x44, 0x7e, 0x31, 0xa9, + 0x13, 0x97, 0x6a, 0x2b, 0xc5, 0x30, 0xa7, 0xbe, 0x70, 0x28, 0x4d, 0x7f, 0x17, 0x8a, 0x5b, 0xb6, + 0x49, 0x3d, 0x66, 0x20, 0xbb, 0x12, 0x3f, 0x31, 0x9d, 0x84, 0x57, 0xa2, 0xc2, 0x45, 0xe1, 0x59, + 0x9c, 0xb8, 0x86, 0xeb, 0x89, 0x19, 0x24, 0x17, 0xc5, 0xc9, 0x1d, 0x06, 0xc4, 0x02, 0x77, 0xe3, + 0x02, 0xab, 0xbf, 0x3f, 0x7f, 0x5a, 0x1d, 0x7b, 0xf2, 0xb4, 0x3a, 0xf6, 0xc1, 0x53, 0x59, 0x8b, + 0x4f, 0x01, 0x60, 0x7b, 0xef, 0x07, 0xc4, 0x14, 0x59, 0x2d, 0xd5, 0xe6, 0x44, 0x2d, 0xec, 0xf8, + 0xe6, 0x24, 0xd3, 0xd7, 0x53, 0xc5, 0x70, 0x38, 0x41, 0x89, 0x96, 0xa1, 0x18, 0xee, 0x44, 0xe4, + 0x45, 0xcf, 0xaa, 0xc0, 0x09, 0x17, 0x27, 0x38, 0xa2, 0x49, 0xa4, 0xd8, 0xf1, 0x73, 0x53, 0x6c, + 0x1d, 0xb2, 0x1d, 0xdb, 0xe2, 0xaf, 0xab, 0x58, 0x7f, 0x5d, 0x95, 0xb8, 0x7b, 0x9b, 0x8d, 0xd3, + 0x5e, 0xf5, 0x95, 0x61, 0xab, 0xc8, 0xa0, 0xdb, 0x26, 0x7e, 0xed, 0xde, 0x66, 0x03, 0x33, 0xe6, + 0xb3, 0xde, 0x7b, 0x7e, 0xc4, 0xf7, 0x7e, 0x0d, 0x40, 0x7a, 0xcd, 0xb8, 0xc5, 0xc3, 0x0d, 0x23, + 0xea, 0x56, 0x88, 0xc1, 0x31, 0x2a, 0xe4, 0xc3, 0xac, 0xc9, 0x86, 0x62, 0xf6, 0x3c, 0xec, 0x16, + 0xf1, 0x03, 0xa3, 0x25, 0x76, 0x45, 0xa3, 0x05, 0xf7, 0x25, 0xa9, 0x66, 0x76, 0xad, 0x5f, 0x18, + 0x1e, 0x94, 0x8f, 0x3c, 0x98, 0xb5, 0xe4, 0x78, 0x17, 0x29, 0x2d, 0x8e, 0xac, 0xf4, 0x22, 0x53, + 0xd8, 0xe8, 0x17, 0x84, 0x07, 0x65, 0xa3, 0xef, 0xc3, 0xbc, 0x02, 0x0e, 0xce, 0xd8, 0x7c, 0xdb, + 0x93, 0xad, 0x2f, 0x9c, 0xf4, 0xaa, 0xf3, 0x8d, 0xa1, 0x54, 0xf8, 0x05, 0x12, 0x90, 0x05, 0x79, + 0x47, 0xf4, 0x8f, 0x25, 0x5e, 0xf3, 0xbf, 0x9e, 0xce, 0x8b, 0x28, 0xfa, 0x6b, 0xf1, 0xbe, 0x31, + 0x9c, 0x21, 0x65, 0xcb, 0x28, 0x65, 0xa3, 0xc7, 0x50, 0x32, 0x5c, 0xd7, 0x0b, 0x0c, 0x31, 0xf5, + 0x4f, 0x72, 0x55, 0xab, 0x23, 0xab, 0x5a, 0x8d, 0x64, 0xf4, 0xf5, 0xa9, 0x31, 0x0c, 0x8e, 0xab, + 0x42, 0xc7, 0x30, 0xed, 0x1d, 0xbb, 0x84, 0x62, 0xb2, 0x4f, 0x28, 0x71, 0x4d, 0xe2, 0x57, 0xca, + 0x5c, 0xfb, 0x57, 0x52, 0x6a, 0x4f, 0x30, 0x47, 0x21, 0x9d, 0x84, 0xfb, 0xb8, 0x5f, 0x0b, 0xaa, + 0xb1, 0x24, 0xe9, 0x1a, 0x8e, 0xfd, 0x43, 0x42, 0xfd, 0xca, 0x54, 0xb4, 0xce, 0xdb, 0x08, 0xa1, + 0x38, 0x46, 0x81, 0xbe, 0x0a, 0x25, 0xd3, 0xe9, 0xf8, 0x01, 0x11, 0xbb, 0xd5, 0x69, 0xfe, 0x82, + 0x42, 0xff, 0xd6, 0x22, 0x14, 0x8e, 0xd3, 0xa1, 0x0e, 0x94, 0x5b, 0xf1, 0x92, 0x51, 0x99, 0xe5, + 0xde, 0x5d, 0x4f, 0xe7, 0xdd, 0x60, 0x51, 0x8b, 0xfa, 0x8a, 0x04, 0x0e, 0x27, 0xb5, 0xcc, 0x7f, + 0x0d, 0x4a, 0xff, 0x65, 0xcb, 0xcd, 0x5a, 0xf6, 0xfe, 0x7b, 0x1c, 0xa9, 0x65, 0xff, 0x53, 0x06, + 0xa6, 0x92, 0xa7, 0xdf, 0x57, 0x0e, 0x73, 0xa9, 0xca, 0xa1, 0x1a, 0x0e, 0xb5, 0xa1, 0xeb, 0x60, + 0x95, 0xd6, 0xb3, 0x43, 0xd3, 0xba, 0xcc, 0x9e, 0xe3, 0x2f, 0x93, 0x3d, 0x6b, 0x00, 0xac, 0xcf, + 0xa0, 0x9e, 0xe3, 0x10, 0xca, 0x13, 0x67, 0x41, 0xae, 0x7d, 0x43, 0x28, 0x8e, 0x51, 0xb0, 0x1e, + 0x75, 0xcf, 0xf1, 0xcc, 0x43, 0x7e, 0x04, 0xea, 0xd1, 0xf3, 0x94, 0x59, 0x10, 0x3d, 0x6a, 0x7d, + 0x00, 0x8b, 0xcf, 0xe0, 0xd0, 0xbb, 0x70, 0x71, 0xc7, 0xa0, 0x81, 0x6d, 0x38, 0xd1, 0x03, 0xe3, + 0x43, 0xc0, 0xa3, 0x81, 0x11, 0xe3, 0xf5, 0x51, 0x1f, 0x6a, 0x74, 0xf8, 0x11, 0x2c, 0x1a, 0x33, + 0xf4, 0xbf, 0x69, 0x70, 0xe9, 0x4c, 0xdd, 0x9f, 0xc2, 0x88, 0xf3, 0x28, 0x39, 0xe2, 0xbc, 0x99, + 0x72, 0xf3, 0x78, 0x96, 0xb5, 0x43, 0x06, 0x9e, 0x09, 0xc8, 0xed, 0xb0, 0x86, 0x58, 0xff, 0x95, + 0x06, 0x93, 0xfc, 0xd7, 0x28, 0x5b, 0xdb, 0x2a, 0xe4, 0xf6, 0x3d, 0xb5, 0x38, 0x2a, 0x88, 0xbf, + 0x15, 0x36, 0x18, 0x00, 0x0b, 0xf8, 0x4b, 0xac, 0x75, 0xdf, 0xd7, 0x20, 0xb9, 0x2f, 0x45, 0x37, + 0x45, 0xfc, 0x6a, 0xe1, 0x42, 0x73, 0xc4, 0xd8, 0x7d, 0x6b, 0xd8, 0x80, 0x36, 0x97, 0x6a, 0x77, + 0x77, 0x15, 0x8a, 0xd8, 0xf3, 0x82, 0x1d, 0x23, 0x38, 0xf0, 0x99, 0xe3, 0x6d, 0xf6, 0x43, 0x9e, + 0x0d, 0x77, 0x9c, 0x63, 0xb0, 0x80, 0xeb, 0xbf, 0xd4, 0xe0, 0xd2, 0xd0, 0x4d, 0x3a, 0x4b, 0x01, + 0x66, 0xf8, 0x25, 0x3d, 0x0a, 0xa3, 0x30, 0xa2, 0xc3, 0x31, 0x2a, 0x36, 0x59, 0x25, 0xd6, 0xef, + 0xfd, 0x93, 0x55, 0x42, 0x1b, 0x4e, 0xd2, 0xea, 0xff, 0xca, 0x40, 0x7e, 0x37, 0x30, 0x82, 0x8e, + 0xff, 0x3f, 0x8e, 0xd8, 0xcb, 0x90, 0xf7, 0xb9, 0x1e, 0x69, 0x5e, 0x58, 0x63, 0x85, 0x76, 0x2c, + 0xb1, 0x7c, 0x1a, 0x21, 0xbe, 0x6f, 0x34, 0x55, 0xc6, 0x8a, 0xa6, 0x11, 0x01, 0xc6, 0x0a, 0x8f, + 0xde, 0x80, 0x3c, 0x25, 0x86, 0x1f, 0x0e, 0x66, 0x0b, 0x4a, 0x24, 0xe6, 0xd0, 0xd3, 0x5e, 0x75, + 0x52, 0x0a, 0xe7, 0xdf, 0x58, 0x52, 0xa3, 0x07, 0x30, 0x61, 0x91, 0xc0, 0xb0, 0x1d, 0x31, 0x8f, + 0xa5, 0x5e, 0xdc, 0x0b, 0x61, 0x0d, 0xc1, 0x5a, 0x2f, 0x31, 0x9b, 0xe4, 0x07, 0x56, 0x02, 0x59, + 0xb6, 0x35, 0x3d, 0x4b, 0x8c, 0x13, 0xb9, 0x28, 0xdb, 0xae, 0x79, 0x16, 0xc1, 0x1c, 0xa3, 0x3f, + 0xd1, 0xa0, 0x24, 0x24, 0xad, 0x19, 0x1d, 0x9f, 0xa0, 0x95, 0xd0, 0x0b, 0x71, 0xdd, 0xaa, 0x93, + 0x1b, 0x67, 0x03, 0xc7, 0x69, 0xaf, 0x5a, 0xe4, 0x64, 0x7c, 0x12, 0x51, 0x0e, 0xc4, 0xce, 0x28, + 0x73, 0xce, 0x19, 0xbd, 0x0a, 0x39, 0xfe, 0x7a, 0xe4, 0x61, 0x86, 0x6f, 0x9d, 0x3f, 0x30, 0x2c, + 0x70, 0xfa, 0xc7, 0x19, 0x28, 0x27, 0x9c, 0x4b, 0x31, 0x0b, 0x84, 0x0b, 0xc5, 0x4c, 0x8a, 0x25, + 0xf5, 0xf0, 0x3f, 0x2b, 0x65, 0xed, 0xc9, 0xbf, 0x4c, 0xed, 0xf9, 0x2e, 0xe4, 0x4d, 0x76, 0x46, + 0xea, 0xbf, 0xef, 0x95, 0x51, 0xae, 0x93, 0x9f, 0x6e, 0x14, 0x8d, 0xfc, 0xd3, 0xc7, 0x52, 0x20, + 0xba, 0x05, 0xb3, 0x94, 0x04, 0xb4, 0xbb, 0xba, 0x1f, 0x10, 0x1a, 0x1f, 0xe2, 0x73, 0x51, 0xc7, + 0x8d, 0xfb, 0x09, 0xf0, 0x20, 0x8f, 0xbe, 0x07, 0x93, 0x77, 0x8d, 0x3d, 0x27, 0xfc, 0x2b, 0x0a, + 0x43, 0xd9, 0x76, 0x4d, 0xa7, 0x63, 0x11, 0x91, 0x8d, 0x55, 0xf6, 0x52, 0x8f, 0x76, 0x33, 0x8e, + 0x3c, 0xed, 0x55, 0xe7, 0x12, 0x00, 0xf1, 0xdf, 0x0b, 0x4e, 0x8a, 0xd0, 0x1d, 0x18, 0xff, 0x14, + 0xa7, 0xc7, 0xef, 0x41, 0x31, 0xea, 0xef, 0x3f, 0x61, 0x95, 0xfa, 0x23, 0x28, 0xb0, 0x88, 0x57, + 0x73, 0xe9, 0x39, 0x2d, 0x4e, 0xb2, 0x71, 0xca, 0xa4, 0x69, 0x9c, 0xf4, 0x16, 0x94, 0xef, 0xb5, + 0xad, 0x97, 0xfc, 0x33, 0x32, 0x93, 0xba, 0x6a, 0x5d, 0x03, 0xf1, 0xb7, 0x3a, 0x2b, 0x10, 0xa2, + 0x72, 0xc7, 0x0a, 0x44, 0xbc, 0xf0, 0xc6, 0x76, 0xe5, 0x3f, 0xd5, 0x00, 0xf8, 0x52, 0x6a, 0xfd, + 0x88, 0xb8, 0x01, 0x3b, 0x07, 0x16, 0xf8, 0xfd, 0xe7, 0xc0, 0x33, 0x03, 0xc7, 0xa0, 0x7b, 0x90, + 0xf7, 0x44, 0x34, 0x89, 0x3f, 0x24, 0x47, 0xdc, 0x7c, 0x86, 0x8f, 0x40, 0xc4, 0x13, 0x96, 0xc2, + 0xea, 0x4b, 0xcf, 0x9e, 0x2f, 0x8c, 0x7d, 0xf8, 0x7c, 0x61, 0xec, 0xa3, 0xe7, 0x0b, 0x63, 0xef, + 0x9d, 0x2c, 0x68, 0xcf, 0x4e, 0x16, 0xb4, 0x0f, 0x4f, 0x16, 0xb4, 0x8f, 0x4e, 0x16, 0xb4, 0x8f, + 0x4f, 0x16, 0xb4, 0x27, 0xff, 0x58, 0x18, 0x7b, 0x90, 0x39, 0x5a, 0xf9, 0x4f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x89, 0x39, 0x24, 0x64, 0xcc, 0x24, 0x00, 0x00, } func (m *APIGroup) Marshal() (dAtA []byte, err error) { @@ -4244,16 +4244,6 @@ func (this *ExportOptions) String() string { }, "") return s } -func (this *FieldsV1) String() string { - if this == nil { - return "nil" - } - s := strings.Join([]string{`&FieldsV1{`, - `Raw:` + valueToStringGenerated(this.Raw) + `,`, - `}`, - }, "") - return s -} func (this *GetOptions) String() string { if this == nil { return "nil" @@ -4369,7 +4359,7 @@ func (this *ManagedFieldsEntry) String() string { `APIVersion:` + fmt.Sprintf("%v", this.APIVersion) + `,`, `Time:` + strings.Replace(fmt.Sprintf("%v", this.Time), "Time", "Time", 1) + `,`, `FieldsType:` + fmt.Sprintf("%v", this.FieldsType) + `,`, - `FieldsV1:` + strings.Replace(this.FieldsV1.String(), "FieldsV1", "FieldsV1", 1) + `,`, + `FieldsV1:` + strings.Replace(fmt.Sprintf("%v", this.FieldsV1), "FieldsV1", "FieldsV1", 1) + `,`, `}`, }, "") return s diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto index ba1194dcc..7fd2279e0 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto @@ -224,6 +224,7 @@ message ExportOptions { // If a key maps to an empty Fields value, the field that key represents is part of the set. // // The exact format is defined in sigs.k8s.io/structured-merge-diff +// +protobuf.options.(gogoproto.goproto_stringer)=false message FieldsV1 { // Raw is the underlying serialization of this object. optional bytes Raw = 1; @@ -546,7 +547,7 @@ message ObjectMeta { // +optional optional string generateName = 2; - // Namespace defines the space within each name must be unique. An empty namespace is + // Namespace defines the space within which each name must be unique. An empty namespace is // equivalent to the "default" namespace, but "default" is the canonical representation. // Not all objects are required to be scoped to a namespace - the value of this field for // those objects will be empty. diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go index bf125b62a..0bff0e131 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types.go @@ -135,7 +135,7 @@ type ObjectMeta struct { // +optional GenerateName string `json:"generateName,omitempty" protobuf:"bytes,2,opt,name=generateName"` - // Namespace defines the space within each name must be unique. An empty namespace is + // Namespace defines the space within which each name must be unique. An empty namespace is // equivalent to the "default" namespace, but "default" is the canonical representation. // Not all objects are required to be scoped to a namespace - the value of this field for // those objects will be empty. @@ -1145,11 +1145,16 @@ const ( // If a key maps to an empty Fields value, the field that key represents is part of the set. // // The exact format is defined in sigs.k8s.io/structured-merge-diff +// +protobuf.options.(gogoproto.goproto_stringer)=false type FieldsV1 struct { // Raw is the underlying serialization of this object. Raw []byte `json:"-" protobuf:"bytes,1,opt,name=Raw"` } +func (f FieldsV1) String() string { + return string(f.Raw) +} + // TODO: Table does not generate to protobuf because of the interface{} - fix protobuf // generation to support a meta type that can accept any valid JSON. This can be introduced // in a v1 because clients a) receive an error if they try to access proto today, and b) diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go index b62e591ee..79409d30d 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/types_swagger_doc_generated.go @@ -223,7 +223,7 @@ var map_ObjectMeta = map[string]string{ "": "ObjectMeta is metadata that all persisted resources must have, which includes all objects users must create.", "name": "Name must be unique within a namespace. Is required when creating resources, although some resources may allow a client to request the generation of an appropriate name automatically. Name is primarily intended for creation idempotence and configuration definition. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/identifiers#names", "generateName": "GenerateName is an optional prefix, used by the server, to generate a unique name ONLY IF the Name field has not been provided. If this field is used, the name returned to the client will be different than the name passed. This value will also be combined with a unique suffix. The provided value has the same validation rules as the Name field, and may be truncated by the length of the suffix required to make the value unique on the server.\n\nIf this field is specified and the generated name exists, the server will NOT return a 409 - instead, it will either return 201 Created or 500 with Reason ServerTimeout indicating a unique name could not be found in the time allotted, and the client should retry (optionally after the time indicated in the Retry-After header).\n\nApplied only if Name is not specified. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency", - "namespace": "Namespace defines the space within each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces", + "namespace": "Namespace defines the space within which each name must be unique. An empty namespace is equivalent to the \"default\" namespace, but \"default\" is the canonical representation. Not all objects are required to be scoped to a namespace - the value of this field for those objects will be empty.\n\nMust be a DNS_LABEL. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/namespaces", "selfLink": "SelfLink is a URL representing this object. Populated by the system. Read-only.\n\nDEPRECATED Kubernetes will stop propagating this field in 1.20 release and the field is planned to be removed in 1.21 release.", "uid": "UID is the unique in time and space value for this object. It is typically generated by the server on successful creation of a resource and is not allowed to change on PUT operations.\n\nPopulated by the system. Read-only. More info: http://kubernetes.io/docs/user-guide/identifiers#uids", "resourceVersion": "An opaque value that represents the internal version of this object that can be used by clients to determine when objects have changed. May be used for optimistic concurrency, change detection, and the watch operation on a resource or set of resources. Clients must treat these values as opaque and passed unmodified back to the server. They may only be valid for a particular resource or set of resources.\n\nPopulated by the system. Read-only. Value must be treated as opaque by clients and . More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency", diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go index 4244b8a6d..54a231e49 100644 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go +++ b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured/helpers.go @@ -27,7 +27,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/json" - "k8s.io/klog" + "k8s.io/klog/v2" ) // NestedFieldCopy returns a deep copy of the value of a nested field. diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go deleted file mode 100644 index f3e5e4c98..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/conversion.go +++ /dev/null @@ -1,27 +0,0 @@ -/* -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 v1beta1 - -import "k8s.io/apimachinery/pkg/conversion" - -// Convert_Slice_string_To_v1beta1_IncludeObjectPolicy allows converting a URL query parameter value -func Convert_Slice_string_To_v1beta1_IncludeObjectPolicy(input *[]string, out *IncludeObjectPolicy, s conversion.Scope) error { - if len(*input) > 0 { - *out = IncludeObjectPolicy((*input)[0]) - } - return nil -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go deleted file mode 100644 index 2b7e8ca0b..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/deepcopy.go +++ /dev/null @@ -1,17 +0,0 @@ -/* -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 v1beta1 diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go deleted file mode 100644 index 20c9d2ec7..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/doc.go +++ /dev/null @@ -1,23 +0,0 @@ -/* -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 -// +k8s:openapi-gen=true -// +k8s:defaulter-gen=TypeMeta - -// +groupName=meta.k8s.io - -package v1beta1 // import "k8s.io/apimachinery/pkg/apis/meta/v1beta1" diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go deleted file mode 100644 index cd5fc9026..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.pb.go +++ /dev/null @@ -1,415 +0,0 @@ -/* -Copyright 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. DO NOT EDIT. -// source: k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto - -package v1beta1 - -import ( - fmt "fmt" - - io "io" - - proto "github.com/gogo/protobuf/proto" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - math "math" - math_bits "math/bits" - reflect "reflect" - strings "strings" -) - -// 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.GoGoProtoPackageIsVersion3 // please upgrade the proto package - -func (m *PartialObjectMetadataList) Reset() { *m = PartialObjectMetadataList{} } -func (*PartialObjectMetadataList) ProtoMessage() {} -func (*PartialObjectMetadataList) Descriptor() ([]byte, []int) { - return fileDescriptor_90ec10f86b91f9a8, []int{0} -} -func (m *PartialObjectMetadataList) XXX_Unmarshal(b []byte) error { - return m.Unmarshal(b) -} -func (m *PartialObjectMetadataList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { - b = b[:cap(b)] - n, err := m.MarshalToSizedBuffer(b) - if err != nil { - return nil, err - } - return b[:n], nil -} -func (m *PartialObjectMetadataList) XXX_Merge(src proto.Message) { - xxx_messageInfo_PartialObjectMetadataList.Merge(m, src) -} -func (m *PartialObjectMetadataList) XXX_Size() int { - return m.Size() -} -func (m *PartialObjectMetadataList) XXX_DiscardUnknown() { - xxx_messageInfo_PartialObjectMetadataList.DiscardUnknown(m) -} - -var xxx_messageInfo_PartialObjectMetadataList proto.InternalMessageInfo - -func init() { - proto.RegisterType((*PartialObjectMetadataList)(nil), "k8s.io.apimachinery.pkg.apis.meta.v1beta1.PartialObjectMetadataList") -} - -func init() { - proto.RegisterFile("k8s.io/kubernetes/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto", fileDescriptor_90ec10f86b91f9a8) -} - -var fileDescriptor_90ec10f86b91f9a8 = []byte{ - // 317 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x8c, 0x91, 0x41, 0x4b, 0xf3, 0x30, - 0x1c, 0xc6, 0x9b, 0xf7, 0x65, 0x38, 0x3a, 0x04, 0xd9, 0x69, 0xee, 0x90, 0x0d, 0x4f, 0xf3, 0xb0, - 0x84, 0x0d, 0x11, 0xc1, 0xdb, 0x6e, 0x82, 0xa2, 0xec, 0x28, 0x1e, 0x4c, 0xbb, 0xbf, 0x5d, 0xac, - 0x69, 0x4a, 0xf2, 0xef, 0xc0, 0x9b, 0x1f, 0xc1, 0x8f, 0xb5, 0xe3, 0x8e, 0x03, 0x61, 0xb8, 0xf8, - 0x45, 0x24, 0x5d, 0x15, 0x19, 0x0a, 0xbb, 0xf5, 0x79, 0xca, 0xef, 0x97, 0x27, 0x24, 0x1c, 0xa7, - 0x67, 0x96, 0x49, 0xcd, 0xd3, 0x22, 0x02, 0x93, 0x01, 0x82, 0xe5, 0x33, 0xc8, 0x26, 0xda, 0xf0, - 0xea, 0x87, 0xc8, 0xa5, 0x12, 0xf1, 0x54, 0x66, 0x60, 0x9e, 0x79, 0x9e, 0x26, 0xbe, 0xb0, 0x5c, - 0x01, 0x0a, 0x3e, 0x1b, 0x44, 0x80, 0x62, 0xc0, 0x13, 0xc8, 0xc0, 0x08, 0x84, 0x09, 0xcb, 0x8d, - 0x46, 0xdd, 0x3c, 0xde, 0xa0, 0xec, 0x27, 0xca, 0xf2, 0x34, 0xf1, 0x85, 0x65, 0x1e, 0x65, 0x15, - 0xda, 0xee, 0x27, 0x12, 0xa7, 0x45, 0xc4, 0x62, 0xad, 0x78, 0xa2, 0x13, 0xcd, 0x4b, 0x43, 0x54, - 0x3c, 0x94, 0xa9, 0x0c, 0xe5, 0xd7, 0xc6, 0xdc, 0x3e, 0xd9, 0x65, 0xd4, 0xf6, 0x9e, 0xf6, 0xe9, - 0x5f, 0x94, 0x29, 0x32, 0x94, 0x0a, 0xb8, 0x8d, 0xa7, 0xa0, 0xc4, 0x36, 0x77, 0xf4, 0x46, 0xc2, - 0xc3, 0x1b, 0x61, 0x50, 0x8a, 0xa7, 0xeb, 0xe8, 0x11, 0x62, 0xbc, 0x02, 0x14, 0x13, 0x81, 0xe2, - 0x52, 0x5a, 0x6c, 0xde, 0x85, 0x75, 0x55, 0xe5, 0xd6, 0xbf, 0x2e, 0xe9, 0x35, 0x86, 0x8c, 0xed, - 0x72, 0x71, 0xe6, 0x69, 0x6f, 0x1a, 0x1d, 0xcc, 0x57, 0x9d, 0xc0, 0xad, 0x3a, 0xf5, 0xaf, 0x66, - 0xfc, 0x6d, 0x6c, 0xde, 0x87, 0x35, 0x89, 0xa0, 0x6c, 0x8b, 0x74, 0xff, 0xf7, 0x1a, 0xc3, 0xf3, - 0xdd, 0xd4, 0xbf, 0xae, 0x1d, 0xed, 0x57, 0xe7, 0xd4, 0x2e, 0xbc, 0x71, 0xbc, 0x11, 0x8f, 0xfa, - 0xf3, 0x35, 0x0d, 0x16, 0x6b, 0x1a, 0x2c, 0xd7, 0x34, 0x78, 0x71, 0x94, 0xcc, 0x1d, 0x25, 0x0b, - 0x47, 0xc9, 0xd2, 0x51, 0xf2, 0xee, 0x28, 0x79, 0xfd, 0xa0, 0xc1, 0xed, 0x5e, 0xf5, 0x52, 0x9f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0xf7, 0x82, 0x5b, 0x80, 0x29, 0x02, 0x00, 0x00, -} - -func (m *PartialObjectMetadataList) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *PartialObjectMetadataList) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *PartialObjectMetadataList) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - { - size, err := m.ListMeta.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - if len(m.Items) > 0 { - for iNdEx := len(m.Items) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.Items[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintGenerated(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - } - } - return len(dAtA) - i, nil -} - -func encodeVarintGenerated(dAtA []byte, offset int, v uint64) int { - offset -= sovGenerated(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *PartialObjectMetadataList) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - if len(m.Items) > 0 { - for _, e := range m.Items { - l = e.Size() - n += 1 + l + sovGenerated(uint64(l)) - } - } - l = m.ListMeta.Size() - n += 1 + l + sovGenerated(uint64(l)) - return n -} - -func sovGenerated(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozGenerated(x uint64) (n int) { - return sovGenerated(uint64((x << 1) ^ uint64((int64(x) >> 63)))) -} -func (this *PartialObjectMetadataList) String() string { - if this == nil { - return "nil" - } - repeatedStringForItems := "[]PartialObjectMetadata{" - for _, f := range this.Items { - repeatedStringForItems += fmt.Sprintf("%v", f) + "," - } - repeatedStringForItems += "}" - s := strings.Join([]string{`&PartialObjectMetadataList{`, - `Items:` + repeatedStringForItems + `,`, - `ListMeta:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.ListMeta), "ListMeta", "v1.ListMeta", 1), `&`, ``, 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 *PartialObjectMetadataList) 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: PartialObjectMetadataList: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PartialObjectMetadataList: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: - 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 < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Items = append(m.Items, v1.PartialObjectMetadata{}) - if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 2: - 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 < 0 { - return ErrInvalidLengthGenerated - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if err := m.ListMeta.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) < 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 - depth := 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 - } - } - case 1: - iNdEx += 8 - 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 - } - } - if length < 0 { - return 0, ErrInvalidLengthGenerated - } - iNdEx += length - case 3: - depth++ - case 4: - if depth == 0 { - return 0, ErrUnexpectedEndOfGroupGenerated - } - depth-- - case 5: - iNdEx += 4 - default: - return 0, fmt.Errorf("proto: illegal wireType %d", wireType) - } - if iNdEx < 0 { - return 0, ErrInvalidLengthGenerated - } - if depth == 0 { - return iNdEx, nil - } - } - return 0, io.ErrUnexpectedEOF -} - -var ( - ErrInvalidLengthGenerated = fmt.Errorf("proto: negative length found during unmarshaling") - ErrIntOverflowGenerated = fmt.Errorf("proto: integer overflow") - ErrUnexpectedEndOfGroupGenerated = fmt.Errorf("proto: unexpected end of group") -) diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto deleted file mode 100644 index 59ce74376..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/generated.proto +++ /dev/null @@ -1,41 +0,0 @@ -/* -Copyright 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.apimachinery.pkg.apis.meta.v1beta1; - -import "k8s.io/apimachinery/pkg/apis/meta/v1/generated.proto"; -import "k8s.io/apimachinery/pkg/runtime/schema/generated.proto"; - -// Package-wide variables from generator "generated". -option go_package = "v1beta1"; - -// PartialObjectMetadataList contains a list of objects containing only their metadata. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -message PartialObjectMetadataList { - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - // +optional - optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 2; - - // items contains each of the included items. - repeated k8s.io.apimachinery.pkg.apis.meta.v1.PartialObjectMetadata items = 1; -} - diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go deleted file mode 100644 index 8d11399fb..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/register.go +++ /dev/null @@ -1,45 +0,0 @@ -/* -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 v1beta1 - -import ( - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// GroupName is the group name for this API. -const GroupName = "meta.k8s.io" - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1beta1"} - -// Kind takes an unqualified kind and returns a Group qualified GroupKind -func Kind(kind string) schema.GroupKind { - return SchemeGroupVersion.WithKind(kind).GroupKind() -} - -// AddMetaToScheme registers base meta types into schemas. -func AddMetaToScheme(scheme *runtime.Scheme) error { - scheme.AddKnownTypes(SchemeGroupVersion, - &Table{}, - &TableOptions{}, - &PartialObjectMetadata{}, - &PartialObjectMetadataList{}, - ) - - return nil -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go deleted file mode 100644 index f16170a37..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types.go +++ /dev/null @@ -1,84 +0,0 @@ -/* -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 v1beta1 is alpha objects from meta that will be introduced. -package v1beta1 - -import ( - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -// Table is a tabular representation of a set of API resources. The server transforms the -// object into a set of preferred columns for quickly reviewing the objects. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -// +protobuf=false -type Table = v1.Table - -// TableColumnDefinition contains information about a column returned in the Table. -// +protobuf=false -type TableColumnDefinition = v1.TableColumnDefinition - -// TableRow is an individual row in a table. -// +protobuf=false -type TableRow = v1.TableRow - -// TableRowCondition allows a row to be marked with additional information. -// +protobuf=false -type TableRowCondition = v1.TableRowCondition - -type RowConditionType = v1.RowConditionType - -type ConditionStatus = v1.ConditionStatus - -type IncludeObjectPolicy = v1.IncludeObjectPolicy - -// TableOptions are used when a Table is requested by the caller. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type TableOptions = v1.TableOptions - -// PartialObjectMetadata is a generic representation of any object with ObjectMeta. It allows clients -// to get access to a particular ObjectMeta schema without knowing the details of the version. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type PartialObjectMetadata = v1.PartialObjectMetadata - -// IMPORTANT: PartialObjectMetadataList has different protobuf field ids in v1beta1 than -// v1 because ListMeta was accidentally omitted prior to 1.15. Therefore this type must -// remain independent of v1.PartialObjectMetadataList to preserve mappings. - -// PartialObjectMetadataList contains a list of objects containing only their metadata. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type PartialObjectMetadataList struct { - v1.TypeMeta `json:",inline"` - // Standard list metadata. - // More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds - // +optional - v1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,2,opt,name=metadata"` - - // items contains each of the included items. - Items []v1.PartialObjectMetadata `json:"items" protobuf:"bytes,1,rep,name=items"` -} - -const ( - RowCompleted = v1.RowCompleted - - ConditionTrue = v1.ConditionTrue - ConditionFalse = v1.ConditionFalse - ConditionUnknown = v1.ConditionUnknown - - IncludeNone = v1.IncludeNone - IncludeMetadata = v1.IncludeMetadata - IncludeObject = v1.IncludeObject -) diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go deleted file mode 100644 index ef7e7c1e9..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/types_swagger_doc_generated.go +++ /dev/null @@ -1,40 +0,0 @@ -/* -Copyright 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 v1beta1 - -// 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. DO NOT EDIT. -var map_PartialObjectMetadataList = map[string]string{ - "": "PartialObjectMetadataList contains a list of objects containing only their metadata.", - "metadata": "Standard list metadata. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds", - "items": "items contains each of the included items.", -} - -func (PartialObjectMetadataList) SwaggerDoc() map[string]string { - return map_PartialObjectMetadataList -} - -// AUTO-GENERATED FUNCTIONS END HERE diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go deleted file mode 100644 index 89053b981..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.deepcopy.go +++ /dev/null @@ -1,59 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 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 deepcopy-gen. DO NOT EDIT. - -package v1beta1 - -import ( - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PartialObjectMetadataList) DeepCopyInto(out *PartialObjectMetadataList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]v1.PartialObjectMetadata, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PartialObjectMetadataList. -func (in *PartialObjectMetadataList) DeepCopy() *PartialObjectMetadataList { - if in == nil { - return nil - } - out := new(PartialObjectMetadataList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PartialObjectMetadataList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} diff --git a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go b/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go deleted file mode 100644 index 73e63fc11..000000000 --- a/vendor/k8s.io/apimachinery/pkg/apis/meta/v1beta1/zz_generated.defaults.go +++ /dev/null @@ -1,32 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 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 defaulter-gen. DO NOT EDIT. - -package v1beta1 - -import ( - runtime "k8s.io/apimachinery/pkg/runtime" -) - -// RegisterDefaults adds defaulters functions to the given scheme. -// Public to allow building arbitrary schemes. -// All generated defaulters are covering - they call all nested defaulters. -func RegisterDefaults(scheme *runtime.Scheme) error { - return nil -} diff --git a/vendor/k8s.io/apimachinery/pkg/conversion/converter.go b/vendor/k8s.io/apimachinery/pkg/conversion/converter.go index 2d7c8bd1e..838d5b0aa 100644 --- a/vendor/k8s.io/apimachinery/pkg/conversion/converter.go +++ b/vendor/k8s.io/apimachinery/pkg/conversion/converter.go @@ -442,20 +442,20 @@ func (c *Converter) doConversion(src, dest interface{}, flags FieldMatchingFlags if fn, ok := c.generatedConversionFuncs.untyped[pair]; ok { return fn(src, dest, scope) } - // TODO: consider everything past this point deprecated - we want to support only point to point top level - // conversions dv, err := EnforcePtr(dest) if err != nil { return err } - if !dv.CanAddr() && !dv.CanSet() { - return fmt.Errorf("can't write to dest") - } sv, err := EnforcePtr(src) if err != nil { return err } + return fmt.Errorf("converting (%s) to (%s): unknown conversion", sv.Type(), dv.Type()) + + // TODO: Everything past this point is deprecated. + // Remove in 1.20 once we're sure it didn't break anything. + // Leave something on the stack, so that calls to struct tag getters never fail. scope.srcStack.push(scopeStackElem{}) scope.destStack.push(scopeStackElem{}) diff --git a/vendor/k8s.io/apimachinery/pkg/labels/labels.go b/vendor/k8s.io/apimachinery/pkg/labels/labels.go index abf3ace6f..d9eeb4f91 100644 --- a/vendor/k8s.io/apimachinery/pkg/labels/labels.go +++ b/vendor/k8s.io/apimachinery/pkg/labels/labels.go @@ -57,14 +57,22 @@ func (ls Set) Get(label string) string { return ls[label] } -// AsSelector converts labels into a selectors. +// AsSelector converts labels into a selectors. It does not +// perform any validation, which means the server will reject +// the request if the Set contains invalid values. func (ls Set) AsSelector() Selector { return SelectorFromSet(ls) } +// AsValidatedSelector converts labels into a selectors. +// The Set is validated client-side, which allows to catch errors early. +func (ls Set) AsValidatedSelector() (Selector, error) { + return ValidatedSelectorFromSet(ls) +} + // AsSelectorPreValidated converts labels into a selector, but -// assumes that labels are already validated and thus don't -// preform any validation. +// assumes that labels are already validated and thus doesn't +// perform any validation. // According to our measurements this is significantly faster // in codepaths that matter at high scale. func (ls Set) AsSelectorPreValidated() Selector { diff --git a/vendor/k8s.io/apimachinery/pkg/labels/selector.go b/vendor/k8s.io/apimachinery/pkg/labels/selector.go index 2f8e1e2b0..04ba2df42 100644 --- a/vendor/k8s.io/apimachinery/pkg/labels/selector.go +++ b/vendor/k8s.io/apimachinery/pkg/labels/selector.go @@ -26,7 +26,7 @@ import ( "k8s.io/apimachinery/pkg/selection" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation" - "k8s.io/klog" + "k8s.io/klog/v2" ) // Requirements is AND of all requirements. @@ -221,7 +221,7 @@ func (r *Requirement) Matches(ls Labels) bool { return false } - // There should be only one strValue in r.strValues, and can be converted to a integer. + // There should be only one strValue in r.strValues, and can be converted to an integer. if len(r.strValues) != 1 { klog.V(10).Infof("Invalid values count %+v of requirement %#v, for 'Gt', 'Lt' operators, exactly one value is required", len(r.strValues), r) return false @@ -869,23 +869,30 @@ func validateLabelValue(k, v string) error { // SelectorFromSet returns a Selector which will match exactly the given Set. A // nil and empty Sets are considered equivalent to Everything(). +// It does not perform any validation, which means the server will reject +// the request if the Set contains invalid values. func SelectorFromSet(ls Set) Selector { + return SelectorFromValidatedSet(ls) +} + +// ValidatedSelectorFromSet returns a Selector which will match exactly the given Set. A +// nil and empty Sets are considered equivalent to Everything(). +// The Set is validated client-side, which allows to catch errors early. +func ValidatedSelectorFromSet(ls Set) (Selector, error) { if ls == nil || len(ls) == 0 { - return internalSelector{} + return internalSelector{}, nil } requirements := make([]Requirement, 0, len(ls)) for label, value := range ls { r, err := NewRequirement(label, selection.Equals, []string{value}) - if err == nil { - requirements = append(requirements, *r) - } else { - //TODO: double check errors when input comes from serialization? - return internalSelector{} + if err != nil { + return nil, err } + requirements = append(requirements, *r) } // sort to have deterministic string representation sort.Sort(ByKey(requirements)) - return internalSelector(requirements) + return internalSelector(requirements), nil } // SelectorFromValidatedSet returns a Selector which will match exactly the given Set. diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/codec.go b/vendor/k8s.io/apimachinery/pkg/runtime/codec.go index 0bccf9dd9..a92863139 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/codec.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/codec.go @@ -29,7 +29,7 @@ import ( "k8s.io/apimachinery/pkg/conversion/queryparams" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/klog" + "k8s.io/klog/v2" ) // codec binds an encoder and decoder. diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/codec_check.go b/vendor/k8s.io/apimachinery/pkg/runtime/codec_check.go index 510444a4d..000228061 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/codec_check.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/codec_check.go @@ -21,6 +21,7 @@ import ( "reflect" "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/json" ) // CheckCodec makes sure that the codec can encode objects like internalType, @@ -32,7 +33,14 @@ func CheckCodec(c Codec, internalType Object, externalTypes ...schema.GroupVersi return fmt.Errorf("Internal type not encodable: %v", err) } for _, et := range externalTypes { - exBytes := []byte(fmt.Sprintf(`{"kind":"%v","apiVersion":"%v"}`, et.Kind, et.GroupVersion().String())) + typeMeta := TypeMeta{ + Kind: et.Kind, + APIVersion: et.GroupVersion().String(), + } + exBytes, err := json.Marshal(&typeMeta) + if err != nil { + return err + } obj, err := Decode(c, exBytes) if err != nil { return fmt.Errorf("external type %s not interpretable: %v", et, err) diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/converter.go b/vendor/k8s.io/apimachinery/pkg/runtime/converter.go index 918d0831d..31f6e00b0 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/converter.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/converter.go @@ -33,7 +33,7 @@ import ( utilruntime "k8s.io/apimachinery/pkg/util/runtime" "sigs.k8s.io/structured-merge-diff/v3/value" - "k8s.io/klog" + "k8s.io/klog/v2" ) // UnstructuredConverter is an interface for converting between interface{} diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go b/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go index 636103312..9563b88b7 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go @@ -176,15 +176,6 @@ func (gv GroupVersion) Empty() bool { // String puts "group" and "version" into a single "group/version" string. For the legacy v1 // it returns "v1". func (gv GroupVersion) String() string { - // special case the internal apiVersion for the legacy kube types - if gv.Empty() { - return "" - } - - // special case of "v1" for backward compatibility - if len(gv.Group) == 0 && gv.Version == "v1" { - return gv.Version - } if len(gv.Group) > 0 { return gv.Group + "/" + gv.Version } diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go b/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go index 4b739ec38..3b254961d 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/scheme.go @@ -211,6 +211,19 @@ func (s *Scheme) AddKnownTypeWithName(gvk schema.GroupVersionKind, obj Object) { } } s.typeToGVK[t] = append(s.typeToGVK[t], gvk) + + // if the type implements DeepCopyInto(), register a self-conversion + if m := reflect.ValueOf(obj).MethodByName("DeepCopyInto"); m.IsValid() && m.Type().NumIn() == 1 && m.Type().NumOut() == 0 && m.Type().In(0) == reflect.TypeOf(obj) { + if err := s.AddGeneratedConversionFunc(obj, obj, func(a, b interface{}, scope conversion.Scope) error { + // copy a to b + reflect.ValueOf(a).MethodByName("DeepCopyInto").Call([]reflect.Value{reflect.ValueOf(b)}) + // clear TypeMeta to match legacy reflective conversion + b.(Object).GetObjectKind().SetGroupVersionKind(schema.GroupVersionKind{}) + return nil + }); err != nil { + panic(err) + } + } } // KnownTypes returns the types known for the given version. diff --git a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go index 9d17f09e5..e081d7ff1 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/json/json.go @@ -31,7 +31,7 @@ import ( "k8s.io/apimachinery/pkg/runtime/serializer/recognizer" "k8s.io/apimachinery/pkg/util/framer" utilyaml "k8s.io/apimachinery/pkg/util/yaml" - "k8s.io/klog" + "k8s.io/klog/v2" ) // NewSerializer creates a JSON serializer that handles encoding versioned objects into the proper JSON form. If typer 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 ced184c91..718c5dfb7 100644 --- a/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go +++ b/vendor/k8s.io/apimachinery/pkg/runtime/serializer/versioning/versioning.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" - "k8s.io/klog" + "k8s.io/klog/v2" ) // NewDefaultingCodecForScheme is a convenience method for callers that are using a scheme. diff --git a/vendor/k8s.io/apimachinery/pkg/util/httpstream/httpstream.go b/vendor/k8s.io/apimachinery/pkg/util/httpstream/httpstream.go index 9d5fdeece..00ce5f785 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/httpstream/httpstream.go +++ b/vendor/k8s.io/apimachinery/pkg/util/httpstream/httpstream.go @@ -114,6 +114,18 @@ func negotiateProtocol(clientProtocols, serverProtocols []string) string { return "" } +func commaSeparatedHeaderValues(header []string) []string { + var parsedClientProtocols []string + for i := range header { + for _, clientProtocol := range strings.Split(header[i], ",") { + if proto := strings.Trim(clientProtocol, " "); len(proto) > 0 { + parsedClientProtocols = append(parsedClientProtocols, proto) + } + } + } + return parsedClientProtocols +} + // Handshake performs a subprotocol negotiation. If the client did request a // subprotocol, Handshake will select the first common value found in // serverProtocols. If a match is found, Handshake adds a response header @@ -121,7 +133,7 @@ func negotiateProtocol(clientProtocols, serverProtocols []string) string { // returned, along with a response header containing the list of protocols the // server can accept. func Handshake(req *http.Request, w http.ResponseWriter, serverProtocols []string) (string, error) { - clientProtocols := req.Header[http.CanonicalHeaderKey(HeaderProtocolVersion)] + clientProtocols := commaSeparatedHeaderValues(req.Header[http.CanonicalHeaderKey(HeaderProtocolVersion)]) if len(clientProtocols) == 0 { return "", fmt.Errorf("unable to upgrade: %s is required", HeaderProtocolVersion) } diff --git a/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go index 9d222faa8..7a6881250 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go +++ b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/connection.go @@ -24,7 +24,7 @@ import ( "github.com/docker/spdystream" "k8s.io/apimachinery/pkg/util/httpstream" - "k8s.io/klog" + "k8s.io/klog/v2" ) // connection maintains state about a spdystream.Connection and its associated 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 2699597e7..6309fbc26 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go +++ b/vendor/k8s.io/apimachinery/pkg/util/httpstream/spdy/roundtripper.go @@ -76,19 +76,20 @@ var _ utilnet.TLSClientConfigHolder = &SpdyRoundTripper{} var _ httpstream.UpgradeRoundTripper = &SpdyRoundTripper{} var _ utilnet.Dialer = &SpdyRoundTripper{} -// NewRoundTripper creates a new SpdyRoundTripper that will use -// the specified tlsConfig. -func NewRoundTripper(tlsConfig *tls.Config, followRedirects, requireSameHostRedirects bool) httpstream.UpgradeRoundTripper { - return NewSpdyRoundTripper(tlsConfig, followRedirects, requireSameHostRedirects) +// NewRoundTripper creates a new SpdyRoundTripper that will use the specified +// tlsConfig. +func NewRoundTripper(tlsConfig *tls.Config, followRedirects, requireSameHostRedirects bool) *SpdyRoundTripper { + return NewRoundTripperWithProxy(tlsConfig, followRedirects, requireSameHostRedirects, utilnet.NewProxierWithNoProxyCIDR(http.ProxyFromEnvironment)) } -// NewSpdyRoundTripper creates a new SpdyRoundTripper that will use -// the specified tlsConfig. This function is mostly meant for unit tests. -func NewSpdyRoundTripper(tlsConfig *tls.Config, followRedirects, requireSameHostRedirects bool) *SpdyRoundTripper { +// NewRoundTripperWithProxy creates a new SpdyRoundTripper that will use the +// specified tlsConfig and proxy func. +func NewRoundTripperWithProxy(tlsConfig *tls.Config, followRedirects, requireSameHostRedirects bool, proxier func(*http.Request) (*url.URL, error)) *SpdyRoundTripper { return &SpdyRoundTripper{ tlsConfig: tlsConfig, followRedirects: followRedirects, requireSameHostRedirects: requireSameHostRedirects, + proxier: proxier, } } @@ -116,11 +117,7 @@ func (s *SpdyRoundTripper) Dial(req *http.Request) (net.Conn, error) { // dial dials the host specified by req, using TLS if appropriate, optionally // using a proxy server if one is configured via environment variables. func (s *SpdyRoundTripper) dial(req *http.Request) (net.Conn, error) { - proxier := s.proxier - if proxier == nil { - proxier = utilnet.NewProxierWithNoProxyCIDR(http.ProxyFromEnvironment) - } - proxyURL, err := proxier(req) + proxyURL, err := s.proxier(req) if err != nil { return nil, err } diff --git a/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go b/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go index cb974dcf7..6576def82 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go +++ b/vendor/k8s.io/apimachinery/pkg/util/intstr/intstr.go @@ -26,7 +26,7 @@ import ( "strings" "github.com/google/gofuzz" - "k8s.io/klog" + "k8s.io/klog/v2" ) // IntOrString is a type that can hold an int32 or a string. When used in diff --git a/vendor/k8s.io/apimachinery/pkg/util/json/json.go b/vendor/k8s.io/apimachinery/pkg/util/json/json.go index 0e2e30175..204834883 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/json/json.go +++ b/vendor/k8s.io/apimachinery/pkg/util/json/json.go @@ -66,11 +66,36 @@ func Unmarshal(data []byte, v interface{}) error { // If the decode succeeds, post-process the map to convert json.Number objects to int64 or float64 return convertSliceNumbers(*v, 0) + case *interface{}: + // Build a decoder from the given data + decoder := json.NewDecoder(bytes.NewBuffer(data)) + // Preserve numbers, rather than casting to float64 automatically + decoder.UseNumber() + // Run the decode + if err := decoder.Decode(v); err != nil { + return err + } + // If the decode succeeds, post-process the map to convert json.Number objects to int64 or float64 + return convertInterfaceNumbers(v, 0) + default: return json.Unmarshal(data, v) } } +func convertInterfaceNumbers(v *interface{}, depth int) error { + var err error + switch v2 := (*v).(type) { + case json.Number: + *v, err = convertNumber(v2) + case map[string]interface{}: + err = convertMapNumbers(v2, depth+1) + case []interface{}: + err = convertSliceNumbers(v2, depth+1) + } + return err +} + // convertMapNumbers traverses the map, converting any json.Number values to int64 or float64. // values which are map[string]interface{} or []interface{} are recursively visited func convertMapNumbers(m map[string]interface{}, depth int) error { diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/http.go b/vendor/k8s.io/apimachinery/pkg/util/net/http.go index 7449cbb0a..20c9a245b 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/net/http.go +++ b/vendor/k8s.io/apimachinery/pkg/util/net/http.go @@ -32,7 +32,7 @@ import ( "strings" "golang.org/x/net/http2" - "k8s.io/klog" + "k8s.io/klog/v2" ) // JoinPreservingTrailingSlash does a path.Join of the specified elements, diff --git a/vendor/k8s.io/apimachinery/pkg/util/net/interface.go b/vendor/k8s.io/apimachinery/pkg/util/net/interface.go index 836494d57..204e223ca 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/net/interface.go +++ b/vendor/k8s.io/apimachinery/pkg/util/net/interface.go @@ -26,7 +26,7 @@ import ( "strings" - "k8s.io/klog" + "k8s.io/klog/v2" ) type AddressFamily uint diff --git a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go index 1428443f5..e8a9f609f 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go +++ b/vendor/k8s.io/apimachinery/pkg/util/runtime/runtime.go @@ -23,7 +23,7 @@ import ( "sync" "time" - "k8s.io/klog" + "k8s.io/klog/v2" ) var ( diff --git a/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go b/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go index 4cb0c122c..d759d912b 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go +++ b/vendor/k8s.io/apimachinery/pkg/util/wait/wait.go @@ -286,8 +286,9 @@ func contextForChannel(parentCh <-chan struct{}) (context.Context, context.Cance } // BackoffManager manages backoff with a particular scheme based on its underlying implementation. It provides -// an interface to return a timer for backoff, and caller shall backoff until Timer.C returns. If the second Backoff() -// is called before the timer from the first Backoff() call finishes, the first timer will NOT be drained. +// an interface to return a timer for backoff, and caller shall backoff until Timer.C() drains. If the second Backoff() +// is called before the timer from the first Backoff() call finishes, the first timer will NOT be drained and result in +// undetermined behavior. // The BackoffManager is supposed to be called in a single-threaded environment. type BackoffManager interface { Backoff() clock.Timer @@ -317,7 +318,7 @@ func NewExponentialBackoffManager(initBackoff, maxBackoff, resetDuration time.Du Steps: math.MaxInt32, Cap: maxBackoff, }, - backoffTimer: c.NewTimer(0), + backoffTimer: nil, initialBackoff: initBackoff, lastBackoffStart: c.Now(), backoffResetDuration: resetDuration, @@ -334,9 +335,14 @@ func (b *exponentialBackoffManagerImpl) getNextBackoff() time.Duration { return b.backoff.Step() } -// Backoff implements BackoffManager.Backoff, it returns a timer so caller can block on the timer for backoff. +// Backoff implements BackoffManager.Backoff, it returns a timer so caller can block on the timer for exponential backoff. +// The returned timer must be drained before calling Backoff() the second time func (b *exponentialBackoffManagerImpl) Backoff() clock.Timer { - b.backoffTimer.Reset(b.getNextBackoff()) + if b.backoffTimer == nil { + b.backoffTimer = b.clock.NewTimer(b.getNextBackoff()) + } else { + b.backoffTimer.Reset(b.getNextBackoff()) + } return b.backoffTimer } @@ -354,7 +360,7 @@ func NewJitteredBackoffManager(duration time.Duration, jitter float64, c clock.C clock: c, duration: duration, jitter: jitter, - backoffTimer: c.NewTimer(0), + backoffTimer: nil, } } @@ -366,8 +372,15 @@ func (j *jitteredBackoffManagerImpl) getNextBackoff() time.Duration { return jitteredPeriod } +// Backoff implements BackoffManager.Backoff, it returns a timer so caller can block on the timer for jittered backoff. +// The returned timer must be drained before calling Backoff() the second time func (j *jitteredBackoffManagerImpl) Backoff() clock.Timer { - j.backoffTimer.Reset(j.getNextBackoff()) + backoff := j.getNextBackoff() + if j.backoffTimer == nil { + j.backoffTimer = j.clock.NewTimer(backoff) + } else { + j.backoffTimer.Reset(backoff) + } return j.backoffTimer } diff --git a/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go b/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go index a9a3853ac..492171faf 100644 --- a/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go +++ b/vendor/k8s.io/apimachinery/pkg/util/yaml/decoder.go @@ -26,7 +26,7 @@ import ( "strings" "unicode" - "k8s.io/klog" + "k8s.io/klog/v2" "sigs.k8s.io/yaml" ) @@ -92,6 +92,10 @@ type YAMLDecoder struct { // the caller in framing the chunk. func NewDocumentDecoder(r io.ReadCloser) io.ReadCloser { scanner := bufio.NewScanner(r) + // the size of initial allocation for buffer 4k + buf := make([]byte, 4*1024) + // the maximum size used to buffer a token 5M + scanner.Buffer(buf, 5*1024*1024) scanner.Split(splitYAMLDocument) return &YAMLDecoder{ r: r, diff --git a/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go b/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go index 4269a836a..8271e9b70 100644 --- a/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go +++ b/vendor/k8s.io/apimachinery/pkg/watch/streamwatcher.go @@ -21,7 +21,7 @@ import ( "io" "sync" - "k8s.io/klog" + "k8s.io/klog/v2" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/net" diff --git a/vendor/k8s.io/apimachinery/pkg/watch/watch.go b/vendor/k8s.io/apimachinery/pkg/watch/watch.go index 988aba3ed..1f4911a31 100644 --- a/vendor/k8s.io/apimachinery/pkg/watch/watch.go +++ b/vendor/k8s.io/apimachinery/pkg/watch/watch.go @@ -20,7 +20,7 @@ import ( "fmt" "sync" - "k8s.io/klog" + "k8s.io/klog/v2" "k8s.io/apimachinery/pkg/runtime" ) @@ -32,8 +32,8 @@ type Interface interface { Stop() // Returns a chan which will receive all the events. If an error occurs - // or Stop() is called, this channel will be closed, in which case the - // watch should be completely cleaned up. + // or Stop() is called, the implementation will close this channel and + // release any resources used by the watch. ResultChan() <-chan Event } @@ -46,7 +46,9 @@ const ( Deleted EventType = "DELETED" Bookmark EventType = "BOOKMARK" Error EventType = "ERROR" +) +var ( DefaultChanSize int32 = 100 ) diff --git a/vendor/k8s.io/apimachinery/third_party/forked/golang/reflect/deep_equal.go b/vendor/k8s.io/apimachinery/third_party/forked/golang/reflect/deep_equal.go index 7ed1d1cff..6be80349a 100644 --- a/vendor/k8s.io/apimachinery/third_party/forked/golang/reflect/deep_equal.go +++ b/vendor/k8s.io/apimachinery/third_party/forked/golang/reflect/deep_equal.go @@ -16,7 +16,7 @@ import ( // that type. type Equalities map[reflect.Type]reflect.Value -// For convenience, panics on errrors +// For convenience, panics on errors func EqualitiesOrDie(funcs ...interface{}) Equalities { e := Equalities{} if err := e.AddFuncs(funcs...); err != nil { @@ -229,7 +229,7 @@ func (e Equalities) deepValueEqual(v1, v2 reflect.Value, visited map[visit]bool, // // An empty slice *is* equal to a nil slice for our purposes; same for maps. // -// Unexported field members cannot be compared and will cause an imformative panic; you must add an Equality +// Unexported field members cannot be compared and will cause an informative panic; you must add an Equality // function for these types. func (e Equalities) DeepEqual(a1, a2 interface{}) bool { if a1 == nil || a2 == nil { diff --git a/vendor/k8s.io/apiserver/go.mod b/vendor/k8s.io/apiserver/go.mod index 11ec847e1..c87d248ce 100644 --- a/vendor/k8s.io/apiserver/go.mod +++ b/vendor/k8s.io/apiserver/go.mod @@ -5,52 +5,51 @@ module k8s.io/apiserver go 1.13 require ( - github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect github.com/coreos/go-oidc v2.1.0+incompatible github.com/coreos/go-semver v0.3.0 // indirect github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e - github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea + github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f github.com/davecgh/go-spew v1.1.1 - github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0 github.com/dustin/go-humanize v1.0.0 // indirect github.com/emicklei/go-restful v2.9.5+incompatible github.com/evanphx/json-patch v4.2.0+incompatible github.com/go-openapi/jsonreference v0.19.3 // indirect github.com/go-openapi/spec v0.19.3 github.com/gogo/protobuf v1.3.1 - github.com/google/go-cmp v0.3.0 + github.com/google/go-cmp v0.4.0 github.com/google/gofuzz v1.1.0 github.com/google/uuid v1.1.1 - github.com/googleapis/gnostic v0.1.0 + github.com/googleapis/gnostic v0.4.1 github.com/gorilla/websocket v1.4.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/hashicorp/golang-lru v0.5.1 github.com/mailru/easyjson v0.7.0 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 - github.com/pkg/errors v0.8.1 + github.com/pkg/errors v0.9.1 github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 // indirect - github.com/prometheus/client_model v0.2.0 - github.com/sirupsen/logrus v1.4.2 // indirect github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.4.0 - go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 + github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 // indirect + go.etcd.io/etcd v0.5.0-alpha.5.0.20200401174654-e694b7bb0875 + go.uber.org/atomic v1.4.0 // indirect go.uber.org/zap v1.10.0 golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 - golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 + golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e + golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f + google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba // indirect google.golang.org/grpc v1.26.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 gopkg.in/square/go-jose.v2 v2.2.2 gopkg.in/yaml.v2 v2.2.8 - gotest.tools v2.2.0+incompatible // indirect - k8s.io/api v0.18.2 - k8s.io/apimachinery v0.18.2 - k8s.io/client-go v0.18.2 - k8s.io/component-base v0.18.2 - k8s.io/klog v1.0.0 - k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c - k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 - sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7 + k8s.io/api v0.19.0-beta.2 + k8s.io/apimachinery v0.19.0-beta.2 + k8s.io/client-go v0.19.0-beta.2 + k8s.io/component-base v0.19.0-beta.2 + k8s.io/klog/v2 v2.1.0 + k8s.io/kube-openapi v0.0.0-20200427153329-656914f816f9 + k8s.io/utils v0.0.0-20200414100711-2df71ebbae66 + sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9-0.20200513220823-33b997865007 sigs.k8s.io/structured-merge-diff/v3 v3.0.0 sigs.k8s.io/yaml v1.2.0 ) @@ -58,8 +57,8 @@ require ( replace ( golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 - k8s.io/api => k8s.io/api v0.18.2 - k8s.io/apimachinery => k8s.io/apimachinery v0.18.2 - k8s.io/client-go => k8s.io/client-go v0.18.2 - k8s.io/component-base => k8s.io/component-base v0.18.2 + k8s.io/api => k8s.io/api v0.19.0-beta.2 + k8s.io/apimachinery => k8s.io/apimachinery v0.19.0-beta.2 + k8s.io/client-go => k8s.io/client-go v0.19.0-beta.2 + k8s.io/component-base => k8s.io/component-base v0.19.0-beta.2 ) diff --git a/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go b/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go index 2ad5cf205..6cffab5b3 100644 --- a/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go +++ b/vendor/k8s.io/apiserver/pkg/server/httplog/httplog.go @@ -25,7 +25,7 @@ import ( "runtime" "time" - "k8s.io/klog" + "k8s.io/klog/v2" ) // StacktracePred returns true if a stacktrace should be logged for this status. @@ -156,7 +156,7 @@ func (rl *respLogger) Addf(format string, data ...interface{}) { // Log is intended to be called once at the end of your request handler, via defer func (rl *respLogger) Log() { latency := time.Since(rl.startTime) - if klog.V(3) { + if klog.V(3).Enabled() { if !rl.hijacked { klog.InfoDepth(1, fmt.Sprintf("verb=%q URI=%q latency=%v resp=%v UserAgent=%q srcIP=%q: %v%v", rl.req.Method, rl.req.RequestURI, @@ -194,7 +194,7 @@ func (rl *respLogger) Write(b []byte) (int, error) { func (rl *respLogger) Flush() { if flusher, ok := rl.w.(http.Flusher); ok { flusher.Flush() - } else if klog.V(2) { + } else if klog.V(2).Enabled() { klog.InfoDepth(1, fmt.Sprintf("Unable to convert %+v into http.Flusher", rl.w)) } } diff --git a/vendor/k8s.io/apiserver/pkg/util/wsstream/conn.go b/vendor/k8s.io/apiserver/pkg/util/wsstream/conn.go index 2d1a79021..11474bfff 100644 --- a/vendor/k8s.io/apiserver/pkg/util/wsstream/conn.go +++ b/vendor/k8s.io/apiserver/pkg/util/wsstream/conn.go @@ -26,7 +26,7 @@ import ( "time" "golang.org/x/net/websocket" - "k8s.io/klog" + "k8s.io/klog/v2" "k8s.io/apimachinery/pkg/util/runtime" ) diff --git a/vendor/k8s.io/apiserver/pkg/util/wsstream/stream.go b/vendor/k8s.io/apiserver/pkg/util/wsstream/stream.go index 4253c17cf..ba7e6a519 100644 --- a/vendor/k8s.io/apiserver/pkg/util/wsstream/stream.go +++ b/vendor/k8s.io/apiserver/pkg/util/wsstream/stream.go @@ -63,7 +63,7 @@ type Reader struct { protocols map[string]ReaderProtocolConfig selectedProtocol string - handleCrash func() // overridable for testing + handleCrash func(additionalHandlers ...func(interface{})) // overridable for testing } // NewReader creates a WebSocket pipe that will copy the contents of r to a provided @@ -78,7 +78,7 @@ func NewReader(r io.Reader, ping bool, protocols map[string]ReaderProtocolConfig err: make(chan error), ping: ping, protocols: protocols, - handleCrash: func() { runtime.HandleCrash() }, + handleCrash: runtime.HandleCrash, } } diff --git a/vendor/k8s.io/client-go/go.mod b/vendor/k8s.io/client-go/go.mod index 6920f3844..2ecc4352c 100644 --- a/vendor/k8s.io/client-go/go.mod +++ b/vendor/k8s.io/client-go/go.mod @@ -5,39 +5,37 @@ module k8s.io/client-go go 1.13 require ( - cloud.google.com/go v0.38.0 // indirect - github.com/Azure/go-autorest/autorest v0.9.0 - github.com/Azure/go-autorest/autorest/adal v0.5.0 + cloud.google.com/go v0.51.0 // indirect + github.com/Azure/go-autorest/autorest v0.9.6 + github.com/Azure/go-autorest/autorest/adal v0.8.2 github.com/davecgh/go-spew v1.1.1 github.com/evanphx/json-patch v4.2.0+incompatible github.com/gogo/protobuf v1.3.1 - github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 - github.com/golang/protobuf v1.3.2 - github.com/google/btree v1.0.0 // indirect + github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 + github.com/golang/protobuf v1.4.2 + github.com/google/go-cmp v0.4.0 github.com/google/gofuzz v1.1.0 github.com/google/uuid v1.1.1 - github.com/googleapis/gnostic v0.1.0 - github.com/gophercloud/gophercloud v0.1.0 + github.com/googleapis/gnostic v0.4.1 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 github.com/imdario/mergo v0.3.5 github.com/peterbourgon/diskv v2.0.1+incompatible github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.4.0 golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 - golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 - golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 - golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 - google.golang.org/appengine v1.5.0 // indirect - k8s.io/api v0.18.2 - k8s.io/apimachinery v0.18.2 - k8s.io/klog v1.0.0 - k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 + golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e + golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 + golang.org/x/time v0.0.0-20191024005414-555d28b269f0 + k8s.io/api v0.19.0-beta.2 + k8s.io/apimachinery v0.19.0-beta.2 + k8s.io/klog/v2 v2.1.0 + k8s.io/utils v0.0.0-20200414100711-2df71ebbae66 sigs.k8s.io/yaml v1.2.0 ) replace ( golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 - k8s.io/api => k8s.io/api v0.18.2 - k8s.io/apimachinery => k8s.io/apimachinery v0.18.2 + k8s.io/api => k8s.io/api v0.19.0-beta.2 + k8s.io/apimachinery => k8s.io/apimachinery v0.19.0-beta.2 ) diff --git a/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go index 71ed045ac..6d3544bd1 100644 --- a/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go +++ b/vendor/k8s.io/client-go/plugin/pkg/client/auth/exec/exec.go @@ -46,7 +46,7 @@ import ( "k8s.io/client-go/tools/metrics" "k8s.io/client-go/transport" "k8s.io/client-go/util/connrotation" - "k8s.io/klog" + "k8s.io/klog/v2" ) const execInfoEnv = "KUBERNETES_EXEC_INFO" diff --git a/vendor/k8s.io/client-go/rest/config.go b/vendor/k8s.io/client-go/rest/config.go index f58f51830..983e3d75e 100644 --- a/vendor/k8s.io/client-go/rest/config.go +++ b/vendor/k8s.io/client-go/rest/config.go @@ -23,6 +23,7 @@ import ( "io/ioutil" "net" "net/http" + "net/url" "os" "path/filepath" gruntime "runtime" @@ -37,7 +38,7 @@ import ( "k8s.io/client-go/transport" certutil "k8s.io/client-go/util/cert" "k8s.io/client-go/util/flowcontrol" - "k8s.io/klog" + "k8s.io/klog/v2" ) const ( @@ -128,6 +129,13 @@ type Config struct { // Dial specifies the dial function for creating unencrypted TCP connections. Dial func(ctx context.Context, network, address string) (net.Conn, error) + // Proxy is the the proxy func to be used for all requests made by this + // transport. If Proxy is nil, http.ProxyFromEnvironment is used. If Proxy + // returns a nil *URL, no proxy is used. + // + // socks5 proxying does not currently support spdy streaming endpoints. + Proxy func(*http.Request) (*url.URL, error) + // Version forces a specific version to be used (if registered) // Do we need this? // Version string @@ -560,6 +568,7 @@ func AnonymousClientConfig(config *Config) *Config { Burst: config.Burst, Timeout: config.Timeout, Dial: config.Dial, + Proxy: config.Proxy, } } @@ -601,5 +610,6 @@ func CopyConfig(config *Config) *Config { RateLimiter: config.RateLimiter, Timeout: config.Timeout, Dial: config.Dial, + Proxy: config.Proxy, } } diff --git a/vendor/k8s.io/client-go/rest/plugin.go b/vendor/k8s.io/client-go/rest/plugin.go index 0bc2d03f6..33d146cd9 100644 --- a/vendor/k8s.io/client-go/rest/plugin.go +++ b/vendor/k8s.io/client-go/rest/plugin.go @@ -21,7 +21,7 @@ import ( "net/http" "sync" - "k8s.io/klog" + "k8s.io/klog/v2" clientcmdapi "k8s.io/client-go/tools/clientcmd/api" ) diff --git a/vendor/k8s.io/client-go/rest/request.go b/vendor/k8s.io/client-go/rest/request.go index c5bc6a898..91b0646db 100644 --- a/vendor/k8s.io/client-go/rest/request.go +++ b/vendor/k8s.io/client-go/rest/request.go @@ -45,7 +45,7 @@ import ( restclientwatch "k8s.io/client-go/rest/watch" "k8s.io/client-go/tools/metrics" "k8s.io/client-go/util/flowcontrol" - "k8s.io/klog" + "k8s.io/klog/v2" ) var ( @@ -91,6 +91,7 @@ type Request struct { rateLimiter flowcontrol.RateLimiter backoff BackoffManager timeout time.Duration + maxRetries int // generic components accessible via method setters verb string @@ -139,6 +140,7 @@ func NewRequest(c *RESTClient) *Request { backoff: backoff, timeout: timeout, pathPrefix: pathPrefix, + maxRetries: 10, } switch { @@ -391,6 +393,18 @@ func (r *Request) Timeout(d time.Duration) *Request { return r } +// MaxRetries makes the request use the given integer as a ceiling of retrying upon receiving +// "Retry-After" headers and 429 status-code in the response. The default is 10 unless this +// function is specifically called with a different value. +// A zero maxRetries prevent it from doing retires and return an error immediately. +func (r *Request) MaxRetries(maxRetries int) *Request { + if maxRetries < 0 { + maxRetries = 0 + } + r.maxRetries = maxRetries + return r +} + // Body makes the request use obj as the body. Optional. // If obj is a string, try to read a file of that name. // If obj is a []byte, send it directly. @@ -594,7 +608,7 @@ var globalThrottledLogger = &throttledLogger{ func (b *throttledLogger) attemptToLog() (klog.Level, bool) { for _, setting := range b.settings { - if bool(klog.V(setting.logLevel)) { + if bool(klog.V(setting.logLevel).Enabled()) { // Return early without write locking if possible. if func() bool { setting.lock.RLock() @@ -831,7 +845,6 @@ func (r *Request) request(ctx context.Context, fn func(*http.Request, *http.Resp } // Right now we make about ten retry attempts if we get a Retry-After response. - maxRetries := 10 retries := 0 for { @@ -894,7 +907,7 @@ func (r *Request) request(ctx context.Context, fn func(*http.Request, *http.Resp }() retries++ - if seconds, wait := checkWait(resp); wait && retries < maxRetries { + if seconds, wait := checkWait(resp); wait && retries <= r.maxRetries { if seeker, ok := r.body.(io.Seeker); ok && r.body != nil { _, err := seeker.Seek(0, 0) if err != nil { @@ -1040,11 +1053,11 @@ func (r *Request) transformResponse(resp *http.Response, req *http.Request) Resu func truncateBody(body string) string { max := 0 switch { - case bool(klog.V(10)): + case bool(klog.V(10).Enabled()): return body - case bool(klog.V(9)): + case bool(klog.V(9).Enabled()): max = 10240 - case bool(klog.V(8)): + case bool(klog.V(8).Enabled()): max = 1024 } @@ -1059,7 +1072,7 @@ func truncateBody(body string) string { // allocating a new string for the body output unless necessary. Uses a simple heuristic to determine // whether the body is printable. func glogBody(prefix string, body []byte) { - if klog.V(8) { + if klog.V(8).Enabled() { if bytes.IndexFunc(body, func(r rune) bool { return r < 0x0a }) != -1 { diff --git a/vendor/k8s.io/client-go/rest/transport.go b/vendor/k8s.io/client-go/rest/transport.go index 0800e4ec7..450edc6ed 100644 --- a/vendor/k8s.io/client-go/rest/transport.go +++ b/vendor/k8s.io/client-go/rest/transport.go @@ -85,7 +85,8 @@ func (c *Config) TransportConfig() (*transport.Config, error) { Groups: c.Impersonate.Groups, Extra: c.Impersonate.Extra, }, - Dial: c.Dial, + Dial: c.Dial, + Proxy: c.Proxy, } if c.ExecProvider != nil && c.AuthProvider != nil { diff --git a/vendor/k8s.io/client-go/rest/urlbackoff.go b/vendor/k8s.io/client-go/rest/urlbackoff.go index d00e42f86..2f9962d7e 100644 --- a/vendor/k8s.io/client-go/rest/urlbackoff.go +++ b/vendor/k8s.io/client-go/rest/urlbackoff.go @@ -22,7 +22,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/util/flowcontrol" - "k8s.io/klog" + "k8s.io/klog/v2" ) // Set of resp. Codes that we backoff for. diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go b/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go index 65a36936b..d677d6519 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/api/helpers.go @@ -98,6 +98,9 @@ func ShortenConfig(config *Config) { if len(authInfo.ClientCertificateData) > 0 { authInfo.ClientCertificateData = redactedBytes } + if len(authInfo.Token) > 0 { + authInfo.Token = "REDACTED" + } config.AuthInfos[key] = authInfo } for key, cluster := range config.Clusters { diff --git a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go index 44317dd01..57acb3dbe 100644 --- a/vendor/k8s.io/client-go/tools/clientcmd/api/types.go +++ b/vendor/k8s.io/client-go/tools/clientcmd/api/types.go @@ -82,6 +82,17 @@ type Cluster struct { // CertificateAuthorityData contains PEM-encoded certificate authority certificates. Overrides CertificateAuthority // +optional CertificateAuthorityData []byte `json:"certificate-authority-data,omitempty"` + // ProxyURL is the URL to the proxy to be used for all requests made by this + // client. URLs with "http", "https", and "socks5" schemes are supported. If + // this configuration is not provided or the empty string, the client + // attempts to construct a proxy configuration from http_proxy and + // https_proxy environment variables. If these environment variables are not + // set, the client does not attempt to proxy requests. + // + // socks5 proxying does not currently support spdy streaming endpoints (exec, + // attach, port forward). + // +optional + ProxyURL string `json:"proxy-url,omitempty"` // Extensions holds additional information. This is useful for extenders so that reads and writes don't clobber unknown fields // +optional Extensions map[string]runtime.Object `json:"extensions,omitempty"` diff --git a/vendor/k8s.io/client-go/tools/remotecommand/remotecommand.go b/vendor/k8s.io/client-go/tools/remotecommand/remotecommand.go index 892d8d105..cb39faf7f 100644 --- a/vendor/k8s.io/client-go/tools/remotecommand/remotecommand.go +++ b/vendor/k8s.io/client-go/tools/remotecommand/remotecommand.go @@ -22,7 +22,7 @@ import ( "net/http" "net/url" - "k8s.io/klog" + "k8s.io/klog/v2" "k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/apimachinery/pkg/util/remotecommand" diff --git a/vendor/k8s.io/client-go/tools/remotecommand/v1.go b/vendor/k8s.io/client-go/tools/remotecommand/v1.go index 4120f1f5f..ff0fbd2d7 100644 --- a/vendor/k8s.io/client-go/tools/remotecommand/v1.go +++ b/vendor/k8s.io/client-go/tools/remotecommand/v1.go @@ -24,7 +24,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/httpstream" - "k8s.io/klog" + "k8s.io/klog/v2" ) // streamProtocolV1 implements the first version of the streaming exec & attach diff --git a/vendor/k8s.io/client-go/transport/cache.go b/vendor/k8s.io/client-go/transport/cache.go index 36d6500f5..3ec4e1935 100644 --- a/vendor/k8s.io/client-go/transport/cache.go +++ b/vendor/k8s.io/client-go/transport/cache.go @@ -52,6 +52,7 @@ type tlsCacheKey struct { nextProtos string dial string disableCompression bool + proxy string } func (t tlsCacheKey) String() string { @@ -59,7 +60,7 @@ func (t tlsCacheKey) String() string { if len(t.keyData) > 0 { keyText = "" } - return fmt.Sprintf("insecure:%v, caData:%#v, certData:%#v, keyData:%s, getCert: %s, serverName:%s, dial:%s disableCompression:%t", t.insecure, t.caData, t.certData, keyText, t.getCert, t.serverName, t.dial, t.disableCompression) + return fmt.Sprintf("insecure:%v, caData:%#v, certData:%#v, keyData:%s, getCert: %s, serverName:%s, dial:%s disableCompression:%t, proxy: %s", t.insecure, t.caData, t.certData, keyText, t.getCert, t.serverName, t.dial, t.disableCompression, t.proxy) } func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) { @@ -83,7 +84,7 @@ func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) { return nil, err } // The options didn't require a custom TLS config - if tlsConfig == nil && config.Dial == nil { + if tlsConfig == nil && config.Dial == nil && config.Proxy == nil { return http.DefaultTransport, nil } @@ -104,9 +105,14 @@ func (c *tlsTransportCache) get(config *Config) (http.RoundTripper, error) { go dynamicCertDialer.Run(wait.NeverStop) } + proxy := http.ProxyFromEnvironment + if config.Proxy != nil { + proxy = config.Proxy + } + // Cache a single transport for these options c.transports[key] = utilnet.SetTransportDefaults(&http.Transport{ - Proxy: http.ProxyFromEnvironment, + Proxy: proxy, TLSHandshakeTimeout: 10 * time.Second, TLSClientConfig: tlsConfig, MaxIdleConnsPerHost: idleConnsPerHost, @@ -130,6 +136,7 @@ func tlsConfigKey(c *Config) (tlsCacheKey, error) { nextProtos: strings.Join(c.TLS.NextProtos, ","), dial: fmt.Sprintf("%p", c.Dial), disableCompression: c.DisableCompression, + proxy: fmt.Sprintf("%p", c.Proxy), } if c.TLS.ReloadTLSFiles { diff --git a/vendor/k8s.io/client-go/transport/cert_rotation.go b/vendor/k8s.io/client-go/transport/cert_rotation.go index 918e77f9a..dc22b6ec4 100644 --- a/vendor/k8s.io/client-go/transport/cert_rotation.go +++ b/vendor/k8s.io/client-go/transport/cert_rotation.go @@ -29,7 +29,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/util/connrotation" "k8s.io/client-go/util/workqueue" - "k8s.io/klog" + "k8s.io/klog/v2" ) const workItemKey = "key" diff --git a/vendor/k8s.io/client-go/transport/config.go b/vendor/k8s.io/client-go/transport/config.go index c20a4a8fc..45db24864 100644 --- a/vendor/k8s.io/client-go/transport/config.go +++ b/vendor/k8s.io/client-go/transport/config.go @@ -21,6 +21,7 @@ import ( "crypto/tls" "net" "net/http" + "net/url" ) // Config holds various options for establishing a transport. @@ -68,6 +69,13 @@ type Config struct { // Dial specifies the dial function for creating unencrypted TCP connections. Dial func(ctx context.Context, network, address string) (net.Conn, error) + + // Proxy is the the proxy func to be used for all requests made by this + // transport. If Proxy is nil, http.ProxyFromEnvironment is used. If Proxy + // returns a nil *URL, no proxy is used. + // + // socks5 proxying does not currently support spdy streaming endpoints. + Proxy func(*http.Request) (*url.URL, error) } // ImpersonationConfig has all the available impersonation options diff --git a/vendor/k8s.io/client-go/transport/round_trippers.go b/vendor/k8s.io/client-go/transport/round_trippers.go index a272753ae..a05208d92 100644 --- a/vendor/k8s.io/client-go/transport/round_trippers.go +++ b/vendor/k8s.io/client-go/transport/round_trippers.go @@ -23,7 +23,7 @@ import ( "time" "golang.org/x/oauth2" - "k8s.io/klog" + "k8s.io/klog/v2" utilnet "k8s.io/apimachinery/pkg/util/net" ) @@ -67,13 +67,13 @@ func HTTPWrappersForConfig(config *Config, rt http.RoundTripper) (http.RoundTrip // DebugWrappers wraps a round tripper and logs based on the current log level. func DebugWrappers(rt http.RoundTripper) http.RoundTripper { switch { - case bool(klog.V(9)): + case bool(klog.V(9).Enabled()): rt = newDebuggingRoundTripper(rt, debugCurlCommand, debugURLTiming, debugResponseHeaders) - case bool(klog.V(8)): + case bool(klog.V(8).Enabled()): rt = newDebuggingRoundTripper(rt, debugJustURL, debugRequestHeaders, debugResponseStatus, debugResponseHeaders) - case bool(klog.V(7)): + case bool(klog.V(7).Enabled()): rt = newDebuggingRoundTripper(rt, debugJustURL, debugRequestHeaders, debugResponseStatus) - case bool(klog.V(6)): + case bool(klog.V(6).Enabled()): rt = newDebuggingRoundTripper(rt, debugURLTiming) } diff --git a/vendor/k8s.io/client-go/transport/spdy/spdy.go b/vendor/k8s.io/client-go/transport/spdy/spdy.go index 53cc7ee18..682f964f6 100644 --- a/vendor/k8s.io/client-go/transport/spdy/spdy.go +++ b/vendor/k8s.io/client-go/transport/spdy/spdy.go @@ -38,7 +38,11 @@ func RoundTripperFor(config *restclient.Config) (http.RoundTripper, Upgrader, er if err != nil { return nil, nil, err } - upgradeRoundTripper := spdy.NewRoundTripper(tlsConfig, true, false) + proxy := http.ProxyFromEnvironment + if config.Proxy != nil { + proxy = config.Proxy + } + upgradeRoundTripper := spdy.NewRoundTripperWithProxy(tlsConfig, true, false, proxy) wrapper, err := restclient.HTTPWrappersForConfig(config, upgradeRoundTripper) if err != nil { return nil, nil, err diff --git a/vendor/k8s.io/client-go/transport/token_source.go b/vendor/k8s.io/client-go/transport/token_source.go index bb32c3b4d..f730c3975 100644 --- a/vendor/k8s.io/client-go/transport/token_source.go +++ b/vendor/k8s.io/client-go/transport/token_source.go @@ -26,7 +26,7 @@ import ( "golang.org/x/oauth2" - "k8s.io/klog" + "k8s.io/klog/v2" ) // TokenSourceWrapTransport returns a WrapTransport that injects bearer tokens diff --git a/vendor/k8s.io/client-go/transport/transport.go b/vendor/k8s.io/client-go/transport/transport.go index 143ebfa5c..88d89494d 100644 --- a/vendor/k8s.io/client-go/transport/transport.go +++ b/vendor/k8s.io/client-go/transport/transport.go @@ -27,7 +27,7 @@ import ( "time" utilnet "k8s.io/apimachinery/pkg/util/net" - "k8s.io/klog" + "k8s.io/klog/v2" ) // New returns an http.RoundTripper that will provide the authentication diff --git a/vendor/k8s.io/client-go/util/cert/cert.go b/vendor/k8s.io/client-go/util/cert/cert.go index 9fd097af5..3da144163 100644 --- a/vendor/k8s.io/client-go/util/cert/cert.go +++ b/vendor/k8s.io/client-go/util/cert/cert.go @@ -28,7 +28,7 @@ import ( "io/ioutil" "math/big" "net" - "path" + "path/filepath" "strings" "time" @@ -96,8 +96,8 @@ func GenerateSelfSignedCertKeyWithFixtures(host string, alternateIPs []net.IP, a maxAge := time.Hour * 24 * 365 // one year self-signed certs baseName := fmt.Sprintf("%s_%s_%s", host, strings.Join(ipsToStrings(alternateIPs), "-"), strings.Join(alternateDNS, "-")) - certFixturePath := path.Join(fixtureDirectory, baseName+".crt") - keyFixturePath := path.Join(fixtureDirectory, baseName+".key") + certFixturePath := filepath.Join(fixtureDirectory, baseName+".crt") + keyFixturePath := filepath.Join(fixtureDirectory, baseName+".key") if len(fixtureDirectory) > 0 { cert, err := ioutil.ReadFile(certFixturePath) if err == nil { diff --git a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go index 6dc8ec5f2..71bb6322e 100644 --- a/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go +++ b/vendor/k8s.io/client-go/util/workqueue/default_rate_limiters.go @@ -62,54 +62,6 @@ func (r *BucketRateLimiter) NumRequeues(item interface{}) int { func (r *BucketRateLimiter) Forget(item interface{}) { } -// ItemBucketRateLimiter implements a workqueue ratelimiter API using standard rate.Limiter. -// Each key is using a separate limiter. -type ItemBucketRateLimiter struct { - r rate.Limit - burst int - - limitersLock sync.Mutex - limiters map[interface{}]*rate.Limiter -} - -var _ RateLimiter = &ItemBucketRateLimiter{} - -// NewItemBucketRateLimiter creates new ItemBucketRateLimiter instance. -func NewItemBucketRateLimiter(r rate.Limit, burst int) *ItemBucketRateLimiter { - return &ItemBucketRateLimiter{ - r: r, - burst: burst, - limiters: make(map[interface{}]*rate.Limiter), - } -} - -// When returns a time.Duration which we need to wait before item is processed. -func (r *ItemBucketRateLimiter) When(item interface{}) time.Duration { - r.limitersLock.Lock() - defer r.limitersLock.Unlock() - - limiter, ok := r.limiters[item] - if !ok { - limiter = rate.NewLimiter(r.r, r.burst) - r.limiters[item] = limiter - } - - return limiter.Reserve().Delay() -} - -// NumRequeues returns always 0 (doesn't apply to ItemBucketRateLimiter). -func (r *ItemBucketRateLimiter) NumRequeues(item interface{}) int { - return 0 -} - -// Forget removes item from the internal state. -func (r *ItemBucketRateLimiter) Forget(item interface{}) { - r.limitersLock.Lock() - defer r.limitersLock.Unlock() - - delete(r.limiters, item) -} - // ItemExponentialFailureRateLimiter does a simple baseDelay*2^ limit // dealing with max failures and expiration are up to the caller type ItemExponentialFailureRateLimiter struct { diff --git a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go index e1ab76ea2..31d9182de 100644 --- a/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go +++ b/vendor/k8s.io/client-go/util/workqueue/delaying_queue.go @@ -38,6 +38,12 @@ func NewDelayingQueue() DelayingInterface { return NewDelayingQueueWithCustomClock(clock.RealClock{}, "") } +// NewDelayingQueueWithCustomQueue constructs a new workqueue with ability to +// inject custom queue Interface instead of the default one +func NewDelayingQueueWithCustomQueue(q Interface, name string) DelayingInterface { + return newDelayingQueue(clock.RealClock{}, q, name) +} + // NewNamedDelayingQueue constructs a new named workqueue with delayed queuing ability func NewNamedDelayingQueue(name string) DelayingInterface { return NewDelayingQueueWithCustomClock(clock.RealClock{}, name) @@ -46,8 +52,12 @@ func NewNamedDelayingQueue(name string) DelayingInterface { // NewDelayingQueueWithCustomClock constructs a new named workqueue // with ability to inject real or fake clock for testing purposes func NewDelayingQueueWithCustomClock(clock clock.Clock, name string) DelayingInterface { + return newDelayingQueue(clock, NewNamed(name), name) +} + +func newDelayingQueue(clock clock.Clock, q Interface, name string) *delayingType { ret := &delayingType{ - Interface: NewNamed(name), + Interface: q, clock: clock, heartbeat: clock.NewTicker(maxWait), stopCh: make(chan struct{}), @@ -56,7 +66,6 @@ func NewDelayingQueueWithCustomClock(clock clock.Clock, name string) DelayingInt } go ret.waitingLoop() - return ret } diff --git a/vendor/k8s.io/client-go/util/workqueue/parallelizer.go b/vendor/k8s.io/client-go/util/workqueue/parallelizer.go index 5928a0c5b..366bf20a3 100644 --- a/vendor/k8s.io/client-go/util/workqueue/parallelizer.go +++ b/vendor/k8s.io/client-go/util/workqueue/parallelizer.go @@ -25,39 +25,77 @@ import ( type DoWorkPieceFunc func(piece int) +type options struct { + chunkSize int +} + +type Options func(*options) + +// WithChunkSize allows to set chunks of work items to the workers, rather than +// processing one by one. +// It is recommended to use this option if the number of pieces significantly +// higher than the number of workers and the work done for each item is small. +func WithChunkSize(c int) func(*options) { + return func(o *options) { + o.chunkSize = c + } +} + // ParallelizeUntil is a framework that allows for parallelizing N // independent pieces of work until done or the context is canceled. -func ParallelizeUntil(ctx context.Context, workers, pieces int, doWorkPiece DoWorkPieceFunc) { - var stop <-chan struct{} - if ctx != nil { - stop = ctx.Done() +func ParallelizeUntil(ctx context.Context, workers, pieces int, doWorkPiece DoWorkPieceFunc, opts ...Options) { + if pieces == 0 { + return + } + o := options{} + for _, opt := range opts { + opt(&o) + } + chunkSize := o.chunkSize + if chunkSize < 1 { + chunkSize = 1 } - toProcess := make(chan int, pieces) - for i := 0; i < pieces; i++ { + chunks := ceilDiv(pieces, chunkSize) + toProcess := make(chan int, chunks) + for i := 0; i < chunks; i++ { toProcess <- i } close(toProcess) - if pieces < workers { - workers = pieces + var stop <-chan struct{} + if ctx != nil { + stop = ctx.Done() + } + if chunks < workers { + workers = chunks } - wg := sync.WaitGroup{} wg.Add(workers) for i := 0; i < workers; i++ { go func() { defer utilruntime.HandleCrash() defer wg.Done() - for piece := range toProcess { - select { - case <-stop: - return - default: - doWorkPiece(piece) + for chunk := range toProcess { + start := chunk * chunkSize + end := start + chunkSize + if end > pieces { + end = pieces + } + for p := start; p < end; p++ { + select { + case <-stop: + return + default: + doWorkPiece(p) + } } } }() } wg.Wait() } + +func ceilDiv(a, b int) int { + return (a + b - 1) / b +} diff --git a/vendor/k8s.io/component-base/LICENSE b/vendor/k8s.io/component-base/LICENSE new file mode 100644 index 000000000..d64569567 --- /dev/null +++ b/vendor/k8s.io/component-base/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/k8s.io/component-base/README.md b/vendor/k8s.io/component-base/README.md new file mode 100644 index 000000000..0b6d35c64 --- /dev/null +++ b/vendor/k8s.io/component-base/README.md @@ -0,0 +1,34 @@ +## component-base + +## Purpose + +Implement KEP 32: https://github.com/kubernetes/enhancements/blob/master/keps/sig-cluster-lifecycle/wgs/0032-create-a-k8s-io-component-repo.md + +The proposal is essentially about refactoring the Kubernetes core package structure in a way that all core components may share common code around: + - ComponentConfig implementation + - flag and command handling + - HTTPS serving + - delegated authn/z + - logging. + +## Compatibility + +There are *NO compatibility guarantees* for this repository, yet. It is in direct support of Kubernetes, so branches +will track Kubernetes and be compatible with that repo. As we more cleanly separate the layers, we will review the +compatibility guarantee. We have a goal to make this easier to use in the future. + + +## Where does it come from? + +This repository is synced from https://github.com/kubernetes/kubernetes/blob/master/staging/src/k8s.io/component-base. +Code changes are made in that location, merged into `k8s.io/kubernetes` and later synced here. + +## Things you should *NOT* do + + 1. Directly modify any files in this repo. Those are driven from `k8s.io/kubernetes/staging/src/k8s.io/component-base`. + 2. Expect compatibility. This repo is changing quickly in direct support of Kubernetes. + +### OWNERS + +WG Component Standard is working on this refactoring process, which is happening incrementally, starting in the v1.14 cycle. +SIG API Machinery and SIG Cluster Lifecycle owns the code. diff --git a/vendor/k8s.io/component-base/go.mod b/vendor/k8s.io/component-base/go.mod new file mode 100644 index 000000000..5ff4b82db --- /dev/null +++ b/vendor/k8s.io/component-base/go.mod @@ -0,0 +1,32 @@ +// This is a generated file. Do not edit directly. + +module k8s.io/component-base + +go 1.13 + +require ( + github.com/blang/semver v3.5.0+incompatible + github.com/go-logr/logr v0.1.0 + github.com/google/go-cmp v0.4.0 + github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/moby/term v0.0.0-20200312100748-672ec06f55cd + github.com/prometheus/client_golang v1.6.0 + github.com/prometheus/client_model v0.2.0 + github.com/prometheus/common v0.9.1 + github.com/prometheus/procfs v0.0.11 + github.com/spf13/pflag v1.0.5 + github.com/stretchr/testify v1.4.0 + k8s.io/apimachinery v0.19.0-beta.2 + k8s.io/client-go v0.19.0-beta.2 + k8s.io/klog/v2 v2.1.0 + k8s.io/utils v0.0.0-20200414100711-2df71ebbae66 +) + +replace ( + golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 + golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 + k8s.io/api => k8s.io/api v0.19.0-beta.2 + k8s.io/apimachinery => k8s.io/apimachinery v0.19.0-beta.2 + k8s.io/client-go => k8s.io/client-go v0.19.0-beta.2 +) diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/logreduction/logreduction.go b/vendor/k8s.io/component-base/logs/logreduction/logreduction.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/util/logreduction/logreduction.go rename to vendor/k8s.io/component-base/logs/logreduction/logreduction.go diff --git a/vendor/k8s.io/cri-api/go.mod b/vendor/k8s.io/cri-api/go.mod index 38e0460cd..fb89d4741 100644 --- a/vendor/k8s.io/cri-api/go.mod +++ b/vendor/k8s.io/cri-api/go.mod @@ -7,14 +7,15 @@ go 1.13 require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/gogo/protobuf v1.3.1 - github.com/google/go-cmp v0.3.0 // indirect - github.com/kr/pretty v0.1.0 // indirect + github.com/golang/protobuf v1.4.2 // indirect + github.com/kr/pretty v0.2.0 // indirect github.com/stretchr/testify v1.4.0 - golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 // indirect - golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7 // indirect + golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect + golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f // indirect golang.org/x/text v0.3.2 // indirect + google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba // indirect google.golang.org/grpc v1.26.0 - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect gopkg.in/yaml.v2 v2.2.8 // indirect ) diff --git a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.pb.go b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.pb.go index ad071d70f..99880d3e0 100644 --- a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.pb.go +++ b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.pb.go @@ -886,11 +886,11 @@ func (m *LinuxPodSandboxConfig) GetSysctls() map[string]string { // PodSandbox in its user interface for better user experience. For example, // the runtime can construct a unique PodSandboxName based on the metadata. type PodSandboxMetadata struct { - // Pod name of the sandbox. Same as the pod name in the PodSpec. + // Pod name of the sandbox. Same as the pod name in the Pod ObjectMeta. Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - // Pod UID of the sandbox. Same as the pod UID in the PodSpec. + // Pod UID of the sandbox. Same as the pod UID in the Pod ObjectMeta. Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"` - // Pod namespace of the sandbox. Same as the pod namespace in the PodSpec. + // Pod namespace of the sandbox. Same as the pod namespace in the Pod ObjectMeta. Namespace string `protobuf:"bytes,3,opt,name=namespace,proto3" json:"namespace,omitempty"` // Attempt number of creating the sandbox. Default: 0. Attempt uint32 `protobuf:"varint,4,opt,name=attempt,proto3" json:"attempt,omitempty"` @@ -2116,13 +2116,16 @@ func (m *ListPodSandboxResponse) GetItems() []*PodSandbox { return nil } -// ImageSpec is an internal representation of an image. Currently, it wraps the -// value of a Container's Image field (e.g. imageID or imageDigest), but in the -// future it will include more detailed information about the different image types. +// ImageSpec is an internal representation of an image. type ImageSpec struct { - Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + // Container's Image field (e.g. imageID or imageDigest). + Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"` + // Unstructured key-value map holding arbitrary metadata. + // ImageSpec Annotations can be used to help the runtime target specific + // images in multi-arch images. + Annotations map[string]string `protobuf:"bytes,2,rep,name=annotations,proto3" json:"annotations,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *ImageSpec) Reset() { *m = ImageSpec{} } @@ -2164,6 +2167,13 @@ func (m *ImageSpec) GetImage() string { return "" } +func (m *ImageSpec) GetAnnotations() map[string]string { + if m != nil { + return m.Annotations + } + return nil +} + type KeyValue struct { Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` @@ -5010,9 +5020,11 @@ type Image struct { Uid *Int64Value `protobuf:"bytes,5,opt,name=uid,proto3" json:"uid,omitempty"` // User name that will run the command(s). This is used if UID is not set // and no user is specified when creating container. - Username string `protobuf:"bytes,6,opt,name=username,proto3" json:"username,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_sizecache int32 `json:"-"` + Username string `protobuf:"bytes,6,opt,name=username,proto3" json:"username,omitempty"` + // ImageSpec for image which includes annotations + Spec *ImageSpec `protobuf:"bytes,7,opt,name=spec,proto3" json:"spec,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *Image) Reset() { *m = Image{} } @@ -5089,6 +5101,13 @@ func (m *Image) GetUsername() string { return "" } +func (m *Image) GetSpec() *ImageSpec { + if m != nil { + return m.Spec + } + return nil +} + type ListImagesResponse struct { // List of images. Images []*Image `protobuf:"bytes,1,rep,name=images,proto3" json:"images,omitempty"` @@ -6840,6 +6859,7 @@ func init() { proto.RegisterMapType((map[string]string)(nil), "runtime.v1alpha2.PodSandbox.LabelsEntry") proto.RegisterType((*ListPodSandboxResponse)(nil), "runtime.v1alpha2.ListPodSandboxResponse") proto.RegisterType((*ImageSpec)(nil), "runtime.v1alpha2.ImageSpec") + proto.RegisterMapType((map[string]string)(nil), "runtime.v1alpha2.ImageSpec.AnnotationsEntry") proto.RegisterType((*KeyValue)(nil), "runtime.v1alpha2.KeyValue") proto.RegisterType((*LinuxContainerResources)(nil), "runtime.v1alpha2.LinuxContainerResources") proto.RegisterType((*HugepageLimit)(nil), "runtime.v1alpha2.HugepageLimit") @@ -6932,310 +6952,312 @@ func init() { func init() { proto.RegisterFile("api.proto", fileDescriptor_00212fb1f9d3bf1c) } var fileDescriptor_00212fb1f9d3bf1c = []byte{ - // 4845 bytes of a gzipped FileDescriptorProto + // 4879 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5c, 0xcd, 0x73, 0x1b, 0x47, - 0x76, 0x27, 0xbe, 0x48, 0xe0, 0x81, 0x00, 0xc1, 0x16, 0x25, 0x42, 0x90, 0x45, 0x89, 0x23, 0xeb, - 0xd3, 0x16, 0x65, 0xd1, 0x5e, 0x39, 0x92, 0x6c, 0x49, 0x10, 0x49, 0x49, 0xc8, 0x4a, 0x20, 0x32, - 0x20, 0xfd, 0xb1, 0x76, 0xd5, 0xec, 0x10, 0xd3, 0x04, 0x67, 0x05, 0xcc, 0x8c, 0x67, 0x06, 0x92, - 0xb8, 0xa9, 0x4a, 0x6d, 0xd5, 0x56, 0xf6, 0x90, 0x53, 0xce, 0x39, 0x6e, 0x0e, 0x39, 0xe4, 0x9c, - 0xca, 0x21, 0xa7, 0x4d, 0xe5, 0xb0, 0x97, 0x54, 0x72, 0xda, 0x24, 0x95, 0x4b, 0xec, 0x24, 0x97, - 0x54, 0x25, 0x95, 0x3f, 0x20, 0x87, 0x54, 0x7f, 0xcd, 0xf7, 0xe0, 0x43, 0xd6, 0xae, 0x77, 0x4f, - 0x44, 0xbf, 0x79, 0xef, 0xf5, 0x9b, 0xd7, 0xaf, 0x5f, 0xbf, 0xfe, 0x75, 0x0f, 0xa1, 0xa4, 0x5a, - 0xfa, 0x86, 0x65, 0x9b, 0xae, 0x89, 0x6a, 0xf6, 0xc8, 0x70, 0xf5, 0x21, 0xde, 0x78, 0x71, 0x53, - 0x1d, 0x58, 0x47, 0xea, 0x66, 0xe3, 0x7a, 0x5f, 0x77, 0x8f, 0x46, 0x07, 0x1b, 0x3d, 0x73, 0x78, - 0xa3, 0x6f, 0xf6, 0xcd, 0x1b, 0x94, 0xf1, 0x60, 0x74, 0x48, 0x5b, 0xb4, 0x41, 0x7f, 0x31, 0x05, - 0xd2, 0x35, 0xa8, 0x7e, 0x82, 0x6d, 0x47, 0x37, 0x0d, 0x19, 0x7f, 0x35, 0xc2, 0x8e, 0x8b, 0xea, - 0xb0, 0xf0, 0x82, 0x51, 0xea, 0x99, 0xf3, 0x99, 0x2b, 0x25, 0x59, 0x34, 0xa5, 0xbf, 0xc8, 0xc0, - 0x92, 0xc7, 0xec, 0x58, 0xa6, 0xe1, 0xe0, 0x74, 0x6e, 0xb4, 0x0e, 0x8b, 0xdc, 0x38, 0xc5, 0x50, - 0x87, 0xb8, 0x9e, 0xa5, 0x8f, 0xcb, 0x9c, 0xd6, 0x56, 0x87, 0x18, 0x5d, 0x86, 0x25, 0xc1, 0x22, - 0x94, 0xe4, 0x28, 0x57, 0x95, 0x93, 0x79, 0x6f, 0x68, 0x03, 0x4e, 0x08, 0x46, 0xd5, 0xd2, 0x3d, - 0xe6, 0x3c, 0x65, 0x5e, 0xe6, 0x8f, 0x9a, 0x96, 0xce, 0xf9, 0xa5, 0x2f, 0xa0, 0xb4, 0xdd, 0xee, - 0x6e, 0x99, 0xc6, 0xa1, 0xde, 0x27, 0x26, 0x3a, 0xd8, 0x26, 0x32, 0xf5, 0xcc, 0xf9, 0x1c, 0x31, - 0x91, 0x37, 0x51, 0x03, 0x8a, 0x0e, 0x56, 0xed, 0xde, 0x11, 0x76, 0xea, 0x59, 0xfa, 0xc8, 0x6b, - 0x13, 0x29, 0xd3, 0x72, 0x75, 0xd3, 0x70, 0xea, 0x39, 0x26, 0xc5, 0x9b, 0xd2, 0xcf, 0x33, 0x50, - 0xee, 0x98, 0xb6, 0xfb, 0x4c, 0xb5, 0x2c, 0xdd, 0xe8, 0xa3, 0x5b, 0x50, 0xa4, 0xbe, 0xec, 0x99, - 0x03, 0xea, 0x83, 0xea, 0x66, 0x63, 0x23, 0x3a, 0x2c, 0x1b, 0x1d, 0xce, 0x21, 0x7b, 0xbc, 0xe8, - 0x22, 0x54, 0x7b, 0xa6, 0xe1, 0xaa, 0xba, 0x81, 0x6d, 0xc5, 0x32, 0x6d, 0x97, 0xba, 0xa8, 0x20, - 0x57, 0x3c, 0x2a, 0xe9, 0x05, 0x9d, 0x81, 0xd2, 0x91, 0xe9, 0xb8, 0x8c, 0x23, 0x47, 0x39, 0x8a, - 0x84, 0x40, 0x1f, 0xae, 0xc2, 0x02, 0x7d, 0xa8, 0x5b, 0xdc, 0x19, 0xf3, 0xa4, 0xd9, 0xb2, 0xa4, - 0x5f, 0x65, 0xa0, 0xf0, 0xcc, 0x1c, 0x19, 0x6e, 0xa4, 0x1b, 0xd5, 0x3d, 0xe2, 0x03, 0x15, 0xe8, - 0x46, 0x75, 0x8f, 0xfc, 0x6e, 0x08, 0x07, 0x1b, 0x2b, 0xd6, 0x0d, 0x79, 0xd8, 0x80, 0xa2, 0x8d, - 0x55, 0xcd, 0x34, 0x06, 0xc7, 0xd4, 0x84, 0xa2, 0xec, 0xb5, 0xc9, 0x20, 0x3a, 0x78, 0xa0, 0x1b, - 0xa3, 0x57, 0x8a, 0x8d, 0x07, 0xea, 0x01, 0x1e, 0x50, 0x53, 0x8a, 0x72, 0x95, 0x93, 0x65, 0x46, - 0x45, 0xdb, 0x50, 0xb6, 0x6c, 0xd3, 0x52, 0xfb, 0x2a, 0xf1, 0x63, 0xbd, 0x40, 0x5d, 0x25, 0xc5, - 0x5d, 0x45, 0xcd, 0xee, 0xf8, 0x9c, 0x72, 0x50, 0x4c, 0xfa, 0x87, 0x0c, 0x2c, 0x91, 0xe0, 0x71, - 0x2c, 0xb5, 0x87, 0x77, 0xe9, 0x90, 0xa0, 0xdb, 0xb0, 0x60, 0x60, 0xf7, 0xa5, 0x69, 0x3f, 0xe7, - 0x03, 0x70, 0x2e, 0xae, 0xd5, 0x93, 0x79, 0x66, 0x6a, 0x58, 0x16, 0xfc, 0xe8, 0x26, 0xe4, 0x2c, - 0x5d, 0xa3, 0x2f, 0x3c, 0x85, 0x18, 0xe1, 0x25, 0x22, 0xba, 0xd5, 0xa3, 0x7e, 0x98, 0x46, 0x44, - 0xb7, 0x7a, 0xc4, 0xb9, 0xae, 0x6a, 0xf7, 0xb1, 0xab, 0xe8, 0x1a, 0x1f, 0xa8, 0x22, 0x23, 0xb4, - 0x34, 0x49, 0x02, 0x68, 0x19, 0xee, 0xad, 0x0f, 0x3e, 0x51, 0x07, 0x23, 0x8c, 0x56, 0xa0, 0xf0, - 0x82, 0xfc, 0xa0, 0x6f, 0x92, 0x93, 0x59, 0x43, 0xfa, 0x3a, 0x07, 0x67, 0x9e, 0x12, 0x67, 0x76, - 0x55, 0x43, 0x3b, 0x30, 0x5f, 0x75, 0x71, 0x6f, 0x64, 0xeb, 0xee, 0xf1, 0x96, 0x69, 0xb8, 0xf8, - 0x95, 0x8b, 0xda, 0xb0, 0x6c, 0x88, 0x6e, 0x15, 0x11, 0xb7, 0x44, 0x43, 0x79, 0x73, 0x7d, 0x8c, - 0x85, 0xcc, 0x7f, 0x72, 0xcd, 0x08, 0x13, 0x1c, 0xf4, 0xc4, 0x1f, 0x54, 0xa1, 0x2d, 0x4b, 0xb5, - 0x25, 0xbc, 0x6f, 0x77, 0x87, 0x5a, 0xc6, 0x75, 0x89, 0x51, 0x17, 0x9a, 0x3e, 0x02, 0x32, 0xe5, - 0x15, 0xd5, 0x51, 0x46, 0x0e, 0xb6, 0xa9, 0xd7, 0xca, 0x9b, 0x6f, 0xc5, 0xb5, 0xf8, 0x2e, 0x90, - 0x4b, 0xf6, 0xc8, 0x68, 0x3a, 0xfb, 0x0e, 0xb6, 0xd1, 0x3d, 0x9a, 0x44, 0x88, 0x74, 0xdf, 0x36, - 0x47, 0x56, 0xbd, 0x38, 0x85, 0x38, 0x50, 0xf1, 0xc7, 0x84, 0x9f, 0x66, 0x18, 0x1e, 0xa8, 0x8a, - 0x6d, 0x9a, 0xee, 0xa1, 0x23, 0x82, 0x53, 0x90, 0x65, 0x4a, 0x45, 0x37, 0xe0, 0x84, 0x33, 0xb2, - 0xac, 0x01, 0x1e, 0x62, 0xc3, 0x55, 0x07, 0xac, 0x3b, 0xa7, 0x5e, 0x38, 0x9f, 0xbb, 0x92, 0x93, - 0x51, 0xf0, 0x11, 0x55, 0xec, 0xa0, 0x35, 0x00, 0xcb, 0xd6, 0x5f, 0xe8, 0x03, 0xdc, 0xc7, 0x5a, - 0x7d, 0x9e, 0x2a, 0x0d, 0x50, 0xd0, 0x7b, 0xb0, 0xe2, 0xe0, 0x5e, 0xcf, 0x1c, 0x5a, 0x8a, 0x65, - 0x9b, 0x87, 0xfa, 0x00, 0xb3, 0xa9, 0xb5, 0x40, 0x47, 0x1f, 0xf1, 0x67, 0x1d, 0xf6, 0x88, 0x4c, - 0x32, 0xe9, 0xe7, 0x59, 0x38, 0x49, 0x3d, 0xd9, 0x31, 0x35, 0x3e, 0xcc, 0x3c, 0x83, 0x5d, 0x80, - 0x4a, 0x8f, 0x1a, 0xa4, 0x58, 0xaa, 0x8d, 0x0d, 0x97, 0xcf, 0xe0, 0x45, 0x46, 0xec, 0x50, 0x1a, - 0xfa, 0x0c, 0x6a, 0x0e, 0x8f, 0x0a, 0xa5, 0xc7, 0xc2, 0x82, 0x8f, 0xd9, 0xf5, 0xb8, 0xbb, 0xc6, - 0xc4, 0x92, 0xbc, 0xe4, 0xc4, 0x82, 0x6b, 0xc1, 0x39, 0x76, 0x7a, 0xee, 0x80, 0xa5, 0xc2, 0xf2, - 0xe6, 0x07, 0x29, 0x0a, 0xa3, 0x86, 0x6f, 0x74, 0x99, 0xd8, 0x8e, 0xe1, 0xda, 0xc7, 0xb2, 0x50, - 0xd2, 0xb8, 0x03, 0x8b, 0xc1, 0x07, 0xa8, 0x06, 0xb9, 0xe7, 0xf8, 0x98, 0xbf, 0x14, 0xf9, 0xe9, - 0x4f, 0x02, 0x96, 0x88, 0x58, 0xe3, 0x4e, 0xf6, 0xf7, 0x32, 0x92, 0x0d, 0xc8, 0xef, 0xe5, 0x19, - 0x76, 0x55, 0x4d, 0x75, 0x55, 0x84, 0x20, 0x4f, 0xd7, 0x18, 0xa6, 0x82, 0xfe, 0x26, 0x5a, 0x47, - 0x7c, 0x66, 0x97, 0x64, 0xf2, 0x13, 0xbd, 0x05, 0x25, 0x2f, 0xd0, 0xf9, 0x42, 0xe3, 0x13, 0x48, - 0xc2, 0x57, 0x5d, 0x17, 0x0f, 0x2d, 0x97, 0x86, 0x48, 0x45, 0x16, 0x4d, 0xe9, 0x7f, 0xf2, 0x50, - 0x8b, 0x8d, 0xc9, 0x03, 0x28, 0x0e, 0x79, 0xf7, 0x7c, 0xa2, 0xbd, 0x9d, 0x90, 0xf5, 0x63, 0xa6, - 0xca, 0x9e, 0x14, 0x49, 0xaa, 0x24, 0xc1, 0x06, 0x16, 0x47, 0xaf, 0x4d, 0x46, 0x7c, 0x60, 0xf6, - 0x15, 0x4d, 0xb7, 0x71, 0xcf, 0x35, 0xed, 0x63, 0x6e, 0xee, 0xe2, 0xc0, 0xec, 0x6f, 0x0b, 0x1a, - 0xba, 0x03, 0xa0, 0x19, 0x0e, 0x19, 0xec, 0x43, 0xbd, 0x4f, 0x8d, 0x2e, 0x6f, 0x9e, 0x89, 0x1b, - 0xe1, 0xad, 0x84, 0x72, 0x49, 0x33, 0x1c, 0x6e, 0xfe, 0x43, 0xa8, 0x90, 0x05, 0x45, 0x19, 0xb2, - 0x45, 0x8c, 0x45, 0x7a, 0x79, 0xf3, 0x6c, 0xd2, 0x3b, 0x78, 0x4b, 0x9d, 0xbc, 0x68, 0xf9, 0x0d, - 0x07, 0x3d, 0x82, 0x79, 0x9a, 0xd9, 0x9d, 0xfa, 0x3c, 0x15, 0xde, 0x18, 0xe7, 0x00, 0x1e, 0x11, - 0x4f, 0xa9, 0x00, 0x0b, 0x08, 0x2e, 0x8d, 0xf6, 0xa1, 0xac, 0x1a, 0x86, 0xe9, 0xaa, 0x2c, 0xd1, - 0x2c, 0x50, 0x65, 0xef, 0x4f, 0xa1, 0xac, 0xe9, 0x4b, 0x31, 0x8d, 0x41, 0x3d, 0xe8, 0x63, 0x28, - 0xd0, 0x4c, 0xc4, 0x93, 0xc6, 0xe5, 0x29, 0x83, 0x56, 0x66, 0x52, 0x8d, 0xdb, 0x50, 0x0e, 0x18, - 0x3b, 0x4b, 0x90, 0x36, 0xee, 0x41, 0x2d, 0x6a, 0xda, 0x4c, 0x41, 0xfe, 0x87, 0xb0, 0x22, 0x8f, - 0x0c, 0xdf, 0x30, 0x51, 0x9a, 0xdd, 0x81, 0x79, 0x3e, 0xd8, 0x2c, 0xe2, 0xa4, 0xc9, 0x3e, 0x92, - 0xb9, 0x44, 0xb0, 0xd6, 0x3a, 0x52, 0x0d, 0x6d, 0x80, 0x6d, 0xde, 0xaf, 0xa8, 0xb5, 0x9e, 0x30, - 0xaa, 0xf4, 0x31, 0x9c, 0x8c, 0x74, 0xce, 0x4b, 0xbd, 0xb7, 0xa1, 0x6a, 0x99, 0x9a, 0xe2, 0x30, - 0x32, 0x59, 0xc9, 0x78, 0x1a, 0xb2, 0x3c, 0xde, 0x96, 0x46, 0xc4, 0xbb, 0xae, 0x69, 0xc5, 0x8d, - 0x9f, 0x4e, 0xbc, 0x0e, 0xa7, 0xa2, 0xe2, 0xac, 0x7b, 0xe9, 0x3e, 0xac, 0xca, 0x78, 0x68, 0xbe, - 0xc0, 0xaf, 0xab, 0xba, 0x01, 0xf5, 0xb8, 0x02, 0xae, 0xfc, 0x73, 0x58, 0xf5, 0xa9, 0x5d, 0x57, - 0x75, 0x47, 0xce, 0x4c, 0xca, 0x79, 0x1d, 0x7c, 0x60, 0x3a, 0x6c, 0x38, 0x8b, 0xb2, 0x68, 0x4a, - 0xab, 0x50, 0xe8, 0x98, 0x5a, 0xab, 0x83, 0xaa, 0x90, 0xd5, 0x2d, 0x2e, 0x9c, 0xd5, 0x2d, 0x49, - 0x0f, 0xf6, 0xd9, 0x66, 0xf5, 0x08, 0xeb, 0x3a, 0xca, 0x8a, 0xee, 0x41, 0x55, 0xd5, 0x34, 0x9d, - 0x84, 0x93, 0x3a, 0x50, 0x74, 0x8b, 0x95, 0xab, 0xe5, 0xcd, 0xd5, 0xc4, 0x00, 0x68, 0x75, 0xe4, - 0x8a, 0xcf, 0xde, 0xb2, 0x1c, 0xe9, 0x09, 0x94, 0xbc, 0x35, 0x1f, 0xdd, 0xf5, 0x2b, 0xdb, 0xec, - 0xb4, 0x15, 0x82, 0x57, 0xfc, 0xee, 0xc5, 0xd6, 0x28, 0x6e, 0xf2, 0x5d, 0x00, 0x2f, 0x97, 0x8a, - 0xd2, 0xe3, 0xcc, 0x18, 0xc5, 0x72, 0x80, 0x5d, 0xfa, 0x69, 0x21, 0x98, 0x61, 0x03, 0x4e, 0xd0, - 0x3c, 0x27, 0x68, 0xa1, 0x8c, 0x9b, 0x7d, 0xad, 0x8c, 0xfb, 0x21, 0x14, 0x1c, 0x57, 0x75, 0x31, - 0xaf, 0xdd, 0xd6, 0xc7, 0x89, 0x13, 0x23, 0xb0, 0xcc, 0xf8, 0xd1, 0x59, 0x80, 0x9e, 0x8d, 0x55, - 0x17, 0x6b, 0x8a, 0xca, 0x96, 0x87, 0x9c, 0x5c, 0xe2, 0x94, 0xa6, 0x8b, 0xb6, 0xfc, 0xfa, 0xb3, - 0x40, 0x0d, 0xbb, 0x3a, 0x4e, 0x73, 0x68, 0xa8, 0xfd, 0x4a, 0xd4, 0x4b, 0x57, 0xf3, 0x53, 0xa6, - 0x2b, 0xae, 0x80, 0x49, 0x05, 0x92, 0xf1, 0xc2, 0xe4, 0x64, 0xcc, 0x44, 0xa7, 0x49, 0xc6, 0xc5, - 0xc9, 0xc9, 0x98, 0x2b, 0x1b, 0x9f, 0x8c, 0x13, 0xd2, 0x4f, 0x29, 0x29, 0xfd, 0x7c, 0x97, 0x69, - 0xf7, 0x5f, 0x32, 0x50, 0x8f, 0x67, 0x01, 0x9e, 0xfd, 0xee, 0xc0, 0xbc, 0x43, 0x29, 0xd3, 0xe4, - 0x5e, 0x2e, 0xcb, 0x25, 0xd0, 0x13, 0xc8, 0xeb, 0xc6, 0xa1, 0xc9, 0x27, 0xed, 0x07, 0x53, 0x48, - 0xf2, 0x5e, 0x37, 0x5a, 0xc6, 0xa1, 0xc9, 0xbc, 0x49, 0x35, 0x34, 0x3e, 0x84, 0x92, 0x47, 0x9a, - 0xe9, 0xdd, 0x76, 0x61, 0x25, 0x12, 0xdb, 0x6c, 0xbb, 0xe1, 0x4d, 0x89, 0xcc, 0x6c, 0x53, 0x42, - 0xfa, 0x49, 0x36, 0x38, 0x65, 0x1f, 0xe9, 0x03, 0x17, 0xdb, 0xb1, 0x29, 0xfb, 0x91, 0xd0, 0xce, - 0xe6, 0xeb, 0xa5, 0x89, 0xda, 0x59, 0x05, 0xcf, 0x67, 0xdd, 0x97, 0x50, 0xa5, 0x41, 0xa9, 0x38, - 0x78, 0x40, 0x4b, 0x1e, 0x5e, 0x7e, 0x7e, 0x6f, 0x9c, 0x1a, 0x66, 0x09, 0x0b, 0xed, 0x2e, 0x97, - 0x63, 0x1e, 0xac, 0x0c, 0x82, 0xb4, 0xc6, 0x03, 0x40, 0x71, 0xa6, 0x99, 0x7c, 0xda, 0x25, 0xb9, - 0x90, 0x6c, 0xc4, 0x13, 0xd6, 0xe9, 0x43, 0x6a, 0xc6, 0x34, 0xb1, 0xc2, 0x0c, 0x96, 0xb9, 0x84, - 0xf4, 0xdf, 0x39, 0x00, 0xff, 0xe1, 0xef, 0x50, 0x12, 0x7c, 0xe0, 0x25, 0x20, 0x56, 0x4a, 0x5e, - 0x19, 0xa7, 0x38, 0x31, 0xf5, 0xec, 0x86, 0x53, 0x0f, 0x2b, 0x2a, 0xaf, 0x8f, 0x55, 0x33, 0x73, - 0xd2, 0x59, 0xf8, 0x6d, 0x4b, 0x3a, 0x4f, 0xe1, 0x54, 0x34, 0x88, 0x78, 0xc6, 0xd9, 0x84, 0x82, - 0xee, 0xe2, 0x21, 0x43, 0xad, 0x12, 0x37, 0xbd, 0x01, 0x21, 0xc6, 0x2a, 0xad, 0x43, 0xa9, 0x35, - 0x54, 0xfb, 0xb8, 0x6b, 0xe1, 0x1e, 0xe9, 0x54, 0x27, 0x0d, 0x6e, 0x08, 0x6b, 0x48, 0x9b, 0x50, - 0xfc, 0x3e, 0x3e, 0x66, 0xb3, 0x7f, 0x4a, 0x43, 0xa5, 0x7f, 0xca, 0xc2, 0x2a, 0x5d, 0x7d, 0xb6, - 0x04, 0x66, 0x24, 0x63, 0xc7, 0x1c, 0xd9, 0x3d, 0xec, 0xd0, 0xb0, 0xb0, 0x46, 0x8a, 0x85, 0x6d, - 0xdd, 0xd4, 0x38, 0x6a, 0x51, 0xea, 0x59, 0xa3, 0x0e, 0x25, 0xa0, 0x33, 0x40, 0x1a, 0xca, 0x57, - 0x23, 0x93, 0x47, 0x6c, 0x4e, 0x2e, 0xf6, 0xac, 0xd1, 0x1f, 0x90, 0xb6, 0x90, 0x75, 0x8e, 0x54, - 0x1b, 0x3b, 0x34, 0x20, 0x99, 0x6c, 0x97, 0x12, 0xd0, 0x4d, 0x38, 0x39, 0xc4, 0x43, 0xd3, 0x3e, - 0x56, 0x06, 0xfa, 0x50, 0x77, 0x15, 0xdd, 0x50, 0x0e, 0x8e, 0x5d, 0xec, 0xf0, 0xe0, 0x43, 0xec, - 0xe1, 0x53, 0xf2, 0xac, 0x65, 0x3c, 0x24, 0x4f, 0x90, 0x04, 0x15, 0xd3, 0x1c, 0x2a, 0x4e, 0xcf, - 0xb4, 0xb1, 0xa2, 0x6a, 0x3f, 0xa2, 0x0b, 0x72, 0x4e, 0x2e, 0x9b, 0xe6, 0xb0, 0x4b, 0x68, 0x4d, - 0xed, 0x47, 0xe8, 0x1c, 0x94, 0x7b, 0xd6, 0xc8, 0xc1, 0xae, 0x42, 0xfe, 0xd0, 0xf5, 0xb6, 0x24, - 0x03, 0x23, 0x6d, 0x59, 0x23, 0x27, 0xc0, 0x30, 0x24, 0xfe, 0x5f, 0x08, 0x32, 0x3c, 0xc3, 0x43, - 0x0a, 0x8f, 0x1c, 0x8d, 0xfa, 0xd8, 0x52, 0xfb, 0x98, 0x99, 0x26, 0x16, 0xca, 0x04, 0x78, 0xe4, - 0x09, 0x67, 0xa4, 0x66, 0xca, 0xd5, 0xa3, 0x60, 0xd3, 0x91, 0x1e, 0x42, 0x25, 0xc4, 0x40, 0xfc, - 0x45, 0xd5, 0x3a, 0xfa, 0x8f, 0xc5, 0xc0, 0x15, 0x09, 0xa1, 0xab, 0xff, 0x98, 0x82, 0x43, 0xb4, - 0x3b, 0xea, 0xc8, 0xbc, 0xcc, 0x1a, 0x92, 0x0a, 0x95, 0x10, 0x06, 0x43, 0xb6, 0xc3, 0x14, 0x6c, - 0xe1, 0xdb, 0x61, 0xf2, 0x9b, 0xd0, 0x6c, 0x73, 0x20, 0xc6, 0x95, 0xfe, 0x26, 0x34, 0xf7, 0xd8, - 0x12, 0x7b, 0x61, 0xfa, 0x9b, 0x76, 0x81, 0x5f, 0x70, 0x10, 0xaf, 0x24, 0xb3, 0x86, 0xa4, 0x01, - 0x6c, 0xa9, 0x96, 0x7a, 0xa0, 0x0f, 0x74, 0xf7, 0x18, 0x5d, 0x85, 0x9a, 0xaa, 0x69, 0x4a, 0x4f, - 0x50, 0x74, 0x2c, 0xa0, 0xd5, 0x25, 0x55, 0xd3, 0xb6, 0x02, 0x64, 0xf4, 0x0e, 0x2c, 0x6b, 0xb6, - 0x69, 0x85, 0x79, 0x19, 0xd6, 0x5a, 0x23, 0x0f, 0x82, 0xcc, 0xd2, 0x7f, 0x14, 0xe0, 0x6c, 0x38, - 0xcc, 0xa2, 0x38, 0xd7, 0x03, 0x58, 0x8c, 0xf4, 0x9a, 0x82, 0x07, 0xf9, 0xd6, 0xca, 0x21, 0x89, - 0x08, 0x6e, 0x93, 0x8d, 0xe1, 0x36, 0x89, 0x48, 0x5a, 0xee, 0x8d, 0x22, 0x69, 0xf9, 0x37, 0x82, - 0xa4, 0x15, 0xbe, 0x1d, 0x92, 0xb6, 0x38, 0x23, 0x92, 0x76, 0x89, 0xe6, 0x52, 0xd1, 0x3b, 0x05, - 0x2d, 0xd8, 0xc4, 0xa9, 0x78, 0x7d, 0x18, 0x02, 0xd3, 0x8f, 0x20, 0x6e, 0x0b, 0xb3, 0x20, 0x6e, - 0xc5, 0x54, 0xc4, 0x8d, 0x44, 0x9d, 0x65, 0xa9, 0xf6, 0xd0, 0xb4, 0x05, 0xa4, 0xc6, 0x6b, 0xc8, - 0x25, 0x41, 0xe7, 0x70, 0x5a, 0x2a, 0xf8, 0x06, 0x69, 0xe0, 0x1b, 0x3a, 0x0f, 0x8b, 0x86, 0xa9, - 0x18, 0xf8, 0xa5, 0x42, 0x62, 0xc1, 0xa9, 0x97, 0x59, 0x60, 0x18, 0x66, 0x1b, 0xbf, 0xec, 0x10, - 0x0a, 0x5a, 0x87, 0xc5, 0xa1, 0xea, 0x3c, 0xc7, 0x1a, 0x55, 0xe5, 0xd4, 0x2b, 0x34, 0x88, 0xcb, - 0x8c, 0x46, 0x74, 0x38, 0xe8, 0x22, 0x78, 0x2f, 0xc9, 0x99, 0xaa, 0x94, 0xa9, 0x22, 0xa8, 0x94, - 0x4d, 0xfa, 0x9b, 0x0c, 0xac, 0x84, 0xc3, 0x9c, 0x83, 0x32, 0x8f, 0xa1, 0x64, 0x8b, 0xbc, 0xca, - 0x43, 0xfb, 0x6a, 0xca, 0x36, 0x20, 0x9e, 0x88, 0x65, 0x5f, 0x16, 0xfd, 0x20, 0x15, 0x0b, 0xbc, - 0x31, 0x49, 0xdf, 0x24, 0x34, 0x50, 0xb2, 0xe1, 0xdc, 0xa7, 0xba, 0xa1, 0x99, 0x2f, 0x9d, 0xd4, - 0x59, 0x9a, 0x10, 0x2b, 0x99, 0x94, 0x58, 0xe9, 0xd9, 0x58, 0xc3, 0x86, 0xab, 0xab, 0x03, 0xc5, - 0xb1, 0x70, 0x4f, 0x60, 0x12, 0x3e, 0x99, 0xac, 0x64, 0xd2, 0x2f, 0x32, 0x70, 0x2a, 0xda, 0x29, - 0xf7, 0x59, 0x2b, 0xee, 0xb3, 0x77, 0xe2, 0xef, 0x18, 0x15, 0x4e, 0xf4, 0xda, 0x97, 0xa9, 0x5e, - 0xbb, 0x39, 0x59, 0xe3, 0x44, 0xbf, 0xfd, 0x65, 0x06, 0x4e, 0xa7, 0x9a, 0x11, 0x59, 0x09, 0x33, - 0xd1, 0x95, 0x90, 0xaf, 0xa2, 0x3d, 0x73, 0x64, 0xb8, 0x81, 0x55, 0x74, 0x8b, 0x9e, 0xf0, 0xb0, - 0xe5, 0x4a, 0x19, 0xaa, 0xaf, 0xf4, 0xe1, 0x68, 0xc8, 0x97, 0x51, 0xa2, 0xee, 0x19, 0xa3, 0xbc, - 0xc6, 0x3a, 0x2a, 0x35, 0x61, 0xd9, 0xb3, 0x72, 0x2c, 0xcc, 0x1a, 0x80, 0x4d, 0xb3, 0x61, 0xd8, - 0xd4, 0x80, 0xf9, 0x6d, 0xfc, 0x42, 0xef, 0xe1, 0x37, 0x72, 0x04, 0x75, 0x1e, 0xca, 0x16, 0xb6, - 0x87, 0xba, 0xe3, 0x78, 0x19, 0xb9, 0x24, 0x07, 0x49, 0xd2, 0x7f, 0xce, 0xc3, 0x52, 0x34, 0x3a, - 0xee, 0xc7, 0x50, 0xda, 0x0b, 0x09, 0x6b, 0x45, 0xf4, 0x45, 0x03, 0xd5, 0xf2, 0x4d, 0x51, 0x43, - 0x65, 0xd3, 0x10, 0x0d, 0xaf, 0xde, 0xe2, 0x05, 0x16, 0xf1, 0x48, 0xcf, 0x1c, 0x0e, 0x55, 0x43, - 0x13, 0x27, 0x87, 0xbc, 0x49, 0xfc, 0xa7, 0xda, 0x7d, 0xe2, 0x76, 0x42, 0xa6, 0xbf, 0xc9, 0xe0, - 0x91, 0xed, 0xbf, 0x6e, 0x50, 0xb4, 0x97, 0x66, 0xf5, 0x92, 0x0c, 0x9c, 0xb4, 0xad, 0xdb, 0x68, - 0x03, 0xf2, 0xd8, 0x78, 0x21, 0xca, 0xe1, 0x84, 0xa3, 0x45, 0x51, 0xcd, 0xc9, 0x94, 0x0f, 0xdd, - 0x80, 0xf9, 0x21, 0x09, 0x0b, 0x01, 0x04, 0xac, 0xa6, 0x9c, 0xb0, 0xc9, 0x9c, 0x0d, 0x6d, 0xc2, - 0x82, 0x46, 0xc7, 0x49, 0x14, 0x31, 0xf5, 0x04, 0x0c, 0x99, 0x32, 0xc8, 0x82, 0x11, 0xed, 0x78, - 0xc5, 0x7e, 0x29, 0xad, 0x4a, 0x8f, 0x0c, 0x45, 0x62, 0xc5, 0xbf, 0x17, 0xae, 0xf8, 0x81, 0xea, - 0xda, 0x9c, 0xac, 0x6b, 0x7c, 0xd9, 0x7f, 0x1a, 0x8a, 0x03, 0xb3, 0xcf, 0xc2, 0xa8, 0xcc, 0x0e, - 0xa5, 0x07, 0x66, 0x9f, 0x46, 0xd1, 0x0a, 0xd9, 0xfc, 0x68, 0xba, 0x41, 0x97, 0xbf, 0xa2, 0xcc, - 0x1a, 0x64, 0xf2, 0xd1, 0x1f, 0x8a, 0x69, 0xf4, 0x70, 0xbd, 0x42, 0x1f, 0x95, 0x28, 0x65, 0xd7, - 0xe8, 0xd1, 0x2a, 0xd9, 0x75, 0x8f, 0xeb, 0x55, 0x4a, 0x27, 0x3f, 0xc9, 0xbe, 0x96, 0x61, 0x35, - 0x4b, 0x69, 0xfb, 0xda, 0xa4, 0xfc, 0x2e, 0xa0, 0x9a, 0x87, 0xb0, 0xf0, 0x92, 0x25, 0x82, 0x7a, - 0x8d, 0xca, 0x5f, 0x99, 0x9c, 0x5e, 0xb8, 0x06, 0x21, 0xf8, 0x5d, 0xee, 0x58, 0xfe, 0x2e, 0x03, - 0xa7, 0xb6, 0xe8, 0xb6, 0x2f, 0x90, 0xc7, 0x66, 0xc1, 0x4a, 0x6f, 0x7b, 0x30, 0x76, 0x2a, 0xfe, - 0x18, 0x7d, 0x6f, 0x81, 0x62, 0xb7, 0xa0, 0x2a, 0x94, 0x73, 0x15, 0xb9, 0xa9, 0x91, 0xf0, 0x8a, - 0x13, 0x6c, 0x4a, 0x1f, 0xc1, 0x6a, 0xec, 0x2d, 0xf8, 0xce, 0x6b, 0x1d, 0x16, 0xfd, 0x7c, 0xe5, - 0xbd, 0x44, 0xd9, 0xa3, 0xb5, 0x34, 0xe9, 0x0e, 0x9c, 0xec, 0xba, 0xaa, 0xed, 0xc6, 0x5c, 0x30, - 0x85, 0x2c, 0xc5, 0xb8, 0xc3, 0xb2, 0x1c, 0x86, 0xee, 0xc2, 0x4a, 0xd7, 0x35, 0xad, 0xd7, 0x50, - 0x4a, 0xb2, 0x0e, 0x79, 0x7f, 0x73, 0x24, 0xd6, 0x07, 0xd1, 0x94, 0x56, 0x19, 0x22, 0x1f, 0xef, - 0xed, 0x2e, 0x9c, 0x62, 0x80, 0xf8, 0xeb, 0xbc, 0xc4, 0x69, 0x01, 0xc7, 0xc7, 0xf5, 0x3e, 0x83, - 0x13, 0xfe, 0xb2, 0xe8, 0x43, 0x4d, 0xb7, 0xc2, 0x50, 0xd3, 0xf9, 0x31, 0xa3, 0x1e, 0x42, 0x9a, - 0xfe, 0x3c, 0x1b, 0xc8, 0xeb, 0x29, 0x40, 0xd3, 0xdd, 0x30, 0xd0, 0x74, 0x71, 0x92, 0xee, 0x10, - 0xce, 0x14, 0x8f, 0xda, 0x5c, 0x42, 0xd4, 0x7e, 0x11, 0x43, 0xa3, 0xf2, 0x69, 0x70, 0x5e, 0xc4, - 0xda, 0xdf, 0x08, 0x18, 0x25, 0x33, 0x30, 0xca, 0xeb, 0xda, 0x3b, 0xbf, 0xb8, 0x1d, 0x01, 0xa3, - 0xd6, 0x27, 0xda, 0xeb, 0x61, 0x51, 0x7f, 0x95, 0x87, 0x92, 0xf7, 0x2c, 0xe6, 0xf3, 0xb8, 0xdb, - 0xb2, 0x09, 0x6e, 0x0b, 0xae, 0xc0, 0xb9, 0x6f, 0xb5, 0x02, 0xe7, 0xa7, 0x5e, 0x81, 0xcf, 0x40, - 0x89, 0xfe, 0x50, 0x6c, 0x7c, 0xc8, 0x57, 0xd4, 0x22, 0x25, 0xc8, 0xf8, 0xd0, 0x0f, 0xc3, 0xf9, - 0x99, 0xc2, 0x30, 0x02, 0x7f, 0x2d, 0x44, 0xe1, 0xaf, 0xfb, 0xde, 0x8a, 0xc8, 0x16, 0xd1, 0xcb, - 0x63, 0xf4, 0x26, 0xae, 0x85, 0xed, 0xf0, 0x5a, 0xc8, 0xd6, 0xd5, 0x77, 0xc7, 0x69, 0x19, 0xbb, - 0x0a, 0x7e, 0x97, 0x2b, 0xc4, 0x3e, 0xc3, 0xb4, 0x82, 0xb1, 0xc8, 0x33, 0xeb, 0x5d, 0x00, 0x2f, - 0x89, 0x08, 0x60, 0xeb, 0xcc, 0x98, 0x77, 0x94, 0x03, 0xec, 0x44, 0x6d, 0x68, 0x68, 0xfc, 0x33, - 0xba, 0xe9, 0xf2, 0x63, 0xca, 0x01, 0xdd, 0xff, 0x15, 0x02, 0xf9, 0x25, 0xe5, 0xec, 0xe9, 0x7e, - 0x0c, 0x76, 0x9d, 0x31, 0x8a, 0x6f, 0x85, 0x51, 0xd7, 0xd7, 0x8c, 0xba, 0x18, 0xe8, 0x4a, 0x2b, - 0x17, 0xd5, 0xe6, 0x8f, 0x19, 0xd6, 0x55, 0xe2, 0x94, 0x26, 0xdd, 0x19, 0x1c, 0xea, 0x86, 0xee, - 0x1c, 0xb1, 0xe7, 0xf3, 0x6c, 0x67, 0x20, 0x48, 0x4d, 0x8a, 0x36, 0xe1, 0x57, 0xba, 0xab, 0xf4, - 0x4c, 0x0d, 0xd3, 0x98, 0x2e, 0xc8, 0x45, 0x42, 0xd8, 0x32, 0x35, 0xec, 0xcf, 0xbc, 0xe2, 0xeb, - 0xcd, 0xbc, 0x52, 0x64, 0xe6, 0x9d, 0x82, 0x79, 0x1b, 0xab, 0x8e, 0x69, 0xf0, 0x7d, 0x38, 0x6f, - 0x91, 0xa1, 0x19, 0x62, 0xc7, 0x21, 0x3d, 0xf1, 0x72, 0x8d, 0x37, 0x03, 0x65, 0xe6, 0xe2, 0xc4, - 0x32, 0x73, 0xcc, 0x99, 0x56, 0xa4, 0xcc, 0xac, 0x4c, 0x2c, 0x33, 0xa7, 0x3a, 0xd2, 0xf2, 0x0b, - 0xed, 0xea, 0x74, 0x85, 0x76, 0xb0, 0x2e, 0x5d, 0x0a, 0xd5, 0xa5, 0xdf, 0xe5, 0x64, 0xfd, 0x55, - 0x06, 0x56, 0x63, 0xd3, 0x8a, 0x4f, 0xd7, 0xdb, 0x91, 0x43, 0xaf, 0xf5, 0x89, 0x3e, 0xf3, 0xce, - 0xbc, 0x1e, 0x87, 0xce, 0xbc, 0xde, 0x9f, 0x2c, 0xf8, 0xc6, 0x8f, 0xbc, 0xfe, 0x38, 0x03, 0xe7, - 0xf6, 0x2d, 0x2d, 0x52, 0xe1, 0xf1, 0x6d, 0xff, 0xf4, 0x89, 0xe3, 0xbe, 0xa8, 0xf5, 0xb3, 0xb3, - 0x02, 0x32, 0x4c, 0x4e, 0x92, 0xe0, 0x7c, 0xba, 0x19, 0xbc, 0x64, 0xfa, 0x21, 0x2c, 0xed, 0xbc, - 0xc2, 0xbd, 0xee, 0xb1, 0xd1, 0x9b, 0xc1, 0xb4, 0x1a, 0xe4, 0x7a, 0x43, 0x8d, 0xc3, 0xa9, 0xe4, - 0x67, 0xb0, 0x0a, 0xcc, 0x85, 0xab, 0x40, 0x05, 0x6a, 0x7e, 0x0f, 0x7c, 0x78, 0x4f, 0x91, 0xe1, - 0xd5, 0x08, 0x33, 0x51, 0xbe, 0x28, 0xf3, 0x16, 0xa7, 0x63, 0x9b, 0x5d, 0x11, 0x61, 0x74, 0x6c, - 0xdb, 0xe1, 0x6c, 0x91, 0x0b, 0x67, 0x0b, 0xe9, 0xcf, 0x32, 0x50, 0x26, 0x3d, 0x7c, 0x2b, 0xfb, - 0xf9, 0x56, 0x2b, 0xe7, 0x6f, 0xb5, 0xbc, 0x1d, 0x5b, 0x3e, 0xb8, 0x63, 0xf3, 0x2d, 0x2f, 0x50, - 0x72, 0xdc, 0xf2, 0x79, 0x8f, 0x8e, 0x6d, 0x5b, 0x3a, 0x0f, 0x8b, 0xcc, 0x36, 0xfe, 0xe6, 0x35, - 0xc8, 0x8d, 0xec, 0x81, 0x88, 0xa3, 0x91, 0x3d, 0x90, 0xfe, 0x24, 0x03, 0x95, 0xa6, 0xeb, 0xaa, - 0xbd, 0xa3, 0x19, 0x5e, 0xc0, 0x33, 0x2e, 0x1b, 0x34, 0x2e, 0xfe, 0x12, 0xbe, 0xb9, 0xf9, 0x14, - 0x73, 0x0b, 0x21, 0x73, 0x25, 0xa8, 0x0a, 0x5b, 0x52, 0x0d, 0x6e, 0x03, 0xea, 0x98, 0xb6, 0xfb, - 0xc8, 0xb4, 0x5f, 0xaa, 0xb6, 0x36, 0xdb, 0x0e, 0x0c, 0x41, 0x9e, 0x5f, 0x38, 0xce, 0x5d, 0x29, - 0xc8, 0xf4, 0xb7, 0x74, 0x19, 0x4e, 0x84, 0xf4, 0xa5, 0x76, 0xfc, 0x00, 0xca, 0x34, 0xef, 0xf3, - 0x52, 0xfc, 0x66, 0xf0, 0x94, 0x69, 0xaa, 0x55, 0x42, 0xfa, 0x7d, 0x58, 0x26, 0xf5, 0x01, 0xa5, - 0x7b, 0x53, 0xf1, 0x7b, 0x91, 0x3a, 0xf5, 0x6c, 0x8a, 0xa2, 0x48, 0x8d, 0xfa, 0xd7, 0x19, 0x28, - 0x50, 0x7a, 0x6c, 0xcd, 0x3e, 0x03, 0x25, 0x1b, 0x5b, 0xa6, 0xe2, 0xaa, 0x7d, 0xef, 0x7a, 0x37, - 0x21, 0xec, 0xa9, 0x7d, 0x8a, 0xe6, 0xd2, 0x87, 0x9a, 0xde, 0xc7, 0x8e, 0x2b, 0xee, 0x78, 0x97, - 0x09, 0x6d, 0x9b, 0x91, 0x88, 0x93, 0xe8, 0x21, 0x4c, 0x9e, 0x9e, 0xb5, 0xd0, 0xdf, 0x68, 0x83, - 0x5d, 0x2a, 0x9c, 0x06, 0x7b, 0xa7, 0x57, 0x0e, 0x1b, 0x50, 0x8c, 0xc0, 0xe5, 0x5e, 0x5b, 0xda, - 0x01, 0x14, 0xf4, 0x02, 0xf7, 0xf7, 0x0d, 0x98, 0xa7, 0x4e, 0x12, 0xd5, 0xd1, 0x6a, 0x8a, 0x1b, - 0x64, 0xce, 0x26, 0xa9, 0x80, 0x98, 0x83, 0x43, 0x15, 0xd1, 0xec, 0xa3, 0x32, 0xa6, 0x42, 0xfa, - 0xdb, 0x0c, 0x9c, 0x08, 0xf5, 0xc1, 0x6d, 0xbd, 0x1e, 0xee, 0x24, 0xd5, 0x54, 0xde, 0xc1, 0x56, - 0x68, 0x49, 0xb8, 0x91, 0x66, 0xd2, 0xaf, 0x69, 0x39, 0xf8, 0xfb, 0x0c, 0x40, 0x73, 0xe4, 0x1e, - 0x71, 0x64, 0x30, 0x38, 0x32, 0x99, 0xf0, 0xc8, 0x90, 0x67, 0x96, 0xea, 0x38, 0x2f, 0x4d, 0x5b, - 0xec, 0x69, 0xbc, 0x36, 0xc5, 0xf0, 0x46, 0xee, 0x91, 0x38, 0x33, 0x23, 0xbf, 0xd1, 0x45, 0xa8, - 0xb2, 0x4f, 0x0a, 0x14, 0x55, 0xd3, 0x6c, 0xec, 0x38, 0xfc, 0xf0, 0xac, 0xc2, 0xa8, 0x4d, 0x46, - 0x24, 0x6c, 0x3a, 0x45, 0xb5, 0xdd, 0x63, 0xc5, 0x35, 0x9f, 0x63, 0x83, 0xef, 0x4d, 0x2a, 0x82, - 0xba, 0x47, 0x88, 0xec, 0x14, 0xa1, 0xaf, 0x3b, 0xae, 0x2d, 0xd8, 0xc4, 0x41, 0x0b, 0xa7, 0x52, - 0x36, 0x32, 0x28, 0xb5, 0xce, 0x68, 0x30, 0x60, 0x2e, 0x7e, 0xfd, 0x61, 0x7f, 0x8f, 0xbf, 0x50, - 0x36, 0x2d, 0xa6, 0x7d, 0xa7, 0xf1, 0xd7, 0x7d, 0x83, 0x20, 0xcc, 0x7b, 0xb0, 0x1c, 0x78, 0x07, - 0x1e, 0x56, 0xa1, 0x22, 0x32, 0x13, 0x2e, 0x22, 0xa5, 0xc7, 0x80, 0x18, 0xee, 0xf0, 0x2d, 0xdf, - 0x5b, 0x3a, 0x09, 0x27, 0x42, 0x8a, 0xf8, 0x4a, 0x7c, 0x0d, 0x2a, 0xfc, 0x82, 0x16, 0x0f, 0x94, - 0xd3, 0x50, 0x24, 0x19, 0xb5, 0xa7, 0x6b, 0xe2, 0x40, 0x75, 0xc1, 0x32, 0xb5, 0x2d, 0x5d, 0xb3, - 0xa5, 0x4f, 0xa1, 0x22, 0xb3, 0x7e, 0x38, 0xef, 0x23, 0xa8, 0xf2, 0xeb, 0x5c, 0x4a, 0xe8, 0xa2, - 0x66, 0xd2, 0x57, 0x02, 0xc1, 0x4e, 0xe4, 0x8a, 0x11, 0x6c, 0x4a, 0x1a, 0x34, 0x58, 0xc9, 0x10, - 0x52, 0x2f, 0x5e, 0xf6, 0x11, 0x88, 0xfb, 0x0b, 0x13, 0x7b, 0x09, 0xcb, 0x57, 0xec, 0x60, 0x53, - 0x3a, 0x0b, 0x67, 0x12, 0x7b, 0xe1, 0x9e, 0xb0, 0xa0, 0xe6, 0x3f, 0x60, 0xb7, 0x09, 0xbd, 0x13, - 0xe3, 0x4c, 0xe0, 0xc4, 0xf8, 0x94, 0x57, 0x24, 0x66, 0xc5, 0x22, 0x46, 0x2b, 0x40, 0xbf, 0xdc, - 0xcf, 0xa5, 0x95, 0xfb, 0xf9, 0x50, 0xb9, 0x2f, 0x75, 0x3d, 0x7f, 0xf2, 0x6d, 0xd8, 0x43, 0xba, - 0x5d, 0x64, 0x7d, 0x8b, 0x84, 0x28, 0x8d, 0x7b, 0x4b, 0xc6, 0x2a, 0x07, 0xa4, 0xa4, 0xab, 0x50, - 0x09, 0xa7, 0xc6, 0x40, 0x9e, 0xcb, 0xc4, 0xf2, 0x5c, 0x35, 0x92, 0xe2, 0x3e, 0x8c, 0x54, 0xc0, - 0xe9, 0x3e, 0x8e, 0xd4, 0xbf, 0xf7, 0x42, 0xc9, 0xee, 0x5a, 0xc2, 0x61, 0xef, 0xaf, 0x29, 0xcf, - 0xad, 0xf0, 0xf5, 0xe0, 0x91, 0x43, 0xe4, 0xf9, 0x4b, 0x4b, 0x17, 0xa0, 0xbc, 0x9f, 0xf6, 0x95, - 0x49, 0x5e, 0x5c, 0xf3, 0xb8, 0x05, 0x2b, 0x8f, 0xf4, 0x01, 0x76, 0x8e, 0x1d, 0x17, 0x0f, 0x5b, - 0x34, 0x29, 0x1d, 0xea, 0xd8, 0x46, 0x6b, 0x00, 0x74, 0x0b, 0x63, 0x99, 0xba, 0xf7, 0xf1, 0x41, - 0x80, 0x22, 0xfd, 0x57, 0x06, 0x96, 0x7c, 0xc1, 0x7d, 0xba, 0x75, 0x7b, 0x0b, 0x4a, 0xe4, 0x7d, - 0x1d, 0x57, 0x1d, 0x5a, 0xe2, 0x3c, 0xcb, 0x23, 0xa0, 0xbb, 0x50, 0x38, 0x74, 0x04, 0x64, 0x94, - 0x08, 0xa0, 0x27, 0x19, 0x22, 0xe7, 0x0f, 0x9d, 0x96, 0x86, 0x3e, 0x02, 0x18, 0x39, 0x58, 0xe3, - 0x67, 0x58, 0xb9, 0xb4, 0x6a, 0x61, 0x3f, 0x78, 0x10, 0x4e, 0x04, 0xd8, 0x0d, 0x91, 0x7b, 0x50, - 0xd6, 0x0d, 0x53, 0xc3, 0xf4, 0x70, 0x52, 0xe3, 0xa8, 0xd2, 0x04, 0x71, 0x60, 0x12, 0xfb, 0x0e, - 0xd6, 0x24, 0xcc, 0xd7, 0x42, 0xe1, 0x5f, 0x1e, 0x28, 0x6d, 0x58, 0x66, 0x49, 0xeb, 0xd0, 0x33, - 0x5c, 0x44, 0xec, 0xfa, 0xb8, 0xb7, 0xa3, 0xde, 0x92, 0x6b, 0x3a, 0x2f, 0x6d, 0x84, 0xa8, 0x74, - 0x07, 0x4e, 0x86, 0x76, 0x48, 0x33, 0x6c, 0x59, 0xa4, 0x4e, 0x04, 0x28, 0xf1, 0xc3, 0x99, 0xc3, - 0x10, 0x22, 0x9a, 0x27, 0xc1, 0x10, 0x0e, 0x83, 0x21, 0x1c, 0xe9, 0x0b, 0x38, 0x1d, 0x42, 0x74, - 0x42, 0x16, 0xdd, 0x8b, 0x54, 0x6e, 0x97, 0x26, 0x69, 0x8d, 0x94, 0x70, 0xff, 0x9b, 0x81, 0x95, - 0x24, 0x86, 0xd7, 0x44, 0x1c, 0x7f, 0x98, 0x72, 0x6d, 0xf0, 0xf6, 0x74, 0x66, 0xfd, 0x46, 0xd0, - 0xda, 0x3d, 0x68, 0x24, 0xf9, 0x33, 0x3e, 0x4a, 0xb9, 0x59, 0x46, 0xe9, 0x67, 0xb9, 0x00, 0xf2, - 0xde, 0x74, 0x5d, 0x5b, 0x3f, 0x18, 0x91, 0x90, 0x7f, 0xe3, 0x68, 0x56, 0xcb, 0xc3, 0x65, 0x98, - 0x6b, 0x6f, 0x8e, 0x11, 0xf7, 0xed, 0x48, 0xc4, 0x66, 0x3e, 0x0b, 0x63, 0x33, 0x0c, 0x53, 0xbf, - 0x35, 0x9d, 0xbe, 0xdf, 0x5a, 0x00, 0xf4, 0x67, 0x59, 0xa8, 0x86, 0x87, 0x08, 0xed, 0x00, 0xa8, - 0x9e, 0xe5, 0x7c, 0xa2, 0x5c, 0x9c, 0xea, 0x35, 0xe5, 0x80, 0x20, 0x7a, 0x17, 0x72, 0x3d, 0x6b, - 0xc4, 0x47, 0x2d, 0xe1, 0x30, 0x78, 0xcb, 0x1a, 0xb1, 0x8c, 0x42, 0xd8, 0xc8, 0x9e, 0x8a, 0x9d, - 0xed, 0xa7, 0x67, 0xc9, 0x67, 0xf4, 0x39, 0x93, 0xe1, 0xcc, 0xe8, 0x09, 0x54, 0x5f, 0xda, 0xba, - 0xab, 0x1e, 0x0c, 0xb0, 0x32, 0x50, 0x8f, 0xb1, 0xcd, 0xb3, 0xe4, 0x14, 0x89, 0xac, 0x22, 0x04, - 0x9f, 0x12, 0x39, 0xe9, 0x8f, 0xa0, 0x28, 0x2c, 0x9a, 0xb0, 0x22, 0xec, 0xc1, 0xea, 0x88, 0xb0, - 0x29, 0xf4, 0xe6, 0x9e, 0xa1, 0x1a, 0xa6, 0xe2, 0x60, 0xb2, 0x8c, 0x8b, 0xaf, 0x14, 0x26, 0xa4, - 0xe8, 0x15, 0x2a, 0xbd, 0x65, 0xda, 0xb8, 0xad, 0x1a, 0x66, 0x97, 0x89, 0x4a, 0x2f, 0xa0, 0x1c, - 0x78, 0xc1, 0x09, 0x26, 0xb4, 0x60, 0x59, 0x1c, 0xc5, 0x3b, 0xd8, 0xe5, 0xcb, 0xcb, 0x54, 0x9d, - 0x2f, 0x71, 0xb9, 0x2e, 0x76, 0xd9, 0xf5, 0x89, 0x7b, 0x70, 0x5a, 0xc6, 0xa6, 0x85, 0x0d, 0x6f, - 0x3c, 0x9f, 0x9a, 0xfd, 0x19, 0x32, 0xf8, 0x5b, 0xd0, 0x48, 0x92, 0x67, 0xf9, 0xe1, 0xda, 0x25, - 0x28, 0x8a, 0xef, 0x89, 0xd1, 0x02, 0xe4, 0xf6, 0xb6, 0x3a, 0xb5, 0x39, 0xf2, 0x63, 0x7f, 0xbb, - 0x53, 0xcb, 0xa0, 0x22, 0xe4, 0xbb, 0x5b, 0x7b, 0x9d, 0x5a, 0xf6, 0xda, 0x10, 0x6a, 0xd1, 0x8f, - 0x69, 0xd1, 0x2a, 0x9c, 0xe8, 0xc8, 0xbb, 0x9d, 0xe6, 0xe3, 0xe6, 0x5e, 0x6b, 0xb7, 0xad, 0x74, - 0xe4, 0xd6, 0x27, 0xcd, 0xbd, 0x9d, 0xda, 0x1c, 0x5a, 0x87, 0xb3, 0xc1, 0x07, 0x4f, 0x76, 0xbb, - 0x7b, 0xca, 0xde, 0xae, 0xb2, 0xb5, 0xdb, 0xde, 0x6b, 0xb6, 0xda, 0x3b, 0x72, 0x2d, 0x83, 0xce, - 0xc2, 0xe9, 0x20, 0xcb, 0xc3, 0xd6, 0x76, 0x4b, 0xde, 0xd9, 0x22, 0xbf, 0x9b, 0x4f, 0x6b, 0xd9, - 0x6b, 0x1f, 0x43, 0x25, 0xf4, 0xed, 0x2b, 0x31, 0xa9, 0xb3, 0xbb, 0x5d, 0x9b, 0x43, 0x15, 0x28, - 0x05, 0xf5, 0x14, 0x21, 0xdf, 0xde, 0xdd, 0xde, 0xa9, 0x65, 0x11, 0xc0, 0xfc, 0x5e, 0x53, 0x7e, - 0xbc, 0xb3, 0x57, 0xcb, 0x5d, 0xbb, 0x03, 0x4b, 0x91, 0x9b, 0xc7, 0x68, 0x19, 0x2a, 0xdd, 0x66, - 0x7b, 0xfb, 0xe1, 0xee, 0x67, 0x8a, 0xbc, 0xd3, 0xdc, 0xfe, 0xbc, 0x36, 0x87, 0x56, 0xa0, 0x26, - 0x48, 0xed, 0xdd, 0x3d, 0x46, 0xcd, 0x5c, 0x7b, 0x1e, 0x99, 0x6f, 0x18, 0x9d, 0x84, 0x65, 0xaf, - 0x4b, 0x65, 0x4b, 0xde, 0x69, 0xee, 0xed, 0x10, 0x4b, 0x42, 0x64, 0x79, 0xbf, 0xdd, 0x6e, 0xb5, - 0x1f, 0xd7, 0x32, 0x44, 0xab, 0x4f, 0xde, 0xf9, 0xac, 0x45, 0x98, 0xb3, 0x61, 0xe6, 0xfd, 0xf6, - 0xf7, 0xdb, 0xbb, 0x9f, 0xb6, 0x6b, 0xb9, 0xcd, 0x5f, 0x2c, 0x43, 0x55, 0x14, 0x7d, 0xd8, 0xa6, - 0x37, 0x5c, 0x3a, 0xb0, 0x20, 0xbe, 0x55, 0x4f, 0xc8, 0xd6, 0xe1, 0x2f, 0xec, 0x1b, 0xeb, 0x63, - 0x38, 0x78, 0xed, 0x3d, 0x87, 0x0e, 0x68, 0x2d, 0x1c, 0xb8, 0x09, 0x7e, 0x29, 0xb1, 0xf2, 0x8c, - 0x5d, 0x3e, 0x6f, 0x5c, 0x9e, 0xc8, 0xe7, 0xf5, 0x81, 0x49, 0xb9, 0x1b, 0xfc, 0xd8, 0x0a, 0x5d, - 0x4e, 0xaa, 0x53, 0x13, 0xbe, 0xe6, 0x6a, 0x5c, 0x99, 0xcc, 0xe8, 0x75, 0xf3, 0x1c, 0x6a, 0xd1, - 0x0f, 0xaf, 0x50, 0x02, 0x8c, 0x9a, 0xf2, 0x75, 0x57, 0xe3, 0xda, 0x34, 0xac, 0xc1, 0xce, 0x62, - 0x5f, 0x12, 0x5d, 0x9d, 0xe6, 0x8b, 0x8b, 0xd4, 0xce, 0xd2, 0x3e, 0xce, 0x60, 0x0e, 0x0c, 0x5f, - 0xde, 0x46, 0x89, 0x9f, 0xed, 0x24, 0x7c, 0x23, 0x90, 0xe4, 0xc0, 0xe4, 0x7b, 0xe0, 0xd2, 0x1c, - 0x3a, 0x82, 0xa5, 0xc8, 0x55, 0x05, 0x94, 0x20, 0x9e, 0x7c, 0x27, 0xa3, 0x71, 0x75, 0x0a, 0xce, - 0x70, 0x44, 0x04, 0xaf, 0x26, 0x24, 0x47, 0x44, 0xc2, 0xc5, 0x87, 0xe4, 0x88, 0x48, 0xbc, 0xe5, - 0x40, 0x83, 0x3b, 0x74, 0x25, 0x21, 0x29, 0xb8, 0x93, 0x2e, 0x42, 0x34, 0x2e, 0x4f, 0xe4, 0x0b, - 0x3a, 0x2d, 0x72, 0x41, 0x21, 0xc9, 0x69, 0xc9, 0x17, 0x20, 0x1a, 0x57, 0xa7, 0xe0, 0x8c, 0x46, - 0x81, 0x7f, 0xdc, 0x99, 0x16, 0x05, 0xb1, 0xc3, 0xf9, 0xb4, 0x28, 0x88, 0x9f, 0x9c, 0xf2, 0x28, - 0x88, 0x1c, 0x53, 0x5e, 0x99, 0xe2, 0x58, 0x25, 0x3d, 0x0a, 0x92, 0x0f, 0x60, 0xa4, 0x39, 0xf4, - 0xd3, 0x0c, 0xd4, 0xd3, 0x8e, 0x2c, 0x50, 0x42, 0xad, 0x37, 0xe1, 0x94, 0xa5, 0xb1, 0x39, 0x8b, - 0x88, 0x67, 0xc5, 0x57, 0x80, 0xe2, 0x6b, 0x20, 0x7a, 0x27, 0x69, 0x64, 0x52, 0x56, 0xda, 0xc6, - 0xbb, 0xd3, 0x31, 0x7b, 0x5d, 0x76, 0xa1, 0x28, 0x0e, 0x49, 0x50, 0x42, 0x96, 0x8e, 0x1c, 0xd1, - 0x34, 0xa4, 0x71, 0x2c, 0x9e, 0xd2, 0xc7, 0x90, 0x27, 0x54, 0x74, 0x36, 0x99, 0x5b, 0x28, 0x5b, - 0x4b, 0x7b, 0xec, 0x29, 0x7a, 0x06, 0xf3, 0xec, 0x54, 0x00, 0x25, 0xa0, 0x10, 0xa1, 0xb3, 0x8b, - 0xc6, 0xf9, 0x74, 0x06, 0x4f, 0xdd, 0x97, 0xec, 0xdf, 0x98, 0x70, 0xc0, 0x1f, 0xbd, 0x9d, 0xfc, - 0xe9, 0x77, 0xf8, 0x7c, 0xa1, 0x71, 0x71, 0x02, 0x57, 0x70, 0x52, 0x44, 0x2a, 0xe0, 0xcb, 0x13, - 0xb7, 0x31, 0xe9, 0x93, 0x22, 0x79, 0xa3, 0xc4, 0x82, 0x24, 0xbe, 0x91, 0x4a, 0x0a, 0x92, 0xd4, - 0xed, 0x6b, 0x52, 0x90, 0xa4, 0xef, 0xcd, 0xa4, 0x39, 0xe4, 0xc2, 0x89, 0x04, 0xd8, 0x0c, 0xbd, - 0x9b, 0x16, 0xe4, 0x49, 0x18, 0x5e, 0xe3, 0xfa, 0x94, 0xdc, 0xc1, 0xc1, 0xe7, 0x93, 0xfe, 0x5c, - 0x3a, 0x96, 0x94, 0x3a, 0xf8, 0xd1, 0x29, 0xbe, 0xf9, 0xaf, 0x39, 0x58, 0x64, 0x90, 0x28, 0xaf, - 0x60, 0x3e, 0x07, 0xf0, 0x4f, 0x23, 0xd0, 0x85, 0x64, 0x9f, 0x84, 0x4e, 0x6c, 0x1a, 0x6f, 0x8f, - 0x67, 0x0a, 0x06, 0x5a, 0x00, 0xd9, 0x4f, 0x0a, 0xb4, 0xf8, 0x01, 0x46, 0x52, 0xa0, 0x25, 0x1c, - 0x0f, 0x48, 0x73, 0xe8, 0x13, 0x28, 0x79, 0x10, 0x32, 0x4a, 0x82, 0xa0, 0x23, 0x18, 0x79, 0xe3, - 0xc2, 0x58, 0x9e, 0xa0, 0xd5, 0x01, 0x7c, 0x38, 0xc9, 0xea, 0x38, 0x0e, 0x9d, 0x64, 0x75, 0x12, - 0xc8, 0xec, 0xfb, 0x84, 0xa1, 0x48, 0xa9, 0x3e, 0x09, 0x81, 0x78, 0xa9, 0x3e, 0x09, 0x43, 0x51, - 0xd2, 0xdc, 0xc3, 0x4b, 0xbf, 0xfc, 0x7a, 0x2d, 0xf3, 0xcf, 0x5f, 0xaf, 0xcd, 0xfd, 0xe4, 0x9b, - 0xb5, 0xcc, 0x2f, 0xbf, 0x59, 0xcb, 0xfc, 0xe3, 0x37, 0x6b, 0x99, 0x7f, 0xfb, 0x66, 0x2d, 0xf3, - 0xa7, 0xff, 0xbe, 0x36, 0xf7, 0x83, 0xa2, 0x90, 0x3e, 0x98, 0xa7, 0xff, 0x8c, 0xe8, 0xfd, 0xff, - 0x0f, 0x00, 0x00, 0xff, 0xff, 0x02, 0xff, 0x47, 0x1a, 0x52, 0x4a, 0x00, 0x00, + 0x76, 0xe7, 0xe0, 0x83, 0x04, 0x1e, 0x08, 0x10, 0x6c, 0x51, 0x22, 0x04, 0x59, 0xb2, 0x34, 0xb6, + 0x3e, 0x6d, 0x53, 0x16, 0xed, 0x95, 0x23, 0xc9, 0x96, 0x0d, 0x91, 0x94, 0x84, 0xac, 0x04, 0x22, + 0x03, 0xd2, 0x1f, 0x6b, 0x57, 0xcd, 0x0e, 0x31, 0x4d, 0x70, 0x56, 0xc0, 0xcc, 0x78, 0x66, 0x20, + 0x89, 0x9b, 0xaa, 0xd4, 0x56, 0x6d, 0x65, 0x0f, 0x39, 0xe5, 0x9c, 0xe3, 0xe6, 0x90, 0x43, 0x4e, + 0x39, 0xe4, 0x94, 0xd3, 0xa6, 0x72, 0xd8, 0x4b, 0x2a, 0x39, 0x6d, 0x92, 0xca, 0x25, 0x76, 0x92, + 0xaa, 0x54, 0xaa, 0x92, 0xca, 0x1f, 0x90, 0x43, 0xaa, 0xbf, 0xe6, 0x7b, 0xf0, 0x21, 0x69, 0xd7, + 0x9b, 0x13, 0xd1, 0x6f, 0xde, 0x7b, 0xfd, 0xe6, 0xf5, 0xeb, 0xd7, 0xaf, 0x7f, 0xdd, 0x43, 0x28, + 0x6b, 0xb6, 0xb1, 0x61, 0x3b, 0x96, 0x67, 0xa1, 0xba, 0x33, 0x36, 0x3d, 0x63, 0x84, 0x37, 0x9e, + 0xde, 0xd0, 0x86, 0xf6, 0x91, 0xb6, 0xd9, 0x7c, 0x67, 0x60, 0x78, 0x47, 0xe3, 0x83, 0x8d, 0xbe, + 0x35, 0xba, 0x3e, 0xb0, 0x06, 0xd6, 0x75, 0xca, 0x78, 0x30, 0x3e, 0xa4, 0x2d, 0xda, 0xa0, 0xbf, + 0x98, 0x02, 0xf9, 0x1a, 0xd4, 0x3e, 0xc5, 0x8e, 0x6b, 0x58, 0xa6, 0x82, 0xbf, 0x1e, 0x63, 0xd7, + 0x43, 0x0d, 0x58, 0x7a, 0xca, 0x28, 0x0d, 0xe9, 0xbc, 0x74, 0xa5, 0xac, 0x88, 0xa6, 0xfc, 0x67, + 0x12, 0xac, 0xf8, 0xcc, 0xae, 0x6d, 0x99, 0x2e, 0xce, 0xe6, 0x46, 0x17, 0x60, 0x99, 0x1b, 0xa7, + 0x9a, 0xda, 0x08, 0x37, 0x72, 0xf4, 0x71, 0x85, 0xd3, 0x3a, 0xda, 0x08, 0xa3, 0xcb, 0xb0, 0x22, + 0x58, 0x84, 0x92, 0x3c, 0xe5, 0xaa, 0x71, 0x32, 0xef, 0x0d, 0x6d, 0xc0, 0x09, 0xc1, 0xa8, 0xd9, + 0x86, 0xcf, 0x5c, 0xa0, 0xcc, 0xab, 0xfc, 0x51, 0xcb, 0x36, 0x38, 0xbf, 0xfc, 0x25, 0x94, 0xb7, + 0x3b, 0xbd, 0x2d, 0xcb, 0x3c, 0x34, 0x06, 0xc4, 0x44, 0x17, 0x3b, 0x44, 0xa6, 0x21, 0x9d, 0xcf, + 0x13, 0x13, 0x79, 0x13, 0x35, 0xa1, 0xe4, 0x62, 0xcd, 0xe9, 0x1f, 0x61, 0xb7, 0x91, 0xa3, 0x8f, + 0xfc, 0x36, 0x91, 0xb2, 0x6c, 0xcf, 0xb0, 0x4c, 0xb7, 0x91, 0x67, 0x52, 0xbc, 0x29, 0xff, 0x5c, + 0x82, 0x4a, 0xd7, 0x72, 0xbc, 0xc7, 0x9a, 0x6d, 0x1b, 0xe6, 0x00, 0xdd, 0x84, 0x12, 0xf5, 0x65, + 0xdf, 0x1a, 0x52, 0x1f, 0xd4, 0x36, 0x9b, 0x1b, 0xf1, 0x61, 0xd9, 0xe8, 0x72, 0x0e, 0xc5, 0xe7, + 0x45, 0x17, 0xa1, 0xd6, 0xb7, 0x4c, 0x4f, 0x33, 0x4c, 0xec, 0xa8, 0xb6, 0xe5, 0x78, 0xd4, 0x45, + 0x45, 0xa5, 0xea, 0x53, 0x49, 0x2f, 0xe8, 0x0c, 0x94, 0x8f, 0x2c, 0xd7, 0x63, 0x1c, 0x79, 0xca, + 0x51, 0x22, 0x04, 0xfa, 0x70, 0x1d, 0x96, 0xe8, 0x43, 0xc3, 0xe6, 0xce, 0x58, 0x24, 0xcd, 0xb6, + 0x2d, 0xff, 0x4a, 0x82, 0xe2, 0x63, 0x6b, 0x6c, 0x7a, 0xb1, 0x6e, 0x34, 0xef, 0x88, 0x0f, 0x54, + 0xa8, 0x1b, 0xcd, 0x3b, 0x0a, 0xba, 0x21, 0x1c, 0x6c, 0xac, 0x58, 0x37, 0xe4, 0x61, 0x13, 0x4a, + 0x0e, 0xd6, 0x74, 0xcb, 0x1c, 0x1e, 0x53, 0x13, 0x4a, 0x8a, 0xdf, 0x26, 0x83, 0xe8, 0xe2, 0xa1, + 0x61, 0x8e, 0x9f, 0xab, 0x0e, 0x1e, 0x6a, 0x07, 0x78, 0x48, 0x4d, 0x29, 0x29, 0x35, 0x4e, 0x56, + 0x18, 0x15, 0x6d, 0x43, 0xc5, 0x76, 0x2c, 0x5b, 0x1b, 0x68, 0xc4, 0x8f, 0x8d, 0x22, 0x75, 0x95, + 0x9c, 0x74, 0x15, 0x35, 0xbb, 0x1b, 0x70, 0x2a, 0x61, 0x31, 0xf9, 0xef, 0x24, 0x58, 0x21, 0xc1, + 0xe3, 0xda, 0x5a, 0x1f, 0xef, 0xd2, 0x21, 0x41, 0xb7, 0x60, 0xc9, 0xc4, 0xde, 0x33, 0xcb, 0x79, + 0xc2, 0x07, 0xe0, 0xf5, 0xa4, 0x56, 0x5f, 0xe6, 0xb1, 0xa5, 0x63, 0x45, 0xf0, 0xa3, 0x1b, 0x90, + 0xb7, 0x0d, 0x9d, 0xbe, 0xf0, 0x0c, 0x62, 0x84, 0x97, 0x88, 0x18, 0x76, 0x9f, 0xfa, 0x61, 0x16, + 0x11, 0xc3, 0xee, 0x13, 0xe7, 0x7a, 0x9a, 0x33, 0xc0, 0x9e, 0x6a, 0xe8, 0x7c, 0xa0, 0x4a, 0x8c, + 0xd0, 0xd6, 0x65, 0x19, 0xa0, 0x6d, 0x7a, 0x37, 0xdf, 0xff, 0x54, 0x1b, 0x8e, 0x31, 0x5a, 0x83, + 0xe2, 0x53, 0xf2, 0x83, 0xbe, 0x49, 0x5e, 0x61, 0x0d, 0xf9, 0x9b, 0x3c, 0x9c, 0x79, 0x44, 0x9c, + 0xd9, 0xd3, 0x4c, 0xfd, 0xc0, 0x7a, 0xde, 0xc3, 0xfd, 0xb1, 0x63, 0x78, 0xc7, 0x5b, 0x96, 0xe9, + 0xe1, 0xe7, 0x1e, 0xea, 0xc0, 0xaa, 0x29, 0xba, 0x55, 0x45, 0xdc, 0x12, 0x0d, 0x95, 0xcd, 0x0b, + 0x13, 0x2c, 0x64, 0xfe, 0x53, 0xea, 0x66, 0x94, 0xe0, 0xa2, 0x87, 0xc1, 0xa0, 0x0a, 0x6d, 0x39, + 0xaa, 0x2d, 0xe5, 0x7d, 0x7b, 0x3b, 0xd4, 0x32, 0xae, 0x4b, 0x8c, 0xba, 0xd0, 0xf4, 0x21, 0x90, + 0x29, 0xaf, 0x6a, 0xae, 0x3a, 0x76, 0xb1, 0x43, 0xbd, 0x56, 0xd9, 0x7c, 0x2d, 0xa9, 0x25, 0x70, + 0x81, 0x52, 0x76, 0xc6, 0x66, 0xcb, 0xdd, 0x77, 0xb1, 0x83, 0xee, 0xd2, 0x24, 0x42, 0xa4, 0x07, + 0x8e, 0x35, 0xb6, 0x1b, 0xa5, 0x19, 0xc4, 0x81, 0x8a, 0x3f, 0x20, 0xfc, 0x34, 0xc3, 0xf0, 0x40, + 0x55, 0x1d, 0xcb, 0xf2, 0x0e, 0x5d, 0x11, 0x9c, 0x82, 0xac, 0x50, 0x2a, 0xba, 0x0e, 0x27, 0xdc, + 0xb1, 0x6d, 0x0f, 0xf1, 0x08, 0x9b, 0x9e, 0x36, 0x64, 0xdd, 0xb9, 0x8d, 0xe2, 0xf9, 0xfc, 0x95, + 0xbc, 0x82, 0xc2, 0x8f, 0xa8, 0x62, 0x17, 0x9d, 0x03, 0xb0, 0x1d, 0xe3, 0xa9, 0x31, 0xc4, 0x03, + 0xac, 0x37, 0x16, 0xa9, 0xd2, 0x10, 0x05, 0xbd, 0x0b, 0x6b, 0x2e, 0xee, 0xf7, 0xad, 0x91, 0xad, + 0xda, 0x8e, 0x75, 0x68, 0x0c, 0x31, 0x9b, 0x5a, 0x4b, 0x74, 0xf4, 0x11, 0x7f, 0xd6, 0x65, 0x8f, + 0xc8, 0x24, 0x93, 0x7f, 0x9e, 0x83, 0x93, 0xd4, 0x93, 0x5d, 0x4b, 0xe7, 0xc3, 0xcc, 0x33, 0xd8, + 0x1b, 0x50, 0xed, 0x53, 0x83, 0x54, 0x5b, 0x73, 0xb0, 0xe9, 0xf1, 0x19, 0xbc, 0xcc, 0x88, 0x5d, + 0x4a, 0x43, 0x9f, 0x43, 0xdd, 0xe5, 0x51, 0xa1, 0xf6, 0x59, 0x58, 0xf0, 0x31, 0x7b, 0x27, 0xe9, + 0xae, 0x09, 0xb1, 0xa4, 0xac, 0xb8, 0x89, 0xe0, 0x5a, 0x72, 0x8f, 0xdd, 0xbe, 0x37, 0x64, 0xa9, + 0xb0, 0xb2, 0xf9, 0x7e, 0x86, 0xc2, 0xb8, 0xe1, 0x1b, 0x3d, 0x26, 0xb6, 0x63, 0x7a, 0xce, 0xb1, + 0x22, 0x94, 0x34, 0x6f, 0xc3, 0x72, 0xf8, 0x01, 0xaa, 0x43, 0xfe, 0x09, 0x3e, 0xe6, 0x2f, 0x45, + 0x7e, 0x06, 0x93, 0x80, 0x25, 0x22, 0xd6, 0xb8, 0x9d, 0xfb, 0x1d, 0x49, 0x76, 0x00, 0x05, 0xbd, + 0x3c, 0xc6, 0x9e, 0xa6, 0x6b, 0x9e, 0x86, 0x10, 0x14, 0xe8, 0x1a, 0xc3, 0x54, 0xd0, 0xdf, 0x44, + 0xeb, 0x98, 0xcf, 0xec, 0xb2, 0x42, 0x7e, 0xa2, 0xd7, 0xa0, 0xec, 0x07, 0x3a, 0x5f, 0x68, 0x02, + 0x02, 0x49, 0xf8, 0x9a, 0xe7, 0xe1, 0x91, 0xed, 0xd1, 0x10, 0xa9, 0x2a, 0xa2, 0x29, 0xff, 0x77, + 0x01, 0xea, 0x89, 0x31, 0xf9, 0x04, 0x4a, 0x23, 0xde, 0x3d, 0x9f, 0x68, 0x6f, 0xa6, 0x64, 0xfd, + 0x84, 0xa9, 0x8a, 0x2f, 0x45, 0x92, 0x2a, 0x49, 0xb0, 0xa1, 0xc5, 0xd1, 0x6f, 0x93, 0x11, 0x1f, + 0x5a, 0x03, 0x55, 0x37, 0x1c, 0xdc, 0xf7, 0x2c, 0xe7, 0x98, 0x9b, 0xbb, 0x3c, 0xb4, 0x06, 0xdb, + 0x82, 0x86, 0x6e, 0x03, 0xe8, 0xa6, 0x4b, 0x06, 0xfb, 0xd0, 0x18, 0x50, 0xa3, 0x2b, 0x9b, 0x67, + 0x92, 0x46, 0xf8, 0x2b, 0xa1, 0x52, 0xd6, 0x4d, 0x97, 0x9b, 0x7f, 0x0f, 0xaa, 0x64, 0x41, 0x51, + 0x47, 0x6c, 0x11, 0x63, 0x91, 0x5e, 0xd9, 0x3c, 0x9b, 0xf6, 0x0e, 0xfe, 0x52, 0xa7, 0x2c, 0xdb, + 0x41, 0xc3, 0x45, 0xf7, 0x61, 0x91, 0x66, 0x76, 0xb7, 0xb1, 0x48, 0x85, 0x37, 0x26, 0x39, 0x80, + 0x47, 0xc4, 0x23, 0x2a, 0xc0, 0x02, 0x82, 0x4b, 0xa3, 0x7d, 0xa8, 0x68, 0xa6, 0x69, 0x79, 0x1a, + 0x4b, 0x34, 0x4b, 0x54, 0xd9, 0x7b, 0x33, 0x28, 0x6b, 0x05, 0x52, 0x4c, 0x63, 0x58, 0x0f, 0xfa, + 0x08, 0x8a, 0x34, 0x13, 0xf1, 0xa4, 0x71, 0x79, 0xc6, 0xa0, 0x55, 0x98, 0x54, 0xf3, 0x16, 0x54, + 0x42, 0xc6, 0xce, 0x13, 0xa4, 0xcd, 0xbb, 0x50, 0x8f, 0x9b, 0x36, 0x57, 0x90, 0xff, 0x3e, 0xac, + 0x29, 0x63, 0x33, 0x30, 0x4c, 0x94, 0x66, 0xb7, 0x61, 0x91, 0x0f, 0x36, 0x8b, 0x38, 0x79, 0xba, + 0x8f, 0x14, 0x2e, 0x11, 0xae, 0xb5, 0x8e, 0x34, 0x53, 0x1f, 0x62, 0x87, 0xf7, 0x2b, 0x6a, 0xad, + 0x87, 0x8c, 0x2a, 0x7f, 0x04, 0x27, 0x63, 0x9d, 0xf3, 0x52, 0xef, 0x4d, 0xa8, 0xd9, 0x96, 0xae, + 0xba, 0x8c, 0x4c, 0x56, 0x32, 0x9e, 0x86, 0x6c, 0x9f, 0xb7, 0xad, 0x13, 0xf1, 0x9e, 0x67, 0xd9, + 0x49, 0xe3, 0x67, 0x13, 0x6f, 0xc0, 0xa9, 0xb8, 0x38, 0xeb, 0x5e, 0xfe, 0x18, 0xd6, 0x15, 0x3c, + 0xb2, 0x9e, 0xe2, 0x17, 0x55, 0xdd, 0x84, 0x46, 0x52, 0x01, 0x57, 0xfe, 0x05, 0xac, 0x07, 0xd4, + 0x9e, 0xa7, 0x79, 0x63, 0x77, 0x2e, 0xe5, 0xbc, 0x0e, 0x3e, 0xb0, 0x5c, 0x36, 0x9c, 0x25, 0x45, + 0x34, 0xe5, 0x75, 0x28, 0x76, 0x2d, 0xbd, 0xdd, 0x45, 0x35, 0xc8, 0x19, 0x36, 0x17, 0xce, 0x19, + 0xb6, 0x6c, 0x84, 0xfb, 0xec, 0xb0, 0x7a, 0x84, 0x75, 0x1d, 0x67, 0x45, 0x77, 0xa1, 0xa6, 0xe9, + 0xba, 0x41, 0xc2, 0x49, 0x1b, 0xaa, 0x86, 0xcd, 0xca, 0xd5, 0xca, 0xe6, 0x7a, 0x6a, 0x00, 0xb4, + 0xbb, 0x4a, 0x35, 0x60, 0x6f, 0xdb, 0xae, 0xfc, 0x10, 0xca, 0xfe, 0x9a, 0x8f, 0xee, 0x04, 0x95, + 0x6d, 0x6e, 0xd6, 0x0a, 0xc1, 0x2f, 0x7e, 0xf7, 0x12, 0x6b, 0x14, 0x37, 0xf9, 0x0e, 0x80, 0x9f, + 0x4b, 0x45, 0xe9, 0x71, 0x66, 0x82, 0x62, 0x25, 0xc4, 0x2e, 0xff, 0xb4, 0x18, 0xce, 0xb0, 0x21, + 0x27, 0xe8, 0xbe, 0x13, 0xf4, 0x48, 0xc6, 0xcd, 0xbd, 0x50, 0xc6, 0xfd, 0x00, 0x8a, 0xae, 0xa7, + 0x79, 0x98, 0xd7, 0x6e, 0x17, 0x26, 0x89, 0x13, 0x23, 0xb0, 0xc2, 0xf8, 0xd1, 0x59, 0x80, 0xbe, + 0x83, 0x35, 0x0f, 0xeb, 0xaa, 0xc6, 0x96, 0x87, 0xbc, 0x52, 0xe6, 0x94, 0x96, 0x87, 0xb6, 0x82, + 0xfa, 0xb3, 0x48, 0x0d, 0xbb, 0x3a, 0x49, 0x73, 0x64, 0xa8, 0x83, 0x4a, 0xd4, 0x4f, 0x57, 0x8b, + 0x33, 0xa6, 0x2b, 0xae, 0x80, 0x49, 0x85, 0x92, 0xf1, 0xd2, 0xf4, 0x64, 0xcc, 0x44, 0x67, 0x49, + 0xc6, 0xa5, 0xe9, 0xc9, 0x98, 0x2b, 0x9b, 0x9c, 0x8c, 0x53, 0xd2, 0x4f, 0x39, 0x2d, 0xfd, 0x7c, + 0x97, 0x69, 0xf7, 0x9f, 0x24, 0x68, 0x24, 0xb3, 0x00, 0xcf, 0x7e, 0xb7, 0x61, 0xd1, 0xa5, 0x94, + 0x59, 0x72, 0x2f, 0x97, 0xe5, 0x12, 0xe8, 0x21, 0x14, 0x0c, 0xf3, 0xd0, 0xe2, 0x93, 0xf6, 0xfd, + 0x19, 0x24, 0x79, 0xaf, 0x1b, 0x6d, 0xf3, 0xd0, 0x62, 0xde, 0xa4, 0x1a, 0x9a, 0x1f, 0x40, 0xd9, + 0x27, 0xcd, 0xf5, 0x6e, 0xbb, 0xb0, 0x16, 0x8b, 0x6d, 0xb6, 0xdd, 0xf0, 0xa7, 0x84, 0x34, 0xdf, + 0x94, 0x90, 0x7f, 0x92, 0x0b, 0x4f, 0xd9, 0xfb, 0xc6, 0xd0, 0xc3, 0x4e, 0x62, 0xca, 0x7e, 0x28, + 0xb4, 0xb3, 0xf9, 0x7a, 0x69, 0xaa, 0x76, 0x56, 0xc1, 0xf3, 0x59, 0xf7, 0x15, 0xd4, 0x68, 0x50, + 0xaa, 0x2e, 0x1e, 0xd2, 0x92, 0x87, 0x97, 0x9f, 0xdf, 0x9b, 0xa4, 0x86, 0x59, 0xc2, 0x42, 0xbb, + 0xc7, 0xe5, 0x98, 0x07, 0xab, 0xc3, 0x30, 0xad, 0xf9, 0x09, 0xa0, 0x24, 0xd3, 0x5c, 0x3e, 0xed, + 0x91, 0x5c, 0x48, 0x36, 0xe2, 0x29, 0xeb, 0xf4, 0x21, 0x35, 0x63, 0x96, 0x58, 0x61, 0x06, 0x2b, + 0x5c, 0x42, 0xfe, 0xaf, 0x3c, 0x40, 0xf0, 0xf0, 0xff, 0x51, 0x12, 0xfc, 0xc4, 0x4f, 0x40, 0xac, + 0x94, 0xbc, 0x32, 0x49, 0x71, 0x6a, 0xea, 0xd9, 0x8d, 0xa6, 0x1e, 0x56, 0x54, 0xbe, 0x33, 0x51, + 0xcd, 0xdc, 0x49, 0x67, 0xe9, 0xb7, 0x2d, 0xe9, 0x3c, 0x82, 0x53, 0xf1, 0x20, 0xe2, 0x19, 0x67, + 0x13, 0x8a, 0x86, 0x87, 0x47, 0x0c, 0xb5, 0x4a, 0xdd, 0xf4, 0x86, 0x84, 0x18, 0xab, 0xfc, 0x17, + 0x12, 0x94, 0xdb, 0x23, 0x6d, 0x80, 0x7b, 0x36, 0xee, 0x93, 0x5e, 0x0d, 0xd2, 0xe0, 0x96, 0xb0, + 0x06, 0xea, 0x44, 0xdd, 0xcc, 0x92, 0xd2, 0xdb, 0x29, 0x5b, 0x6a, 0xa1, 0x67, 0xb2, 0x97, 0x5f, + 0xda, 0x03, 0x9b, 0x50, 0xfa, 0x3e, 0x3e, 0x66, 0xe9, 0x68, 0x46, 0x39, 0xf9, 0x1f, 0x72, 0xb0, + 0x4e, 0x97, 0xc3, 0x2d, 0x01, 0x62, 0x29, 0xd8, 0xb5, 0xc6, 0x4e, 0x1f, 0xbb, 0x34, 0x4e, 0xed, + 0xb1, 0x6a, 0x63, 0xc7, 0xb0, 0x74, 0x0e, 0xa3, 0x94, 0xfb, 0xf6, 0xb8, 0x4b, 0x09, 0xe8, 0x0c, + 0x90, 0x86, 0xfa, 0xf5, 0xd8, 0xe2, 0x53, 0x28, 0xaf, 0x94, 0xfa, 0xf6, 0xf8, 0xf7, 0x48, 0x5b, + 0xc8, 0xba, 0x47, 0x9a, 0x83, 0x5d, 0x3a, 0x43, 0x98, 0x6c, 0x8f, 0x12, 0xd0, 0x0d, 0x38, 0x39, + 0xc2, 0x23, 0xcb, 0x39, 0x56, 0x87, 0xc6, 0xc8, 0xf0, 0x54, 0xc3, 0x54, 0x0f, 0x8e, 0x3d, 0xec, + 0xf2, 0xd9, 0x80, 0xd8, 0xc3, 0x47, 0xe4, 0x59, 0xdb, 0xbc, 0x47, 0x9e, 0x20, 0x19, 0xaa, 0x96, + 0x35, 0x52, 0xdd, 0xbe, 0xe5, 0x60, 0x55, 0xd3, 0x7f, 0x44, 0x2b, 0x84, 0xbc, 0x52, 0xb1, 0xac, + 0x51, 0x8f, 0xd0, 0x5a, 0xfa, 0x8f, 0xd0, 0xeb, 0x50, 0xe9, 0xdb, 0x63, 0x17, 0x7b, 0x2a, 0xf9, + 0x43, 0x0b, 0x80, 0xb2, 0x02, 0x8c, 0xb4, 0x65, 0x8f, 0xdd, 0x10, 0xc3, 0x88, 0x04, 0xc4, 0x52, + 0x98, 0xe1, 0x31, 0x1e, 0x51, 0xbc, 0xe6, 0x68, 0x3c, 0xc0, 0xb6, 0x36, 0xc0, 0xcc, 0x34, 0xb1, + 0x72, 0xa7, 0xe0, 0x35, 0x0f, 0x39, 0x23, 0x35, 0x53, 0xa9, 0x1d, 0x85, 0x9b, 0xae, 0x7c, 0x0f, + 0xaa, 0x11, 0x06, 0xe2, 0x2f, 0xaa, 0xd6, 0x35, 0x7e, 0x2c, 0x02, 0xa9, 0x44, 0x08, 0x3d, 0xe3, + 0xc7, 0x14, 0xad, 0xa2, 0xdd, 0x51, 0x47, 0x16, 0x14, 0xd6, 0x90, 0x35, 0xa8, 0x46, 0x40, 0x21, + 0xb2, 0x3f, 0xa7, 0xe8, 0x0f, 0xdf, 0x9f, 0x93, 0xdf, 0x84, 0xe6, 0x58, 0x43, 0x31, 0xae, 0xf4, + 0x37, 0xa1, 0x79, 0xc7, 0xb6, 0xd8, 0x9c, 0xd3, 0xdf, 0xb4, 0x0b, 0xfc, 0x94, 0xa3, 0x8a, 0x65, + 0x85, 0x35, 0x64, 0x1d, 0x60, 0x4b, 0xb3, 0xb5, 0x03, 0x63, 0x68, 0x78, 0xc7, 0xe8, 0x2a, 0xd4, + 0x35, 0x5d, 0x57, 0xfb, 0x82, 0x62, 0x60, 0x81, 0xf5, 0xae, 0x68, 0xba, 0xbe, 0x15, 0x22, 0xa3, + 0xb7, 0x60, 0x55, 0x77, 0x2c, 0x3b, 0xca, 0xcb, 0xc0, 0xdf, 0x3a, 0x79, 0x10, 0x66, 0x96, 0xff, + 0xad, 0x08, 0x67, 0xa3, 0x61, 0x16, 0x07, 0xde, 0x3e, 0x81, 0xe5, 0x58, 0xaf, 0x19, 0x00, 0x55, + 0x60, 0xad, 0x12, 0x91, 0x88, 0x01, 0x49, 0xb9, 0x04, 0x90, 0x94, 0x0a, 0xed, 0xe5, 0x5f, 0x29, + 0xb4, 0x57, 0x78, 0x25, 0xd0, 0x5e, 0xf1, 0xe5, 0xa0, 0xbd, 0xe5, 0x39, 0xa1, 0xbd, 0x4b, 0x34, + 0xb9, 0x8b, 0xde, 0x29, 0x8a, 0xc2, 0x26, 0x4e, 0xd5, 0xef, 0xc3, 0x14, 0x87, 0x0c, 0x31, 0x08, + 0x70, 0x69, 0x1e, 0x08, 0xb0, 0x94, 0x09, 0x01, 0x92, 0xa8, 0xb3, 0x6d, 0xcd, 0x19, 0x59, 0x8e, + 0xc0, 0xf8, 0x78, 0x51, 0xbb, 0x22, 0xe8, 0x1c, 0xdf, 0xcb, 0x44, 0x03, 0x21, 0x0b, 0x0d, 0x44, + 0xe7, 0x61, 0xd9, 0xb4, 0x54, 0x13, 0x3f, 0x53, 0x49, 0x2c, 0xb8, 0x8d, 0x0a, 0x0b, 0x0c, 0xd3, + 0xea, 0xe0, 0x67, 0x5d, 0x42, 0x41, 0x17, 0x60, 0x79, 0xa4, 0xb9, 0x4f, 0xb0, 0x4e, 0x55, 0xb9, + 0x8d, 0x2a, 0x0d, 0xe2, 0x0a, 0xa3, 0x11, 0x1d, 0x2e, 0xba, 0x08, 0xfe, 0x4b, 0x72, 0xa6, 0x1a, + 0x65, 0xaa, 0x0a, 0x2a, 0x65, 0x93, 0xff, 0x4a, 0x82, 0xb5, 0x68, 0x98, 0x73, 0x94, 0xe8, 0x01, + 0x94, 0x1d, 0x91, 0x57, 0x79, 0x68, 0x5f, 0xcd, 0xd8, 0x97, 0x24, 0x13, 0xb1, 0x12, 0xc8, 0xa2, + 0x1f, 0x64, 0x82, 0x93, 0xd7, 0xa7, 0xe9, 0x9b, 0x06, 0x4f, 0xca, 0x0e, 0xbc, 0xfe, 0x99, 0x61, + 0xea, 0xd6, 0x33, 0x37, 0x73, 0x96, 0xa6, 0xc4, 0x8a, 0x94, 0x11, 0x2b, 0x7d, 0x07, 0xeb, 0xd8, + 0xf4, 0x0c, 0x6d, 0xa8, 0xba, 0x36, 0xee, 0x0b, 0x90, 0x24, 0x20, 0x93, 0x15, 0x51, 0xfe, 0x85, + 0x04, 0xa7, 0xe2, 0x9d, 0x72, 0x9f, 0xb5, 0x93, 0x3e, 0x7b, 0x2b, 0xf9, 0x8e, 0x71, 0xe1, 0x54, + 0xaf, 0x7d, 0x95, 0xe9, 0xb5, 0x1b, 0xd3, 0x35, 0x4e, 0xf5, 0xdb, 0x9f, 0x4b, 0x70, 0x3a, 0xd3, + 0x8c, 0xd8, 0x4a, 0x28, 0xc5, 0x57, 0x42, 0xbe, 0x8a, 0xf6, 0xad, 0xb1, 0xe9, 0x85, 0x56, 0xd1, + 0x2d, 0x7a, 0xe4, 0xc4, 0x96, 0x2b, 0x75, 0xa4, 0x3d, 0x37, 0x46, 0xe3, 0x11, 0x5f, 0x46, 0x89, + 0xba, 0xc7, 0x8c, 0xf2, 0x02, 0xeb, 0xa8, 0xdc, 0x82, 0x55, 0xdf, 0xca, 0x89, 0xb8, 0x6f, 0x08, + 0xc7, 0xcd, 0x45, 0x71, 0x5c, 0x13, 0x16, 0xb7, 0xf1, 0x53, 0xa3, 0x8f, 0x5f, 0xc9, 0x99, 0xd8, + 0x79, 0xa8, 0xd8, 0xd8, 0x19, 0x19, 0xae, 0xeb, 0x67, 0xe4, 0xb2, 0x12, 0x26, 0xc9, 0xff, 0xbe, + 0x08, 0x2b, 0xf1, 0xe8, 0xf8, 0x38, 0x01, 0x1b, 0xbf, 0x91, 0xb2, 0x56, 0xc4, 0x5f, 0x34, 0x54, + 0xbe, 0xdf, 0x10, 0x35, 0x5d, 0x2e, 0x0b, 0x62, 0xf1, 0xeb, 0x36, 0x51, 0xf0, 0x35, 0x60, 0xa9, + 0x6f, 0x8d, 0x46, 0x9a, 0xa9, 0x8b, 0xa3, 0x4c, 0xde, 0x24, 0xfe, 0xd3, 0x9c, 0x01, 0x71, 0x3b, + 0x21, 0xd3, 0xdf, 0x64, 0xf0, 0x9e, 0x59, 0xce, 0x13, 0xc3, 0xa4, 0xf0, 0x33, 0xcd, 0xea, 0x65, + 0x05, 0x38, 0x69, 0xdb, 0x70, 0xd0, 0x06, 0x14, 0xb0, 0xf9, 0x54, 0xd4, 0xe7, 0x29, 0x67, 0x9d, + 0xa2, 0x9a, 0x53, 0x28, 0x1f, 0xba, 0x0e, 0x8b, 0x23, 0x12, 0x16, 0x02, 0x99, 0x58, 0xcf, 0x38, + 0xf2, 0x53, 0x38, 0x1b, 0xda, 0x84, 0x25, 0x9d, 0x8e, 0x93, 0x28, 0x62, 0x1a, 0x29, 0xa0, 0x36, + 0x65, 0x50, 0x04, 0x23, 0xda, 0xf1, 0x77, 0x1f, 0xe5, 0xac, 0x6d, 0x43, 0x6c, 0x28, 0x52, 0xb7, + 0x20, 0x7b, 0xd1, 0xda, 0x18, 0xa8, 0xae, 0xcd, 0xe9, 0xba, 0x26, 0xef, 0x43, 0x4e, 0x43, 0x69, + 0x68, 0x0d, 0x58, 0x18, 0x55, 0xd8, 0x29, 0xf9, 0xd0, 0x1a, 0xd0, 0x28, 0x5a, 0x23, 0xbb, 0x31, + 0xdd, 0x30, 0xe9, 0xf2, 0x57, 0x52, 0x58, 0x83, 0x4c, 0x3e, 0xfa, 0x43, 0xb5, 0xcc, 0x3e, 0x6e, + 0x54, 0xe9, 0xa3, 0x32, 0xa5, 0xec, 0x9a, 0x7d, 0x5a, 0x25, 0x7b, 0xde, 0x71, 0xa3, 0x46, 0xe9, + 0xe4, 0x27, 0xd9, 0x68, 0x33, 0xf0, 0x68, 0x25, 0x6b, 0xa3, 0x9d, 0x96, 0xdf, 0x05, 0x76, 0x74, + 0x0f, 0x96, 0x9e, 0xb1, 0x44, 0xd0, 0xa8, 0x53, 0xf9, 0x2b, 0xd3, 0xd3, 0x0b, 0xd7, 0x20, 0x04, + 0xbf, 0xcb, 0x2d, 0xd4, 0xdf, 0x48, 0x70, 0x6a, 0x8b, 0xee, 0x43, 0x43, 0x79, 0x6c, 0x1e, 0xf0, + 0xf6, 0x96, 0x8f, 0xab, 0x67, 0x02, 0xa2, 0xf1, 0xf7, 0x16, 0xb0, 0x7a, 0x1b, 0x6a, 0x42, 0x39, + 0x57, 0x91, 0x9f, 0x19, 0x9a, 0xaf, 0xba, 0xe1, 0xa6, 0xfc, 0x21, 0xac, 0x27, 0xde, 0x82, 0x6f, + 0x05, 0x2f, 0xc0, 0x72, 0x90, 0xaf, 0xfc, 0x97, 0xa8, 0xf8, 0xb4, 0xb6, 0x2e, 0xdf, 0x86, 0x93, + 0x3d, 0x4f, 0x73, 0xbc, 0x84, 0x0b, 0x66, 0x90, 0xa5, 0xa0, 0x7b, 0x54, 0x96, 0xe3, 0xe2, 0x3d, + 0x58, 0xeb, 0x79, 0x96, 0xfd, 0x02, 0x4a, 0x49, 0xd6, 0x21, 0xef, 0x6f, 0x8d, 0xc5, 0xfa, 0x20, + 0x9a, 0xf2, 0x3a, 0x3b, 0x22, 0x48, 0xf6, 0x76, 0x07, 0x4e, 0x31, 0x84, 0xfe, 0x45, 0x5e, 0xe2, + 0xb4, 0x38, 0x1f, 0x48, 0xea, 0x7d, 0x0c, 0x27, 0x82, 0x65, 0x31, 0xc0, 0xbe, 0x6e, 0x46, 0xb1, + 0xaf, 0xf3, 0x13, 0x46, 0x3d, 0x02, 0x7d, 0xfd, 0x69, 0x2e, 0x94, 0xd7, 0x33, 0x90, 0xaf, 0x3b, + 0x51, 0xe4, 0xeb, 0xe2, 0x34, 0xdd, 0x11, 0xe0, 0x2b, 0x19, 0xb5, 0xf9, 0x94, 0xa8, 0xfd, 0x32, + 0x01, 0x8f, 0x15, 0xb2, 0xf0, 0xc5, 0x98, 0xb5, 0xbf, 0x11, 0x74, 0x4c, 0x61, 0xe8, 0x98, 0xdf, + 0xb5, 0x7f, 0xa0, 0x72, 0x2b, 0x86, 0x8e, 0x5d, 0x98, 0x6a, 0xaf, 0x0f, 0x8e, 0xfd, 0x65, 0x01, + 0xca, 0xfe, 0xb3, 0x84, 0xcf, 0x93, 0x6e, 0xcb, 0xa5, 0xb8, 0x2d, 0xbc, 0x02, 0xe7, 0x5f, 0x6a, + 0x05, 0x2e, 0xcc, 0xbc, 0x02, 0x9f, 0x81, 0x32, 0xfd, 0xa1, 0x3a, 0xf8, 0x90, 0xaf, 0xa8, 0x25, + 0x4a, 0x50, 0xf0, 0x61, 0x10, 0x86, 0x8b, 0x73, 0x85, 0x61, 0x0c, 0x8f, 0x5b, 0x8a, 0xe3, 0x71, + 0x1f, 0xfb, 0x2b, 0x22, 0x5b, 0x44, 0x2f, 0x4f, 0xd0, 0x9b, 0xba, 0x16, 0xc6, 0x70, 0xa2, 0x72, + 0x16, 0x4e, 0x14, 0x68, 0x99, 0x8c, 0x13, 0x7d, 0x87, 0x2b, 0xc4, 0x3e, 0x03, 0xd9, 0xc2, 0xb1, + 0xc8, 0x33, 0xeb, 0x1d, 0x00, 0x3f, 0x89, 0x08, 0xa4, 0xed, 0xcc, 0x84, 0x77, 0x54, 0x42, 0xec, + 0x44, 0x6d, 0x64, 0x68, 0x82, 0x43, 0xc3, 0xd9, 0xf2, 0x63, 0xc6, 0x89, 0xe1, 0xff, 0x16, 0x43, + 0xf9, 0x25, 0xe3, 0x30, 0xec, 0xe3, 0x04, 0x0e, 0x3c, 0x67, 0x14, 0xdf, 0x8c, 0xc2, 0xc0, 0x2f, + 0x18, 0x75, 0x09, 0x14, 0x98, 0x56, 0x2e, 0x9a, 0xc3, 0x1f, 0x33, 0xac, 0xab, 0xcc, 0x29, 0x2d, + 0xba, 0x33, 0x38, 0x34, 0x4c, 0xc3, 0x3d, 0x62, 0xcf, 0x17, 0xd9, 0xce, 0x40, 0x90, 0x5a, 0x14, + 0x6d, 0xc2, 0xcf, 0x0d, 0x4f, 0xed, 0x5b, 0x3a, 0xa6, 0x31, 0x5d, 0x54, 0x4a, 0x84, 0xb0, 0x65, + 0xe9, 0x38, 0x98, 0x79, 0xa5, 0x17, 0x9b, 0x79, 0xe5, 0xd8, 0xcc, 0x3b, 0x05, 0x8b, 0x0e, 0xd6, + 0x5c, 0xcb, 0xe4, 0xfb, 0x70, 0xde, 0x22, 0x43, 0x33, 0xc2, 0xae, 0x4b, 0x7a, 0xe2, 0xe5, 0x1a, + 0x6f, 0x86, 0xca, 0xcc, 0xe5, 0xa9, 0x65, 0xe6, 0x84, 0x43, 0xb6, 0x58, 0x99, 0x59, 0x9d, 0x5a, + 0x66, 0xce, 0x74, 0xc6, 0x16, 0x14, 0xda, 0xb5, 0xd9, 0x0a, 0xed, 0x70, 0x5d, 0xba, 0x12, 0xa9, + 0x4b, 0xbf, 0xcb, 0xc9, 0xfa, 0x2b, 0x09, 0xd6, 0x13, 0xd3, 0x8a, 0x4f, 0xd7, 0x5b, 0xb1, 0x53, + 0xb8, 0x0b, 0x53, 0x7d, 0xe6, 0x1f, 0xc2, 0x3d, 0x88, 0x1c, 0xc2, 0xbd, 0x37, 0x5d, 0xf0, 0x95, + 0x9f, 0xc1, 0xfd, 0xa1, 0x04, 0xaf, 0xef, 0xdb, 0x7a, 0xac, 0xc2, 0xe3, 0xdb, 0xfe, 0xd9, 0x13, + 0xc7, 0xc7, 0xa2, 0xd6, 0xcf, 0xcd, 0x0b, 0xc8, 0x30, 0x39, 0x59, 0x86, 0xf3, 0xd9, 0x66, 0xf0, + 0x92, 0xe9, 0x87, 0xb0, 0xb2, 0xf3, 0x1c, 0xf7, 0x7b, 0xc7, 0x66, 0x7f, 0x0e, 0xd3, 0xea, 0x90, + 0xef, 0x8f, 0x74, 0x0e, 0xa7, 0x92, 0x9f, 0xe1, 0x2a, 0x30, 0x1f, 0xad, 0x02, 0x55, 0xa8, 0x07, + 0x3d, 0xf0, 0xe1, 0x3d, 0x45, 0x86, 0x57, 0x27, 0xcc, 0x44, 0xf9, 0xb2, 0xc2, 0x5b, 0x9c, 0x8e, + 0x1d, 0x76, 0x67, 0x85, 0xd1, 0xb1, 0xe3, 0x44, 0xb3, 0x45, 0x3e, 0x9a, 0x2d, 0xe4, 0x3f, 0x91, + 0xa0, 0x42, 0x7a, 0x78, 0x29, 0xfb, 0xf9, 0x56, 0x2b, 0x1f, 0x6c, 0xb5, 0xfc, 0x1d, 0x5b, 0x21, + 0xbc, 0x63, 0x0b, 0x2c, 0x2f, 0x52, 0x72, 0xd2, 0xf2, 0x45, 0x9f, 0x8e, 0x1d, 0x47, 0x3e, 0x0f, + 0xcb, 0xcc, 0x36, 0xfe, 0xe6, 0x75, 0xc8, 0x8f, 0x9d, 0xa1, 0x88, 0xa3, 0xb1, 0x33, 0x94, 0xff, + 0x48, 0x82, 0x6a, 0xcb, 0xf3, 0xb4, 0xfe, 0xd1, 0x1c, 0x2f, 0xe0, 0x1b, 0x97, 0x0b, 0x1b, 0x97, + 0x7c, 0x89, 0xc0, 0xdc, 0x42, 0x86, 0xb9, 0xc5, 0x88, 0xb9, 0x32, 0xd4, 0x84, 0x2d, 0x99, 0x06, + 0x77, 0x00, 0x75, 0x2d, 0xc7, 0xbb, 0x6f, 0x39, 0xcf, 0x34, 0x47, 0x9f, 0x6f, 0x07, 0x86, 0xa0, + 0xc0, 0x6f, 0x40, 0xe7, 0xaf, 0x14, 0x15, 0xfa, 0x5b, 0xbe, 0x0c, 0x27, 0x22, 0xfa, 0x32, 0x3b, + 0xfe, 0x04, 0x2a, 0x34, 0xef, 0xf3, 0x52, 0xfc, 0x46, 0xf8, 0xd4, 0x6b, 0xa6, 0x55, 0x42, 0xfe, + 0x5d, 0x58, 0x25, 0xf5, 0x01, 0xa5, 0xfb, 0x53, 0xf1, 0x7b, 0xb1, 0x3a, 0xf5, 0x6c, 0x86, 0xa2, + 0x58, 0x8d, 0xfa, 0x1f, 0x12, 0x14, 0x29, 0x3d, 0xb1, 0x66, 0x9f, 0x81, 0xb2, 0x83, 0x6d, 0x4b, + 0xf5, 0xb4, 0x81, 0x7f, 0xdf, 0x9c, 0x10, 0xf6, 0xb4, 0x01, 0x45, 0x73, 0xe9, 0x43, 0xdd, 0x18, + 0x60, 0xd7, 0x13, 0x97, 0xce, 0x2b, 0x84, 0xb6, 0xcd, 0x48, 0xc4, 0x49, 0xf4, 0x10, 0xa6, 0x40, + 0xcf, 0x5a, 0xe8, 0x6f, 0xb4, 0xc1, 0x6e, 0x39, 0xce, 0x82, 0xbd, 0xd3, 0x3b, 0x90, 0x4d, 0x28, + 0xc5, 0xe0, 0x72, 0xbf, 0x8d, 0xae, 0x43, 0x81, 0x42, 0x9e, 0x4b, 0xd3, 0xfd, 0x46, 0x19, 0xe5, + 0x1d, 0x40, 0x61, 0xb7, 0xf1, 0x01, 0xba, 0x0e, 0x8b, 0xd4, 0xab, 0xa2, 0x9c, 0x5a, 0xcf, 0x50, + 0xa4, 0x70, 0x36, 0x59, 0x03, 0xc4, 0x34, 0x47, 0x4a, 0xa8, 0xf9, 0x87, 0x71, 0x42, 0x49, 0xf5, + 0xd7, 0x12, 0x9c, 0x88, 0xf4, 0xc1, 0x6d, 0x7d, 0x27, 0xda, 0x49, 0xa6, 0xa9, 0xbc, 0x83, 0xad, + 0xc8, 0x1a, 0x72, 0x3d, 0xcb, 0xa4, 0x5f, 0xd3, 0xfa, 0xf1, 0xb7, 0x12, 0x40, 0x6b, 0xec, 0x1d, + 0x71, 0x28, 0x31, 0x3c, 0x94, 0x52, 0x6c, 0x28, 0x9b, 0x50, 0xb2, 0x35, 0xd7, 0x7d, 0x66, 0x39, + 0x62, 0x13, 0xe4, 0xb7, 0x29, 0xe8, 0x37, 0xf6, 0x8e, 0xc4, 0x21, 0x1b, 0xf9, 0x8d, 0x2e, 0x42, + 0x8d, 0x7d, 0x14, 0xa1, 0x6a, 0xba, 0xee, 0x60, 0xd7, 0xe5, 0xa7, 0x6d, 0x55, 0x46, 0x6d, 0x31, + 0x22, 0x61, 0x33, 0x28, 0x0c, 0xee, 0x1d, 0xab, 0x9e, 0xf5, 0x04, 0x9b, 0x7c, 0x33, 0x53, 0x15, + 0xd4, 0x3d, 0x42, 0x64, 0xc7, 0x0e, 0x03, 0xc3, 0xf5, 0x1c, 0xc1, 0x26, 0x4e, 0x66, 0x38, 0x95, + 0xb2, 0x91, 0x41, 0xa9, 0x77, 0xc7, 0xc3, 0x21, 0x73, 0xf1, 0x8b, 0x0f, 0xfb, 0xbb, 0xfc, 0x85, + 0x72, 0x59, 0x93, 0x20, 0x70, 0x1a, 0x7f, 0xdd, 0x57, 0x88, 0xda, 0xbc, 0x0b, 0xab, 0xa1, 0x77, + 0xe0, 0x61, 0x15, 0xa9, 0x3a, 0xa5, 0x68, 0xd5, 0x29, 0x3f, 0x00, 0xc4, 0x80, 0x8a, 0x97, 0x7c, + 0x6f, 0xf9, 0x24, 0x9c, 0x88, 0x28, 0xe2, 0x4b, 0xf7, 0x35, 0xa8, 0xf2, 0x2b, 0x66, 0x3c, 0x50, + 0x4e, 0x43, 0x89, 0xa4, 0xe0, 0xbe, 0xa1, 0x8b, 0x13, 0xd8, 0x25, 0xdb, 0xd2, 0xb7, 0x0c, 0xdd, + 0x91, 0x3f, 0x83, 0xaa, 0xc2, 0xfa, 0xe1, 0xbc, 0xf7, 0xa1, 0xc6, 0x2f, 0xa4, 0xa9, 0x91, 0xab, + 0xa6, 0x69, 0xdf, 0x39, 0x84, 0x3b, 0x51, 0xaa, 0x66, 0xb8, 0x29, 0xeb, 0xd0, 0x64, 0x35, 0x46, + 0x44, 0xbd, 0x78, 0xd9, 0xfb, 0x20, 0x6e, 0x60, 0x4c, 0xed, 0x25, 0x2a, 0x5f, 0x75, 0xc2, 0x4d, + 0xf9, 0x2c, 0x9c, 0x49, 0xed, 0x85, 0x7b, 0xc2, 0x86, 0x7a, 0xf0, 0x80, 0xdd, 0x87, 0xf4, 0x8f, + 0x98, 0xa5, 0xd0, 0x11, 0xf3, 0x29, 0xbf, 0xaa, 0xcc, 0x89, 0x55, 0x8f, 0x96, 0x8c, 0xc1, 0xfe, + 0x20, 0x9f, 0xb5, 0x3f, 0x28, 0x44, 0xf6, 0x07, 0x72, 0xcf, 0xf7, 0x27, 0xdf, 0xb7, 0xdd, 0xa3, + 0xfb, 0x4b, 0xd6, 0xb7, 0x48, 0x88, 0xf2, 0xa4, 0xb7, 0x64, 0xac, 0x4a, 0x48, 0x4a, 0xbe, 0x0a, + 0xd5, 0x68, 0x6a, 0x0c, 0xe5, 0x39, 0x29, 0x91, 0xe7, 0x6a, 0xb1, 0x14, 0xf7, 0x41, 0xac, 0x64, + 0xce, 0xf6, 0x71, 0xac, 0x60, 0xbe, 0x1b, 0x49, 0x76, 0xd7, 0x52, 0x4e, 0x87, 0x7f, 0x4d, 0x79, + 0x6e, 0x8d, 0xaf, 0x07, 0xf7, 0x5d, 0x22, 0xcf, 0x5f, 0x5a, 0x7e, 0x03, 0x2a, 0xfb, 0x59, 0xdf, + 0xc9, 0x14, 0xc4, 0xbd, 0x90, 0x9b, 0xb0, 0x76, 0xdf, 0x18, 0x62, 0xf7, 0xd8, 0xf5, 0xf0, 0xa8, + 0x4d, 0x93, 0xd2, 0xa1, 0x81, 0x1d, 0x74, 0x0e, 0x80, 0xee, 0x79, 0x6c, 0xcb, 0xf0, 0x3f, 0x9f, + 0x08, 0x51, 0xe4, 0xff, 0x94, 0x60, 0x25, 0x10, 0xdc, 0xa7, 0x7b, 0xbd, 0xd7, 0xa0, 0x4c, 0xde, + 0xd7, 0xf5, 0xb4, 0x91, 0x2d, 0x0e, 0xc0, 0x7c, 0x02, 0xba, 0x03, 0xc5, 0x43, 0x57, 0x60, 0x4c, + 0xa9, 0x88, 0x7b, 0x9a, 0x21, 0x4a, 0xe1, 0xd0, 0x6d, 0xeb, 0xe8, 0x43, 0x80, 0xb1, 0x8b, 0x75, + 0x7e, 0xe8, 0x95, 0xcf, 0x2a, 0x2f, 0xf6, 0xc3, 0x27, 0xe7, 0x44, 0x80, 0x5d, 0x29, 0xb9, 0x0b, + 0x15, 0xc3, 0xb4, 0x74, 0x4c, 0x4f, 0x33, 0x75, 0x0e, 0x43, 0x4d, 0x11, 0x07, 0x26, 0xb1, 0xef, + 0x62, 0x5d, 0xc6, 0x7c, 0x2d, 0x14, 0xfe, 0xe5, 0x81, 0xd2, 0x81, 0x55, 0x96, 0xb4, 0x0e, 0x7d, + 0xc3, 0x45, 0xc4, 0x5e, 0x98, 0xf4, 0x76, 0xd4, 0x5b, 0x4a, 0xdd, 0xe0, 0xb5, 0x90, 0x10, 0x95, + 0x6f, 0xc3, 0xc9, 0xc8, 0x96, 0x6a, 0x8e, 0x3d, 0x8e, 0xdc, 0x8d, 0x21, 0x2b, 0x41, 0x38, 0x73, + 0xdc, 0x42, 0x44, 0xf3, 0x34, 0xdc, 0xc2, 0x65, 0xb8, 0x85, 0x2b, 0x7f, 0x09, 0xa7, 0x23, 0x10, + 0x50, 0xc4, 0xa2, 0xbb, 0xb1, 0x52, 0xef, 0xd2, 0x34, 0xad, 0xb1, 0x9a, 0xef, 0x7f, 0x24, 0x58, + 0x4b, 0x63, 0x78, 0x41, 0x88, 0xf2, 0x87, 0x19, 0x17, 0x1f, 0x6f, 0xcd, 0x66, 0xd6, 0x6f, 0x04, + 0xde, 0xdd, 0x83, 0x66, 0x9a, 0x3f, 0x93, 0xa3, 0x94, 0x9f, 0x67, 0x94, 0x7e, 0x96, 0x0f, 0x41, + 0xf5, 0x2d, 0xcf, 0x73, 0x8c, 0x83, 0x31, 0x09, 0xf9, 0x57, 0x0e, 0x7f, 0xb5, 0x7d, 0x20, 0x87, + 0xb9, 0xf6, 0xc6, 0x04, 0xf1, 0xc0, 0x8e, 0x54, 0x30, 0xe7, 0xf3, 0x28, 0x98, 0xc3, 0x40, 0xf8, + 0x9b, 0xb3, 0xe9, 0xfb, 0xad, 0x45, 0x4c, 0x7f, 0x96, 0x83, 0x5a, 0x74, 0x88, 0xd0, 0x0e, 0x80, + 0xe6, 0x5b, 0xce, 0x27, 0xca, 0xc5, 0x99, 0x5e, 0x53, 0x09, 0x09, 0xa2, 0xb7, 0x21, 0xdf, 0xb7, + 0xc7, 0x7c, 0xd4, 0x52, 0x4e, 0x8f, 0xb7, 0xec, 0x31, 0xcb, 0x28, 0x84, 0x8d, 0x6c, 0xc2, 0xd8, + 0x65, 0x80, 0xec, 0x2c, 0xf9, 0x98, 0x3e, 0x67, 0x32, 0x9c, 0x19, 0x3d, 0x84, 0xda, 0x33, 0xc7, + 0xf0, 0xb4, 0x83, 0x21, 0x56, 0x87, 0xda, 0x31, 0x76, 0x78, 0x96, 0x9c, 0x21, 0x91, 0x55, 0x85, + 0xe0, 0x23, 0x22, 0x27, 0xff, 0x01, 0x94, 0x84, 0x45, 0x53, 0x56, 0x84, 0x3d, 0x58, 0x1f, 0x13, + 0x36, 0x95, 0x5e, 0xf5, 0x33, 0x35, 0xd3, 0x52, 0x5d, 0x4c, 0x96, 0x71, 0xf1, 0x9d, 0xc5, 0x94, + 0x14, 0xbd, 0x46, 0xa5, 0xb7, 0x2c, 0x07, 0x77, 0x34, 0xd3, 0xea, 0x31, 0x51, 0xf9, 0x29, 0x54, + 0x42, 0x2f, 0x38, 0xc5, 0x84, 0x36, 0xac, 0x8a, 0xb3, 0x7b, 0x17, 0x7b, 0x7c, 0x79, 0x99, 0xa9, + 0xf3, 0x15, 0x2e, 0xd7, 0xc3, 0x1e, 0xbb, 0x6f, 0x71, 0x17, 0x4e, 0x2b, 0xd8, 0xb2, 0xb1, 0xe9, + 0x8f, 0xe7, 0x23, 0x6b, 0x30, 0x47, 0x06, 0x7f, 0x0d, 0x9a, 0x69, 0xf2, 0x2c, 0x3f, 0x5c, 0xbb, + 0x04, 0x25, 0xf1, 0x45, 0x34, 0x5a, 0x82, 0xfc, 0xde, 0x56, 0xb7, 0xbe, 0x40, 0x7e, 0xec, 0x6f, + 0x77, 0xeb, 0x12, 0x2a, 0x41, 0xa1, 0xb7, 0xb5, 0xd7, 0xad, 0xe7, 0xae, 0x8d, 0xa0, 0x1e, 0xff, + 0x1c, 0x18, 0xad, 0xc3, 0x89, 0xae, 0xb2, 0xdb, 0x6d, 0x3d, 0x68, 0xed, 0xb5, 0x77, 0x3b, 0x6a, + 0x57, 0x69, 0x7f, 0xda, 0xda, 0xdb, 0xa9, 0x2f, 0xa0, 0x0b, 0x70, 0x36, 0xfc, 0xe0, 0xe1, 0x6e, + 0x6f, 0x4f, 0xdd, 0xdb, 0x55, 0xb7, 0x76, 0x3b, 0x7b, 0xad, 0x76, 0x67, 0x47, 0xa9, 0x4b, 0xe8, + 0x2c, 0x9c, 0x0e, 0xb3, 0xdc, 0x6b, 0x6f, 0xb7, 0x95, 0x9d, 0x2d, 0xf2, 0xbb, 0xf5, 0xa8, 0x9e, + 0xbb, 0xf6, 0x11, 0x54, 0x23, 0x5f, 0xef, 0x12, 0x93, 0xba, 0xbb, 0xdb, 0xf5, 0x05, 0x54, 0x85, + 0x72, 0x58, 0x4f, 0x09, 0x0a, 0x9d, 0xdd, 0xed, 0x9d, 0x7a, 0x0e, 0x01, 0x2c, 0xee, 0xb5, 0x94, + 0x07, 0x3b, 0x7b, 0xf5, 0xfc, 0xb5, 0xdb, 0xb0, 0x12, 0xbb, 0x3b, 0x8d, 0x56, 0xa1, 0xda, 0x6b, + 0x75, 0xb6, 0xef, 0xed, 0x7e, 0xae, 0x2a, 0x3b, 0xad, 0xed, 0x2f, 0xea, 0x0b, 0x68, 0x0d, 0xea, + 0x82, 0xd4, 0xd9, 0xdd, 0x63, 0x54, 0xe9, 0xda, 0x93, 0xd8, 0x7c, 0xc3, 0xe8, 0x24, 0xac, 0xfa, + 0x5d, 0xaa, 0x5b, 0xca, 0x4e, 0x6b, 0x6f, 0x87, 0x58, 0x12, 0x21, 0x2b, 0xfb, 0x9d, 0x4e, 0xbb, + 0xf3, 0xa0, 0x2e, 0x11, 0xad, 0x01, 0x79, 0xe7, 0xf3, 0x36, 0x61, 0xce, 0x45, 0x99, 0xf7, 0x3b, + 0xdf, 0xef, 0xec, 0x7e, 0xd6, 0xa9, 0xe7, 0x37, 0x7f, 0xb1, 0x0a, 0x35, 0x51, 0xf4, 0x61, 0x87, + 0x5e, 0x89, 0xe9, 0xc2, 0x92, 0xf8, 0xda, 0x3e, 0x25, 0x5b, 0x47, 0xff, 0x47, 0x40, 0xf3, 0xc2, + 0x04, 0x0e, 0x5e, 0x7b, 0x2f, 0xa0, 0x03, 0x5a, 0x0b, 0x87, 0xee, 0xb2, 0x5f, 0x4a, 0xad, 0x3c, + 0x13, 0xd7, 0xe7, 0x9b, 0x97, 0xa7, 0xf2, 0xf9, 0x7d, 0x60, 0x52, 0xee, 0x86, 0x3f, 0x17, 0x43, + 0x97, 0xd3, 0xea, 0xd4, 0x94, 0xef, 0xd1, 0x9a, 0x57, 0xa6, 0x33, 0xfa, 0xdd, 0x3c, 0x81, 0x7a, + 0xfc, 0xd3, 0x31, 0x94, 0x82, 0xbb, 0x66, 0x7c, 0x9f, 0xd6, 0xbc, 0x36, 0x0b, 0x6b, 0xb8, 0xb3, + 0xc4, 0xb7, 0x50, 0x57, 0x67, 0xf9, 0x66, 0x24, 0xb3, 0xb3, 0xac, 0xcf, 0x4b, 0x98, 0x03, 0xa3, + 0xd7, 0xcf, 0x51, 0xea, 0x87, 0x47, 0x29, 0x5f, 0x39, 0xa4, 0x39, 0x30, 0xfd, 0x26, 0xbb, 0xbc, + 0x80, 0x8e, 0x60, 0x25, 0x76, 0xb7, 0x01, 0xa5, 0x88, 0xa7, 0x5f, 0xe2, 0x68, 0x5e, 0x9d, 0x81, + 0x33, 0x1a, 0x11, 0xe1, 0xbb, 0x0c, 0xe9, 0x11, 0x91, 0x72, 0x53, 0x22, 0x3d, 0x22, 0x52, 0xaf, + 0x45, 0xd0, 0xe0, 0x8e, 0xdc, 0x61, 0x48, 0x0b, 0xee, 0xb4, 0x9b, 0x13, 0xcd, 0xcb, 0x53, 0xf9, + 0xc2, 0x4e, 0x8b, 0xdd, 0x68, 0x48, 0x73, 0x5a, 0xfa, 0x8d, 0x89, 0xe6, 0xd5, 0x19, 0x38, 0xe3, + 0x51, 0x10, 0x9c, 0x8f, 0x66, 0x45, 0x41, 0xe2, 0x34, 0x3f, 0x2b, 0x0a, 0x92, 0x47, 0xad, 0x3c, + 0x0a, 0x62, 0xe7, 0x9a, 0x57, 0x66, 0x38, 0x87, 0xc9, 0x8e, 0x82, 0xf4, 0x13, 0x1b, 0x79, 0x01, + 0xfd, 0x54, 0x82, 0x46, 0xd6, 0x19, 0x07, 0x4a, 0xa9, 0xf5, 0xa6, 0x1c, 0xcb, 0x34, 0x37, 0xe7, + 0x11, 0xf1, 0xad, 0xf8, 0x1a, 0x50, 0x72, 0x0d, 0x44, 0x6f, 0xa5, 0x8d, 0x4c, 0xc6, 0x4a, 0xdb, + 0x7c, 0x7b, 0x36, 0x66, 0xbf, 0xcb, 0x1e, 0x94, 0xc4, 0xa9, 0x0a, 0x4a, 0xc9, 0xd2, 0xb1, 0x33, + 0x9d, 0xa6, 0x3c, 0x89, 0xc5, 0x57, 0xfa, 0x00, 0x0a, 0x84, 0x8a, 0xce, 0xa6, 0x73, 0x0b, 0x65, + 0xe7, 0xb2, 0x1e, 0xfb, 0x8a, 0x1e, 0xc3, 0x22, 0x3b, 0x46, 0x40, 0x29, 0x28, 0x44, 0xe4, 0xb0, + 0xa3, 0x79, 0x3e, 0x9b, 0xc1, 0x57, 0xf7, 0x15, 0xfb, 0x47, 0x2c, 0xfc, 0x84, 0x00, 0xbd, 0x99, + 0xfe, 0xf1, 0x7a, 0xf4, 0x40, 0xa2, 0x79, 0x71, 0x0a, 0x57, 0x78, 0x52, 0xc4, 0x2a, 0xe0, 0xcb, + 0x53, 0xb7, 0x31, 0xd9, 0x93, 0x22, 0x7d, 0xa3, 0xc4, 0x82, 0x24, 0xb9, 0x91, 0x4a, 0x0b, 0x92, + 0xcc, 0xed, 0x6b, 0x5a, 0x90, 0x64, 0xef, 0xcd, 0xe4, 0x05, 0xe4, 0xc1, 0x89, 0x14, 0xd8, 0x0c, + 0xbd, 0x9d, 0x15, 0xe4, 0x69, 0x18, 0x5e, 0xf3, 0x9d, 0x19, 0xb9, 0xc3, 0x83, 0xcf, 0x27, 0xfd, + 0xeb, 0xd9, 0x58, 0x52, 0xe6, 0xe0, 0xc7, 0xa7, 0xf8, 0xe6, 0x3f, 0xe7, 0x61, 0x99, 0x41, 0xa2, + 0xbc, 0x82, 0xf9, 0x02, 0x20, 0x38, 0x8d, 0x40, 0x6f, 0xa4, 0xfb, 0x24, 0x72, 0xc4, 0xd3, 0x7c, + 0x73, 0x32, 0x53, 0x38, 0xd0, 0x42, 0xc8, 0x7e, 0x5a, 0xa0, 0x25, 0x0f, 0x30, 0xd2, 0x02, 0x2d, + 0xe5, 0x78, 0x40, 0x5e, 0x40, 0x9f, 0x42, 0xd9, 0x87, 0x90, 0x51, 0x1a, 0x04, 0x1d, 0xc3, 0xc8, + 0x9b, 0x6f, 0x4c, 0xe4, 0x09, 0x5b, 0x1d, 0xc2, 0x87, 0xd3, 0xac, 0x4e, 0xe2, 0xd0, 0x69, 0x56, + 0xa7, 0x81, 0xcc, 0x81, 0x4f, 0x18, 0x8a, 0x94, 0xe9, 0x93, 0x08, 0x88, 0x97, 0xe9, 0x93, 0x28, + 0x14, 0x25, 0x2f, 0xdc, 0xbb, 0xf4, 0xcb, 0x6f, 0xce, 0x49, 0xff, 0xf8, 0xcd, 0xb9, 0x85, 0x9f, + 0x7c, 0x7b, 0x4e, 0xfa, 0xe5, 0xb7, 0xe7, 0xa4, 0xbf, 0xff, 0xf6, 0x9c, 0xf4, 0x2f, 0xdf, 0x9e, + 0x93, 0xfe, 0xf8, 0x5f, 0xcf, 0x2d, 0xfc, 0xa0, 0x24, 0xa4, 0x0f, 0x16, 0xe9, 0xbf, 0x53, 0x7a, + 0xef, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0x64, 0x05, 0xc8, 0x1a, 0x14, 0x4b, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -9880,6 +9902,25 @@ func (m *ImageSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.Annotations) > 0 { + for k := range m.Annotations { + v := m.Annotations[k] + baseI := i + i -= len(v) + copy(dAtA[i:], v) + i = encodeVarintApi(dAtA, i, uint64(len(v))) + i-- + dAtA[i] = 0x12 + i -= len(k) + copy(dAtA[i:], k) + i = encodeVarintApi(dAtA, i, uint64(len(k))) + i-- + dAtA[i] = 0xa + i = encodeVarintApi(dAtA, i, uint64(baseI-i)) + i-- + dAtA[i] = 0x12 + } + } if len(m.Image) > 0 { i -= len(m.Image) copy(dAtA[i:], m.Image) @@ -12083,6 +12124,18 @@ func (m *Image) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.Spec != nil { + { + size, err := m.Spec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintApi(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } if len(m.Username) > 0 { i -= len(m.Username) copy(dAtA[i:], m.Username) @@ -14081,6 +14134,14 @@ func (m *ImageSpec) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if len(m.Annotations) > 0 { + for k, v := range m.Annotations { + _ = 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 } @@ -15043,6 +15104,10 @@ func (m *Image) Size() (n int) { if l > 0 { n += 1 + l + sovApi(uint64(l)) } + if m.Spec != nil { + l = m.Spec.Size() + n += 1 + l + sovApi(uint64(l)) + } return n } @@ -16028,8 +16093,19 @@ func (this *ImageSpec) String() string { if this == nil { return "nil" } + keysForAnnotations := make([]string, 0, len(this.Annotations)) + for k := range this.Annotations { + keysForAnnotations = append(keysForAnnotations, k) + } + github_com_gogo_protobuf_sortkeys.Strings(keysForAnnotations) + mapStringForAnnotations := "map[string]string{" + for _, k := range keysForAnnotations { + mapStringForAnnotations += fmt.Sprintf("%v: %v,", k, this.Annotations[k]) + } + mapStringForAnnotations += "}" s := strings.Join([]string{`&ImageSpec{`, `Image:` + fmt.Sprintf("%v", this.Image) + `,`, + `Annotations:` + mapStringForAnnotations + `,`, `}`, }, "") return s @@ -16656,6 +16732,7 @@ func (this *Image) String() string { `Size_:` + fmt.Sprintf("%v", this.Size_) + `,`, `Uid:` + strings.Replace(this.Uid.String(), "Int64Value", "Int64Value", 1) + `,`, `Username:` + fmt.Sprintf("%v", this.Username) + `,`, + `Spec:` + strings.Replace(this.Spec.String(), "ImageSpec", "ImageSpec", 1) + `,`, `}`, }, "") return s @@ -22005,6 +22082,133 @@ func (m *ImageSpec) Unmarshal(dAtA []byte) error { } m.Image = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Annotations", 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 < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Annotations == nil { + m.Annotations = make(map[string]string) + } + var mapkey string + var mapvalue string + for iNdEx < postIndex { + entryPreIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowApi + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + if fieldNum == 1 { + var stringLenmapkey uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 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 < 0 { + return ErrInvalidLengthApi + } + if postStringIndexmapkey > l { + return io.ErrUnexpectedEOF + } + mapkey = string(dAtA[iNdEx:postStringIndexmapkey]) + iNdEx = postStringIndexmapkey + } else if fieldNum == 2 { + 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 < 0 { + return ErrInvalidLengthApi + } + if postStringIndexmapvalue > l { + return io.ErrUnexpectedEOF + } + mapvalue = string(dAtA[iNdEx:postStringIndexmapvalue]) + iNdEx = postStringIndexmapvalue + } else { + iNdEx = entryPreIndex + skippy, err := skipApi(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthApi + } + if (iNdEx + skippy) > postIndex { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + m.Annotations[mapkey] = mapvalue + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) @@ -29136,6 +29340,42 @@ func (m *Image) Unmarshal(dAtA []byte) error { } m.Username = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 7: + 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 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 < 0 { + return ErrInvalidLengthApi + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Spec == nil { + m.Spec = &ImageSpec{} + } + if err := m.Spec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipApi(dAtA[iNdEx:]) diff --git a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.proto b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.proto index f94302994..1a024e632 100644 --- a/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.proto +++ b/vendor/k8s.io/cri-api/pkg/apis/runtime/v1alpha2/api.proto @@ -306,11 +306,11 @@ message LinuxPodSandboxConfig { // PodSandbox in its user interface for better user experience. For example, // the runtime can construct a unique PodSandboxName based on the metadata. message PodSandboxMetadata { - // Pod name of the sandbox. Same as the pod name in the PodSpec. + // Pod name of the sandbox. Same as the pod name in the Pod ObjectMeta. string name = 1; - // Pod UID of the sandbox. Same as the pod UID in the PodSpec. + // Pod UID of the sandbox. Same as the pod UID in the Pod ObjectMeta. string uid = 2; - // Pod namespace of the sandbox. Same as the pod namespace in the PodSpec. + // Pod namespace of the sandbox. Same as the pod namespace in the Pod ObjectMeta. string namespace = 3; // Attempt number of creating the sandbox. Default: 0. uint32 attempt = 4; @@ -523,11 +523,14 @@ message ListPodSandboxResponse { repeated PodSandbox items = 1; } -// ImageSpec is an internal representation of an image. Currently, it wraps the -// value of a Container's Image field (e.g. imageID or imageDigest), but in the -// future it will include more detailed information about the different image types. +// ImageSpec is an internal representation of an image. message ImageSpec { + // Container's Image field (e.g. imageID or imageDigest). string image = 1; + // Unstructured key-value map holding arbitrary metadata. + // ImageSpec Annotations can be used to help the runtime target specific + // images in multi-arch images. + map annotations = 2; } message KeyValue { @@ -1065,6 +1068,8 @@ message Image { // User name that will run the command(s). This is used if UID is not set // and no user is specified when creating container. string username = 6; + // ImageSpec for image which includes annotations + ImageSpec spec = 7; } message ListImagesResponse { diff --git a/vendor/k8s.io/klog/go.mod b/vendor/k8s.io/klog/go.mod deleted file mode 100644 index 3877d8546..000000000 --- a/vendor/k8s.io/klog/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module k8s.io/klog - -go 1.12 - -require github.com/go-logr/logr v0.1.0 diff --git a/vendor/k8s.io/klog/LICENSE b/vendor/k8s.io/klog/v2/LICENSE similarity index 100% rename from vendor/k8s.io/klog/LICENSE rename to vendor/k8s.io/klog/v2/LICENSE diff --git a/vendor/k8s.io/klog/README.md b/vendor/k8s.io/klog/v2/README.md similarity index 90% rename from vendor/k8s.io/klog/README.md rename to vendor/k8s.io/klog/v2/README.md index 841468b4b..2f9f6f0d8 100644 --- a/vendor/k8s.io/klog/README.md +++ b/vendor/k8s.io/klog/v2/README.md @@ -29,12 +29,14 @@ How to use klog =============== - Replace imports for `github.com/golang/glog` with `k8s.io/klog` - Use `klog.InitFlags(nil)` explicitly for initializing global flags as we no longer use `init()` method to register the flags -- You can now use `log-file` instead of `log-dir` for logging to a single file (See `examples/log_file/usage_log_file.go`) +- You can now use `log_file` instead of `log_dir` for logging to a single file (See `examples/log_file/usage_log_file.go`) - If you want to redirect everything logged using klog somewhere else (say syslog!), you can use `klog.SetOutput()` method and supply a `io.Writer`. (See `examples/set_output/usage_set_output.go`) - For more logging conventions (See [Logging Conventions](https://github.com/kubernetes/community/blob/master/contributors/devel/sig-instrumentation/logging.md)) +**NOTE**: please use the newer go versions that support semantic import versioning in modules, ideally go 1.11.4 or greater. + ### Coexisting with glog -This package can be used side by side with glog. [This example](examples/coexist_glog/coexist_glog.go) shows how to initialize and syncronize flags from the global `flag.CommandLine` FlagSet. In addition, the example makes use of stderr as combined output by setting `alsologtostderr` (or `logtostderr`) to `true`. +This package can be used side by side with glog. [This example](examples/coexist_glog/coexist_glog.go) shows how to initialize and synchronize flags from the global `flag.CommandLine` FlagSet. In addition, the example makes use of stderr as combined output by setting `alsologtostderr` (or `logtostderr`) to `true`. ## Community, discussion, contribution, and support @@ -42,7 +44,7 @@ Learn how to engage with the Kubernetes community on the [community page](http:/ You can reach the maintainers of this project at: -- [Slack](https://kubernetes.slack.com/messages/sig-architecture) +- [Slack](https://kubernetes.slack.com/messages/klog) - [Mailing List](https://groups.google.com/forum/#!forum/kubernetes-sig-architecture) ### Code of conduct diff --git a/vendor/k8s.io/klog/v2/go.mod b/vendor/k8s.io/klog/v2/go.mod new file mode 100644 index 000000000..e396e31c0 --- /dev/null +++ b/vendor/k8s.io/klog/v2/go.mod @@ -0,0 +1,5 @@ +module k8s.io/klog/v2 + +go 1.13 + +require github.com/go-logr/logr v0.2.0 diff --git a/vendor/k8s.io/klog/klog.go b/vendor/k8s.io/klog/v2/klog.go similarity index 79% rename from vendor/k8s.io/klog/klog.go rename to vendor/k8s.io/klog/v2/klog.go index 2712ce0af..ae2b86138 100644 --- a/vendor/k8s.io/klog/klog.go +++ b/vendor/k8s.io/klog/v2/klog.go @@ -87,6 +87,8 @@ import ( "sync" "sync/atomic" "time" + + "github.com/go-logr/logr" ) // severity identifies the sort of log: info, warning etc. It also implements @@ -130,7 +132,7 @@ func (s *severity) String() string { return strconv.FormatInt(int64(*s), 10) } -// Get is part of the flag.Value interface. +// Get is part of the flag.Getter interface. func (s *severity) Get() interface{} { return *s } @@ -219,7 +221,7 @@ func (l *Level) String() string { return strconv.FormatInt(int64(*l), 10) } -// Get is part of the flag.Value interface. +// Get is part of the flag.Getter interface. func (l *Level) Get() interface{} { return *l } @@ -364,8 +366,11 @@ var errTraceSyntax = errors.New("syntax error: expect file.go:234") func (t *traceLocation) Set(value string) error { if value == "" { // Unset. + logging.mu.Lock() + defer logging.mu.Unlock() t.line = 0 t.file = "" + return nil } fields := strings.Split(value, ":") if len(fields) != 2 { @@ -425,7 +430,7 @@ func InitFlags(flagset *flag.FlagSet) { flagset.BoolVar(&logging.toStderr, "logtostderr", logging.toStderr, "log to standard error instead of files") flagset.BoolVar(&logging.alsoToStderr, "alsologtostderr", logging.alsoToStderr, "log to standard error as well as files") flagset.Var(&logging.verbosity, "v", "number for the log level verbosity") - flagset.BoolVar(&logging.skipHeaders, "add_dir_header", logging.addDirHeader, "If true, adds the file directory to the header") + flagset.BoolVar(&logging.addDirHeader, "add_dir_header", logging.addDirHeader, "If true, adds the file directory to the header of the log messages") flagset.BoolVar(&logging.skipHeaders, "skip_headers", logging.skipHeaders, "If true, avoid header prefixes in the log messages") flagset.BoolVar(&logging.skipLogHeaders, "skip_log_headers", logging.skipLogHeaders, "If true, avoid headers when opening log files") flagset.Var(&logging.stderrThreshold, "stderrthreshold", "logs at or above this threshold go to stderr") @@ -482,7 +487,7 @@ type loggingT struct { logDir string // If non-empty, specifies the path of the file to write logs. mutually exclusive - // with the log-dir option. + // with the log_dir option. logFile string // When logFile is specified, this limiter makes sure the logFile won't exceeds a certain size. When exceeds, the @@ -497,6 +502,9 @@ type loggingT struct { // If true, add the file directory to the header addDirHeader bool + + // If set, all output will be redirected unconditionally to the provided logr.Logger + logr logr.Logger } // buffer holds a byte Buffer for reuse. The zero value is ready for use. @@ -512,20 +520,20 @@ var logging loggingT // l.mu is held. func (l *loggingT) setVState(verbosity Level, filter []modulePat, setFilter bool) { // Turn verbosity off so V will not fire while we are in transition. - logging.verbosity.set(0) + l.verbosity.set(0) // Ditto for filter length. - atomic.StoreInt32(&logging.filterLength, 0) + atomic.StoreInt32(&l.filterLength, 0) // Set the new filters and wipe the pc->Level map if the filter has changed. if setFilter { - logging.vmodule.filter = filter - logging.vmap = make(map[uintptr]Level) + l.vmodule.filter = filter + l.vmap = make(map[uintptr]Level) } // Things are consistent now, so enable filtering and verbosity. // They are enabled in order opposite to that in V. - atomic.StoreInt32(&logging.filterLength, int32(len(filter))) - logging.verbosity.set(verbosity) + atomic.StoreInt32(&l.filterLength, int32(len(filter))) + l.verbosity.set(verbosity) } // getBuffer returns a new, ready-to-use buffer. @@ -679,44 +687,131 @@ func (buf *buffer) someDigits(i, d int) int { return copy(buf.tmp[i:], buf.tmp[j:]) } -func (l *loggingT) println(s severity, args ...interface{}) { +func (l *loggingT) println(s severity, logr logr.Logger, args ...interface{}) { buf, file, line := l.header(s, 0) + // if logr is set, we clear the generated header as we rely on the backing + // logr implementation to print headers + if logr != nil { + l.putBuffer(buf) + buf = l.getBuffer() + } fmt.Fprintln(buf, args...) - l.output(s, buf, file, line, false) + l.output(s, logr, buf, file, line, false) } -func (l *loggingT) print(s severity, args ...interface{}) { - l.printDepth(s, 1, args...) +func (l *loggingT) print(s severity, logr logr.Logger, args ...interface{}) { + l.printDepth(s, logr, 1, args...) } -func (l *loggingT) printDepth(s severity, depth int, args ...interface{}) { +func (l *loggingT) printDepth(s severity, logr logr.Logger, depth int, args ...interface{}) { buf, file, line := l.header(s, depth) + // if logr is set, we clear the generated header as we rely on the backing + // logr implementation to print headers + if logr != nil { + l.putBuffer(buf) + buf = l.getBuffer() + } fmt.Fprint(buf, args...) if buf.Bytes()[buf.Len()-1] != '\n' { buf.WriteByte('\n') } - l.output(s, buf, file, line, false) + l.output(s, logr, buf, file, line, false) } -func (l *loggingT) printf(s severity, format string, args ...interface{}) { +func (l *loggingT) printf(s severity, logr logr.Logger, format string, args ...interface{}) { buf, file, line := l.header(s, 0) + // if logr is set, we clear the generated header as we rely on the backing + // logr implementation to print headers + if logr != nil { + l.putBuffer(buf) + buf = l.getBuffer() + } fmt.Fprintf(buf, format, args...) if buf.Bytes()[buf.Len()-1] != '\n' { buf.WriteByte('\n') } - l.output(s, buf, file, line, false) + l.output(s, logr, buf, file, line, false) } // printWithFileLine behaves like print but uses the provided file and line number. If // alsoLogToStderr is true, the log message always appears on standard error; it // will also appear in the log file unless --logtostderr is set. -func (l *loggingT) printWithFileLine(s severity, file string, line int, alsoToStderr bool, args ...interface{}) { +func (l *loggingT) printWithFileLine(s severity, logr logr.Logger, file string, line int, alsoToStderr bool, args ...interface{}) { buf := l.formatHeader(s, file, line) + // if logr is set, we clear the generated header as we rely on the backing + // logr implementation to print headers + if logr != nil { + l.putBuffer(buf) + buf = l.getBuffer() + } fmt.Fprint(buf, args...) if buf.Bytes()[buf.Len()-1] != '\n' { buf.WriteByte('\n') } - l.output(s, buf, file, line, alsoToStderr) + l.output(s, logr, buf, file, line, alsoToStderr) +} + +// if loggr is specified, will call loggr.Error, otherwise output with logging module. +func (l *loggingT) errorS(err error, loggr logr.Logger, msg string, keysAndValues ...interface{}) { + if loggr != nil { + loggr.Error(err, msg, keysAndValues) + return + } + l.printS(err, msg, keysAndValues...) +} + +// if loggr is specified, will call loggr.Info, otherwise output with logging module. +func (l *loggingT) infoS(loggr logr.Logger, msg string, keysAndValues ...interface{}) { + if loggr != nil { + loggr.Info(msg, keysAndValues) + return + } + l.printS(nil, msg, keysAndValues...) +} + +// printS is called from infoS and errorS if loggr is not specified. +// if err arguments is specified, will output to errorLog severity +func (l *loggingT) printS(err error, msg string, keysAndValues ...interface{}) { + b := &bytes.Buffer{} + b.WriteString(fmt.Sprintf("%q", msg)) + if err != nil { + b.WriteByte(' ') + b.WriteString(fmt.Sprintf("err=%q", err.Error())) + } + kvListFormat(b, keysAndValues...) + var s severity + if err == nil { + s = infoLog + } else { + s = errorLog + } + l.printDepth(s, logging.logr, 2, b) +} + +const missingValue = "(MISSING)" + +func kvListFormat(b *bytes.Buffer, keysAndValues ...interface{}) { + for i := 0; i < len(keysAndValues); i += 2 { + var v interface{} + k := keysAndValues[i] + if i+1 < len(keysAndValues) { + v = keysAndValues[i+1] + } else { + v = missingValue + } + b.WriteByte(' ') + + switch v.(type) { + case string, error: + b.WriteString(fmt.Sprintf("%s=%q", k, v)) + default: + if _, ok := v.(fmt.Stringer); ok { + b.WriteString(fmt.Sprintf("%s=%q", k, v)) + } else { + b.WriteString(fmt.Sprintf("%s=%+v", k, v)) + } + } + } } // redirectBuffer is used to set an alternate destination for the logs @@ -736,6 +831,18 @@ func (rb *redirectBuffer) Write(bytes []byte) (n int, err error) { return rb.w.Write(bytes) } +// SetLogger will set the backing logr implementation for klog. +// If set, all log lines will be suppressed from the regular Output, and +// redirected to the logr implementation. +// All log lines include the 'severity', 'file' and 'line' values attached as +// structured logging values. +// Use as: +// ... +// klog.SetLogger(zapr.NewLogger(zapLog)) +func SetLogger(logr logr.Logger) { + logging.logr = logr +} + // SetOutput sets the output destination for all severities func SetOutput(w io.Writer) { logging.mu.Lock() @@ -762,8 +869,16 @@ func SetOutputBySeverity(name string, w io.Writer) { logging.file[sev] = rb } +// LogToStderr sets whether to log exclusively to stderr, bypassing outputs +func LogToStderr(stderr bool) { + logging.mu.Lock() + defer logging.mu.Unlock() + + logging.toStderr = stderr +} + // output writes the data to the log files and releases the buffer. -func (l *loggingT) output(s severity, buf *buffer, file string, line int, alsoToStderr bool) { +func (l *loggingT) output(s severity, log logr.Logger, buf *buffer, file string, line int, alsoToStderr bool) { l.mu.Lock() if l.traceLocation.isSet() { if l.traceLocation.match(file, line) { @@ -771,7 +886,15 @@ func (l *loggingT) output(s severity, buf *buffer, file string, line int, alsoTo } } data := buf.Bytes() - if l.toStderr { + if log != nil { + // TODO: set 'severity' and caller information as structured log info + // keysAndValues := []interface{}{"severity", severityName[s], "file", file, "line", line} + if s == errorLog { + l.logr.Error(nil, string(data)) + } else { + log.Info(string(data)) + } + } else if l.toStderr { os.Stderr.Write(data) } else { if alsoToStderr || l.alsoToStderr || s >= l.stderrThreshold.get() { @@ -819,14 +942,12 @@ func (l *loggingT) output(s severity, buf *buffer, file string, line int, alsoTo os.Exit(1) } // Dump all goroutine stacks before exiting. - // First, make sure we see the trace for the current goroutine on standard error. - // If -logtostderr has been specified, the loop below will do that anyway - // as the first stack in the full dump. - if !l.toStderr { - os.Stderr.Write(stacks(false)) + trace := stacks(true) + // Write the stack trace for all goroutines to the stderr. + if l.toStderr || l.alsoToStderr || s >= l.stderrThreshold.get() || alsoToStderr { + os.Stderr.Write(trace) } // Write the stack trace for all goroutines to the files. - trace := stacks(true) logExitFunc = func(error) {} // If we get a write error, we'll still exit below. for log := fatalLog; log >= infoLog; log-- { if f := l.file[log]; f != nil { // Can be nil if -logtostderr is set. @@ -1076,7 +1197,7 @@ func (lb logBridge) Write(b []byte) (n int, err error) { } // printWithFileLine with alsoToStderr=true, so standard log messages // always appear on standard error. - logging.printWithFileLine(severity(lb), file, line, true, text) + logging.printWithFileLine(severity(lb), logging.logr, file, line, true, text) return len(b), nil } @@ -1108,29 +1229,40 @@ func (l *loggingT) setV(pc uintptr) Level { // Verbose is a boolean type that implements Infof (like Printf) etc. // See the documentation of V for more information. -type Verbose bool +type Verbose struct { + enabled bool + logr logr.Logger +} + +func newVerbose(level Level, b bool) Verbose { + if logging.logr == nil { + return Verbose{b, nil} + } + return Verbose{b, logging.logr.V(int(level))} +} // V reports whether verbosity at the call site is at least the requested level. -// The returned value is a boolean of type Verbose, which implements Info, Infoln +// The returned value is a struct of type Verbose, which implements Info, Infoln // and Infof. These methods will write to the Info log if called. // Thus, one may write either -// if klog.V(2) { klog.Info("log this") } +// if glog.V(2).Enabled() { klog.Info("log this") } // or // klog.V(2).Info("log this") // The second form is shorter but the first is cheaper if logging is off because it does // not evaluate its arguments. // // Whether an individual call to V generates a log record depends on the setting of -// the -v and --vmodule flags; both are off by default. If the level in the call to -// V is at least the value of -v, or of -vmodule for the source file containing the -// call, the V call will log. +// the -v and -vmodule flags; both are off by default. The V call will log if its level +// is less than or equal to the value of the -v flag, or alternatively if its level is +// less than or equal to the value of the -vmodule pattern matching the source file +// containing the call. func V(level Level) Verbose { // This function tries hard to be cheap unless there's work to do. // The fast path is two atomic loads and compares. // Here is a cheap but safe test to see if V logging is enabled globally. if logging.verbosity.get() >= level { - return Verbose(true) + return newVerbose(level, true) } // It's off globally but it vmodule may still be set. @@ -1142,138 +1274,186 @@ func V(level Level) Verbose { logging.mu.Lock() defer logging.mu.Unlock() if runtime.Callers(2, logging.pcs[:]) == 0 { - return Verbose(false) + return newVerbose(level, false) } v, ok := logging.vmap[logging.pcs[0]] if !ok { v = logging.setV(logging.pcs[0]) } - return Verbose(v >= level) + return newVerbose(level, v >= level) } - return Verbose(false) + return newVerbose(level, false) +} + +// Enabled will return true if this log level is enabled, guarded by the value +// of v. +// See the documentation of V for usage. +func (v Verbose) Enabled() bool { + return v.enabled } // Info is equivalent to the global Info function, guarded by the value of v. // See the documentation of V for usage. func (v Verbose) Info(args ...interface{}) { - if v { - logging.print(infoLog, args...) + if v.enabled { + logging.print(infoLog, v.logr, args...) } } // Infoln is equivalent to the global Infoln function, guarded by the value of v. // See the documentation of V for usage. func (v Verbose) Infoln(args ...interface{}) { - if v { - logging.println(infoLog, args...) + if v.enabled { + logging.println(infoLog, v.logr, args...) } } // Infof is equivalent to the global Infof function, guarded by the value of v. // See the documentation of V for usage. func (v Verbose) Infof(format string, args ...interface{}) { - if v { - logging.printf(infoLog, format, args...) + if v.enabled { + logging.printf(infoLog, v.logr, format, args...) + } +} + +// InfoS is equivalent to the global InfoS function, guarded by the value of v. +// See the documentation of V for usage. +func (v Verbose) InfoS(msg string, keysAndValues ...interface{}) { + if v.enabled { + logging.infoS(v.logr, msg, keysAndValues...) + } +} + +// Error is equivalent to the global Error function, guarded by the value of v. +// See the documentation of V for usage. +func (v Verbose) Error(err error, msg string, args ...interface{}) { + if v.enabled { + logging.errorS(err, v.logr, msg, args...) } } // Info logs to the INFO log. // Arguments are handled in the manner of fmt.Print; a newline is appended if missing. func Info(args ...interface{}) { - logging.print(infoLog, args...) + logging.print(infoLog, logging.logr, args...) } // InfoDepth acts as Info but uses depth to determine which call frame to log. // InfoDepth(0, "msg") is the same as Info("msg"). func InfoDepth(depth int, args ...interface{}) { - logging.printDepth(infoLog, depth, args...) + logging.printDepth(infoLog, logging.logr, depth, args...) } // Infoln logs to the INFO log. // Arguments are handled in the manner of fmt.Println; a newline is always appended. func Infoln(args ...interface{}) { - logging.println(infoLog, args...) + logging.println(infoLog, logging.logr, args...) } // Infof logs to the INFO log. // Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. func Infof(format string, args ...interface{}) { - logging.printf(infoLog, format, args...) + logging.printf(infoLog, logging.logr, format, args...) +} + +// InfoS structured logs to the INFO log. +// The msg argument used to add constant description to the log line. +// The key/value pairs would be join by "=" ; a newline is always appended. +// +// Basic examples: +// >> klog.InfoS("Pod status updated", "pod", "kubedns", "status", "ready") +// output: +// >> I1025 00:15:15.525108 1 controller_utils.go:116] "Pod status updated" pod="kubedns" status="ready" +func InfoS(msg string, keysAndValues ...interface{}) { + logging.infoS(logging.logr, msg, keysAndValues...) } // Warning logs to the WARNING and INFO logs. // Arguments are handled in the manner of fmt.Print; a newline is appended if missing. func Warning(args ...interface{}) { - logging.print(warningLog, args...) + logging.print(warningLog, logging.logr, args...) } // WarningDepth acts as Warning but uses depth to determine which call frame to log. // WarningDepth(0, "msg") is the same as Warning("msg"). func WarningDepth(depth int, args ...interface{}) { - logging.printDepth(warningLog, depth, args...) + logging.printDepth(warningLog, logging.logr, depth, args...) } // Warningln logs to the WARNING and INFO logs. // Arguments are handled in the manner of fmt.Println; a newline is always appended. func Warningln(args ...interface{}) { - logging.println(warningLog, args...) + logging.println(warningLog, logging.logr, args...) } // Warningf logs to the WARNING and INFO logs. // Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. func Warningf(format string, args ...interface{}) { - logging.printf(warningLog, format, args...) + logging.printf(warningLog, logging.logr, format, args...) } // Error logs to the ERROR, WARNING, and INFO logs. // Arguments are handled in the manner of fmt.Print; a newline is appended if missing. func Error(args ...interface{}) { - logging.print(errorLog, args...) + logging.print(errorLog, logging.logr, args...) } // ErrorDepth acts as Error but uses depth to determine which call frame to log. // ErrorDepth(0, "msg") is the same as Error("msg"). func ErrorDepth(depth int, args ...interface{}) { - logging.printDepth(errorLog, depth, args...) + logging.printDepth(errorLog, logging.logr, depth, args...) } // Errorln logs to the ERROR, WARNING, and INFO logs. // Arguments are handled in the manner of fmt.Println; a newline is always appended. func Errorln(args ...interface{}) { - logging.println(errorLog, args...) + logging.println(errorLog, logging.logr, args...) } // Errorf logs to the ERROR, WARNING, and INFO logs. // Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. func Errorf(format string, args ...interface{}) { - logging.printf(errorLog, format, args...) + logging.printf(errorLog, logging.logr, format, args...) +} + +// ErrorS structured logs to the ERROR, WARNING, and INFO logs. +// the err argument used as "err" field of log line. +// The msg argument used to add constant description to the log line. +// The key/value pairs would be join by "=" ; a newline is always appended. +// +// Basic examples: +// >> klog.ErrorS(err, "Failed to update pod status") +// output: +// >> E1025 00:15:15.525108 1 controller_utils.go:114] "Failed to update pod status" err="timeout" +func ErrorS(err error, msg string, keysAndValues ...interface{}) { + logging.errorS(err, logging.logr, msg, keysAndValues...) } // Fatal logs to the FATAL, ERROR, WARNING, and INFO logs, // including a stack trace of all running goroutines, then calls os.Exit(255). // Arguments are handled in the manner of fmt.Print; a newline is appended if missing. func Fatal(args ...interface{}) { - logging.print(fatalLog, args...) + logging.print(fatalLog, logging.logr, args...) } // FatalDepth acts as Fatal but uses depth to determine which call frame to log. // FatalDepth(0, "msg") is the same as Fatal("msg"). func FatalDepth(depth int, args ...interface{}) { - logging.printDepth(fatalLog, depth, args...) + logging.printDepth(fatalLog, logging.logr, depth, args...) } // Fatalln logs to the FATAL, ERROR, WARNING, and INFO logs, // including a stack trace of all running goroutines, then calls os.Exit(255). // Arguments are handled in the manner of fmt.Println; a newline is always appended. func Fatalln(args ...interface{}) { - logging.println(fatalLog, args...) + logging.println(fatalLog, logging.logr, args...) } // Fatalf logs to the FATAL, ERROR, WARNING, and INFO logs, // including a stack trace of all running goroutines, then calls os.Exit(255). // Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. func Fatalf(format string, args ...interface{}) { - logging.printf(fatalLog, format, args...) + logging.printf(fatalLog, logging.logr, format, args...) } // fatalNoStacks is non-zero if we are to exit without dumping goroutine stacks. @@ -1284,25 +1464,62 @@ var fatalNoStacks uint32 // Arguments are handled in the manner of fmt.Print; a newline is appended if missing. func Exit(args ...interface{}) { atomic.StoreUint32(&fatalNoStacks, 1) - logging.print(fatalLog, args...) + logging.print(fatalLog, logging.logr, args...) } // ExitDepth acts as Exit but uses depth to determine which call frame to log. // ExitDepth(0, "msg") is the same as Exit("msg"). func ExitDepth(depth int, args ...interface{}) { atomic.StoreUint32(&fatalNoStacks, 1) - logging.printDepth(fatalLog, depth, args...) + logging.printDepth(fatalLog, logging.logr, depth, args...) } // Exitln logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). func Exitln(args ...interface{}) { atomic.StoreUint32(&fatalNoStacks, 1) - logging.println(fatalLog, args...) + logging.println(fatalLog, logging.logr, args...) } // Exitf logs to the FATAL, ERROR, WARNING, and INFO logs, then calls os.Exit(1). // Arguments are handled in the manner of fmt.Printf; a newline is appended if missing. func Exitf(format string, args ...interface{}) { atomic.StoreUint32(&fatalNoStacks, 1) - logging.printf(fatalLog, format, args...) + logging.printf(fatalLog, logging.logr, format, args...) +} + +// ObjectRef references a kubernetes object +type ObjectRef struct { + Name string `json:"name"` + Namespace string `json:"namespace,omitempty"` +} + +func (ref ObjectRef) String() string { + if ref.Namespace != "" { + return fmt.Sprintf("%s/%s", ref.Namespace, ref.Name) + } + return ref.Name +} + +// KMetadata is a subset of the kubernetes k8s.io/apimachinery/pkg/apis/meta/v1.Object interface +// this interface may expand in the future, but will always be a subset of the +// kubernetes k8s.io/apimachinery/pkg/apis/meta/v1.Object interface +type KMetadata interface { + GetName() string + GetNamespace() string +} + +// KObj returns ObjectRef from ObjectMeta +func KObj(obj KMetadata) ObjectRef { + return ObjectRef{ + Name: obj.GetName(), + Namespace: obj.GetNamespace(), + } +} + +// KRef returns ObjectRef from name and namespace +func KRef(namespace, name string) ObjectRef { + return ObjectRef{ + Name: name, + Namespace: namespace, + } } diff --git a/vendor/k8s.io/klog/klog_file.go b/vendor/k8s.io/klog/v2/klog_file.go similarity index 77% rename from vendor/k8s.io/klog/klog_file.go rename to vendor/k8s.io/klog/v2/klog_file.go index e4010ad4d..de830d922 100644 --- a/vendor/k8s.io/klog/klog_file.go +++ b/vendor/k8s.io/klog/v2/klog_file.go @@ -24,6 +24,7 @@ import ( "os" "os/user" "path/filepath" + "runtime" "strings" "sync" "time" @@ -43,25 +44,49 @@ func createLogDirs() { } var ( - pid = os.Getpid() - program = filepath.Base(os.Args[0]) - host = "unknownhost" - userName = "unknownuser" + pid = os.Getpid() + program = filepath.Base(os.Args[0]) + host = "unknownhost" + userName = "unknownuser" + userNameOnce sync.Once ) func init() { - h, err := os.Hostname() - if err == nil { + if h, err := os.Hostname(); err == nil { host = shortHostname(h) } +} - current, err := user.Current() - if err == nil { - userName = current.Username - } +func getUserName() string { + userNameOnce.Do(func() { + // On Windows, the Go 'user' package requires netapi32.dll. + // This affects Windows Nano Server: + // https://github.com/golang/go/issues/21867 + // Fallback to using environment variables. + if runtime.GOOS == "windows" { + u := os.Getenv("USERNAME") + if len(u) == 0 { + return + } + // Sanitize the USERNAME since it may contain filepath separators. + u = strings.Replace(u, `\`, "_", -1) - // Sanitize userName since it may contain filepath separators on Windows. - userName = strings.Replace(userName, `\`, "_", -1) + // user.Current().Username normally produces something like 'USERDOMAIN\USERNAME' + d := os.Getenv("USERDOMAIN") + if len(d) != 0 { + userName = d + "_" + u + } else { + userName = u + } + } else { + current, err := user.Current() + if err == nil { + userName = current.Username + } + } + }) + + return userName } // shortHostname returns its argument, truncating at the first period. @@ -79,7 +104,7 @@ func logName(tag string, t time.Time) (name, link string) { name = fmt.Sprintf("%s.%s.%s.log.%s.%04d%02d%02d-%02d%02d%02d.%d", program, host, - userName, + getUserName(), tag, t.Year(), t.Month(), diff --git a/vendor/k8s.io/kubernetes/build/README.md b/vendor/k8s.io/kubernetes/build/README.md index 81fc95ad5..db21897f4 100644 --- a/vendor/k8s.io/kubernetes/build/README.md +++ b/vendor/k8s.io/kubernetes/build/README.md @@ -6,8 +6,9 @@ Building Kubernetes is easy if you take advantage of the containerized build env 1. Docker, using one of the following configurations: * **macOS** You can either use Docker for Mac or docker-machine. See installation instructions [here](https://docs.docker.com/docker-for-mac/). - **Note**: You will want to set the Docker VM to have at least 4.5GB of initial memory or building will likely fail. (See: [#11852]( http://issue.k8s.io/11852)). + **Note**: You will want to set the Docker VM to have at least 8GB of initial memory or building will likely fail. (See: [#11852]( http://issue.k8s.io/11852)). * **Linux with local Docker** Install Docker according to the [instructions](https://docs.docker.com/installation/#installation) for your OS. + * **Windows with Docker Desktop WSL2 backend** Install Docker according to the [instructions](https://docs.docker.com/docker-for-windows/wsl-tech-preview/). Be sure to store your sources in the local Linux file system, not the Windows remote mount at `/mnt/c`. * **Remote Docker engine** Use a big machine in the cloud to build faster. This is a little trickier so look at the section later on. 2. **Optional** [Google Cloud SDK](https://developers.google.com/cloud/sdk/) @@ -23,7 +24,7 @@ The following scripts are found in the [`build/`](.) directory. Note that all sc * [`build/run.sh`](run.sh): Run a command in a build docker container. Common invocations: * `build/run.sh make`: Build just linux binaries in the container. Pass options and packages as necessary. - * `build/run.sh make cross`: Build all binaries for all platforms + * `build/run.sh make cross`: Build all binaries for all platforms. To build only a specific platform, add `KUBE_BUILD_PLATFORMS=/` * `build/run.sh make kubectl KUBE_BUILD_PLATFORMS=darwin/amd64`: Build the specific binary for the specific platform (`kubectl` and `darwin/amd64` respectively in this example) * `build/run.sh make test`: Run all unit tests * `build/run.sh make test-integration`: Run integration test @@ -34,7 +35,7 @@ The following scripts are found in the [`build/`](.) directory. Note that all sc ## Basic Flow -The scripts directly under [`build/`](.) are used to build and test. They will ensure that the `kube-build` Docker image is built (based on [`build/build-image/Dockerfile`](build-image/Dockerfile)) and then execute the appropriate command in that container. These scripts will both ensure that the right data is cached from run to run for incremental builds and will copy the results back out of the container. +The scripts directly under [`build/`](.) are used to build and test. They will ensure that the `kube-build` Docker image is built (based on [`build/build-image/Dockerfile`](build-image/Dockerfile) and after base image's `KUBE_BUILD_IMAGE_CROSS_TAG` from Dockerfile is replaced with one of those actual tags of the base image, like `v1.13.9-2`) and then execute the appropriate command in that container. These scripts will both ensure that the right data is cached from run to run for incremental builds and will copy the results back out of the container. The `kube-build` container image is built by first creating a "context" directory in `_output/images/build-image`. It is done there instead of at the root of the Kubernetes repo to minimize the amount of data we need to package up when building the image. diff --git a/vendor/k8s.io/kubernetes/go.mod b/vendor/k8s.io/kubernetes/go.mod index 8cb8719ab..268098466 100644 --- a/vendor/k8s.io/kubernetes/go.mod +++ b/vendor/k8s.io/kubernetes/go.mod @@ -1,4 +1,6 @@ // This is a generated file. Do not edit directly. +// Ensure you've carefully read +// https://git.k8s.io/community/contributors/devel/sig-architecture/vendor.md // Run hack/pin-dependency.sh to change pinned dependency versions. // Run hack/update-vendor.sh to update go.mod files and the vendor directory. @@ -8,52 +10,40 @@ go 1.13 require ( bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 - github.com/Azure/azure-sdk-for-go v35.0.0+incompatible - github.com/Azure/go-autorest/autorest v0.9.0 - github.com/Azure/go-autorest/autorest/adal v0.5.0 + github.com/Azure/azure-sdk-for-go v43.0.0+incompatible + github.com/Azure/go-autorest/autorest v0.9.6 + github.com/Azure/go-autorest/autorest/adal v0.8.2 github.com/Azure/go-autorest/autorest/to v0.2.0 - github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534 + github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317 github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab - github.com/Microsoft/go-winio v0.4.14 - github.com/Microsoft/hcsshim v0.0.0-20190417211021-672e52e9209d + github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 + github.com/Microsoft/hcsshim v0.8.9 github.com/PuerkitoBio/purell v1.1.1 - github.com/Rican7/retry v0.1.0 // indirect github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7 // indirect github.com/aws/aws-sdk-go v1.28.2 - github.com/bazelbuild/bazel-gazelle v0.19.1-0.20191105222053-70208cbdc798 - github.com/bazelbuild/buildtools v0.0.0-20190917191645-69366ca98f89 github.com/blang/semver v3.5.0+incompatible github.com/boltdb/bolt v1.3.1 // indirect github.com/caddyserver/caddy v1.0.3 - github.com/cespare/prettybench v0.0.0-20150116022406-03b8cfe5406c - github.com/checkpoint-restore/go-criu v0.0.0-20181120144056-17b0214f6c48 // indirect - github.com/cilium/ebpf v0.0.0-20191025125908-95b36a581eed // indirect - github.com/client9/misspell v0.3.4 github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313 github.com/codegangsta/negroni v1.0.0 // indirect github.com/container-storage-interface/spec v1.2.0 - github.com/containerd/console v0.0.0-20170925154832-84eeaae905fa // indirect - github.com/containerd/containerd v1.0.2 // indirect - github.com/containerd/typeurl v0.0.0-20190228175220-2a93cfde8c20 // indirect github.com/containernetworking/cni v0.7.1 - github.com/coredns/corefile-migration v1.0.6 + github.com/coredns/corefile-migration v1.0.8 github.com/coreos/go-oidc v2.1.0+incompatible github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e - github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea + github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f github.com/cpuguy83/go-md2man v1.0.10 github.com/cyphar/filepath-securejoin v0.2.2 // indirect github.com/davecgh/go-spew v1.1.1 github.com/docker/distribution v2.7.1+incompatible - github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0 + github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c github.com/docker/go-connections v0.3.0 github.com/docker/go-units v0.4.0 - github.com/docker/libnetwork v0.8.0-dev.2.0.20190925143933-c8a5fca4a652 github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 github.com/emicklei/go-restful v2.9.5+incompatible - github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect github.com/evanphx/json-patch v4.2.0+incompatible - github.com/fsnotify/fsnotify v1.4.7 + github.com/fsnotify/fsnotify v1.4.9 github.com/go-bindata/go-bindata v3.1.1+incompatible github.com/go-openapi/analysis v0.19.5 github.com/go-openapi/loads v0.19.4 @@ -61,83 +51,68 @@ require ( github.com/go-openapi/strfmt v0.19.3 github.com/go-openapi/validate v0.19.5 github.com/go-ozzo/ozzo-validation v3.5.0+incompatible // indirect - github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f // indirect github.com/gogo/protobuf v1.3.1 - github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 + github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 github.com/golang/mock v1.3.1 - github.com/google/cadvisor v0.35.0 - github.com/google/go-cmp v0.3.0 + github.com/google/cadvisor v0.36.1-0.20200513160741-6a8d61401ea9 + github.com/google/go-cmp v0.4.0 github.com/google/gofuzz v1.1.0 github.com/google/uuid v1.1.1 - github.com/googleapis/gnostic v0.1.0 + github.com/googleapis/gnostic v0.4.1 github.com/gorilla/context v1.1.1 // indirect - github.com/gorilla/mux v1.7.0 // indirect github.com/hashicorp/golang-lru v0.5.1 github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6 // indirect - github.com/json-iterator/go v1.1.8 - github.com/karrick/godirwalk v1.7.5 // indirect + github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5 + github.com/json-iterator/go v1.1.9 github.com/libopenstorage/openstorage v1.0.0 github.com/lithammer/dedent v1.1.0 github.com/lpabon/godbc v0.1.1 // indirect - github.com/mattn/go-shellwords v1.0.5 // indirect - github.com/mesos/mesos-go v0.0.9 // indirect + github.com/magiconair/properties v1.8.1 // indirect github.com/miekg/dns v1.1.4 - github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989 // indirect - github.com/mistifyio/go-zfs v2.1.1+incompatible // indirect + github.com/moby/ipvs v1.0.1 github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb // indirect - github.com/morikuni/aec v1.0.0 // indirect - github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618 // indirect + github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 github.com/mvdan/xurls v1.1.0 github.com/onsi/ginkgo v1.11.0 github.com/onsi/gomega v1.7.0 github.com/opencontainers/go-digest v1.0.0-rc1 - github.com/opencontainers/image-spec v1.0.1 // indirect github.com/opencontainers/runc v1.0.0-rc10 - github.com/opencontainers/runtime-spec v1.0.0 // indirect - github.com/opencontainers/selinux v1.3.1-0.20190929122143-5215b1806f52 - github.com/pkg/errors v0.8.1 + github.com/opencontainers/selinux v1.3.3 + github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib v1.0.0 - github.com/pquerna/ffjson v0.0.0-20180717144149-af8b230fcd20 // indirect - github.com/prometheus/client_golang v1.0.0 + github.com/prometheus/client_golang v1.6.0 github.com/prometheus/client_model v0.2.0 - github.com/prometheus/common v0.4.1 + github.com/prometheus/common v0.9.1 github.com/quobyte/api v0.1.2 github.com/robfig/cron v1.1.0 github.com/seccomp/libseccomp-golang v0.9.1 // indirect - github.com/smartystreets/goconvey v1.6.4 // indirect github.com/spf13/afero v1.2.2 - github.com/spf13/cobra v0.0.5 + github.com/spf13/cobra v1.0.0 github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 - github.com/spf13/viper v1.3.2 + github.com/spf13/viper v1.4.0 github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc github.com/stretchr/testify v1.4.0 - github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2 // indirect github.com/thecodeteam/goscaleio v0.1.0 github.com/urfave/negroni v1.0.0 // indirect - github.com/vishvananda/netlink v1.0.0 - github.com/vishvananda/netns v0.0.0-20171111001504-be1fbeda1936 // indirect + github.com/vishvananda/netlink v1.1.0 github.com/vmware/govmomi v0.20.3 - go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 + go.etcd.io/etcd v0.5.0-alpha.5.0.20200401174654-e694b7bb0875 golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 - golang.org/x/lint v0.0.0-20190409202823-959b441ac422 - golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 - golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 - golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7 - golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 - golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72 + golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e + golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 + golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f + golang.org/x/time v0.0.0-20191024005414-555d28b269f0 + golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4 gonum.org/v1/gonum v0.6.2 gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e // indirect - google.golang.org/api v0.6.1-0.20190607001116-5213b8090861 + google.golang.org/api v0.15.1 google.golang.org/grpc v1.26.0 gopkg.in/gcfg.v1 v1.2.0 gopkg.in/square/go-jose.v2 v2.2.2 gopkg.in/yaml.v2 v2.2.8 - gotest.tools v2.2.0+incompatible - gotest.tools/gotestsum v0.3.5 - honnef.co/go/tools v0.0.1-2019.2.2 k8s.io/api v0.0.0 k8s.io/apiextensions-apiserver v0.0.0 k8s.io/apimachinery v0.0.0 @@ -150,97 +125,101 @@ require ( k8s.io/component-base v0.0.0 k8s.io/cri-api v0.0.0 k8s.io/csi-translation-lib v0.0.0 - k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 + k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 k8s.io/heapster v1.2.0-beta.1 - k8s.io/klog v1.0.0 + k8s.io/klog/v2 v2.1.0 k8s.io/kube-aggregator v0.0.0 k8s.io/kube-controller-manager v0.0.0 - k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c + k8s.io/kube-openapi v0.0.0-20200427153329-656914f816f9 k8s.io/kube-proxy v0.0.0 k8s.io/kube-scheduler v0.0.0 k8s.io/kubectl v0.0.0 k8s.io/kubelet v0.0.0 k8s.io/legacy-cloud-providers v0.0.0 k8s.io/metrics v0.0.0 - k8s.io/repo-infra v0.0.1-alpha.1 k8s.io/sample-apiserver v0.0.0 - k8s.io/system-validators v1.0.4 - k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 + k8s.io/system-validators v1.1.2 + k8s.io/utils v0.0.0-20200414100711-2df71ebbae66 sigs.k8s.io/kustomize v2.0.3+incompatible sigs.k8s.io/yaml v1.2.0 ) replace ( bitbucket.org/bertimus9/systemstat => bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690 - cloud.google.com/go => cloud.google.com/go v0.38.0 - github.com/Azure/azure-sdk-for-go => github.com/Azure/azure-sdk-for-go v35.0.0+incompatible + cloud.google.com/go => cloud.google.com/go v0.51.0 + cloud.google.com/go/bigquery => cloud.google.com/go/bigquery v1.0.1 + cloud.google.com/go/datastore => cloud.google.com/go/datastore v1.0.0 + cloud.google.com/go/pubsub => cloud.google.com/go/pubsub v1.0.1 + cloud.google.com/go/storage => cloud.google.com/go/storage v1.0.0 + dmitri.shuralyov.com/gpu/mtl => dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 + github.com/Azure/azure-sdk-for-go => github.com/Azure/azure-sdk-for-go v43.0.0+incompatible github.com/Azure/go-ansiterm => github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 - github.com/Azure/go-autorest/autorest => github.com/Azure/go-autorest/autorest v0.9.0 - github.com/Azure/go-autorest/autorest/adal => github.com/Azure/go-autorest/autorest/adal v0.5.0 - github.com/Azure/go-autorest/autorest/date => github.com/Azure/go-autorest/autorest/date v0.1.0 - github.com/Azure/go-autorest/autorest/mocks => github.com/Azure/go-autorest/autorest/mocks v0.2.0 + github.com/Azure/go-autorest/autorest => github.com/Azure/go-autorest/autorest v0.9.6 + github.com/Azure/go-autorest/autorest/adal => github.com/Azure/go-autorest/autorest/adal v0.8.2 + github.com/Azure/go-autorest/autorest/date => github.com/Azure/go-autorest/autorest/date v0.2.0 + github.com/Azure/go-autorest/autorest/mocks => github.com/Azure/go-autorest/autorest/mocks v0.3.0 github.com/Azure/go-autorest/autorest/to => github.com/Azure/go-autorest/autorest/to v0.2.0 github.com/Azure/go-autorest/autorest/validation => github.com/Azure/go-autorest/autorest/validation v0.1.0 github.com/Azure/go-autorest/logger => github.com/Azure/go-autorest/logger v0.1.0 github.com/Azure/go-autorest/tracing => github.com/Azure/go-autorest/tracing v0.5.0 github.com/BurntSushi/toml => github.com/BurntSushi/toml v0.3.1 github.com/BurntSushi/xgb => github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 - github.com/GoogleCloudPlatform/k8s-cloud-provider => github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20190822182118-27a4ced34534 + github.com/GoogleCloudPlatform/k8s-cloud-provider => github.com/GoogleCloudPlatform/k8s-cloud-provider v0.0.0-20200415212048-7901bc822317 github.com/JeffAshton/win_pdh => github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab github.com/MakeNowJust/heredoc => github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd - github.com/Microsoft/go-winio => github.com/Microsoft/go-winio v0.4.14 - github.com/Microsoft/hcsshim => github.com/Microsoft/hcsshim v0.0.0-20190417211021-672e52e9209d + github.com/Microsoft/go-winio => github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 + github.com/Microsoft/hcsshim => github.com/Microsoft/hcsshim v0.8.9 github.com/NYTimes/gziphandler => github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46 - github.com/OpenPeeDeeP/depguard => github.com/OpenPeeDeeP/depguard v1.0.1 github.com/PuerkitoBio/purell => github.com/PuerkitoBio/purell v1.1.1 github.com/PuerkitoBio/urlesc => github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 - github.com/Rican7/retry => github.com/Rican7/retry v0.1.0 - github.com/StackExchange/wmi => github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 github.com/agnivade/levenshtein => github.com/agnivade/levenshtein v1.0.1 github.com/ajstarks/svgo => github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af - github.com/alecthomas/template => github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc - github.com/alecthomas/units => github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf + github.com/alecthomas/template => github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 + github.com/alecthomas/units => github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4 github.com/andreyvit/diff => github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 - github.com/anmitsu/go-shlex => github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 github.com/armon/circbuf => github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e github.com/armon/consul-api => github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 github.com/asaskevich/govalidator => github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a github.com/auth0/go-jwt-middleware => github.com/auth0/go-jwt-middleware v0.0.0-20170425171159-5493cabe49f7 github.com/aws/aws-sdk-go => github.com/aws/aws-sdk-go v1.28.2 - github.com/bazelbuild/bazel-gazelle => github.com/bazelbuild/bazel-gazelle v0.19.1-0.20191105222053-70208cbdc798 - github.com/bazelbuild/buildtools => github.com/bazelbuild/buildtools v0.0.0-20190917191645-69366ca98f89 - github.com/bazelbuild/rules_go => github.com/bazelbuild/rules_go v0.0.0-20190719190356-6dae44dc5cab - github.com/beorn7/perks => github.com/beorn7/perks v1.0.0 + github.com/beorn7/perks => github.com/beorn7/perks v1.0.1 github.com/bgentry/speakeasy => github.com/bgentry/speakeasy v0.1.0 github.com/bifurcation/mint => github.com/bifurcation/mint v0.0.0-20180715133206-93c51c6ce115 github.com/blang/semver => github.com/blang/semver v3.5.0+incompatible github.com/boltdb/bolt => github.com/boltdb/bolt v1.3.1 - github.com/bradfitz/go-smtpd => github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625 github.com/caddyserver/caddy => github.com/caddyserver/caddy v1.0.3 github.com/cenkalti/backoff => github.com/cenkalti/backoff v2.1.1+incompatible github.com/census-instrumentation/opencensus-proto => github.com/census-instrumentation/opencensus-proto v0.2.1 - github.com/cespare/prettybench => github.com/cespare/prettybench v0.0.0-20150116022406-03b8cfe5406c + github.com/cespare/xxhash/v2 => github.com/cespare/xxhash/v2 v2.1.1 github.com/chai2010/gettext-go => github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 - github.com/checkpoint-restore/go-criu => github.com/checkpoint-restore/go-criu v0.0.0-20181120144056-17b0214f6c48 // 17b0214f6c48 is the SHA for git tag 3.11 + github.com/checkpoint-restore/go-criu => github.com/checkpoint-restore/go-criu v0.0.0-20190109184317-bdb7599cd87b github.com/cheekybits/genny => github.com/cheekybits/genny v0.0.0-20170328200008-9127e812e1e9 - github.com/cilium/ebpf => github.com/cilium/ebpf v0.0.0-20191025125908-95b36a581eed - github.com/client9/misspell => github.com/client9/misspell v0.3.4 + github.com/chzyer/logex => github.com/chzyer/logex v1.1.10 + github.com/chzyer/readline => github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e + github.com/chzyer/test => github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 + github.com/cilium/ebpf => github.com/cilium/ebpf v0.0.0-20191113100448-d9fb101ca1fb github.com/clusterhq/flocker-go => github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313 github.com/cockroachdb/datadriven => github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa github.com/codegangsta/negroni => github.com/codegangsta/negroni v1.0.0 github.com/container-storage-interface/spec => github.com/container-storage-interface/spec v1.2.0 - github.com/containerd/console => github.com/containerd/console v0.0.0-20170925154832-84eeaae905fa - github.com/containerd/containerd => github.com/containerd/containerd v1.0.2 - github.com/containerd/typeurl => github.com/containerd/typeurl v0.0.0-20190228175220-2a93cfde8c20 + github.com/containerd/cgroups => github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f + github.com/containerd/console => github.com/containerd/console v1.0.0 + github.com/containerd/containerd => github.com/containerd/containerd v1.3.3 + github.com/containerd/continuity => github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc + github.com/containerd/fifo => github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448 + github.com/containerd/go-runc => github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3 + github.com/containerd/ttrpc => github.com/containerd/ttrpc v1.0.0 + github.com/containerd/typeurl => github.com/containerd/typeurl v1.0.0 github.com/containernetworking/cni => github.com/containernetworking/cni v0.7.1 - github.com/coredns/corefile-migration => github.com/coredns/corefile-migration v1.0.6 + github.com/coredns/corefile-migration => github.com/coredns/corefile-migration v1.0.8 + github.com/coreos/bbolt => github.com/coreos/bbolt v1.3.2 github.com/coreos/etcd => github.com/coreos/etcd v3.3.10+incompatible - github.com/coreos/go-etcd => github.com/coreos/go-etcd v2.0.0+incompatible github.com/coreos/go-oidc => github.com/coreos/go-oidc v2.1.0+incompatible github.com/coreos/go-semver => github.com/coreos/go-semver v0.3.0 github.com/coreos/go-systemd => github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e - github.com/coreos/pkg => github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea // 97fdf19511ea is the SHA for git tag v4 + github.com/coreos/pkg => github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f github.com/cpuguy83/go-md2man => github.com/cpuguy83/go-md2man v1.0.10 + github.com/cpuguy83/go-md2man/v2 => github.com/cpuguy83/go-md2man/v2 v2.0.0 github.com/creack/pty => github.com/creack/pty v1.1.7 github.com/cyphar/filepath-securejoin => github.com/cyphar/filepath-securejoin v0.2.2 github.com/davecgh/go-spew => github.com/davecgh/go-spew v1.1.1 @@ -248,11 +227,11 @@ replace ( github.com/dgrijalva/jwt-go => github.com/dgrijalva/jwt-go v3.2.0+incompatible github.com/dnaeon/go-vcr => github.com/dnaeon/go-vcr v1.0.1 github.com/docker/distribution => github.com/docker/distribution v2.7.1+incompatible - github.com/docker/docker => github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0 + github.com/docker/docker => github.com/docker/docker v1.4.2-0.20200309214505-aa6a9891b09c github.com/docker/go-connections => github.com/docker/go-connections v0.3.0 github.com/docker/go-units => github.com/docker/go-units v0.4.0 - github.com/docker/libnetwork => github.com/docker/libnetwork v0.8.0-dev.2.0.20190925143933-c8a5fca4a652 github.com/docker/spdystream => github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96 + github.com/docopt/docopt-go => github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 github.com/dustin/go-humanize => github.com/dustin/go-humanize v1.0.0 github.com/elazarl/goproxy => github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 // 947c36da3153 is the SHA for git tag v1.11 github.com/emicklei/go-restful => github.com/emicklei/go-restful v2.9.5+incompatible @@ -265,17 +244,15 @@ replace ( github.com/fatih/color => github.com/fatih/color v1.7.0 github.com/flynn/go-shlex => github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 github.com/fogleman/gg => github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90 - github.com/fsnotify/fsnotify => github.com/fsnotify/fsnotify v1.4.7 + github.com/fsnotify/fsnotify => github.com/fsnotify/fsnotify v1.4.9 github.com/ghodss/yaml => github.com/ghodss/yaml v1.0.0 - github.com/gliderlabs/ssh => github.com/gliderlabs/ssh v0.1.1 github.com/go-acme/lego => github.com/go-acme/lego v2.5.0+incompatible github.com/go-bindata/go-bindata => github.com/go-bindata/go-bindata v3.1.1+incompatible - github.com/go-critic/go-critic => github.com/go-critic/go-critic v0.3.5-0.20190526074819-1df300866540 - github.com/go-kit/kit => github.com/go-kit/kit v0.8.0 - github.com/go-lintpack/lintpack => github.com/go-lintpack/lintpack v0.5.2 - github.com/go-logfmt/logfmt => github.com/go-logfmt/logfmt v0.3.0 + github.com/go-gl/glfw/v3.3/glfw => github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72 + github.com/go-ini/ini => github.com/go-ini/ini v1.9.0 + github.com/go-kit/kit => github.com/go-kit/kit v0.9.0 + github.com/go-logfmt/logfmt => github.com/go-logfmt/logfmt v0.4.0 github.com/go-logr/logr => github.com/go-logr/logr v0.1.0 - github.com/go-ole/go-ole => github.com/go-ole/go-ole v1.2.1 github.com/go-openapi/analysis => github.com/go-openapi/analysis v0.19.5 github.com/go-openapi/errors => github.com/go-openapi/errors v0.19.2 github.com/go-openapi/jsonpointer => github.com/go-openapi/jsonpointer v0.19.3 @@ -288,61 +265,31 @@ replace ( github.com/go-openapi/validate => github.com/go-openapi/validate v0.19.5 github.com/go-ozzo/ozzo-validation => github.com/go-ozzo/ozzo-validation v3.5.0+incompatible github.com/go-stack/stack => github.com/go-stack/stack v1.8.0 - github.com/go-toolsmith/astcast => github.com/go-toolsmith/astcast v1.0.0 - github.com/go-toolsmith/astcopy => github.com/go-toolsmith/astcopy v1.0.0 - github.com/go-toolsmith/astequal => github.com/go-toolsmith/astequal v1.0.0 - github.com/go-toolsmith/astfmt => github.com/go-toolsmith/astfmt v1.0.0 - github.com/go-toolsmith/astinfo => github.com/go-toolsmith/astinfo v0.0.0-20180906194353-9809ff7efb21 - github.com/go-toolsmith/astp => github.com/go-toolsmith/astp v1.0.0 - github.com/go-toolsmith/pkgload => github.com/go-toolsmith/pkgload v1.0.0 - github.com/go-toolsmith/strparse => github.com/go-toolsmith/strparse v1.0.0 - github.com/go-toolsmith/typep => github.com/go-toolsmith/typep v1.0.0 - github.com/gobwas/glob => github.com/gobwas/glob v0.2.3 - github.com/godbus/dbus => github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f + github.com/godbus/dbus => github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e github.com/gogo/protobuf => github.com/gogo/protobuf v1.3.1 github.com/golang/freetype => github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 github.com/golang/glog => github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/groupcache => github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903 + github.com/golang/groupcache => github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 github.com/golang/mock => github.com/golang/mock v1.3.1 - github.com/golang/protobuf => github.com/golang/protobuf v1.3.2 - github.com/golangci/check => github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 - github.com/golangci/dupl => github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a - github.com/golangci/errcheck => github.com/golangci/errcheck v0.0.0-20181223084120-ef45e06d44b6 - github.com/golangci/go-misc => github.com/golangci/go-misc v0.0.0-20180628070357-927a3d87b613 - github.com/golangci/go-tools => github.com/golangci/go-tools v0.0.0-20190318055746-e32c54105b7c - github.com/golangci/goconst => github.com/golangci/goconst v0.0.0-20180610141641-041c5f2b40f3 - github.com/golangci/gocyclo => github.com/golangci/gocyclo v0.0.0-20180528134321-2becd97e67ee - github.com/golangci/gofmt => github.com/golangci/gofmt v0.0.0-20181222123516-0b8337e80d98 - github.com/golangci/golangci-lint => github.com/golangci/golangci-lint v1.18.0 - github.com/golangci/gosec => github.com/golangci/gosec v0.0.0-20190211064107-66fb7fc33547 - github.com/golangci/ineffassign => github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc - github.com/golangci/lint-1 => github.com/golangci/lint-1 v0.0.0-20190420132249-ee948d087217 - github.com/golangci/maligned => github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca - github.com/golangci/misspell => github.com/golangci/misspell v0.0.0-20180809174111-950f5d19e770 - github.com/golangci/prealloc => github.com/golangci/prealloc v0.0.0-20180630174525-215b22d4de21 - github.com/golangci/revgrep => github.com/golangci/revgrep v0.0.0-20180526074752-d9c87f5ffaf0 - github.com/golangci/unconvert => github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 + github.com/golang/protobuf => github.com/golang/protobuf v1.4.2 github.com/golangplus/bytes => github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450 github.com/golangplus/fmt => github.com/golangplus/fmt v0.0.0-20150411045040-2a5d6d7d2995 github.com/golangplus/testing => github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e github.com/google/btree => github.com/google/btree v1.0.0 - github.com/google/cadvisor => github.com/google/cadvisor v0.35.0 - github.com/google/go-cmp => github.com/google/go-cmp v0.3.0 - github.com/google/go-github => github.com/google/go-github v17.0.0+incompatible - github.com/google/go-querystring => github.com/google/go-querystring v1.0.0 + github.com/google/cadvisor => github.com/google/cadvisor v0.36.1-0.20200513160741-6a8d61401ea9 + github.com/google/go-cmp => github.com/google/go-cmp v0.4.0 github.com/google/gofuzz => github.com/google/gofuzz v1.1.0 github.com/google/martian => github.com/google/martian v2.1.0+incompatible - github.com/google/pprof => github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57 + github.com/google/pprof => github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc github.com/google/renameio => github.com/google/renameio v0.1.0 github.com/google/uuid => github.com/google/uuid v1.1.1 - github.com/googleapis/gax-go/v2 => github.com/googleapis/gax-go/v2 v2.0.4 - github.com/googleapis/gnostic => github.com/googleapis/gnostic v0.1.0 + github.com/googleapis/gax-go/v2 => github.com/googleapis/gax-go/v2 v2.0.5 + github.com/googleapis/gnostic => github.com/googleapis/gnostic v0.4.1 github.com/gophercloud/gophercloud => github.com/gophercloud/gophercloud v0.1.0 github.com/gopherjs/gopherjs => github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 github.com/gorilla/context => github.com/gorilla/context v1.1.1 - github.com/gorilla/mux => github.com/gorilla/mux v1.7.0 + github.com/gorilla/mux => github.com/gorilla/mux v1.7.3 github.com/gorilla/websocket => github.com/gorilla/websocket v1.4.0 - github.com/gostaticanalysis/analysisutil => github.com/gostaticanalysis/analysisutil v0.0.3 github.com/gregjones/httpcache => github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 github.com/grpc-ecosystem/go-grpc-middleware => github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4 github.com/grpc-ecosystem/go-grpc-prometheus => github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 @@ -353,32 +300,31 @@ replace ( github.com/heketi/heketi => github.com/heketi/heketi v9.0.1-0.20190917153846-c2e2a4ab7ab9+incompatible github.com/heketi/tests => github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6 github.com/hpcloud/tail => github.com/hpcloud/tail v1.0.0 + github.com/ianlancetaylor/demangle => github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 github.com/imdario/mergo => github.com/imdario/mergo v0.3.5 github.com/inconshreveable/mousetrap => github.com/inconshreveable/mousetrap v1.0.0 - github.com/jellevandenhooff/dkim => github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1 + github.com/ishidawataru/sctp => github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5 github.com/jimstudt/http-authentication => github.com/jimstudt/http-authentication v0.0.0-20140401203705-3eca13d6893a github.com/jmespath/go-jmespath => github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af github.com/jonboulle/clockwork => github.com/jonboulle/clockwork v0.1.0 - github.com/json-iterator/go => github.com/json-iterator/go v1.1.8 - github.com/jstemmer/go-junit-report => github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 + github.com/json-iterator/go => github.com/json-iterator/go v1.1.9 + github.com/jstemmer/go-junit-report => github.com/jstemmer/go-junit-report v0.9.1 github.com/jtolds/gls => github.com/jtolds/gls v4.20.0+incompatible github.com/julienschmidt/httprouter => github.com/julienschmidt/httprouter v1.2.0 github.com/jung-kurt/gofpdf => github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5 github.com/karrick/godirwalk => github.com/karrick/godirwalk v1.7.5 github.com/kisielk/errcheck => github.com/kisielk/errcheck v1.2.0 github.com/kisielk/gotool => github.com/kisielk/gotool v1.0.0 - github.com/klauspost/compress => github.com/klauspost/compress v1.4.1 github.com/klauspost/cpuid => github.com/klauspost/cpuid v1.2.0 - github.com/konsorten/go-windows-terminal-sequences => github.com/konsorten/go-windows-terminal-sequences v1.0.1 + github.com/konsorten/go-windows-terminal-sequences => github.com/konsorten/go-windows-terminal-sequences v1.0.2 github.com/kr/logfmt => github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 - github.com/kr/pretty => github.com/kr/pretty v0.1.0 + github.com/kr/pretty => github.com/kr/pretty v0.2.0 github.com/kr/pty => github.com/kr/pty v1.1.5 github.com/kr/text => github.com/kr/text v0.1.0 github.com/kylelemons/godebug => github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348 github.com/libopenstorage/openstorage => github.com/libopenstorage/openstorage v1.0.0 github.com/liggitt/tabwriter => github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de github.com/lithammer/dedent => github.com/lithammer/dedent v1.1.0 - github.com/logrusorgru/aurora => github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e github.com/lpabon/godbc => github.com/lpabon/godbc v0.1.1 github.com/lucas-clemente/aes12 => github.com/lucas-clemente/aes12 v0.0.0-20171027163421-cd47fb39b79f github.com/lucas-clemente/quic-clients => github.com/lucas-clemente/quic-clients v0.1.0 @@ -388,25 +334,22 @@ replace ( github.com/mailru/easyjson => github.com/mailru/easyjson v0.7.0 github.com/marten-seemann/qtls => github.com/marten-seemann/qtls v0.2.3 github.com/mattn/go-colorable => github.com/mattn/go-colorable v0.0.9 - github.com/mattn/go-isatty => github.com/mattn/go-isatty v0.0.9 + github.com/mattn/go-isatty => github.com/mattn/go-isatty v0.0.4 github.com/mattn/go-runewidth => github.com/mattn/go-runewidth v0.0.2 - github.com/mattn/go-shellwords => github.com/mattn/go-shellwords v1.0.5 - github.com/mattn/goveralls => github.com/mattn/goveralls v0.0.2 - github.com/matttproud/golang_protobuf_extensions => github.com/matttproud/golang_protobuf_extensions v1.0.1 - github.com/mesos/mesos-go => github.com/mesos/mesos-go v0.0.9 + github.com/matttproud/golang_protobuf_extensions => github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 github.com/mholt/certmagic => github.com/mholt/certmagic v0.6.2-0.20190624175158-6a42ef9fe8c2 github.com/miekg/dns => github.com/miekg/dns v1.1.4 github.com/mindprince/gonvml => github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989 - github.com/mistifyio/go-zfs => github.com/mistifyio/go-zfs v2.1.1+incompatible + github.com/mistifyio/go-zfs => github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible github.com/mitchellh/go-homedir => github.com/mitchellh/go-homedir v1.1.0 - github.com/mitchellh/go-ps => github.com/mitchellh/go-ps v0.0.0-20170309133038-4fdf99ab2936 github.com/mitchellh/go-wordwrap => github.com/mitchellh/go-wordwrap v1.0.0 github.com/mitchellh/mapstructure => github.com/mitchellh/mapstructure v1.1.2 + github.com/moby/ipvs => github.com/moby/ipvs v1.0.1 + github.com/moby/term => github.com/moby/term v0.0.0-20200312100748-672ec06f55cd github.com/modern-go/concurrent => github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd github.com/modern-go/reflect2 => github.com/modern-go/reflect2 v1.0.1 github.com/mohae/deepcopy => github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb github.com/morikuni/aec => github.com/morikuni/aec v1.0.0 - github.com/mozilla/tls-observatory => github.com/mozilla/tls-observatory v0.0.0-20180409132520-8791a200eb40 github.com/mrunalp/fileutils => github.com/mrunalp/fileutils v0.0.0-20171103030105-7d4729fb3618 github.com/munnerz/goautoneg => github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 github.com/mvdan/xurls => github.com/mvdan/xurls v1.1.0 @@ -414,26 +357,23 @@ replace ( github.com/mxk/go-flowrate => github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f github.com/naoina/go-stringutil => github.com/naoina/go-stringutil v0.1.0 github.com/naoina/toml => github.com/naoina/toml v0.1.1 - github.com/nbutton23/zxcvbn-go => github.com/nbutton23/zxcvbn-go v0.0.0-20171102151520-eafdab6b0663 github.com/olekukonko/tablewriter => github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5 github.com/onsi/ginkgo => github.com/onsi/ginkgo v1.11.0 github.com/onsi/gomega => github.com/onsi/gomega v1.7.0 github.com/opencontainers/go-digest => github.com/opencontainers/go-digest v1.0.0-rc1 github.com/opencontainers/image-spec => github.com/opencontainers/image-spec v1.0.1 github.com/opencontainers/runc => github.com/opencontainers/runc v1.0.0-rc10 - github.com/opencontainers/runtime-spec => github.com/opencontainers/runtime-spec v1.0.0 - github.com/opencontainers/selinux => github.com/opencontainers/selinux v1.3.1-0.20190929122143-5215b1806f52 + github.com/opencontainers/runtime-spec => github.com/opencontainers/runtime-spec v1.0.2 + github.com/opencontainers/selinux => github.com/opencontainers/selinux v1.3.3 github.com/pelletier/go-toml => github.com/pelletier/go-toml v1.2.0 github.com/peterbourgon/diskv => github.com/peterbourgon/diskv v2.0.1+incompatible - github.com/pkg/errors => github.com/pkg/errors v0.8.1 + github.com/pkg/errors => github.com/pkg/errors v0.9.1 github.com/pmezard/go-difflib => github.com/pmezard/go-difflib v1.0.0 github.com/pquerna/cachecontrol => github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021 - github.com/pquerna/ffjson => github.com/pquerna/ffjson v0.0.0-20180717144149-af8b230fcd20 - github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.0.0 + github.com/prometheus/client_golang => github.com/prometheus/client_golang v1.6.0 github.com/prometheus/client_model => github.com/prometheus/client_model v0.2.0 - github.com/prometheus/common => github.com/prometheus/common v0.4.1 - github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.2 - github.com/quasilyte/go-consistent => github.com/quasilyte/go-consistent v0.0.0-20190521200055-c6f3937de18c + github.com/prometheus/common => github.com/prometheus/common v0.9.1 + github.com/prometheus/procfs => github.com/prometheus/procfs v0.0.11 github.com/quobyte/api => github.com/quobyte/api v0.1.2 github.com/remyoudompheng/bigfft => github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446 github.com/robfig/cron => github.com/robfig/cron v1.1.0 @@ -441,88 +381,73 @@ replace ( github.com/rogpeppe/go-internal => github.com/rogpeppe/go-internal v1.3.0 github.com/rubiojr/go-vhd => github.com/rubiojr/go-vhd v0.0.0-20160810183302-0bfd3b39853c github.com/russross/blackfriday => github.com/russross/blackfriday v1.5.2 - github.com/ryanuber/go-glob => github.com/ryanuber/go-glob v0.0.0-20170128012129-256dc444b735 + github.com/russross/blackfriday/v2 => github.com/russross/blackfriday/v2 v2.0.1 github.com/satori/go.uuid => github.com/satori/go.uuid v1.2.0 github.com/seccomp/libseccomp-golang => github.com/seccomp/libseccomp-golang v0.9.1 github.com/sergi/go-diff => github.com/sergi/go-diff v1.0.0 - github.com/shirou/gopsutil => github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7 - github.com/shirou/w32 => github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 - github.com/shurcooL/go => github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e - github.com/shurcooL/go-goon => github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041 + github.com/shurcooL/sanitized_anchor_name => github.com/shurcooL/sanitized_anchor_name v1.0.0 github.com/sirupsen/logrus => github.com/sirupsen/logrus v1.4.2 github.com/smartystreets/assertions => github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d github.com/smartystreets/goconvey => github.com/smartystreets/goconvey v1.6.4 github.com/soheilhy/cmux => github.com/soheilhy/cmux v0.1.4 - github.com/sourcegraph/go-diff => github.com/sourcegraph/go-diff v0.5.1 github.com/spf13/afero => github.com/spf13/afero v1.2.2 github.com/spf13/cast => github.com/spf13/cast v1.3.0 - github.com/spf13/cobra => github.com/spf13/cobra v0.0.5 + github.com/spf13/cobra => github.com/spf13/cobra v1.0.0 github.com/spf13/jwalterweatherman => github.com/spf13/jwalterweatherman v1.1.0 github.com/spf13/pflag => github.com/spf13/pflag v1.0.5 - github.com/spf13/viper => github.com/spf13/viper v1.3.2 + github.com/spf13/viper => github.com/spf13/viper v1.4.0 github.com/storageos/go-api => github.com/storageos/go-api v0.0.0-20180912212459-343b3eff91fc github.com/stretchr/objx => github.com/stretchr/objx v0.2.0 github.com/stretchr/testify => github.com/stretchr/testify v1.4.0 github.com/syndtr/gocapability => github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2 - github.com/tarm/serial => github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07 github.com/thecodeteam/goscaleio => github.com/thecodeteam/goscaleio v0.1.0 github.com/tidwall/pretty => github.com/tidwall/pretty v1.0.0 - github.com/timakin/bodyclose => github.com/timakin/bodyclose v0.0.0-20190721030226-87058b9bfcec - github.com/tmc/grpc-websocket-proxy => github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 - github.com/ugorji/go/codec => github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8 - github.com/ultraware/funlen => github.com/ultraware/funlen v0.0.2 + github.com/tmc/grpc-websocket-proxy => github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5 + github.com/ugorji/go => github.com/ugorji/go v1.1.4 github.com/urfave/cli => github.com/urfave/cli v1.20.0 github.com/urfave/negroni => github.com/urfave/negroni v1.0.0 - github.com/valyala/bytebufferpool => github.com/valyala/bytebufferpool v1.0.0 - github.com/valyala/fasthttp => github.com/valyala/fasthttp v1.2.0 - github.com/valyala/quicktemplate => github.com/valyala/quicktemplate v1.1.1 - github.com/valyala/tcplisten => github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a github.com/vektah/gqlparser => github.com/vektah/gqlparser v1.1.2 - github.com/vishvananda/netlink => github.com/vishvananda/netlink v1.0.0 - github.com/vishvananda/netns => github.com/vishvananda/netns v0.0.0-20171111001504-be1fbeda1936 + github.com/vishvananda/netlink => github.com/vishvananda/netlink v1.1.0 + github.com/vishvananda/netns => github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df github.com/vmware/govmomi => github.com/vmware/govmomi v0.20.3 github.com/xiang90/probing => github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 github.com/xlab/handysort => github.com/xlab/handysort v0.0.0-20150421192137-fb3537ed64a1 github.com/xordataexchange/crypt => github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 go.etcd.io/bbolt => go.etcd.io/bbolt v1.3.3 - go.etcd.io/etcd => go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 // 3cf2f69b5738 is the SHA for git tag v3.4.3 + go.etcd.io/etcd => go.etcd.io/etcd v0.5.0-alpha.5.0.20200401174654-e694b7bb0875 // e694b7bb0875 is the SHA for git tag v3.4.7 go.mongodb.org/mongo-driver => go.mongodb.org/mongo-driver v1.1.2 - go.opencensus.io => go.opencensus.io v0.21.0 - go.uber.org/atomic => go.uber.org/atomic v1.3.2 + go.opencensus.io => go.opencensus.io v0.22.2 + go.uber.org/atomic => go.uber.org/atomic v1.4.0 go.uber.org/multierr => go.uber.org/multierr v1.1.0 go.uber.org/zap => go.uber.org/zap v1.10.0 - go4.org => go4.org v0.0.0-20180809161055-417644f6feb5 - golang.org/x/build => golang.org/x/build v0.0.0-20190927031335-2835ba2e683f golang.org/x/crypto => golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 - golang.org/x/exp => golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495 - golang.org/x/image => golang.org/x/image v0.0.0-20190227222117-0694c2d4d067 - golang.org/x/lint => golang.org/x/lint v0.0.0-20190409202823-959b441ac422 - golang.org/x/mobile => golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6 - golang.org/x/mod => golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e - golang.org/x/net => golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 - golang.org/x/oauth2 => golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 - golang.org/x/perf => golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852 + golang.org/x/exp => golang.org/x/exp v0.0.0-20191227195350-da58074b4299 + golang.org/x/image => golang.org/x/image v0.0.0-20190802002840-cff245a6509b + golang.org/x/lint => golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f + golang.org/x/mobile => golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 + golang.org/x/mod => golang.org/x/mod v0.1.0 + golang.org/x/net => golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e + golang.org/x/oauth2 => golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6 golang.org/x/sync => golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e golang.org/x/sys => golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a // pinned to release-branch.go1.13 golang.org/x/text => golang.org/x/text v0.3.2 - golang.org/x/time => golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 + golang.org/x/time => golang.org/x/time v0.0.0-20191024005414-555d28b269f0 golang.org/x/tools => golang.org/x/tools v0.0.0-20190821162956-65e3620a7ae7 // pinned to release-branch.go1.13 - golang.org/x/xerrors => golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 + golang.org/x/xerrors => golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 gonum.org/v1/gonum => gonum.org/v1/gonum v0.6.2 gonum.org/v1/netlib => gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e gonum.org/v1/plot => gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b - google.golang.org/api => google.golang.org/api v0.6.1-0.20190607001116-5213b8090861 - google.golang.org/appengine => google.golang.org/appengine v1.5.0 - google.golang.org/genproto => google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 + google.golang.org/api => google.golang.org/api v0.15.1 + google.golang.org/appengine => google.golang.org/appengine v1.6.5 + google.golang.org/genproto => google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba google.golang.org/grpc => google.golang.org/grpc v1.26.0 - gopkg.in/airbrake/gobrake.v2 => gopkg.in/airbrake/gobrake.v2 v2.0.9 + google.golang.org/protobuf => google.golang.org/protobuf v1.23.0 gopkg.in/alecthomas/kingpin.v2 => gopkg.in/alecthomas/kingpin.v2 v2.2.6 - gopkg.in/check.v1 => gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 + gopkg.in/check.v1 => gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 gopkg.in/cheggaaa/pb.v1 => gopkg.in/cheggaaa/pb.v1 v1.0.25 gopkg.in/errgo.v2 => gopkg.in/errgo.v2 v2.1.0 gopkg.in/fsnotify.v1 => gopkg.in/fsnotify.v1 v1.4.7 gopkg.in/gcfg.v1 => gopkg.in/gcfg.v1 v1.2.0 - gopkg.in/gemnasium/logrus-airbrake-hook.v2 => gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2 gopkg.in/inf.v0 => gopkg.in/inf.v0 v0.9.1 gopkg.in/mcuadros/go-syslog.v2 => gopkg.in/mcuadros/go-syslog.v2 v2.2.1 gopkg.in/natefinch/lumberjack.v2 => gopkg.in/natefinch/lumberjack.v2 v2.0.0 @@ -532,9 +457,8 @@ replace ( gopkg.in/warnings.v0 => gopkg.in/warnings.v0 v0.1.1 gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.2.8 gotest.tools => gotest.tools v2.2.0+incompatible - gotest.tools/gotestsum => gotest.tools/gotestsum v0.3.5 - grpc.go4.org => grpc.go4.org v0.0.0-20170609214715-11d0a25b4919 - honnef.co/go/tools => honnef.co/go/tools v0.0.1-2019.2.2 + gotest.tools/v3 => gotest.tools/v3 v3.0.2 + honnef.co/go/tools => honnef.co/go/tools v0.0.1-2019.2.3 k8s.io/api => ./staging/src/k8s.io/api k8s.io/apiextensions-apiserver => ./staging/src/k8s.io/apiextensions-apiserver k8s.io/apimachinery => ./staging/src/k8s.io/apimachinery @@ -545,39 +469,35 @@ replace ( k8s.io/cluster-bootstrap => ./staging/src/k8s.io/cluster-bootstrap k8s.io/code-generator => ./staging/src/k8s.io/code-generator k8s.io/component-base => ./staging/src/k8s.io/component-base + k8s.io/controller-manager => ./staging/src/k8s.io/controller-manager k8s.io/cri-api => ./staging/src/k8s.io/cri-api k8s.io/csi-translation-lib => ./staging/src/k8s.io/csi-translation-lib - k8s.io/gengo => k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 + k8s.io/gengo => k8s.io/gengo v0.0.0-20200428234225-8167cfdcfc14 k8s.io/heapster => k8s.io/heapster v1.2.0-beta.1 - k8s.io/klog => k8s.io/klog v1.0.0 + k8s.io/klog/v2 => k8s.io/klog/v2 v2.1.0 k8s.io/kube-aggregator => ./staging/src/k8s.io/kube-aggregator k8s.io/kube-controller-manager => ./staging/src/k8s.io/kube-controller-manager - k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c + k8s.io/kube-openapi => k8s.io/kube-openapi v0.0.0-20200427153329-656914f816f9 k8s.io/kube-proxy => ./staging/src/k8s.io/kube-proxy k8s.io/kube-scheduler => ./staging/src/k8s.io/kube-scheduler k8s.io/kubectl => ./staging/src/k8s.io/kubectl k8s.io/kubelet => ./staging/src/k8s.io/kubelet k8s.io/legacy-cloud-providers => ./staging/src/k8s.io/legacy-cloud-providers k8s.io/metrics => ./staging/src/k8s.io/metrics - k8s.io/repo-infra => k8s.io/repo-infra v0.0.1-alpha.1 k8s.io/sample-apiserver => ./staging/src/k8s.io/sample-apiserver k8s.io/sample-cli-plugin => ./staging/src/k8s.io/sample-cli-plugin k8s.io/sample-controller => ./staging/src/k8s.io/sample-controller - k8s.io/system-validators => k8s.io/system-validators v1.0.4 - k8s.io/utils => k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 + k8s.io/system-validators => k8s.io/system-validators v1.1.2 + k8s.io/utils => k8s.io/utils v0.0.0-20200414100711-2df71ebbae66 modernc.org/cc => modernc.org/cc v1.0.0 modernc.org/golex => modernc.org/golex v1.0.0 modernc.org/mathutil => modernc.org/mathutil v1.0.0 modernc.org/strutil => modernc.org/strutil v1.0.0 modernc.org/xc => modernc.org/xc v1.0.0 - mvdan.cc/interfacer => mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed - mvdan.cc/lint => mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b - mvdan.cc/unparam => mvdan.cc/unparam v0.0.0-20190209190245-fbb59629db34 rsc.io/pdf => rsc.io/pdf v0.1.1 - sigs.k8s.io/apiserver-network-proxy/konnectivity-client => sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7 + sigs.k8s.io/apiserver-network-proxy/konnectivity-client => sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9-0.20200513220823-33b997865007 sigs.k8s.io/kustomize => sigs.k8s.io/kustomize v2.0.3+incompatible sigs.k8s.io/structured-merge-diff/v3 => sigs.k8s.io/structured-merge-diff/v3 v3.0.0 sigs.k8s.io/yaml => sigs.k8s.io/yaml v1.2.0 - sourcegraph.com/sqs/pbtypes => sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4 vbom.ml/util => vbom.ml/util v0.0.0-20160121211510-db5cfe13f5cc ) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/annotation_key_constants.go b/vendor/k8s.io/kubernetes/pkg/apis/core/annotation_key_constants.go deleted file mode 100644 index 70b9ff758..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/annotation_key_constants.go +++ /dev/null @@ -1,110 +0,0 @@ -/* -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 should be consistent with pkg/api/v1/annotation_key_constants.go. - -package core - -const ( - // ImagePolicyFailedOpenKey is added to pods created by failing open when the image policy - // webhook backend fails. - ImagePolicyFailedOpenKey string = "alpha.image-policy.k8s.io/failed-open" - - // PodPresetOptOutAnnotationKey represents the annotation key for a pod to exempt itself from pod preset manipulation - PodPresetOptOutAnnotationKey string = "podpreset.admission.kubernetes.io/exclude" - - // MirrorPodAnnotationKey represents the annotation key set by kubelets when creating mirror pods - MirrorPodAnnotationKey string = "kubernetes.io/config.mirror" - - // TolerationsAnnotationKey represents the key of tolerations data (json serialized) - // in the Annotations of a Pod. - TolerationsAnnotationKey string = "scheduler.alpha.kubernetes.io/tolerations" - - // TaintsAnnotationKey represents the key of taints data (json serialized) - // in the Annotations of a Node. - TaintsAnnotationKey string = "scheduler.alpha.kubernetes.io/taints" - - // SeccompPodAnnotationKey represents the key of a seccomp profile applied - // to all containers of a pod. - SeccompPodAnnotationKey string = "seccomp.security.alpha.kubernetes.io/pod" - - // SeccompContainerAnnotationKeyPrefix represents the key of a seccomp profile applied - // to one container of a pod. - SeccompContainerAnnotationKeyPrefix string = "container.seccomp.security.alpha.kubernetes.io/" - - // SeccompProfileRuntimeDefault represents the default seccomp profile used by container runtime. - SeccompProfileRuntimeDefault string = "runtime/default" - - // DeprecatedSeccompProfileDockerDefault represents the default seccomp profile used by docker. - // This is now deprecated and should be replaced by SeccompProfileRuntimeDefault. - DeprecatedSeccompProfileDockerDefault string = "docker/default" - - // PreferAvoidPodsAnnotationKey represents the key of preferAvoidPods data (json serialized) - // in the Annotations of a Node. - PreferAvoidPodsAnnotationKey string = "scheduler.alpha.kubernetes.io/preferAvoidPods" - - // ObjectTTLAnnotationKey represents a suggestion for kubelet for how long it can cache - // an object (e.g. secret, config map) before fetching it again from apiserver. - // This annotation can be attached to node. - ObjectTTLAnnotationKey string = "node.alpha.kubernetes.io/ttl" - - // BootstrapCheckpointAnnotationKey represents a Resource (Pod) that should be checkpointed by - // the kubelet prior to running - BootstrapCheckpointAnnotationKey string = "node.kubernetes.io/bootstrap-checkpoint" - - // NonConvertibleAnnotationPrefix annotation key prefix used to identify non-convertible json paths. - NonConvertibleAnnotationPrefix = "non-convertible.kubernetes.io" - - kubectlPrefix = "kubectl.kubernetes.io/" - - // LastAppliedConfigAnnotation is the annotation used to store the previous - // configuration of a resource for use in a three way diff by UpdateApplyAnnotation. - LastAppliedConfigAnnotation = kubectlPrefix + "last-applied-configuration" - - // AnnotationLoadBalancerSourceRangesKey is the key of the annotation on a service to set allowed ingress ranges on their LoadBalancers - // - // It should be a comma-separated list of CIDRs, e.g. `0.0.0.0/0` to - // allow full access (the default) or `18.0.0.0/8,56.0.0.0/8` to allow - // access only from the CIDRs currently allocated to MIT & the USPS. - // - // Not all cloud providers support this annotation, though AWS & GCE do. - AnnotationLoadBalancerSourceRangesKey = "service.beta.kubernetes.io/load-balancer-source-ranges" - - // EndpointsLastChangeTriggerTime is the annotation key, set for endpoints objects, that - // represents the timestamp (stored as RFC 3339 date-time string, e.g. '2018-10-22T19:32:52.1Z') - // of the last change, of some Pod or Service object, that triggered the endpoints object change. - // In other words, if a Pod / Service changed at time T0, that change was observed by endpoints - // controller at T1, and the Endpoints object was changed at T2, the - // EndpointsLastChangeTriggerTime would be set to T0. - // - // The "endpoints change trigger" here means any Pod or Service change that resulted in the - // Endpoints object change. - // - // Given the definition of the "endpoints change trigger", please note that this annotation will - // be set ONLY for endpoints object changes triggered by either Pod or Service change. If the - // Endpoints object changes due to other reasons, this annotation won't be set (or updated if it's - // already set). - // - // This annotation will be used to compute the in-cluster network programming latency SLI, see - // https://github.com/kubernetes/community/blob/master/sig-scalability/slos/network_programming_latency.md - EndpointsLastChangeTriggerTime = "endpoints.kubernetes.io/last-change-trigger-time" - - // MigratedPluginsAnnotationKey is the annotation key, set for CSINode objects, that is a comma-separated - // list of in-tree plugins that will be serviced by the CSI backend on the Node represented by CSINode. - // This annotation is used by the Attach Detach Controller to determine whether to use the in-tree or - // CSI Backend for a volume plugin on a specific node. - MigratedPluginsAnnotationKey = "storage.alpha.kubernetes.io/migrated-plugins" -) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/doc.go b/vendor/k8s.io/kubernetes/pkg/apis/core/doc.go deleted file mode 100644 index 6475fdab1..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/doc.go +++ /dev/null @@ -1,24 +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. -*/ - -// +k8s:deepcopy-gen=package - -// Package core contains the latest (or "internal") version of the -// Kubernetes API objects. This is the API objects as represented in memory. -// The contract presented to clients is located in the versioned packages, -// which are sub-directories. The first one is "v1". Those packages -// describe how a particular version is serialized to storage/network. -package core // import "k8s.io/kubernetes/pkg/apis/core" diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/field_constants.go b/vendor/k8s.io/kubernetes/pkg/apis/core/field_constants.go deleted file mode 100644 index a26f80568..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/field_constants.go +++ /dev/null @@ -1,38 +0,0 @@ -/* -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 core - -// Field path constants that are specific to the internal API -// representation. -const ( - NodeUnschedulableField = "spec.unschedulable" - ObjectNameField = "metadata.name" - PodHostField = "spec.nodeName" - PodStatusField = "status.phase" - SecretTypeField = "type" - - EventReasonField = "action" - EventSourceField = "reportingComponent" - EventTypeField = "type" - EventInvolvedKindField = "involvedObject.kind" - EventInvolvedNamespaceField = "involvedObject.namespace" - EventInvolvedNameField = "involvedObject.name" - EventInvolvedUIDField = "involvedObject.uid" - EventInvolvedAPIVersionField = "involvedObject.apiVersion" - EventInvolvedResourceVersionField = "involvedObject.resourceVersion" - EventInvolvedFieldPathField = "involvedObject.fieldPath" -) diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/json.go b/vendor/k8s.io/kubernetes/pkg/apis/core/json.go deleted file mode 100644 index 46702cb46..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/json.go +++ /dev/null @@ -1,31 +0,0 @@ -/* -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 core - -import "encoding/json" - -// This file implements json marshaling/unmarshaling interfaces on objects that are currently marshaled into annotations -// to prevent anyone from marshaling these internal structs. - -var _ = json.Marshaler(&AvoidPods{}) -var _ = json.Unmarshaler(&AvoidPods{}) - -// MarshalJSON panics to prevent marshalling of internal structs -func (AvoidPods) MarshalJSON() ([]byte, error) { panic("do not marshal internal struct") } - -// UnmarshalJSON panics to prevent unmarshalling of internal structs -func (*AvoidPods) UnmarshalJSON([]byte) error { panic("do not unmarshal to internal struct") } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/objectreference.go b/vendor/k8s.io/kubernetes/pkg/apis/core/objectreference.go deleted file mode 100644 index 60f7e8a88..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/objectreference.go +++ /dev/null @@ -1,37 +0,0 @@ -/* -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. -*/ - -//TODO: consider making these methods functions, because we don't want helper -//functions in the k8s.io/api repo. - -package core - -import ( - "k8s.io/apimachinery/pkg/runtime/schema" -) - -// SetGroupVersionKind sets the API version and kind of the object reference -func (obj *ObjectReference) SetGroupVersionKind(gvk schema.GroupVersionKind) { - obj.APIVersion, obj.Kind = gvk.ToAPIVersionAndKind() -} - -// GroupVersionKind returns the API version and kind of the object reference -func (obj *ObjectReference) GroupVersionKind() schema.GroupVersionKind { - return schema.FromAPIVersionAndKind(obj.APIVersion, obj.Kind) -} - -// GetObjectKind returns the kind of object reference -func (obj *ObjectReference) GetObjectKind() schema.ObjectKind { return obj } diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/register.go b/vendor/k8s.io/kubernetes/pkg/apis/core/register.go deleted file mode 100644 index 36856ef6c..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/register.go +++ /dev/null @@ -1,103 +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 core - -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 = "" - -// SchemeGroupVersion is group version used to register these objects -var SchemeGroupVersion = schema.GroupVersion{Group: GroupName, Version: runtime.APIVersionInternal} - -// Kind takes an unqualified kind and returns a Group qualified GroupKind -func Kind(kind string) schema.GroupKind { - return SchemeGroupVersion.WithKind(kind).GroupKind() -} - -// Resource takes an unqualified resource and returns a Group qualified GroupResource -func Resource(resource string) schema.GroupResource { - return SchemeGroupVersion.WithResource(resource).GroupResource() -} - -var ( - // SchemeBuilder object to register various known types - SchemeBuilder = runtime.NewSchemeBuilder(addKnownTypes) - - // AddToScheme represents a func that can be used to apply all the registered - // funcs in a scheme - AddToScheme = SchemeBuilder.AddToScheme -) - -func addKnownTypes(scheme *runtime.Scheme) error { - if err := scheme.AddIgnoredConversionType(&metav1.TypeMeta{}, &metav1.TypeMeta{}); err != nil { - return err - } - scheme.AddKnownTypes(SchemeGroupVersion, - &Pod{}, - &PodList{}, - &PodStatusResult{}, - &PodTemplate{}, - &PodTemplateList{}, - &ReplicationControllerList{}, - &ReplicationController{}, - &ServiceList{}, - &Service{}, - &ServiceProxyOptions{}, - &NodeList{}, - &Node{}, - &NodeProxyOptions{}, - &Endpoints{}, - &EndpointsList{}, - &Binding{}, - &Event{}, - &EventList{}, - &List{}, - &LimitRange{}, - &LimitRangeList{}, - &ResourceQuota{}, - &ResourceQuotaList{}, - &Namespace{}, - &NamespaceList{}, - &ServiceAccount{}, - &ServiceAccountList{}, - &Secret{}, - &SecretList{}, - &PersistentVolume{}, - &PersistentVolumeList{}, - &PersistentVolumeClaim{}, - &PersistentVolumeClaimList{}, - &PodAttachOptions{}, - &PodLogOptions{}, - &PodExecOptions{}, - &PodPortForwardOptions{}, - &PodProxyOptions{}, - &ComponentStatus{}, - &ComponentStatusList{}, - &SerializedReference{}, - &RangeAllocation{}, - &ConfigMap{}, - &ConfigMapList{}, - &EphemeralContainers{}, - ) - - return nil -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/resource.go b/vendor/k8s.io/kubernetes/pkg/apis/core/resource.go deleted file mode 100644 index d5006e5c8..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/resource.go +++ /dev/null @@ -1,65 +0,0 @@ -/* -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 core - -import ( - "k8s.io/apimachinery/pkg/api/resource" -) - -func (rn ResourceName) String() string { - return string(rn) -} - -// CPU returns the CPU limit if specified. -func (rl *ResourceList) CPU() *resource.Quantity { - if val, ok := (*rl)[ResourceCPU]; ok { - return &val - } - return &resource.Quantity{Format: resource.DecimalSI} -} - -// Memory returns the Memory limit if specified. -func (rl *ResourceList) Memory() *resource.Quantity { - if val, ok := (*rl)[ResourceMemory]; ok { - return &val - } - return &resource.Quantity{Format: resource.BinarySI} -} - -// Storage returns the Storage limit if specified. -func (rl *ResourceList) Storage() *resource.Quantity { - if val, ok := (*rl)[ResourceStorage]; ok { - return &val - } - return &resource.Quantity{Format: resource.BinarySI} -} - -// Pods returns the list of pods -func (rl *ResourceList) Pods() *resource.Quantity { - if val, ok := (*rl)[ResourcePods]; ok { - return &val - } - return &resource.Quantity{} -} - -// StorageEphemeral returns the list of ephemeral storage volumes, if any -func (rl *ResourceList) StorageEphemeral() *resource.Quantity { - if val, ok := (*rl)[ResourceEphemeralStorage]; ok { - return &val - } - return &resource.Quantity{} -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/taint.go b/vendor/k8s.io/kubernetes/pkg/apis/core/taint.go deleted file mode 100644 index 2c800de9b..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/taint.go +++ /dev/null @@ -1,42 +0,0 @@ -/* -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. -*/ - -//TODO: consider making these methods functions, because we don't want helper -//functions in the k8s.io/api repo. - -package core - -import "fmt" - -// MatchTaint checks if the taint matches taintToMatch. Taints are unique by key:effect, -// if the two taints have same key:effect, regard as they match. -func (t *Taint) MatchTaint(taintToMatch Taint) bool { - return t.Key == taintToMatch.Key && t.Effect == taintToMatch.Effect -} - -// ToString converts taint struct to string in format '=:', '=:', ':', or ''. -func (t *Taint) ToString() string { - if len(t.Effect) == 0 { - if len(t.Value) == 0 { - return fmt.Sprintf("%v", t.Key) - } - return fmt.Sprintf("%v=%v:", t.Key, t.Value) - } - if len(t.Value) == 0 { - return fmt.Sprintf("%v:%v", t.Key, t.Effect) - } - return fmt.Sprintf("%v=%v:%v", t.Key, t.Value, t.Effect) -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/toleration.go b/vendor/k8s.io/kubernetes/pkg/apis/core/toleration.go deleted file mode 100644 index 1dfbc9f1b..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/toleration.go +++ /dev/null @@ -1,30 +0,0 @@ -/* -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. -*/ - -//TODO: consider making these methods functions, because we don't want helper -//functions in the k8s.io/api repo. - -package core - -// MatchToleration checks if the toleration matches tolerationToMatch. Tolerations are unique by , -// if the two tolerations have same combination, regard as they match. -// TODO: uniqueness check for tolerations in api validations. -func (t *Toleration) MatchToleration(tolerationToMatch *Toleration) bool { - return t.Key == tolerationToMatch.Key && - t.Effect == tolerationToMatch.Effect && - t.Operator == tolerationToMatch.Operator && - t.Value == tolerationToMatch.Value -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/types.go b/vendor/k8s.io/kubernetes/pkg/apis/core/types.go deleted file mode 100644 index f000cdbea..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/types.go +++ /dev/null @@ -1,5235 +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 core - -import ( - "k8s.io/apimachinery/pkg/api/resource" - metainternalversion "k8s.io/apimachinery/pkg/apis/meta/internalversion" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/types" - "k8s.io/apimachinery/pkg/util/intstr" -) - -const ( - // NamespaceDefault means the object is in the default namespace which is applied when not specified by clients - NamespaceDefault = "default" - // NamespaceAll is the default argument to specify on a context when you want to list or filter resources across all namespaces - NamespaceAll = "" - // NamespaceNone is the argument for a context when there is no namespace. - NamespaceNone = "" - // NamespaceSystem is the system namespace where we place system components. - NamespaceSystem = "kube-system" - // NamespacePublic is the namespace where we place public info (ConfigMaps) - NamespacePublic = "kube-public" - // NamespaceNodeLease is the namespace where we place node lease objects (used for node heartbeats) - NamespaceNodeLease = "kube-node-lease" - // TerminationMessagePathDefault means the default path to capture the application termination message running in a container - TerminationMessagePathDefault = "/dev/termination-log" -) - -// Volume represents a named volume in a pod that may be accessed by any containers in the pod. -type Volume struct { - // Required: This must be a DNS_LABEL. Each volume in a pod must have - // a unique name. - Name string - // The VolumeSource represents the location and type of a volume to mount. - // This is optional for now. If not specified, the Volume is implied to be an EmptyDir. - // This implied behavior is deprecated and will be removed in a future version. - // +optional - VolumeSource -} - -// VolumeSource represents the source location of a volume to mount. -// Only one of its members may be specified. -type VolumeSource struct { - // HostPath represents file or directory on the host machine that is - // directly exposed to the container. This is generally used for system - // agents or other privileged things that are allowed to see the host - // machine. Most containers will NOT need this. - // --- - // TODO(jonesdl) We need to restrict who can use host directory mounts and who can/can not - // mount host directories as read/write. - // +optional - HostPath *HostPathVolumeSource - // EmptyDir represents a temporary directory that shares a pod's lifetime. - // +optional - EmptyDir *EmptyDirVolumeSource - // GCEPersistentDisk represents a GCE Disk resource that is attached to a - // kubelet's host machine and then exposed to the pod. - // +optional - GCEPersistentDisk *GCEPersistentDiskVolumeSource - // AWSElasticBlockStore represents an AWS EBS disk that is attached to a - // kubelet's host machine and then exposed to the pod. - // +optional - AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource - // GitRepo represents a git repository at a particular revision. - // DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an - // EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir - // into the Pod's container. - // +optional - GitRepo *GitRepoVolumeSource - // Secret represents a secret that should populate this volume. - // +optional - Secret *SecretVolumeSource - // NFS represents an NFS mount on the host that shares a pod's lifetime - // +optional - NFS *NFSVolumeSource - // ISCSIVolumeSource represents an ISCSI Disk resource that is attached to a - // kubelet's host machine and then exposed to the pod. - // +optional - ISCSI *ISCSIVolumeSource - // Glusterfs represents a Glusterfs mount on the host that shares a pod's lifetime - // +optional - Glusterfs *GlusterfsVolumeSource - // PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace - // +optional - PersistentVolumeClaim *PersistentVolumeClaimVolumeSource - // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime - // +optional - RBD *RBDVolumeSource - - // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime - // +optional - Quobyte *QuobyteVolumeSource - - // FlexVolume represents a generic volume resource that is - // provisioned/attached using an exec based plugin. - // +optional - FlexVolume *FlexVolumeSource - - // Cinder represents a cinder volume attached and mounted on kubelets host machine. - // +optional - Cinder *CinderVolumeSource - - // CephFS represents a Cephfs mount on the host that shares a pod's lifetime - // +optional - CephFS *CephFSVolumeSource - - // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running - // +optional - Flocker *FlockerVolumeSource - - // DownwardAPI represents metadata about the pod that should populate this volume - // +optional - DownwardAPI *DownwardAPIVolumeSource - // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. - // +optional - FC *FCVolumeSource - // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. - // +optional - AzureFile *AzureFileVolumeSource - // ConfigMap represents a configMap that should populate this volume - // +optional - ConfigMap *ConfigMapVolumeSource - // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine - // +optional - VsphereVolume *VsphereVirtualDiskVolumeSource - // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. - // +optional - AzureDisk *AzureDiskVolumeSource - // PhotonPersistentDisk represents a Photon Controller persistent disk attached and mounted on kubelets host machine - PhotonPersistentDisk *PhotonPersistentDiskVolumeSource - // Items for all in one resources secrets, configmaps, and downward API - Projected *ProjectedVolumeSource - // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine - // +optional - PortworxVolume *PortworxVolumeSource - // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. - // +optional - ScaleIO *ScaleIOVolumeSource - // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod - // +optional - StorageOS *StorageOSVolumeSource - // CSI (Container Storage Interface) represents storage that is handled by an external CSI driver (Alpha feature). - // +optional - CSI *CSIVolumeSource -} - -// PersistentVolumeSource is similar to VolumeSource but meant for the administrator who creates PVs. -// Exactly one of its members must be set. -type PersistentVolumeSource struct { - // GCEPersistentDisk represents a GCE Disk resource that is attached to a - // kubelet's host machine and then exposed to the pod. - // +optional - GCEPersistentDisk *GCEPersistentDiskVolumeSource - // AWSElasticBlockStore represents an AWS EBS disk that is attached to a - // kubelet's host machine and then exposed to the pod. - // +optional - AWSElasticBlockStore *AWSElasticBlockStoreVolumeSource - // HostPath represents a directory on the host. - // Provisioned by a developer or tester. - // This is useful for single-node development and testing only! - // On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. - // +optional - HostPath *HostPathVolumeSource - // Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod - // +optional - Glusterfs *GlusterfsPersistentVolumeSource - // NFS represents an NFS mount on the host that shares a pod's lifetime - // +optional - NFS *NFSVolumeSource - // RBD represents a Rados Block Device mount on the host that shares a pod's lifetime - // +optional - RBD *RBDPersistentVolumeSource - // Quobyte represents a Quobyte mount on the host that shares a pod's lifetime - // +optional - Quobyte *QuobyteVolumeSource - // ISCSIPersistentVolumeSource represents an ISCSI resource that is attached to a - // kubelet's host machine and then exposed to the pod. - // +optional - ISCSI *ISCSIPersistentVolumeSource - // FlexVolume represents a generic volume resource that is - // provisioned/attached using an exec based plugin. - // +optional - FlexVolume *FlexPersistentVolumeSource - // Cinder represents a cinder volume attached and mounted on kubelets host machine. - // +optional - Cinder *CinderPersistentVolumeSource - // CephFS represents a Ceph FS mount on the host that shares a pod's lifetime - // +optional - CephFS *CephFSPersistentVolumeSource - // FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod. - // +optional - FC *FCVolumeSource - // Flocker represents a Flocker volume attached to a kubelet's host machine. This depends on the Flocker control service being running - // +optional - Flocker *FlockerVolumeSource - // AzureFile represents an Azure File Service mount on the host and bind mount to the pod. - // +optional - AzureFile *AzureFilePersistentVolumeSource - // VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine - // +optional - VsphereVolume *VsphereVirtualDiskVolumeSource - // AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod. - // +optional - AzureDisk *AzureDiskVolumeSource - // PhotonPersistentDisk represents a Photon Controller persistent disk attached and mounted on kubelets host machine - PhotonPersistentDisk *PhotonPersistentDiskVolumeSource - // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine - // +optional - PortworxVolume *PortworxVolumeSource - // ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes. - // +optional - ScaleIO *ScaleIOPersistentVolumeSource - // Local represents directly-attached storage with node affinity - // +optional - Local *LocalVolumeSource - // StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod - // More info: https://examples.k8s.io/volumes/storageos/README.md - // +optional - StorageOS *StorageOSPersistentVolumeSource - // CSI (Container Storage Interface) represents storage that is handled by an external CSI driver. - // +optional - CSI *CSIPersistentVolumeSource -} - -// PersistentVolumeClaimVolumeSource represents a reference to a PersistentVolumeClaim in the same namespace -type PersistentVolumeClaimVolumeSource struct { - // ClaimName is the name of a PersistentVolumeClaim in the same namespace as the pod using this volume - ClaimName string - // Optional: Defaults to false (read/write). ReadOnly here - // will force the ReadOnly setting in VolumeMounts - // +optional - ReadOnly bool -} - -const ( - // BetaStorageClassAnnotation represents the beta/previous StorageClass annotation. - // It's deprecated and will be removed in a future release. (#51440) - BetaStorageClassAnnotation = "volume.beta.kubernetes.io/storage-class" - - // MountOptionAnnotation defines mount option annotation used in PVs - MountOptionAnnotation = "volume.beta.kubernetes.io/mount-options" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PersistentVolume struct captures the details of the implementation of PV storage -type PersistentVolume struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - //Spec defines a persistent volume owned by the cluster - // +optional - Spec PersistentVolumeSpec - - // Status represents the current information about persistent volume. - // +optional - Status PersistentVolumeStatus -} - -// PersistentVolumeSpec has most of the details required to define a persistent volume -type PersistentVolumeSpec struct { - // Resources represents the actual resources of the volume - Capacity ResourceList - // Source represents the location and type of a volume to mount. - PersistentVolumeSource - // AccessModes contains all ways the volume can be mounted - // +optional - AccessModes []PersistentVolumeAccessMode - // ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. - // ClaimRef is expected to be non-nil when bound. - // claim.VolumeName is the authoritative bind between PV and PVC. - // When set to non-nil value, PVC.Spec.Selector of the referenced PVC is - // ignored, i.e. labels of this PV do not need to match PVC selector. - // +optional - ClaimRef *ObjectReference - // Optional: what happens to a persistent volume when released from its claim. - // +optional - PersistentVolumeReclaimPolicy PersistentVolumeReclaimPolicy - // Name of StorageClass to which this persistent volume belongs. Empty value - // means that this volume does not belong to any StorageClass. - // +optional - StorageClassName string - // A list of mount options, e.g. ["ro", "soft"]. Not validated - mount will - // simply fail if one is invalid. - // +optional - MountOptions []string - // volumeMode defines if a volume is intended to be used with a formatted filesystem - // or to remain in raw block state. Value of Filesystem is implied when not included in spec. - // +optional - VolumeMode *PersistentVolumeMode - // NodeAffinity defines constraints that limit what nodes this volume can be accessed from. - // This field influences the scheduling of pods that use this volume. - // +optional - NodeAffinity *VolumeNodeAffinity -} - -// VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from. -type VolumeNodeAffinity struct { - // Required specifies hard node constraints that must be met. - Required *NodeSelector -} - -// PersistentVolumeReclaimPolicy describes a policy for end-of-life maintenance of persistent volumes -type PersistentVolumeReclaimPolicy string - -const ( - // PersistentVolumeReclaimRecycle means the volume will be recycled back into the pool of unbound persistent volumes on release from its claim. - // The volume plugin must support Recycling. - // DEPRECATED: The PersistentVolumeReclaimRecycle called Recycle is being deprecated. See announcement here: https://groups.google.com/forum/#!topic/kubernetes-dev/uexugCza84I - PersistentVolumeReclaimRecycle PersistentVolumeReclaimPolicy = "Recycle" - // PersistentVolumeReclaimDelete means the volume will be deleted from Kubernetes on release from its claim. - // The volume plugin must support Deletion. - PersistentVolumeReclaimDelete PersistentVolumeReclaimPolicy = "Delete" - // PersistentVolumeReclaimRetain means the volume will be left in its current phase (Released) for manual reclamation by the administrator. - // The default policy is Retain. - PersistentVolumeReclaimRetain PersistentVolumeReclaimPolicy = "Retain" -) - -// PersistentVolumeMode describes how a volume is intended to be consumed, either Block or Filesystem. -type PersistentVolumeMode string - -const ( - // PersistentVolumeBlock means the volume will not be formatted with a filesystem and will remain a raw block device. - PersistentVolumeBlock PersistentVolumeMode = "Block" - // PersistentVolumeFilesystem means the volume will be or is formatted with a filesystem. - PersistentVolumeFilesystem PersistentVolumeMode = "Filesystem" -) - -// PersistentVolumeStatus represents the status of PV storage -type PersistentVolumeStatus struct { - // Phase indicates if a volume is available, bound to a claim, or released by a claim - // +optional - Phase PersistentVolumePhase - // A human-readable message indicating details about why the volume is in this state. - // +optional - Message string - // Reason is a brief CamelCase string that describes any failure and is meant for machine parsing and tidy display in the CLI - // +optional - Reason string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PersistentVolumeList represents a list of PVs -type PersistentVolumeList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - Items []PersistentVolume -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PersistentVolumeClaim is a user's request for and claim to a persistent volume -type PersistentVolumeClaim struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Spec defines the volume requested by a pod author - // +optional - Spec PersistentVolumeClaimSpec - - // Status represents the current information about a claim - // +optional - Status PersistentVolumeClaimStatus -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PersistentVolumeClaimList represents the list of PV claims -type PersistentVolumeClaimList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - Items []PersistentVolumeClaim -} - -// PersistentVolumeClaimSpec describes the common attributes of storage devices -// and allows a Source for provider-specific attributes -type PersistentVolumeClaimSpec struct { - // Contains the types of access modes required - // +optional - AccessModes []PersistentVolumeAccessMode - // A label query over volumes to consider for binding. This selector is - // ignored when VolumeName is set - // +optional - Selector *metav1.LabelSelector - // Resources represents the minimum resources required - // +optional - Resources ResourceRequirements - // VolumeName is the binding reference to the PersistentVolume backing this - // claim. When set to non-empty value Selector is not evaluated - // +optional - VolumeName string - // Name of the StorageClass required by the claim. - // More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1 - // +optional - StorageClassName *string - // volumeMode defines what type of volume is required by the claim. - // Value of Filesystem is implied when not included in claim spec. - // +optional - VolumeMode *PersistentVolumeMode - // This field can be used to specify either: - // * An existing VolumeSnapshot object (snapshot.storage.k8s.io/VolumeSnapshot - Beta) - // * An existing PVC (PersistentVolumeClaim) - // * An existing custom resource/object that implements data population (Alpha) - // In order to use VolumeSnapshot object types, the appropriate feature gate - // must be enabled (VolumeSnapshotDataSource or AnyVolumeDataSource) - // If the provisioner or an external controller can support the specified data source, - // it will create a new volume based on the contents of the specified data source. - // If the specified data source is not supported, the volume will - // not be created and the failure will be reported as an event. - // In the future, we plan to support more data source types and the behavior - // of the provisioner may change. - // +optional - DataSource *TypedLocalObjectReference -} - -// PersistentVolumeClaimConditionType defines the condition of PV claim. -// Valid values are either "Resizing" or "FileSystemResizePending". -type PersistentVolumeClaimConditionType string - -// These are valid conditions of Pvc -const ( - // An user trigger resize of pvc has been started - PersistentVolumeClaimResizing PersistentVolumeClaimConditionType = "Resizing" - // PersistentVolumeClaimFileSystemResizePending - controller resize is finished and a file system resize is pending on node - PersistentVolumeClaimFileSystemResizePending PersistentVolumeClaimConditionType = "FileSystemResizePending" -) - -// PersistentVolumeClaimCondition represents the current condition of PV claim -type PersistentVolumeClaimCondition struct { - Type PersistentVolumeClaimConditionType - Status ConditionStatus - // +optional - LastProbeTime metav1.Time - // +optional - LastTransitionTime metav1.Time - // +optional - Reason string - // +optional - Message string -} - -// PersistentVolumeClaimStatus represents the status of PV claim -type PersistentVolumeClaimStatus struct { - // Phase represents the current phase of PersistentVolumeClaim - // +optional - Phase PersistentVolumeClaimPhase - // AccessModes contains all ways the volume backing the PVC can be mounted - // +optional - AccessModes []PersistentVolumeAccessMode - // Represents the actual resources of the underlying volume - // +optional - Capacity ResourceList - // +optional - Conditions []PersistentVolumeClaimCondition -} - -// PersistentVolumeAccessMode defines various access modes for PV. -type PersistentVolumeAccessMode string - -// These are the valid values for PersistentVolumeAccessMode -const ( - // can be mounted read/write mode to exactly 1 host - ReadWriteOnce PersistentVolumeAccessMode = "ReadWriteOnce" - // can be mounted in read-only mode to many hosts - ReadOnlyMany PersistentVolumeAccessMode = "ReadOnlyMany" - // can be mounted in read/write mode to many hosts - ReadWriteMany PersistentVolumeAccessMode = "ReadWriteMany" -) - -// PersistentVolumePhase defines the phase in which a PV is -type PersistentVolumePhase string - -// These are the valid values for PersistentVolumePhase -const ( - // used for PersistentVolumes that are not available - VolumePending PersistentVolumePhase = "Pending" - // used for PersistentVolumes that are not yet bound - // Available volumes are held by the binder and matched to PersistentVolumeClaims - VolumeAvailable PersistentVolumePhase = "Available" - // used for PersistentVolumes that are bound - VolumeBound PersistentVolumePhase = "Bound" - // used for PersistentVolumes where the bound PersistentVolumeClaim was deleted - // released volumes must be recycled before becoming available again - // this phase is used by the persistent volume claim binder to signal to another process to reclaim the resource - VolumeReleased PersistentVolumePhase = "Released" - // used for PersistentVolumes that failed to be correctly recycled or deleted after being released from a claim - VolumeFailed PersistentVolumePhase = "Failed" -) - -// PersistentVolumeClaimPhase defines the phase of PV claim -type PersistentVolumeClaimPhase string - -// These are the valid value for PersistentVolumeClaimPhase -const ( - // used for PersistentVolumeClaims that are not yet bound - ClaimPending PersistentVolumeClaimPhase = "Pending" - // used for PersistentVolumeClaims that are bound - ClaimBound PersistentVolumeClaimPhase = "Bound" - // used for PersistentVolumeClaims that lost their underlying - // PersistentVolume. The claim was bound to a PersistentVolume and this - // volume does not exist any longer and all data on it was lost. - ClaimLost PersistentVolumeClaimPhase = "Lost" -) - -// HostPathType defines the type of host path for PV -type HostPathType string - -// These are the valid values for HostPathType -const ( - // For backwards compatible, leave it empty if unset - HostPathUnset HostPathType = "" - // If nothing exists at the given path, an empty directory will be created there - // as needed with file mode 0755, having the same group and ownership with Kubelet. - HostPathDirectoryOrCreate HostPathType = "DirectoryOrCreate" - // A directory must exist at the given path - HostPathDirectory HostPathType = "Directory" - // If nothing exists at the given path, an empty file will be created there - // as needed with file mode 0644, having the same group and ownership with Kubelet. - HostPathFileOrCreate HostPathType = "FileOrCreate" - // A file must exist at the given path - HostPathFile HostPathType = "File" - // A UNIX socket must exist at the given path - HostPathSocket HostPathType = "Socket" - // A character device must exist at the given path - HostPathCharDev HostPathType = "CharDevice" - // A block device must exist at the given path - HostPathBlockDev HostPathType = "BlockDevice" -) - -// HostPathVolumeSource represents a host path mapped into a pod. -// Host path volumes do not support ownership management or SELinux relabeling. -type HostPathVolumeSource struct { - // If the path is a symlink, it will follow the link to the real path. - Path string - // Defaults to "" - Type *HostPathType -} - -// EmptyDirVolumeSource represents an empty directory for a pod. -// Empty directory volumes support ownership management and SELinux relabeling. -type EmptyDirVolumeSource struct { - // TODO: Longer term we want to represent the selection of underlying - // media more like a scheduling problem - user says what traits they - // need, we give them a backing store that satisfies that. For now - // this will cover the most common needs. - // Optional: what type of storage medium should back this directory. - // The default is "" which means to use the node's default medium. - // +optional - Medium StorageMedium - // Total amount of local storage required for this EmptyDir volume. - // The size limit is also applicable for memory medium. - // The maximum usage on memory medium EmptyDir would be the minimum value between - // the SizeLimit specified here and the sum of memory limits of all containers in a pod. - // The default is nil which means that the limit is undefined. - // More info: http://kubernetes.io/docs/user-guide/volumes#emptydir - // +optional - SizeLimit *resource.Quantity -} - -// StorageMedium defines ways that storage can be allocated to a volume. -type StorageMedium string - -// These are the valid value for StorageMedium -const ( - StorageMediumDefault StorageMedium = "" // use whatever the default is for the node - StorageMediumMemory StorageMedium = "Memory" // use memory (tmpfs) - StorageMediumHugePages StorageMedium = "HugePages" // use hugepages - StorageMediumHugePagesPrefix StorageMedium = "HugePages-" // prefix for full medium notation HugePages- -) - -// Protocol defines network protocols supported for things like container ports. -type Protocol string - -const ( - // ProtocolTCP is the TCP protocol. - ProtocolTCP Protocol = "TCP" - // ProtocolUDP is the UDP protocol. - ProtocolUDP Protocol = "UDP" - // ProtocolSCTP is the SCTP protocol. - ProtocolSCTP Protocol = "SCTP" -) - -// GCEPersistentDiskVolumeSource represents a Persistent Disk resource in Google Compute Engine. -// -// A GCE PD must exist before mounting to a container. The disk must -// also be in the same GCE project and zone as the kubelet. A GCE PD -// can only be mounted as read/write once or read-only many times. GCE -// PDs support ownership management and SELinux relabeling. -type GCEPersistentDiskVolumeSource struct { - // Unique name of the PD resource. Used to identify the disk in GCE - PDName 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: Partition on the disk to mount. - // If omitted, kubelet will attempt to mount the device name. - // Ex. For /dev/sda1, this field is "1", for /dev/sda, this field is 0 or empty. - // +optional - Partition int32 - // Optional: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool -} - -// ISCSIVolumeSource represents an ISCSI disk. -// ISCSI volumes can only be mounted as read/write once. -// ISCSI volumes support ownership management and SELinux relabeling. -type ISCSIVolumeSource struct { - // Required: iSCSI target portal - // the portal is either an IP or ip_addr:port if port is other than default (typically TCP ports 860 and 3260) - // +optional - TargetPortal string - // Required: target iSCSI Qualified Name - // +optional - IQN string - // Required: iSCSI target lun number - // +optional - Lun int32 - // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport. - // +optional - ISCSIInterface 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: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool - // Optional: list of iSCSI target portal ips for high availability. - // the portal is either an IP or ip_addr:port if port is other than default (typically TCP ports 860 and 3260) - // +optional - Portals []string - // Optional: whether support iSCSI Discovery CHAP authentication - // +optional - DiscoveryCHAPAuth bool - // Optional: whether support iSCSI Session CHAP authentication - // +optional - SessionCHAPAuth bool - // Optional: CHAP secret for iSCSI target and initiator authentication. - // The secret is used if either DiscoveryCHAPAuth or SessionCHAPAuth is true - // +optional - SecretRef *LocalObjectReference - // Optional: Custom initiator name per volume. - // If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface - // : will be created for the connection. - // +optional - InitiatorName *string -} - -// ISCSIPersistentVolumeSource represents an ISCSI disk. -// ISCSI volumes can only be mounted as read/write once. -// ISCSI volumes support ownership management and SELinux relabeling. -type ISCSIPersistentVolumeSource struct { - // Required: iSCSI target portal - // the portal is either an IP or ip_addr:port if port is other than default (typically TCP ports 860 and 3260) - // +optional - TargetPortal string - // Required: target iSCSI Qualified Name - // +optional - IQN string - // Required: iSCSI target lun number - // +optional - Lun int32 - // Optional: Defaults to 'default' (tcp). iSCSI interface name that uses an iSCSI transport. - // +optional - ISCSIInterface 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: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool - // Optional: list of iSCSI target portal ips for high availability. - // the portal is either an IP or ip_addr:port if port is other than default (typically TCP ports 860 and 3260) - // +optional - Portals []string - // Optional: whether support iSCSI Discovery CHAP authentication - // +optional - DiscoveryCHAPAuth bool - // Optional: whether support iSCSI Session CHAP authentication - // +optional - SessionCHAPAuth bool - // Optional: CHAP secret for iSCSI target and initiator authentication. - // The secret is used if either DiscoveryCHAPAuth or SessionCHAPAuth is true - // +optional - SecretRef *SecretReference - // Optional: Custom initiator name per volume. - // If initiatorName is specified with iscsiInterface simultaneously, new iSCSI interface - // : will be created for the connection. - // +optional - InitiatorName *string -} - -// FCVolumeSource represents a Fibre Channel volume. -// Fibre Channel volumes can only be mounted as read/write once. -// Fibre Channel volumes support ownership management and SELinux relabeling. -type FCVolumeSource struct { - // Optional: FC target worldwide names (WWNs) - // +optional - TargetWWNs []string - // Optional: FC target lun number - // +optional - Lun *int32 - // 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: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool - // Optional: FC volume World Wide Identifiers (WWIDs) - // Either WWIDs or TargetWWNs and Lun must be set, but not both simultaneously. - // +optional - WWIDs []string -} - -// FlexPersistentVolumeSource represents a generic persistent volume resource that is -// provisioned/attached using an exec based plugin. -type FlexPersistentVolumeSource struct { - // Driver is the name of the driver to use for this volume. - Driver string - // Filesystem type to mount. - // Must be a filesystem type supported by the host operating system. - // Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. - // +optional - FSType string - // Optional: SecretRef is reference to the secret object containing - // sensitive information to pass to the plugin scripts. This may be - // empty if no secret object is specified. If the secret object - // contains more than one secret, all secrets are passed to the plugin - // scripts. - // +optional - SecretRef *SecretReference - // Optional: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool - // Optional: Extra driver options if any. - // +optional - Options map[string]string -} - -// FlexVolumeSource represents a generic volume resource that is -// provisioned/attached using an exec based plugin. -type FlexVolumeSource struct { - // Driver is the name of the driver to use for this volume. - Driver string - // Filesystem type to mount. - // Must be a filesystem type supported by the host operating system. - // Ex. "ext4", "xfs", "ntfs". The default filesystem depends on FlexVolume script. - // +optional - FSType string - // Optional: SecretRef is reference to the secret object containing - // sensitive information to pass to the plugin scripts. This may be - // empty if no secret object is specified. If the secret object - // contains more than one secret, all secrets are passed to the plugin - // scripts. - // +optional - SecretRef *LocalObjectReference - // Optional: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool - // Optional: Extra driver options if any. - // +optional - Options map[string]string -} - -// AWSElasticBlockStoreVolumeSource represents a Persistent Disk resource in AWS. -// -// An AWS EBS disk must exist before mounting to a container. The disk -// must also be in the same AWS zone as the kubelet. An AWS EBS disk -// can only be mounted as read/write once. AWS EBS volumes support -// ownership management and SELinux relabeling. -type AWSElasticBlockStoreVolumeSource struct { - // Unique id of the persistent disk resource. Used to identify the disk in AWS - VolumeID 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: Partition on the disk to mount. - // If omitted, kubelet will attempt to mount the device name. - // Ex. For /dev/sda1, this field is "1", for /dev/sda, this field is 0 or empty. - // +optional - Partition int32 - // Optional: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool -} - -// GitRepoVolumeSource represents a volume that is populated with the contents of a git repository. -// Git repo volumes do not support ownership management. -// Git repo volumes support SELinux relabeling. -// -// DEPRECATED: GitRepo is deprecated. To provision a container with a git repo, mount an -// EmptyDir into an InitContainer that clones the repo using git, then mount the EmptyDir -// into the Pod's container. -type GitRepoVolumeSource struct { - // Repository URL - Repository string - // Commit hash, this is optional - // +optional - Revision string - // Clone target, this is optional - // Must not contain or start with '..'. If '.' is supplied, the volume directory will be the - // git repository. Otherwise, if specified, the volume will contain the git repository in - // the subdirectory with the given name. - // +optional - Directory string - // TODO: Consider credentials here. -} - -// SecretVolumeSource adapts a Secret into a volume. -// -// The contents of the target Secret's Data field will be presented in a volume -// as files using the keys in the Data field as the file names. -// Secret volumes support ownership management and SELinux relabeling. -type SecretVolumeSource struct { - // Name of the secret in the pod's namespace to use. - // +optional - SecretName string - // If unspecified, each key-value pair in the Data field of the referenced - // Secret will be projected into the volume as a file whose name is the - // key and content is the value. If specified, the listed keys will be - // projected into the specified paths, and unlisted keys will not be - // present. If a key is specified which is not present in the Secret, - // the volume setup will error unless it is marked optional. Paths must be - // relative and may not contain the '..' path or start with '..'. - // +optional - Items []KeyToPath - // Mode bits to use on created files by default. Must be a value between - // 0 and 0777. - // Directories within the path are not affected by this setting. - // This might be in conflict with other options that affect the file - // mode, like fsGroup, and the result can be other mode bits set. - // +optional - DefaultMode *int32 - // Specify whether the Secret or its key must be defined - // +optional - Optional *bool -} - -// SecretProjection adapts a secret into a projected volume. -// -// The contents of the target Secret's Data field will be presented in a -// projected volume as files using the keys in the Data field as the file names. -// Note that this is identical to a secret volume source without the default -// mode. -type SecretProjection struct { - LocalObjectReference - // If unspecified, each key-value pair in the Data field of the referenced - // Secret will be projected into the volume as a file whose name is the - // key and content is the value. If specified, the listed keys will be - // projected into the specified paths, and unlisted keys will not be - // present. If a key is specified which is not present in the Secret, - // the volume setup will error unless it is marked optional. Paths must be - // relative and may not contain the '..' path or start with '..'. - // +optional - Items []KeyToPath - // Specify whether the Secret or its key must be defined - // +optional - Optional *bool -} - -// NFSVolumeSource represents an NFS mount that lasts the lifetime of a pod. -// NFS volumes do not support ownership management or SELinux relabeling. -type NFSVolumeSource struct { - // Server is the hostname or IP address of the NFS server - Server string - - // Path is the exported NFS share - Path string - - // Optional: Defaults to false (read/write). ReadOnly here will force - // the NFS export to be mounted with read-only permissions - // +optional - ReadOnly bool -} - -// QuobyteVolumeSource represents a Quobyte mount that lasts the lifetime of a pod. -// Quobyte volumes do not support ownership management or SELinux relabeling. -type QuobyteVolumeSource struct { - // Registry represents a single or multiple Quobyte Registry services - // specified as a string as host:port pair (multiple entries are separated with commas) - // which acts as the central registry for volumes - Registry string - - // Volume is a string that references an already created Quobyte volume by name. - Volume string - - // Defaults to false (read/write). ReadOnly here will force - // the Quobyte to be mounted with read-only permissions - // +optional - ReadOnly bool - - // User to map volume access to - // Defaults to the root user - // +optional - User string - - // Group to map volume access to - // Default is no group - // +optional - Group string - - // Tenant owning the given Quobyte volume in the Backend - // Used with dynamically provisioned Quobyte volumes, value is set by the plugin - // +optional - Tenant string -} - -// GlusterfsVolumeSource represents a Glusterfs mount that lasts the lifetime of a pod. -// Glusterfs volumes do not support ownership management or SELinux relabeling. -type GlusterfsVolumeSource struct { - // Required: EndpointsName is the endpoint name that details Glusterfs topology - EndpointsName string - - // Required: Path is the Glusterfs volume path - Path string - - // Optional: Defaults to false (read/write). ReadOnly here will force - // the Glusterfs to be mounted with read-only permissions - // +optional - ReadOnly bool -} - -// GlusterfsPersistentVolumeSource represents a Glusterfs mount that lasts the lifetime of a pod. -// Glusterfs volumes do not support ownership management or SELinux relabeling. -type GlusterfsPersistentVolumeSource struct { - // EndpointsName is the endpoint name that details Glusterfs topology. - // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - EndpointsName string - - // Path is the Glusterfs volume path. - // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - Path string - - // ReadOnly here will force the Glusterfs volume to be mounted with read-only permissions. - // Defaults to false. - // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - // +optional - ReadOnly bool - - // EndpointsNamespace is the namespace that contains Glusterfs endpoint. - // If this field is empty, the EndpointNamespace defaults to the same namespace as the bound PVC. - // More info: https://examples.k8s.io/volumes/glusterfs/README.md#create-a-pod - // +optional - EndpointsNamespace *string -} - -// RBDVolumeSource represents a Rados Block Device mount that lasts the lifetime of a pod. -// RBD volumes support ownership management and SELinux relabeling. -type RBDVolumeSource 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 name of the authentication secret for RBDUser, default is nil. - // +optional - SecretRef *LocalObjectReference - // Optional: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool -} - -// RBDPersistentVolumeSource 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 -} - -// CinderVolumeSource 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 -// management and SELinux relabeling. -type CinderVolumeSource struct { - // Unique id of the volume used to identify the cinder volume. - VolumeID 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 - // Optional: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool - // Optional: points to a secret object containing parameters used to connect - // to OpenStack. - // +optional - SecretRef *LocalObjectReference -} - -// CinderPersistentVolumeSource 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 -// management and SELinux relabeling. -type CinderPersistentVolumeSource struct { - // Unique id of the volume used to identify the cinder volume. - VolumeID 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 - // Optional: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool - // Optional: points to a secret object containing parameters used to connect - // to OpenStack. - // +optional - SecretRef *SecretReference -} - -// CephFSVolumeSource represents a Ceph Filesystem mount that lasts the lifetime of a pod -// Cephfs volumes do not support ownership management or SELinux relabeling. -type CephFSVolumeSource struct { - // Required: Monitors is a collection of Ceph monitors - Monitors []string - // Optional: Used as the mounted root, rather than the full Ceph tree, default is / - // +optional - Path string - // Optional: User is the rados user name, default is admin - // +optional - User string - // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - // +optional - SecretFile string - // Optional: SecretRef is reference to the authentication secret for User, default is empty. - // +optional - SecretRef *LocalObjectReference - // Optional: Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool -} - -// SecretReference represents a Secret Reference. It has enough information to retrieve secret -// in any namespace -type SecretReference struct { - // Name is unique within a namespace to reference a secret resource. - // +optional - Name string - // Namespace defines the space within which the secret name must be unique. - // +optional - Namespace string -} - -// CephFSPersistentVolumeSource represents a Ceph Filesystem mount that lasts the lifetime of a pod -// Cephfs volumes do not support ownership management or SELinux relabeling. -type CephFSPersistentVolumeSource struct { - // Required: Monitors is a collection of Ceph monitors - Monitors []string - // Optional: Used as the mounted root, rather than the full Ceph tree, default is / - // +optional - Path string - // Optional: User is the rados user name, default is admin - // +optional - User string - // Optional: SecretFile is the path to key ring for User, default is /etc/ceph/user.secret - // +optional - SecretFile 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 -} - -// FlockerVolumeSource represents a Flocker volume mounted by the Flocker agent. -// One and only one of datasetName and datasetUUID should be set. -// Flocker volumes do not support ownership management or SELinux relabeling. -type FlockerVolumeSource struct { - // Name of the dataset stored as metadata -> name on the dataset for Flocker - // should be considered as deprecated - // +optional - DatasetName string - // UUID of the dataset. This is unique identifier of a Flocker dataset - // +optional - DatasetUUID string -} - -// DownwardAPIVolumeSource represents a volume containing downward API info. -// Downward API volumes support ownership management and SELinux relabeling. -type DownwardAPIVolumeSource struct { - // Items is a list of DownwardAPIVolume file - // +optional - Items []DownwardAPIVolumeFile - // Mode bits to use on created files by default. Must be a value between - // 0 and 0777. - // Directories within the path are not affected by this setting. - // This might be in conflict with other options that affect the file - // mode, like fsGroup, and the result can be other mode bits set. - // +optional - DefaultMode *int32 -} - -// DownwardAPIVolumeFile represents a single file containing information from the downward API -type DownwardAPIVolumeFile struct { - // Required: Path is the relative path name of the file to be created. Must not be absolute or contain the '..' path. Must be utf-8 encoded. The first item of the relative path must not start with '..' - Path string - // Required: Selects a field of the pod: only annotations, labels, name, namespace and uid are supported. - // +optional - FieldRef *ObjectFieldSelector - // Selects a resource of the container: only resources limits and requests - // (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported. - // +optional - ResourceFieldRef *ResourceFieldSelector - // Optional: mode bits to use on this file, must be a value between 0 - // and 0777. If not specified, the volume defaultMode will be used. - // This might be in conflict with other options that affect the file - // mode, like fsGroup, and the result can be other mode bits set. - // +optional - Mode *int32 -} - -// DownwardAPIProjection represents downward API info for projecting into a projected volume. -// Note that this is identical to a downwardAPI volume source without the default -// mode. -type DownwardAPIProjection struct { - // Items is a list of DownwardAPIVolume file - // +optional - Items []DownwardAPIVolumeFile -} - -// AzureFileVolumeSource azureFile represents an Azure File Service mount on the host and bind mount to the pod. -type AzureFileVolumeSource struct { - // the name of secret that contains Azure Storage Account Name and Key - SecretName string - // Share Name - ShareName string - // Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool -} - -// AzureFilePersistentVolumeSource represents an Azure File Service mount on the host and bind mount to the pod. -type AzureFilePersistentVolumeSource struct { - // the name of secret that contains Azure Storage Account Name and Key - SecretName string - // Share Name - ShareName string - // Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool - // the namespace of the secret that contains Azure Storage Account Name and Key - // default is the same as the Pod - // +optional - SecretNamespace *string -} - -// VsphereVirtualDiskVolumeSource represents a vSphere volume resource. -type VsphereVirtualDiskVolumeSource struct { - // Path that identifies vSphere volume vmdk - VolumePath 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 - // Storage Policy Based Management (SPBM) profile name. - // +optional - StoragePolicyName string - // Storage Policy Based Management (SPBM) profile ID associated with the StoragePolicyName. - // +optional - StoragePolicyID string -} - -// PhotonPersistentDiskVolumeSource represents a Photon Controller persistent disk resource. -type PhotonPersistentDiskVolumeSource struct { - // ID that identifies Photon Controller persistent disk - PdID 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. - FSType string -} - -// PortworxVolumeSource represents a Portworx volume resource. -type PortworxVolumeSource struct { - // VolumeID uniquely identifies a Portworx volume - VolumeID string - // FSType represents the filesystem type to mount - // Must be a filesystem type supported by the host operating system. - // Ex. "ext4", "xfs". 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 -} - -// AzureDataDiskCachingMode defines the caching mode for Azure data disk -type AzureDataDiskCachingMode string - -// AzureDataDiskKind defines the kind of Azure data disk -type AzureDataDiskKind string - -// Defines cache mode and kinds for Azure data disk -const ( - AzureDataDiskCachingNone AzureDataDiskCachingMode = "None" - AzureDataDiskCachingReadOnly AzureDataDiskCachingMode = "ReadOnly" - AzureDataDiskCachingReadWrite AzureDataDiskCachingMode = "ReadWrite" - - AzureSharedBlobDisk AzureDataDiskKind = "Shared" - AzureDedicatedBlobDisk AzureDataDiskKind = "Dedicated" - AzureManagedDisk AzureDataDiskKind = "Managed" -) - -// AzureDiskVolumeSource represents an Azure Data Disk mount on the host and bind mount to the pod. -type AzureDiskVolumeSource struct { - // The Name of the data disk in the blob storage - DiskName string - // The URI of the data disk in the blob storage - DataDiskURI string - // Host Caching mode: None, Read Only, Read Write. - // +optional - CachingMode *AzureDataDiskCachingMode - // 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 - // 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 -} - -// ScaleIOVolumeSource represents a persistent ScaleIO volume -type ScaleIOVolumeSource 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 *LocalObjectReference - // 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. - // Default is ThinProvisioned. - // +optional - StorageMode string - // The name of a volume already 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". - // Default is "xfs". - // +optional - FSType string - // Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - 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. - // Default is 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". - // Default is "xfs". - // +optional - FSType string - // Defaults to false (read/write). ReadOnly here will force - // the ReadOnly setting in VolumeMounts. - // +optional - ReadOnly bool -} - -// StorageOSVolumeSource represents a StorageOS persistent volume resource. -type StorageOSVolumeSource struct { - // VolumeName is the human-readable name of the StorageOS volume. Volume - // names are only unique within a namespace. - VolumeName string - // VolumeNamespace specifies the scope of the volume within StorageOS. If no - // namespace is specified then the Pod's namespace will be used. This allows the - // Kubernetes name scoping to be mirrored within StorageOS for tighter integration. - // Set VolumeName to any name to override the default behaviour. - // Set to "default" if you are not using namespaces within StorageOS. - // Namespaces that do not pre-exist within StorageOS will be created. - // +optional - VolumeNamespace 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 - // SecretRef specifies the secret to use for obtaining the StorageOS API - // credentials. If not specified, default values will be attempted. - // +optional - SecretRef *LocalObjectReference -} - -// StorageOSPersistentVolumeSource represents a StorageOS persistent volume resource. -type StorageOSPersistentVolumeSource struct { - // VolumeName is the human-readable name of the StorageOS volume. Volume - // names are only unique within a namespace. - VolumeName string - // VolumeNamespace specifies the scope of the volume within StorageOS. If no - // namespace is specified then the Pod's namespace will be used. This allows the - // Kubernetes name scoping to be mirrored within StorageOS for tighter integration. - // Set VolumeName to any name to override the default behaviour. - // Set to "default" if you are not using namespaces within StorageOS. - // Namespaces that do not pre-exist within StorageOS will be created. - // +optional - VolumeNamespace 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 - // SecretRef specifies the secret to use for obtaining the StorageOS API - // credentials. If not specified, default values will be attempted. - // +optional - SecretRef *ObjectReference -} - -// ConfigMapVolumeSource adapts a ConfigMap into a volume. -// -// The contents of the target ConfigMap's Data field will be presented in a -// volume as files using the keys in the Data field as the file names, unless -// the items element is populated with specific mappings of keys to paths. -// ConfigMap volumes support ownership management and SELinux relabeling. -type ConfigMapVolumeSource struct { - LocalObjectReference - // If unspecified, each key-value pair in the Data field of the referenced - // ConfigMap will be projected into the volume as a file whose name is the - // key and content is the value. If specified, the listed keys will be - // projected into the specified paths, and unlisted keys will not be - // present. If a key is specified which is not present in the ConfigMap, - // the volume setup will error unless it is marked optional. Paths must be - // relative and may not contain the '..' path or start with '..'. - // +optional - Items []KeyToPath - // Mode bits to use on created files by default. Must be a value between - // 0 and 0777. - // Directories within the path are not affected by this setting. - // This might be in conflict with other options that affect the file - // mode, like fsGroup, and the result can be other mode bits set. - // +optional - DefaultMode *int32 - // Specify whether the ConfigMap or its keys must be defined - // +optional - Optional *bool -} - -// ConfigMapProjection adapts a ConfigMap into a projected volume. -// -// The contents of the target ConfigMap's Data field will be presented in a -// projected volume as files using the keys in the Data field as the file names, -// unless the items element is populated with specific mappings of keys to paths. -// Note that this is identical to a configmap volume source without the default -// mode. -type ConfigMapProjection struct { - LocalObjectReference - // If unspecified, each key-value pair in the Data field of the referenced - // ConfigMap will be projected into the volume as a file whose name is the - // key and content is the value. If specified, the listed keys will be - // projected into the specified paths, and unlisted keys will not be - // present. If a key is specified which is not present in the ConfigMap, - // the volume setup will error unless it is marked optional. Paths must be - // relative and may not contain the '..' path or start with '..'. - // +optional - Items []KeyToPath - // Specify whether the ConfigMap or its keys must be defined - // +optional - Optional *bool -} - -// ServiceAccountTokenProjection represents a projected service account token -// volume. This projection can be used to insert a service account token into -// the pods runtime filesystem for use against APIs (Kubernetes API Server or -// otherwise). -type ServiceAccountTokenProjection struct { - // Audience is the intended audience of the token. A recipient of a token - // must identify itself with an identifier specified in the audience of the - // token, and otherwise should reject the token. The audience defaults to the - // identifier of the apiserver. - Audience string - // ExpirationSeconds is the requested duration of validity of the service - // account token. As the token approaches expiration, the kubelet volume - // plugin will proactively rotate the service account token. The kubelet will - // start trying to rotate the token if the token is older than 80 percent of - // its time to live or if the token is older than 24 hours.Defaults to 1 hour - // and must be at least 10 minutes. - ExpirationSeconds int64 - // Path is the path relative to the mount point of the file to project the - // token into. - Path string -} - -// ProjectedVolumeSource represents a projected volume source -type ProjectedVolumeSource struct { - // list of volume projections - Sources []VolumeProjection - // Mode bits to use on created files by default. Must be a value between - // 0 and 0777. - // Directories within the path are not affected by this setting. - // This might be in conflict with other options that affect the file - // mode, like fsGroup, and the result can be other mode bits set. - // +optional - DefaultMode *int32 -} - -// VolumeProjection that may be projected along with other supported volume types -type VolumeProjection struct { - // all types below are the supported types for projection into the same volume - - // information about the secret data to project - Secret *SecretProjection - // information about the downwardAPI data to project - DownwardAPI *DownwardAPIProjection - // information about the configMap data to project - ConfigMap *ConfigMapProjection - // information about the serviceAccountToken data to project - ServiceAccountToken *ServiceAccountTokenProjection -} - -// KeyToPath maps a string key to a path within a volume. -type KeyToPath struct { - // The key to project. - Key string - - // The relative path of the file to map the key to. - // May not be an absolute path. - // May not contain the path element '..'. - // May not start with the string '..'. - Path string - // Optional: mode bits to use on this file, should be a value between 0 - // and 0777. If not specified, the volume defaultMode will be used. - // This might be in conflict with other options that affect the file - // mode, like fsGroup, and the result can be other mode bits set. - // +optional - Mode *int32 -} - -// LocalVolumeSource represents directly-attached storage with node affinity (Beta feature) -type LocalVolumeSource struct { - // The full path to the volume on the node. - // It can be either a directory or block device (disk, partition, ...). - Path string - - // Filesystem type to mount. - // It applies only when the Path is a block device. - // Must be a filesystem type supported by the host operating system. - // Ex. "ext4", "xfs", "ntfs". The default value is to auto-select a fileystem if unspecified. - // +optional - FSType *string -} - -// CSIPersistentVolumeSource represents storage that is managed by an external CSI volume driver. -type CSIPersistentVolumeSource struct { - // Driver is the name of the driver to use for this volume. - // Required. - Driver string - - // VolumeHandle is the unique volume name returned by the CSI volume - // plugin’s CreateVolume to refer to the volume on all subsequent calls. - // Required. - VolumeHandle string - - // Optional: The value to pass to ControllerPublishVolumeRequest. - // Defaults to false (read/write). - // +optional - ReadOnly bool - - // Filesystem type to mount. - // Must be a filesystem type supported by the host operating system. - // Ex. "ext4", "xfs", "ntfs". - // +optional - FSType string - - // Attributes of the volume to publish. - // +optional - VolumeAttributes map[string]string - - // ControllerPublishSecretRef is a reference to the secret object containing - // sensitive information to pass to the CSI driver to complete the CSI - // ControllerPublishVolume and ControllerUnpublishVolume calls. - // This field is optional, and may be empty if no secret is required. If the - // secret object contains more than one secret, all secrets are passed. - // +optional - ControllerPublishSecretRef *SecretReference - - // NodeStageSecretRef is a reference to the secret object containing sensitive - // information to pass to the CSI driver to complete the CSI NodeStageVolume - // and NodeStageVolume and NodeUnstageVolume calls. - // This field is optional, and may be empty if no secret is required. If the - // secret object contains more than one secret, all secrets are passed. - // +optional - NodeStageSecretRef *SecretReference - - // NodePublishSecretRef is a reference to the secret object containing - // sensitive information to pass to the CSI driver to complete the CSI - // NodePublishVolume and NodeUnpublishVolume calls. - // This field is optional, and may be empty if no secret is required. If the - // secret object contains more than one secret, all secrets are passed. - // +optional - NodePublishSecretRef *SecretReference - - // ControllerExpandSecretRef is a reference to the secret object containing - // sensitive information to pass to the CSI driver to complete the CSI - // ControllerExpandVolume call. - // This is an alpha field and requires enabling ExpandCSIVolumes feature gate. - // This field is optional, and may be empty if no secret is required. If the - // secret object contains more than one secret, all secrets are passed. - // +optional - ControllerExpandSecretRef *SecretReference -} - -// CSIVolumeSource represents a source location of a volume to mount, managed by an external CSI driver -type CSIVolumeSource struct { - // Driver is the name of the CSI driver that handles this volume. - // Consult with your admin for the correct name as registered in the cluster. - // Required. - Driver string - - // Specifies a read-only configuration for the volume. - // Defaults to false (read/write). - // +optional - ReadOnly *bool - - // Filesystem type to mount. Ex. "ext4", "xfs", "ntfs". - // If not provided, the empty value is passed to the associated CSI driver - // which will determine the default filesystem to apply. - // +optional - FSType *string - - // VolumeAttributes stores driver-specific properties that are passed to the CSI - // driver. Consult your driver's documentation for supported values. - // +optional - VolumeAttributes map[string]string - - // NodePublishSecretRef is a reference to the secret object containing - // sensitive information to pass to the CSI driver to complete the CSI - // NodePublishVolume and NodeUnpublishVolume calls. - // This field is optional, and may be empty if no secret is required. If the - // secret object contains more than one secret, all secret references are passed. - // +optional - NodePublishSecretRef *LocalObjectReference -} - -// ContainerPort represents a network port in a single container -type ContainerPort struct { - // Optional: If specified, this must be an IANA_SVC_NAME Each named port - // in a pod must have a unique name. - // +optional - Name string - // Optional: If specified, this must be a valid port number, 0 < x < 65536. - // If HostNetwork is specified, this must match ContainerPort. - // +optional - HostPort int32 - // Required: This must be a valid port number, 0 < x < 65536. - ContainerPort int32 - // Required: Supports "TCP", "UDP" and "SCTP" - // +optional - Protocol Protocol - // Optional: What host IP to bind the external port to. - // +optional - HostIP string -} - -// VolumeMount describes a mounting of a Volume within a container. -type VolumeMount struct { - // Required: This must match the Name of a Volume [above]. - Name string - // Optional: Defaults to false (read-write). - // +optional - ReadOnly bool - // Required. If the path is not an absolute path (e.g. some/path) it - // will be prepended with the appropriate root prefix for the operating - // system. On Linux this is '/', on Windows this is 'C:\'. - MountPath string - // Path within the volume from which the container's volume should be mounted. - // Defaults to "" (volume's root). - // +optional - SubPath string - // mountPropagation determines how mounts are propagated from the host - // to container and the other way around. - // When not set, MountPropagationNone is used. - // This field is beta in 1.10. - // +optional - MountPropagation *MountPropagationMode - // Expanded path within the volume from which the container's volume should be mounted. - // Behaves similarly to SubPath but environment variable references $(VAR_NAME) are expanded using the container's environment. - // Defaults to "" (volume's root). - // SubPathExpr and SubPath are mutually exclusive. - // +optional - SubPathExpr string -} - -// MountPropagationMode describes mount propagation. -type MountPropagationMode string - -const ( - // MountPropagationNone means that the volume in a container will - // not receive new mounts from the host or other containers, and filesystems - // mounted inside the container won't be propagated to the host or other - // containers. - // Note that this mode corresponds to "private" in Linux terminology. - MountPropagationNone MountPropagationMode = "None" - // MountPropagationHostToContainer means that the volume in a container will - // receive new mounts from the host or other containers, but filesystems - // mounted inside the container won't be propagated to the host or other - // containers. - // Note that this mode is recursively applied to all mounts in the volume - // ("rslave" in Linux terminology). - MountPropagationHostToContainer MountPropagationMode = "HostToContainer" - // MountPropagationBidirectional means that the volume in a container will - // receive new mounts from the host or other containers, and its own mounts - // will be propagated from the container to the host or other containers. - // Note that this mode is recursively applied to all mounts in the volume - // ("rshared" in Linux terminology). - MountPropagationBidirectional MountPropagationMode = "Bidirectional" -) - -// VolumeDevice describes a mapping of a raw block device within a container. -type VolumeDevice struct { - // name must match the name of a persistentVolumeClaim in the pod - Name string - // devicePath is the path inside of the container that the device will be mapped to. - DevicePath string -} - -// EnvVar represents an environment variable present in a Container. -type EnvVar struct { - // Required: This must be a C_IDENTIFIER. - Name string - // Optional: no more than one of the following may be specified. - // Optional: Defaults to ""; variable references $(VAR_NAME) are expanded - // using the previous defined environment variables in the container and - // any service environment variables. If a variable cannot be resolved, - // the reference in the input string will be unchanged. The $(VAR_NAME) - // syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped - // references will never be expanded, regardless of whether the variable - // exists or not. - // +optional - Value string - // Optional: Specifies a source the value of this var should come from. - // +optional - ValueFrom *EnvVarSource -} - -// EnvVarSource represents a source for the value of an EnvVar. -// Only one of its fields may be set. -type EnvVarSource struct { - // Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, - // metadata.uid, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP, status.podIPs. - // +optional - FieldRef *ObjectFieldSelector - // Selects a resource of the container: only resources limits and requests - // (limits.cpu, limits.memory, limits.ephemeral-storage, requests.cpu, requests.memory and requests.ephemeral-storage) are currently supported. - // +optional - ResourceFieldRef *ResourceFieldSelector - // Selects a key of a ConfigMap. - // +optional - ConfigMapKeyRef *ConfigMapKeySelector - // Selects a key of a secret in the pod's namespace. - // +optional - SecretKeyRef *SecretKeySelector -} - -// ObjectFieldSelector selects an APIVersioned field of an object. -type ObjectFieldSelector struct { - // Required: Version of the schema the FieldPath is written in terms of. - // If no value is specified, it will be defaulted to the APIVersion of the - // enclosing object. - APIVersion string - // Required: Path of the field to select in the specified API version - FieldPath string -} - -// ResourceFieldSelector represents container resources (cpu, memory) and their output format -type ResourceFieldSelector struct { - // Container name: required for volumes, optional for env vars - // +optional - ContainerName string - // Required: resource to select - Resource string - // Specifies the output format of the exposed resources, defaults to "1" - // +optional - Divisor resource.Quantity -} - -// ConfigMapKeySelector selects a key from a ConfigMap. -type ConfigMapKeySelector struct { - // The ConfigMap to select from. - LocalObjectReference - // The key to select. - Key string - // Specify whether the ConfigMap or its key must be defined - // +optional - Optional *bool -} - -// SecretKeySelector selects a key of a Secret. -type SecretKeySelector struct { - // The name of the secret in the pod's namespace to select from. - LocalObjectReference - // The key of the secret to select from. Must be a valid secret key. - Key string - // Specify whether the Secret or its key must be defined - // +optional - Optional *bool -} - -// EnvFromSource represents the source of a set of ConfigMaps -type EnvFromSource struct { - // An optional identifier to prepend to each key in the ConfigMap. - // +optional - Prefix string - // The ConfigMap to select from. - //+optional - ConfigMapRef *ConfigMapEnvSource - // The Secret to select from. - //+optional - SecretRef *SecretEnvSource -} - -// ConfigMapEnvSource selects a ConfigMap to populate the environment -// variables with. -// -// The contents of the target ConfigMap's Data field will represent the -// key-value pairs as environment variables. -type ConfigMapEnvSource struct { - // The ConfigMap to select from. - LocalObjectReference - // Specify whether the ConfigMap must be defined - // +optional - Optional *bool -} - -// SecretEnvSource selects a Secret to populate the environment -// variables with. -// -// The contents of the target Secret's Data field will represent the -// key-value pairs as environment variables. -type SecretEnvSource struct { - // The Secret to select from. - LocalObjectReference - // Specify whether the Secret must be defined - // +optional - Optional *bool -} - -// HTTPHeader describes a custom header to be used in HTTP probes -type HTTPHeader struct { - // The header field name - Name string - // The header field value - Value string -} - -// HTTPGetAction describes an action based on HTTP Get requests. -type HTTPGetAction struct { - // Optional: Path to access on the HTTP server. - // +optional - Path string - // Required: Name or number of the port to access on the container. - // +optional - Port intstr.IntOrString - // Optional: Host name to connect to, defaults to the pod IP. You - // probably want to set "Host" in httpHeaders instead. - // +optional - Host string - // Optional: Scheme to use for connecting to the host, defaults to HTTP. - // +optional - Scheme URIScheme - // Optional: Custom headers to set in the request. HTTP allows repeated headers. - // +optional - HTTPHeaders []HTTPHeader -} - -// URIScheme identifies the scheme used for connection to a host for Get actions -type URIScheme string - -const ( - // URISchemeHTTP means that the scheme used will be http:// - URISchemeHTTP URIScheme = "HTTP" - // URISchemeHTTPS means that the scheme used will be https:// - URISchemeHTTPS URIScheme = "HTTPS" -) - -// TCPSocketAction describes an action based on opening a socket -type TCPSocketAction struct { - // Required: Port to connect to. - // +optional - Port intstr.IntOrString - // Optional: Host name to connect to, defaults to the pod IP. - // +optional - Host string -} - -// ExecAction describes a "run in container" action. -type ExecAction struct { - // Command is the command line to execute inside the container, the working directory for the - // command is root ('/') in the container's filesystem. The command is simply exec'd, it is - // not run inside a shell, so traditional shell instructions ('|', etc) won't work. To use - // a shell, you need to explicitly call out to that shell. - // +optional - Command []string -} - -// Probe describes a health check to be performed against a container to determine whether it is -// alive or ready to receive traffic. -type Probe struct { - // The action taken to determine the health of a container - Handler - // Length of time before health checking is activated. In seconds. - // +optional - InitialDelaySeconds int32 - // Length of time before health checking times out. In seconds. - // +optional - TimeoutSeconds int32 - // How often (in seconds) to perform the probe. - // +optional - PeriodSeconds int32 - // Minimum consecutive successes for the probe to be considered successful after having failed. - // Must be 1 for liveness and startup. - // +optional - SuccessThreshold int32 - // Minimum consecutive failures for the probe to be considered failed after having succeeded. - // +optional - FailureThreshold int32 -} - -// PullPolicy describes a policy for if/when to pull a container image -type PullPolicy string - -const ( - // PullAlways means that kubelet always attempts to pull the latest image. Container will fail If the pull fails. - PullAlways PullPolicy = "Always" - // PullNever means that kubelet never pulls an image, but only uses a local image. Container will fail if the image isn't present - PullNever PullPolicy = "Never" - // PullIfNotPresent means that kubelet pulls if the image isn't present on disk. Container will fail if the image isn't present and the pull fails. - PullIfNotPresent PullPolicy = "IfNotPresent" -) - -// PreemptionPolicy describes a policy for if/when to preempt a pod. -type PreemptionPolicy string - -const ( - // PreemptLowerPriority means that pod can preempt other pods with lower priority. - PreemptLowerPriority PreemptionPolicy = "PreemptLowerPriority" - // PreemptNever means that pod never preempts other pods with lower priority. - PreemptNever PreemptionPolicy = "Never" -) - -// TerminationMessagePolicy describes how termination messages are retrieved from a container. -type TerminationMessagePolicy string - -const ( - // TerminationMessageReadFile is the default behavior and will set the container status message to - // the contents of the container's terminationMessagePath when the container exits. - TerminationMessageReadFile TerminationMessagePolicy = "File" - // TerminationMessageFallbackToLogsOnError will read the most recent contents of the container logs - // for the container status message when the container exits with an error and the - // terminationMessagePath has no contents. - TerminationMessageFallbackToLogsOnError TerminationMessagePolicy = "FallbackToLogsOnError" -) - -// Capability represent POSIX capabilities type -type Capability string - -// Capabilities represent POSIX capabilities that can be added or removed to a running container. -type Capabilities struct { - // Added capabilities - // +optional - Add []Capability - // Removed capabilities - // +optional - Drop []Capability -} - -// ResourceRequirements describes the compute resource requirements. -type ResourceRequirements struct { - // Limits describes the maximum amount of compute resources allowed. - // +optional - Limits ResourceList - // Requests describes the minimum amount of compute resources required. - // If Request is omitted for a container, it defaults to Limits if that is explicitly specified, - // otherwise to an implementation-defined value - // +optional - Requests ResourceList -} - -// Container represents a single container that is expected to be run on the host. -type Container struct { - // Required: This must be a DNS_LABEL. Each container in a pod must - // have a unique name. - Name string - // Required. - Image string - // Optional: The docker image's entrypoint is used if this is not provided; cannot be updated. - // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable - // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax - // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, - // regardless of whether the variable exists or not. - // +optional - Command []string - // Optional: The docker image's cmd is used if this is not provided; cannot be updated. - // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable - // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax - // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, - // regardless of whether the variable exists or not. - // +optional - Args []string - // Optional: Defaults to Docker's default. - // +optional - WorkingDir string - // +optional - Ports []ContainerPort - // List of sources to populate environment variables in the container. - // The keys defined within a source must be a C_IDENTIFIER. All invalid keys - // will be reported as an event when the container is starting. When a key exists in multiple - // sources, the value associated with the last source will take precedence. - // Values defined by an Env with a duplicate key will take precedence. - // Cannot be updated. - // +optional - EnvFrom []EnvFromSource - // +optional - Env []EnvVar - // Compute resource requirements. - // +optional - Resources ResourceRequirements - // +optional - VolumeMounts []VolumeMount - // volumeDevices is the list of block devices to be used by the container. - // +optional - VolumeDevices []VolumeDevice - // +optional - LivenessProbe *Probe - // +optional - ReadinessProbe *Probe - // +optional - StartupProbe *Probe - // +optional - Lifecycle *Lifecycle - // Required. - // +optional - TerminationMessagePath string - // +optional - TerminationMessagePolicy TerminationMessagePolicy - // Required: Policy for pulling images for this container - ImagePullPolicy PullPolicy - // Optional: SecurityContext defines the security options the container should be run with. - // If set, the fields of SecurityContext override the equivalent fields of PodSecurityContext. - // +optional - SecurityContext *SecurityContext - - // Variables for interactive containers, these have very specialized use-cases (e.g. debugging) - // and shouldn't be used for general purpose containers. - // +optional - Stdin bool - // +optional - StdinOnce bool - // +optional - TTY bool -} - -// Handler defines a specific action that should be taken -// TODO: pass structured data to these actions, and document that data here. -type Handler struct { - // One and only one of the following should be specified. - // Exec specifies the action to take. - // +optional - Exec *ExecAction - // HTTPGet specifies the http request to perform. - // +optional - HTTPGet *HTTPGetAction - // TCPSocket specifies an action involving a TCP port. - // TODO: implement a realistic TCP lifecycle hook - // +optional - TCPSocket *TCPSocketAction -} - -// Lifecycle describes actions that the management system should take in response to container lifecycle -// events. For the PostStart and PreStop lifecycle handlers, management of the container blocks -// until the action is complete, unless the container process fails, in which case the handler is aborted. -type Lifecycle struct { - // PostStart is called immediately after a container is created. If the handler fails, the container - // is terminated and restarted. - // +optional - PostStart *Handler - // PreStop is called immediately before a container is terminated due to an - // API request or management event such as liveness/startup probe failure, - // preemption, resource contention, etc. The handler is not called if the - // container crashes or exits. The reason for termination is passed to the - // handler. The Pod's termination grace period countdown begins before the - // PreStop hooked is executed. Regardless of the outcome of the handler, the - // container will eventually terminate within the Pod's termination grace - // period. Other management of the container blocks until the hook completes - // or until the termination grace period is reached. - // +optional - PreStop *Handler -} - -// The below types are used by kube_client and api_server. - -// ConditionStatus defines conditions of resources -type ConditionStatus string - -// These are valid condition statuses. "ConditionTrue" means a resource is in the condition; -// "ConditionFalse" means a resource is not in the condition; "ConditionUnknown" means kubernetes -// can't decide if a resource is in the condition or not. In the future, we could add other -// intermediate conditions, e.g. ConditionDegraded. -const ( - ConditionTrue ConditionStatus = "True" - ConditionFalse ConditionStatus = "False" - ConditionUnknown ConditionStatus = "Unknown" -) - -// ContainerStateWaiting represents the waiting state of a container -type ContainerStateWaiting struct { - // A brief CamelCase string indicating details about why the container is in waiting state. - // +optional - Reason string - // A human-readable message indicating details about why the container is in waiting state. - // +optional - Message string -} - -// ContainerStateRunning represents the running state of a container -type ContainerStateRunning struct { - // +optional - StartedAt metav1.Time -} - -// ContainerStateTerminated represents the terminated state of a container -type ContainerStateTerminated struct { - ExitCode int32 - // +optional - Signal int32 - // +optional - Reason string - // +optional - Message string - // +optional - StartedAt metav1.Time - // +optional - FinishedAt metav1.Time - // +optional - ContainerID string -} - -// ContainerState holds a possible state of container. -// Only one of its members may be specified. -// If none of them is specified, the default one is ContainerStateWaiting. -type ContainerState struct { - // +optional - Waiting *ContainerStateWaiting - // +optional - Running *ContainerStateRunning - // +optional - Terminated *ContainerStateTerminated -} - -// ContainerStatus represents the status of a container -type ContainerStatus struct { - // Each container in a pod must have a unique name. - Name string - // +optional - State ContainerState - // +optional - LastTerminationState ContainerState - // Ready specifies whether the container has passed its readiness check. - Ready bool - // Note that this is calculated from dead containers. But those containers are subject to - // garbage collection. This value will get capped at 5 by GC. - RestartCount int32 - Image string - ImageID string - // +optional - ContainerID string - Started *bool -} - -// PodPhase is a label for the condition of a pod at the current time. -type PodPhase string - -// These are the valid statuses of pods. -const ( - // PodPending means the pod has been accepted by the system, but one or more of the containers - // has not been started. This includes time before being bound to a node, as well as time spent - // pulling images onto the host. - PodPending PodPhase = "Pending" - // PodRunning means the pod has been bound to a node and all of the containers have been started. - // At least one container is still running or is in the process of being restarted. - PodRunning PodPhase = "Running" - // PodSucceeded means that all containers in the pod have voluntarily terminated - // with a container exit code of 0, and the system is not going to restart any of these containers. - PodSucceeded PodPhase = "Succeeded" - // PodFailed means that all containers in the pod have terminated, and at least one container has - // terminated in a failure (exited with a non-zero exit code or was stopped by the system). - PodFailed PodPhase = "Failed" - // PodUnknown means that for some reason the state of the pod could not be obtained, typically due - // to an error in communicating with the host of the pod. - PodUnknown PodPhase = "Unknown" -) - -// PodConditionType defines the condition of pod -type PodConditionType string - -// These are valid conditions of pod. -const ( - // PodScheduled represents status of the scheduling process for this pod. - PodScheduled PodConditionType = "PodScheduled" - // PodReady means the pod is able to service requests and should be added to the - // load balancing pools of all matching services. - PodReady PodConditionType = "Ready" - // PodInitialized means that all init containers in the pod have started successfully. - PodInitialized PodConditionType = "Initialized" - // PodReasonUnschedulable reason in PodScheduled PodCondition means that the scheduler - // can't schedule the pod right now, for example due to insufficient resources in the cluster. - PodReasonUnschedulable = "Unschedulable" - // ContainersReady indicates whether all containers in the pod are ready. - ContainersReady PodConditionType = "ContainersReady" -) - -// PodCondition represents pod's condition -type PodCondition struct { - Type PodConditionType - Status ConditionStatus - // +optional - LastProbeTime metav1.Time - // +optional - LastTransitionTime metav1.Time - // +optional - Reason string - // +optional - Message string -} - -// RestartPolicy describes how the container should be restarted. -// Only one of the following restart policies may be specified. -// If none of the following policies is specified, the default one -// is RestartPolicyAlways. -type RestartPolicy string - -// These are valid restart policies -const ( - RestartPolicyAlways RestartPolicy = "Always" - RestartPolicyOnFailure RestartPolicy = "OnFailure" - RestartPolicyNever RestartPolicy = "Never" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodList is a list of Pods. -type PodList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []Pod -} - -// DNSPolicy defines how a pod's DNS will be configured. -type DNSPolicy string - -const ( - // DNSClusterFirstWithHostNet indicates that the pod should use cluster DNS - // first, if it is available, then fall back on the default - // (as determined by kubelet) DNS settings. - DNSClusterFirstWithHostNet DNSPolicy = "ClusterFirstWithHostNet" - - // DNSClusterFirst indicates that the pod should use cluster DNS - // first unless hostNetwork is true, if it is available, then - // fall back on the default (as determined by kubelet) DNS settings. - DNSClusterFirst DNSPolicy = "ClusterFirst" - - // DNSDefault indicates that the pod should use the default (as - // determined by kubelet) DNS settings. - DNSDefault DNSPolicy = "Default" - - // DNSNone indicates that the pod should use empty DNS settings. DNS - // parameters such as nameservers and search paths should be defined via - // DNSConfig. - DNSNone DNSPolicy = "None" -) - -// NodeSelector represents the union of the results of one or more label queries -// over a set of nodes; that is, it represents the OR of the selectors represented -// by the node selector terms. -type NodeSelector struct { - //Required. A list of node selector terms. The terms are ORed. - NodeSelectorTerms []NodeSelectorTerm -} - -// NodeSelectorTerm represents expressions and fields required to select nodes. -// A null or empty node selector term matches no objects. The requirements of -// them are ANDed. -// The TopologySelectorTerm type implements a subset of the NodeSelectorTerm. -type NodeSelectorTerm struct { - // A list of node selector requirements by node's labels. - MatchExpressions []NodeSelectorRequirement - // A list of node selector requirements by node's fields. - MatchFields []NodeSelectorRequirement -} - -// NodeSelectorRequirement is a selector that contains values, a key, and an operator -// that relates the key and values. -type NodeSelectorRequirement struct { - // The label key that the selector applies to. - Key string - // Represents a key's relationship to a set of values. - // Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt. - Operator NodeSelectorOperator - // An array of string values. If the operator is In or NotIn, - // the values array must be non-empty. If the operator is Exists or DoesNotExist, - // the values array must be empty. If the operator is Gt or Lt, the values - // array must have a single element, which will be interpreted as an integer. - // This array is replaced during a strategic merge patch. - // +optional - Values []string -} - -// NodeSelectorOperator is the set of operators that can be used in -// a node selector requirement. -type NodeSelectorOperator string - -// These are valid values of NodeSelectorOperator -const ( - NodeSelectorOpIn NodeSelectorOperator = "In" - NodeSelectorOpNotIn NodeSelectorOperator = "NotIn" - NodeSelectorOpExists NodeSelectorOperator = "Exists" - NodeSelectorOpDoesNotExist NodeSelectorOperator = "DoesNotExist" - NodeSelectorOpGt NodeSelectorOperator = "Gt" - NodeSelectorOpLt NodeSelectorOperator = "Lt" -) - -// TopologySelectorTerm represents the result of label queries. -// A null or empty topology selector term matches no objects. -// The requirements of them are ANDed. -// It provides a subset of functionality as NodeSelectorTerm. -// This is an alpha feature and may change in the future. -type TopologySelectorTerm struct { - // A list of topology selector requirements by labels. - // +optional - MatchLabelExpressions []TopologySelectorLabelRequirement -} - -// TopologySelectorLabelRequirement is a selector that matches given label. -// This is an alpha feature and may change in the future. -type TopologySelectorLabelRequirement struct { - // The label key that the selector applies to. - Key string - // An array of string values. One value must match the label to be selected. - // Each entry in Values is ORed. - Values []string -} - -// Affinity is a group of affinity scheduling rules. -type Affinity struct { - // Describes node affinity scheduling rules for the pod. - // +optional - NodeAffinity *NodeAffinity - // Describes pod affinity scheduling rules (e.g. co-locate this pod in the same node, zone, etc. as some other pod(s)). - // +optional - PodAffinity *PodAffinity - // Describes pod anti-affinity scheduling rules (e.g. avoid putting this pod in the same node, zone, etc. as some other pod(s)). - // +optional - PodAntiAffinity *PodAntiAffinity -} - -// PodAffinity is a group of inter pod affinity scheduling rules. -type PodAffinity struct { - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. - // If the affinity requirements specified by this field are not met at - // scheduling time, the pod will not be scheduled onto the node. - // If the affinity requirements specified by this field cease to be met - // at some point during pod execution (e.g. due to a pod label update), the - // system will try to eventually evict the pod from its node. - // When there are multiple elements, the lists of nodes corresponding to each - // podAffinityTerm are intersected, i.e. all terms must be satisfied. - // +optional - // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm - - // If the affinity requirements specified by this field are not met at - // scheduling time, the pod will not be scheduled onto the node. - // If the affinity requirements specified by this field cease to be met - // at some point during pod execution (e.g. due to a pod label update), the - // system may or may not try to eventually evict the pod from its node. - // When there are multiple elements, the lists of nodes corresponding to each - // podAffinityTerm are intersected, i.e. all terms must be satisfied. - // +optional - RequiredDuringSchedulingIgnoredDuringExecution []PodAffinityTerm - // The scheduler will prefer to schedule pods to nodes that satisfy - // the affinity expressions specified by this field, but it may choose - // a node that violates one or more of the expressions. The node that is - // most preferred is the one with the greatest sum of weights, i.e. - // for each node that meets all of the scheduling requirements (resource - // request, requiredDuringScheduling affinity expressions, etc.), - // compute a sum by iterating through the elements of this field and adding - // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the - // node(s) with the highest sum are the most preferred. - // +optional - PreferredDuringSchedulingIgnoredDuringExecution []WeightedPodAffinityTerm -} - -// PodAntiAffinity is a group of inter pod anti affinity scheduling rules. -type PodAntiAffinity struct { - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. - // If the anti-affinity requirements specified by this field are not met at - // scheduling time, the pod will not be scheduled onto the node. - // If the anti-affinity requirements specified by this field cease to be met - // at some point during pod execution (e.g. due to a pod label update), the - // system will try to eventually evict the pod from its node. - // When there are multiple elements, the lists of nodes corresponding to each - // podAffinityTerm are intersected, i.e. all terms must be satisfied. - // +optional - // RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm - - // If the anti-affinity requirements specified by this field are not met at - // scheduling time, the pod will not be scheduled onto the node. - // If the anti-affinity requirements specified by this field cease to be met - // at some point during pod execution (e.g. due to a pod label update), the - // system may or may not try to eventually evict the pod from its node. - // When there are multiple elements, the lists of nodes corresponding to each - // podAffinityTerm are intersected, i.e. all terms must be satisfied. - // +optional - RequiredDuringSchedulingIgnoredDuringExecution []PodAffinityTerm - // The scheduler will prefer to schedule pods to nodes that satisfy - // the anti-affinity expressions specified by this field, but it may choose - // a node that violates one or more of the expressions. The node that is - // most preferred is the one with the greatest sum of weights, i.e. - // for each node that meets all of the scheduling requirements (resource - // request, requiredDuringScheduling anti-affinity expressions, etc.), - // compute a sum by iterating through the elements of this field and adding - // "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the - // node(s) with the highest sum are the most preferred. - // +optional - PreferredDuringSchedulingIgnoredDuringExecution []WeightedPodAffinityTerm -} - -// WeightedPodAffinityTerm represents the weights of all of the matched WeightedPodAffinityTerm -// fields are added per-node to find the most preferred node(s) -type WeightedPodAffinityTerm struct { - // weight associated with matching the corresponding podAffinityTerm, - // in the range 1-100. - Weight int32 - // Required. A pod affinity term, associated with the corresponding weight. - PodAffinityTerm PodAffinityTerm -} - -// PodAffinityTerm 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. -type PodAffinityTerm struct { - // A label query over a set of resources, in this case pods. - // +optional - LabelSelector *metav1.LabelSelector - // namespaces specifies which namespaces the labelSelector applies to (matches against); - // null or empty list means "this pod's namespace" - // +optional - Namespaces []string - // 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. - // Empty topologyKey is not allowed. - TopologyKey string -} - -// NodeAffinity is a group of node affinity scheduling rules. -type NodeAffinity struct { - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. - // If the affinity requirements specified by this field are not met at - // scheduling time, the pod will not be scheduled onto the node. - // If the affinity requirements specified by this field cease to be met - // at some point during pod execution (e.g. due to an update), the system - // will try to eventually evict the pod from its node. - // +optional - // RequiredDuringSchedulingRequiredDuringExecution *NodeSelector - - // If the affinity requirements specified by this field are not met at - // scheduling time, the pod will not be scheduled onto the node. - // If the affinity requirements specified by this field cease to be met - // at some point during pod execution (e.g. due to an update), the system - // may or may not try to eventually evict the pod from its node. - // +optional - RequiredDuringSchedulingIgnoredDuringExecution *NodeSelector - // The scheduler will prefer to schedule pods to nodes that satisfy - // the affinity expressions specified by this field, but it may choose - // a node that violates one or more of the expressions. The node that is - // most preferred is the one with the greatest sum of weights, i.e. - // for each node that meets all of the scheduling requirements (resource - // request, requiredDuringScheduling affinity expressions, etc.), - // compute a sum by iterating through the elements of this field and adding - // "weight" to the sum if the node matches the corresponding matchExpressions; the - // node(s) with the highest sum are the most preferred. - // +optional - PreferredDuringSchedulingIgnoredDuringExecution []PreferredSchedulingTerm -} - -// PreferredSchedulingTerm represents an empty preferred scheduling term matches all objects with implicit weight 0 -// (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op). -type PreferredSchedulingTerm struct { - // Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100. - Weight int32 - // A node selector term, associated with the corresponding weight. - Preference NodeSelectorTerm -} - -// Taint represents taint that can be applied to the node. -// The node this Taint is attached to has the "effect" on -// any pod that does not tolerate the Taint. -type Taint struct { - // Required. The taint key to be applied to a node. - Key string - // Required. The taint value corresponding to the taint key. - // +optional - Value string - // Required. The effect of the taint on pods - // that do not tolerate the taint. - // Valid effects are NoSchedule, PreferNoSchedule and NoExecute. - Effect TaintEffect - // TimeAdded represents the time at which the taint was added. - // It is only written for NoExecute taints. - // +optional - TimeAdded *metav1.Time -} - -// TaintEffect defines the effects of Taint -type TaintEffect string - -// These are valid values for TaintEffect -const ( - // Do not allow new pods to schedule onto the node unless they tolerate the taint, - // but allow all pods submitted to Kubelet without going through the scheduler - // to start, and allow all already-running pods to continue running. - // Enforced by the scheduler. - TaintEffectNoSchedule TaintEffect = "NoSchedule" - // Like TaintEffectNoSchedule, but the scheduler tries not to schedule - // new pods onto the node, rather than prohibiting new pods from scheduling - // onto the node entirely. Enforced by the scheduler. - TaintEffectPreferNoSchedule TaintEffect = "PreferNoSchedule" - // NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. - // Like TaintEffectNoSchedule, but additionally do not allow pods submitted to - // Kubelet without going through the scheduler to start. - // Enforced by Kubelet and the scheduler. - // TaintEffectNoScheduleNoAdmit TaintEffect = "NoScheduleNoAdmit" - - // Evict any already-running pods that do not tolerate the taint. - // Currently enforced by NodeController. - TaintEffectNoExecute TaintEffect = "NoExecute" -) - -// Toleration represents the toleration object that can be attached to a pod. -// The pod this Toleration is attached to tolerates any taint that matches -// the triple using the matching operator . -type Toleration struct { - // Key is the taint key that the toleration applies to. Empty means match all taint keys. - // If the key is empty, operator must be Exists; this combination means to match all values and all keys. - // +optional - Key string - // Operator represents a key's relationship to the value. - // Valid operators are Exists and Equal. Defaults to Equal. - // Exists is equivalent to wildcard for value, so that a pod can - // tolerate all taints of a particular category. - // +optional - Operator TolerationOperator - // Value is the taint value the toleration matches to. - // If the operator is Exists, the value should be empty, otherwise just a regular string. - // +optional - Value string - // Effect indicates the taint effect to match. Empty means match all taint effects. - // When specified, allowed values are NoSchedule, PreferNoSchedule and NoExecute. - // +optional - Effect TaintEffect - // TolerationSeconds represents the period of time the toleration (which must be - // of effect NoExecute, otherwise this field is ignored) tolerates the taint. By default, - // it is not set, which means tolerate the taint forever (do not evict). Zero and - // negative values will be treated as 0 (evict immediately) by the system. - // +optional - TolerationSeconds *int64 -} - -// TolerationOperator is the set of operators that can be used in a toleration. -type TolerationOperator string - -// These are valid values for TolerationOperator -const ( - TolerationOpExists TolerationOperator = "Exists" - TolerationOpEqual TolerationOperator = "Equal" -) - -// PodReadinessGate contains the reference to a pod condition -type PodReadinessGate struct { - // ConditionType refers to a condition in the pod's condition list with matching type. - ConditionType PodConditionType -} - -// PodSpec is a description of a pod -type PodSpec struct { - Volumes []Volume - // List of initialization containers belonging to the pod. - InitContainers []Container - // List of containers belonging to the pod. - Containers []Container - // List of ephemeral containers run in this pod. Ephemeral containers may be run in an existing - // pod to perform user-initiated actions such as debugging. This list cannot be specified when - // creating a pod, and it cannot be modified by updating the pod spec. In order to add an - // ephemeral container to an existing pod, use the pod's ephemeralcontainers subresource. - // This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature. - // +optional - EphemeralContainers []EphemeralContainer - // +optional - RestartPolicy RestartPolicy - // Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. - // Value must be non-negative integer. The value zero indicates delete immediately. - // If this value is nil, the default grace period will be used instead. - // The grace period is the duration in seconds after the processes running in the pod are sent - // a termination signal and the time when the processes are forcibly halted with a kill signal. - // Set this value longer than the expected cleanup time for your process. - // +optional - TerminationGracePeriodSeconds *int64 - // Optional duration in seconds relative to the StartTime that the pod may be active on a node - // before the system actively tries to terminate the pod; value must be positive integer - // +optional - ActiveDeadlineSeconds *int64 - // Set DNS policy for the pod. - // Defaults to "ClusterFirst". - // Valid values are 'ClusterFirstWithHostNet', 'ClusterFirst', 'Default' or 'None'. - // DNS parameters given in DNSConfig will be merged with the policy selected with DNSPolicy. - // To have DNS options set along with hostNetwork, you have to specify DNS policy - // explicitly to 'ClusterFirstWithHostNet'. - // +optional - DNSPolicy DNSPolicy - // NodeSelector is a selector which must be true for the pod to fit on a node - // +optional - NodeSelector map[string]string - - // ServiceAccountName is the name of the ServiceAccount to use to run this pod - // The pod will be allowed to use secrets referenced by the ServiceAccount - ServiceAccountName string - // AutomountServiceAccountToken indicates whether a service account token should be automatically mounted. - // +optional - AutomountServiceAccountToken *bool - - // NodeName is a request to schedule this pod onto a specific node. If it is non-empty, - // the scheduler simply schedules this pod onto that node, assuming that it fits resource - // requirements. - // +optional - NodeName string - // SecurityContext holds pod-level security attributes and common container settings. - // Optional: Defaults to empty. See type description for default values of each field. - // +optional - SecurityContext *PodSecurityContext - // ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. - // If specified, these secrets will be passed to individual puller implementations for them to use. For example, - // in the case of docker, only DockerConfig type secrets are honored. - // +optional - ImagePullSecrets []LocalObjectReference - // Specifies the hostname of the Pod. - // If not specified, the pod's hostname will be set to a system-defined value. - // +optional - Hostname string - // If specified, the fully qualified Pod hostname will be "...svc.". - // If not specified, the pod will not have a domainname at all. - // +optional - Subdomain string - // If specified, the pod's scheduling constraints - // +optional - Affinity *Affinity - // If specified, the pod will be dispatched by specified scheduler. - // If not specified, the pod will be dispatched by default scheduler. - // +optional - SchedulerName string - // If specified, the pod's tolerations. - // +optional - Tolerations []Toleration - // HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts - // file if specified. This is only valid for non-hostNetwork pods. - // +optional - HostAliases []HostAlias - // If specified, indicates the pod's priority. "system-node-critical" and - // "system-cluster-critical" are two special keywords which indicate the - // highest priorities with the former being the highest priority. Any other - // name must be defined by creating a PriorityClass object with that name. - // If not specified, the pod priority will be default or zero if there is no - // default. - // +optional - PriorityClassName string - // The priority value. Various system components use this field to find the - // priority of the pod. When Priority Admission Controller is enabled, it - // prevents users from setting this field. The admission controller populates - // this field from PriorityClassName. - // The higher the value, the higher the priority. - // +optional - Priority *int32 - // PreemptionPolicy is the Policy for preempting pods with lower priority. - // One of Never, PreemptLowerPriority. - // Defaults to PreemptLowerPriority if unset. - // This field is alpha-level and is only honored by servers that enable the NonPreemptingPriority feature. - // +optional - PreemptionPolicy *PreemptionPolicy - // Specifies the DNS parameters of a pod. - // Parameters specified here will be merged to the generated DNS - // configuration based on DNSPolicy. - // +optional - DNSConfig *PodDNSConfig - // If specified, all readiness gates will be evaluated for pod readiness. - // A pod is ready when all its containers are ready AND - // all conditions specified in the readiness gates have status equal to "True" - // More info: https://git.k8s.io/enhancements/keps/sig-network/0007-pod-ready%2B%2B.md - // +optional - ReadinessGates []PodReadinessGate - // RuntimeClassName refers to a RuntimeClass object in the node.k8s.io group, which should be used - // to run this pod. If no RuntimeClass resource matches the named class, the pod will not be run. - // If unset or empty, the "legacy" RuntimeClass will be used, which is an implicit class with an - // empty definition that uses the default runtime handler. - // More info: https://git.k8s.io/enhancements/keps/sig-node/runtime-class.md - // This is a beta feature as of Kubernetes v1.14. - // +optional - RuntimeClassName *string - // Overhead represents the resource overhead associated with running a pod for a given RuntimeClass. - // This field will be autopopulated at admission time by the RuntimeClass admission controller. If - // the RuntimeClass admission controller is enabled, overhead must not be set in Pod create requests. - // The RuntimeClass admission controller will reject Pod create requests which have the overhead already - // set. If RuntimeClass is configured and selected in the PodSpec, Overhead will be set to the value - // defined in the corresponding RuntimeClass, otherwise it will remain unset and treated as zero. - // More info: https://git.k8s.io/enhancements/keps/sig-node/20190226-pod-overhead.md - // This field is alpha-level as of Kubernetes v1.16, and is only honored by servers that enable the PodOverhead feature. - // +optional - Overhead ResourceList - // EnableServiceLinks indicates whether information about services should be injected into pod's - // environment variables, matching the syntax of Docker links. - // If not specified, the default is true. - // +optional - EnableServiceLinks *bool - // TopologySpreadConstraints describes how a group of pods ought to spread across topology - // domains. Scheduler will schedule pods in a way which abides by the constraints. - // This field is only honored by clusters that enable the EvenPodsSpread feature. - // All topologySpreadConstraints are ANDed. - // +optional - TopologySpreadConstraints []TopologySpreadConstraint -} - -// HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the -// pod's hosts file. -type HostAlias struct { - IP string - Hostnames []string -} - -// Sysctl defines a kernel parameter to be set -type Sysctl struct { - // Name of a property to set - Name string - // Value of a property to set - Value string -} - -// PodFSGroupChangePolicy holds policies that will be used for applying fsGroup to a volume -// when volume is mounted. -type PodFSGroupChangePolicy string - -const ( - // FSGroupChangeOnRootMismatch indicates that volume's ownership and permissions will be changed - // only when permission and ownership of root directory does not match with expected - // permissions on the volume. This can help shorten the time it takes to change - // ownership and permissions of a volume. - FSGroupChangeOnRootMismatch PodFSGroupChangePolicy = "OnRootMismatch" - // FSGroupChangeAlways indicates that volume's ownership and permissions - // should always be changed whenever volume is mounted inside a Pod. This the default - // behavior. - FSGroupChangeAlways PodFSGroupChangePolicy = "Always" -) - -// PodSecurityContext holds pod-level security attributes and common container settings. -// Some fields are also present in container.securityContext. Field values of -// container.securityContext take precedence over field values of PodSecurityContext. -type PodSecurityContext struct { - // Use the host's network namespace. If this option is set, the ports that will be - // used must be specified. - // Optional: Default to false - // +k8s:conversion-gen=false - // +optional - HostNetwork bool - // Use the host's pid namespace. - // Optional: Default to false. - // +k8s:conversion-gen=false - // +optional - HostPID bool - // Use the host's ipc namespace. - // Optional: Default to false. - // +k8s:conversion-gen=false - // +optional - HostIPC bool - // Share a single process namespace between all of the containers in a pod. - // When this is set containers will be able to view and signal processes from other containers - // in the same pod, and the first process in each container will not be assigned PID 1. - // HostPID and ShareProcessNamespace cannot both be set. - // Optional: Default to false. - // +k8s:conversion-gen=false - // +optional - ShareProcessNamespace *bool - // The SELinux context to be applied to all containers. - // If unspecified, the container runtime will allocate a random SELinux context for each - // container. May also be set in SecurityContext. If set in - // both SecurityContext and PodSecurityContext, the value specified in SecurityContext - // takes precedence for that container. - // +optional - SELinuxOptions *SELinuxOptions - // The Windows specific settings applied to all containers. - // If unspecified, the options within a container's SecurityContext will be used. - // If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - // +optional - WindowsOptions *WindowsSecurityContextOptions - // The UID to run the entrypoint of the container process. - // Defaults to user specified in image metadata if unspecified. - // May also be set in SecurityContext. If set in both SecurityContext and - // PodSecurityContext, the value specified in SecurityContext takes precedence - // for that container. - // +optional - RunAsUser *int64 - // The GID to run the entrypoint of the container process. - // Uses runtime default if unset. - // May also be set in SecurityContext. If set in both SecurityContext and - // PodSecurityContext, the value specified in SecurityContext takes precedence - // for that container. - // +optional - RunAsGroup *int64 - // Indicates that the container must run as a non-root user. - // If true, the Kubelet will validate the image at runtime to ensure that it - // does not run as UID 0 (root) and fail to start the container if it does. - // If unset or false, no such validation will be performed. - // May also be set in SecurityContext. If set in both SecurityContext and - // PodSecurityContext, the value specified in SecurityContext takes precedence - // for that container. - // +optional - RunAsNonRoot *bool - // A list of groups applied to the first process run in each container, in addition - // to the container's primary GID. If unspecified, no groups will be added to - // any container. - // +optional - SupplementalGroups []int64 - // A special supplemental group that applies to all containers in a pod. - // Some volume types allow the Kubelet to change the ownership of that volume - // to be owned by the pod: - // - // 1. The owning GID will be the FSGroup - // 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) - // 3. The permission bits are OR'd with rw-rw---- - // - // If unset, the Kubelet will not modify the ownership and permissions of any volume. - // +optional - FSGroup *int64 - // fsGroupChangePolicy defines behavior of changing ownership and permission of the volume - // before being exposed inside Pod. This field will only apply to - // volume types which support fsGroup based ownership(and permissions). - // It will have no effect on ephemeral volume types such as: secret, configmaps - // and emptydir. - // Valid values are "OnRootMismatch" and "Always". If not specified defaults to "Always". - // +optional - FSGroupChangePolicy *PodFSGroupChangePolicy - // Sysctls hold a list of namespaced sysctls used for the pod. Pods with unsupported - // sysctls (by the container runtime) might fail to launch. - // +optional - Sysctls []Sysctl -} - -// PodQOSClass defines the supported qos classes of Pods. -type PodQOSClass string - -// These are valid values for PodQOSClass -const ( - // PodQOSGuaranteed is the Guaranteed qos class. - PodQOSGuaranteed PodQOSClass = "Guaranteed" - // PodQOSBurstable is the Burstable qos class. - PodQOSBurstable PodQOSClass = "Burstable" - // PodQOSBestEffort is the BestEffort qos class. - PodQOSBestEffort PodQOSClass = "BestEffort" -) - -// PodDNSConfig defines the DNS parameters of a pod in addition to -// those generated from DNSPolicy. -type PodDNSConfig struct { - // A list of DNS name server IP addresses. - // This will be appended to the base nameservers generated from DNSPolicy. - // Duplicated nameservers will be removed. - // +optional - Nameservers []string - // A list of DNS search domains for host-name lookup. - // This will be appended to the base search paths generated from DNSPolicy. - // Duplicated search paths will be removed. - // +optional - Searches []string - // A list of DNS resolver options. - // This will be merged with the base options generated from DNSPolicy. - // Duplicated entries will be removed. Resolution options given in Options - // will override those that appear in the base DNSPolicy. - // +optional - Options []PodDNSConfigOption -} - -// PodDNSConfigOption defines DNS resolver options of a pod. -type PodDNSConfigOption struct { - // Required. - Name string - // +optional - Value *string -} - -// PodIP represents the IP address of a pod. -// IP address information. Each entry includes: -// IP: An IP address allocated to the pod. Routable at least within -// the cluster. -type PodIP struct { - IP string -} - -// EphemeralContainerCommon is a copy of all fields in Container to be inlined in -// EphemeralContainer. This separate type allows easy conversion from EphemeralContainer -// to Container and allows separate documentation for the fields of EphemeralContainer. -// When a new field is added to Container it must be added here as well. -type EphemeralContainerCommon struct { - // Required: This must be a DNS_LABEL. Each container in a pod must - // have a unique name. - Name string - // Required. - Image string - // Optional: The docker image's entrypoint is used if this is not provided; cannot be updated. - // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable - // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax - // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, - // regardless of whether the variable exists or not. - // +optional - Command []string - // Optional: The docker image's cmd is used if this is not provided; cannot be updated. - // Variable references $(VAR_NAME) are expanded using the container's environment. If a variable - // cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax - // can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, - // regardless of whether the variable exists or not. - // +optional - Args []string - // Optional: Defaults to Docker's default. - // +optional - WorkingDir string - // Ports are not allowed for ephemeral containers. - // +optional - Ports []ContainerPort - // List of sources to populate environment variables in the container. - // The keys defined within a source must be a C_IDENTIFIER. All invalid keys - // will be reported as an event when the container is starting. When a key exists in multiple - // sources, the value associated with the last source will take precedence. - // Values defined by an Env with a duplicate key will take precedence. - // Cannot be updated. - // +optional - EnvFrom []EnvFromSource - // +optional - Env []EnvVar - // Resources are not allowed for ephemeral containers. Ephemeral containers use spare resources - // already allocated to the pod. - // +optional - Resources ResourceRequirements - // +optional - VolumeMounts []VolumeMount - // volumeDevices is the list of block devices to be used by the container. - // +optional - VolumeDevices []VolumeDevice - // Probes are not allowed for ephemeral containers. - // +optional - LivenessProbe *Probe - // Probes are not allowed for ephemeral containers. - // +optional - ReadinessProbe *Probe - // Probes are not allowed for ephemeral containers. - // +optional - StartupProbe *Probe - // Lifecycle is not allowed for ephemeral containers. - // +optional - Lifecycle *Lifecycle - // Required. - // +optional - TerminationMessagePath string - // +optional - TerminationMessagePolicy TerminationMessagePolicy - // Required: Policy for pulling images for this container - ImagePullPolicy PullPolicy - // SecurityContext is not allowed for ephemeral containers. - // +optional - SecurityContext *SecurityContext - - // Variables for interactive containers, these have very specialized use-cases (e.g. debugging) - // and shouldn't be used for general purpose containers. - // +optional - Stdin bool - // +optional - StdinOnce bool - // +optional - TTY bool -} - -// EphemeralContainerCommon converts to Container. All fields must be kept in sync between -// these two types. -var _ = Container(EphemeralContainerCommon{}) - -// An EphemeralContainer is a temporary container that may be added to an existing pod for -// user-initiated activities such as debugging. Ephemeral containers have no resource or -// scheduling guarantees, and they will not be restarted when they exit or when a pod is -// removed or restarted. If an ephemeral container causes a pod to exceed its resource -// allocation, the pod may be evicted. -// Ephemeral containers may not be added by directly updating the pod spec. They must be added -// via the pod's ephemeralcontainers subresource, and they will appear in the pod spec -// once added. -// This is an alpha feature enabled by the EphemeralContainers feature flag. -type EphemeralContainer struct { - // Ephemeral containers have all of the fields of Container, plus additional fields - // specific to ephemeral containers. Fields in common with Container are in the - // following inlined struct so than an EphemeralContainer may easily be converted - // to a Container. - EphemeralContainerCommon - - // If set, the name of the container from PodSpec that this ephemeral container targets. - // The ephemeral container will be run in the namespaces (IPC, PID, etc) of this container. - // If not set then the ephemeral container is run in whatever namespaces are shared - // for the pod. Note that the container runtime must support this feature. - // +optional - TargetContainerName string -} - -// PodStatus represents information about the status of a pod. Status may trail the actual -// state of a system. -type PodStatus struct { - // +optional - Phase PodPhase - // +optional - Conditions []PodCondition - // A human readable message indicating details about why the pod is in this state. - // +optional - Message string - // A brief CamelCase message indicating details about why the pod is in this state. e.g. 'Evicted' - // +optional - Reason string - // nominatedNodeName is set when this pod preempts other pods on the node, but it cannot be - // scheduled right away as preemption victims receive their graceful termination periods. - // This field does not guarantee that the pod will be scheduled on this node. Scheduler may decide - // to place the pod elsewhere if other nodes become available sooner. Scheduler may also decide to - // give the resources on this node to a higher priority pod that is created after preemption. - // +optional - NominatedNodeName string - // +optional - HostIP string - - // PodIPs holds all of the known IP addresses allocated to the pod. Pods may be assigned AT MOST - // one value for each of IPv4 and IPv6. - // +optional - PodIPs []PodIP - - // Date and time at which the object was acknowledged by the Kubelet. - // This is before the Kubelet pulled the container image(s) for the pod. - // +optional - StartTime *metav1.Time - // +optional - QOSClass PodQOSClass - - // The list has one entry per init container in the manifest. The most recent successful - // init container will have ready = true, the most recently started container will have - // startTime set. - // More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-and-container-status - InitContainerStatuses []ContainerStatus - // The list has one entry per container in the manifest. Each entry is - // currently the output of `docker inspect`. This output format is *not* - // final and should not be relied upon. - // TODO: Make real decisions about what our info should look like. Re-enable fuzz test - // when we have done this. - // +optional - ContainerStatuses []ContainerStatus - - // Status for any ephemeral containers that have run in this pod. - // This field is alpha-level and is only honored by servers that enable the EphemeralContainers feature. - // +optional - EphemeralContainerStatuses []ContainerStatus -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodStatusResult is a wrapper for PodStatus returned by kubelet that can be encode/decoded -type PodStatusResult struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - // Status represents the current information about a pod. This data may not be up - // to date. - // +optional - Status PodStatus -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// Pod is a collection of containers, used as either input (create, update) or as output (list, get). -type Pod struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Spec defines the behavior of a pod. - // +optional - Spec PodSpec - - // Status represents the current information about a pod. This data may not be up - // to date. - // +optional - Status PodStatus -} - -// PodTemplateSpec describes the data a pod should have when created from a template -type PodTemplateSpec struct { - // Metadata of the pods created from this template. - // +optional - metav1.ObjectMeta - - // Spec defines the behavior of a pod. - // +optional - Spec PodSpec -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodTemplate describes a template for creating copies of a predefined pod. -type PodTemplate struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Template defines the pods that will be created from this pod template - // +optional - Template PodTemplateSpec -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodTemplateList is a list of PodTemplates. -type PodTemplateList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []PodTemplate -} - -// ReplicationControllerSpec is the specification of a replication controller. -// As the internal representation of a replication controller, it may have either -// a TemplateRef or a Template set. -type ReplicationControllerSpec struct { - // Replicas is the number of desired replicas. - Replicas int32 - - // Minimum number of seconds for which a newly created 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 - - // Selector is a label query over pods that should match the Replicas count. - Selector map[string]string - - // TemplateRef is a reference to an object that describes the pod that will be created if - // insufficient replicas are detected. This reference is ignored if a Template is set. - // Must be set before converting to a versioned API object - // +optional - //TemplateRef *ObjectReference - - // Template is the object that describes the pod that will be created if - // insufficient replicas are detected. Internally, this takes precedence over a - // TemplateRef. - // +optional - Template *PodTemplateSpec -} - -// ReplicationControllerStatus represents the current status of a replication -// controller. -type ReplicationControllerStatus struct { - // Replicas is the number of actual replicas. - Replicas int32 - - // The number of pods that have labels matching the labels of the pod template of the replication controller. - // +optional - FullyLabeledReplicas int32 - - // The number of ready replicas for this replication controller. - // +optional - ReadyReplicas int32 - - // The number of available replicas (ready for at least minReadySeconds) for this replication controller. - // +optional - AvailableReplicas int32 - - // ObservedGeneration is the most recent generation observed by the controller. - // +optional - ObservedGeneration int64 - - // Represents the latest available observations of a replication controller's current state. - // +optional - Conditions []ReplicationControllerCondition -} - -// ReplicationControllerConditionType defines the conditions of a replication controller. -type ReplicationControllerConditionType string - -// These are valid conditions of a replication controller. -const ( - // ReplicationControllerReplicaFailure is added in a replication controller when one of its pods - // fails to be created due to insufficient quota, limit ranges, pod security policy, node selectors, - // etc. or deleted due to kubelet being down or finalizers are failing. - ReplicationControllerReplicaFailure ReplicationControllerConditionType = "ReplicaFailure" -) - -// ReplicationControllerCondition describes the state of a replication controller at a certain point. -type ReplicationControllerCondition struct { - // Type of replication controller condition. - Type ReplicationControllerConditionType - // Status of the condition, one of True, False, Unknown. - Status ConditionStatus - // The last time the condition transitioned from one status to another. - // +optional - LastTransitionTime metav1.Time - // The reason for the condition's last transition. - // +optional - Reason string - // A human readable message indicating details about the transition. - // +optional - Message string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ReplicationController represents the configuration of a replication controller. -type ReplicationController struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Spec defines the desired behavior of this replication controller. - // +optional - Spec ReplicationControllerSpec - - // Status is the current status of this replication controller. This data may be - // out of date by some window of time. - // +optional - Status ReplicationControllerStatus -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ReplicationControllerList is a collection of replication controllers. -type ReplicationControllerList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []ReplicationController -} - -const ( - // ClusterIPNone - do not assign a cluster IP - // no proxying required and no environment variables should be created for pods - ClusterIPNone = "None" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ServiceList holds a list of services. -type ServiceList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []Service -} - -// ServiceAffinity Type string -type ServiceAffinity string - -const ( - // ServiceAffinityClientIP is the Client IP based. - ServiceAffinityClientIP ServiceAffinity = "ClientIP" - - // ServiceAffinityNone - no session affinity. - ServiceAffinityNone ServiceAffinity = "None" -) - -const ( - // DefaultClientIPServiceAffinitySeconds is the default timeout seconds - // of Client IP based session affinity - 3 hours. - DefaultClientIPServiceAffinitySeconds int32 = 10800 - // MaxClientIPServiceAffinitySeconds is the max timeout seconds - // of Client IP based session affinity - 1 day. - MaxClientIPServiceAffinitySeconds int32 = 86400 -) - -// SessionAffinityConfig represents the configurations of session affinity. -type SessionAffinityConfig struct { - // clientIP contains the configurations of Client IP based session affinity. - // +optional - ClientIP *ClientIPConfig -} - -// ClientIPConfig represents the configurations of Client IP based session affinity. -type ClientIPConfig struct { - // timeoutSeconds specifies the seconds of ClientIP type session sticky time. - // The value must be >0 && <=86400(for 1 day) if ServiceAffinity == "ClientIP". - // Default value is 10800(for 3 hours). - // +optional - TimeoutSeconds *int32 -} - -// ServiceType string describes ingress methods for a service -type ServiceType string - -const ( - // ServiceTypeClusterIP means a service will only be accessible inside the - // cluster, via the ClusterIP. - ServiceTypeClusterIP ServiceType = "ClusterIP" - - // ServiceTypeNodePort means a service will be exposed on one port of - // every node, in addition to 'ClusterIP' type. - ServiceTypeNodePort ServiceType = "NodePort" - - // ServiceTypeLoadBalancer means a service will be exposed via an - // external load balancer (if the cloud provider supports it), in addition - // to 'NodePort' type. - ServiceTypeLoadBalancer ServiceType = "LoadBalancer" - - // ServiceTypeExternalName means a service consists of only a reference to - // an external name that kubedns or equivalent will return as a CNAME - // record, with no exposing or proxying of any pods involved. - ServiceTypeExternalName ServiceType = "ExternalName" -) - -// ServiceExternalTrafficPolicyType string -type ServiceExternalTrafficPolicyType string - -const ( - // ServiceExternalTrafficPolicyTypeLocal specifies node-local endpoints behavior. - ServiceExternalTrafficPolicyTypeLocal ServiceExternalTrafficPolicyType = "Local" - // ServiceExternalTrafficPolicyTypeCluster specifies cluster-wide (legacy) behavior. - ServiceExternalTrafficPolicyTypeCluster ServiceExternalTrafficPolicyType = "Cluster" -) - -// ServiceStatus represents the current status of a service -type ServiceStatus struct { - // LoadBalancer contains the current status of the load-balancer, - // if one is present. - // +optional - LoadBalancer LoadBalancerStatus -} - -// LoadBalancerStatus represents the status of a load-balancer -type LoadBalancerStatus struct { - // Ingress is a list containing ingress points for the load-balancer; - // traffic intended for the service should be sent to these ingress points. - // +optional - Ingress []LoadBalancerIngress -} - -// LoadBalancerIngress represents the status of a load-balancer ingress point: -// traffic intended for the service should be sent to an ingress point. -type LoadBalancerIngress struct { - // IP is set for load-balancer ingress points that are IP based - // (typically GCE or OpenStack load-balancers) - // +optional - IP string - - // Hostname is set for load-balancer ingress points that are DNS based - // (typically AWS load-balancers) - // +optional - Hostname string -} - -// IPFamily represents the IP Family (IPv4 or IPv6). This type is used -// to express the family of an IP expressed by a type (i.e. service.Spec.IPFamily) -type IPFamily string - -const ( - // IPv4Protocol indicates that this IP is IPv4 protocol - IPv4Protocol IPFamily = "IPv4" - // IPv6Protocol indicates that this IP is IPv6 protocol - IPv6Protocol IPFamily = "IPv6" - // MaxServiceTopologyKeys is the largest number of topology keys allowed on a service - MaxServiceTopologyKeys = 16 -) - -// ServiceSpec describes the attributes that a user creates on a service -type ServiceSpec struct { - // Type determines how the Service is exposed. Defaults to ClusterIP. Valid - // options are ExternalName, ClusterIP, NodePort, and LoadBalancer. - // "ExternalName" maps to the specified externalName. - // "ClusterIP" allocates a cluster-internal IP address for load-balancing to - // endpoints. Endpoints are determined by the selector or if that is not - // specified, by manual construction of an Endpoints object. If clusterIP is - // "None", no virtual IP is allocated and the endpoints are published as a - // set of endpoints rather than a stable IP. - // "NodePort" builds on ClusterIP and allocates a port on every node which - // routes to the clusterIP. - // "LoadBalancer" builds on NodePort and creates an - // external load-balancer (if supported in the current cloud) which routes - // to the clusterIP. - // More info: https://kubernetes.io/docs/concepts/services-networking/service/ - // +optional - Type ServiceType - - // Required: The list of ports that are exposed by this service. - Ports []ServicePort - - // Route service traffic to pods with label keys and values matching this - // selector. If empty or not present, the service is assumed to have an - // external process managing its endpoints, which Kubernetes will not - // modify. Only applies to types ClusterIP, NodePort, and LoadBalancer. - // Ignored if type is ExternalName. - // More info: https://kubernetes.io/docs/concepts/services-networking/service/ - Selector map[string]string - - // ClusterIP is the IP address of the service and is usually assigned - // randomly by the master. If an address is specified manually and is not in - // use by others, it will be allocated to the service; otherwise, creation - // of the service will fail. This field can not be changed through updates. - // Valid values are "None", empty string (""), or a valid IP address. "None" - // can be specified for headless services when proxying is not required. - // Only applies to types ClusterIP, NodePort, and LoadBalancer. Ignored if - // type is ExternalName. - // More info: https://kubernetes.io/docs/concepts/services-networking/service/#virtual-ips-and-service-proxies - // +optional - ClusterIP string - - // ExternalName is the external reference that kubedns or equivalent will - // return as a CNAME record for this service. No proxying will be involved. - // Must be a valid RFC-1123 hostname (https://tools.ietf.org/html/rfc1123) - // and requires Type to be ExternalName. - ExternalName string - - // ExternalIPs are used by external load balancers, or can be set by - // users to handle external traffic that arrives at a node. - // +optional - ExternalIPs []string - - // Only applies to Service Type: LoadBalancer - // LoadBalancer will get created with the IP specified in this field. - // This feature depends on whether the underlying cloud-provider supports specifying - // the loadBalancerIP when a load balancer is created. - // This field will be ignored if the cloud-provider does not support the feature. - // +optional - LoadBalancerIP string - - // Optional: Supports "ClientIP" and "None". Used to maintain session affinity. - // +optional - SessionAffinity ServiceAffinity - - // sessionAffinityConfig contains the configurations of session affinity. - // +optional - SessionAffinityConfig *SessionAffinityConfig - - // Optional: If specified and supported by the platform, this will restrict traffic through the cloud-provider - // load-balancer will be restricted to the specified client IPs. This field will be ignored if the - // cloud-provider does not support the feature." - // +optional - LoadBalancerSourceRanges []string - - // externalTrafficPolicy denotes if this Service desires to route external - // traffic to node-local or cluster-wide endpoints. "Local" preserves the - // client source IP and avoids a second hop for LoadBalancer and Nodeport - // type services, but risks potentially imbalanced traffic spreading. - // "Cluster" obscures the client source IP and may cause a second hop to - // another node, but should have good overall load-spreading. - // +optional - ExternalTrafficPolicy ServiceExternalTrafficPolicyType - - // healthCheckNodePort specifies the healthcheck nodePort for the service. - // If not specified, HealthCheckNodePort is created by the service api - // backend with the allocated nodePort. Will use user-specified nodePort value - // if specified by the client. Only effects when Type is set to LoadBalancer - // and ExternalTrafficPolicy is set to Local. - // +optional - HealthCheckNodePort int32 - - // publishNotReadyAddresses, when set to true, indicates that DNS implementations - // must publish the notReadyAddresses of subsets for the Endpoints associated with - // the Service. The default value is false. - // The primary use case for setting this field is to use a StatefulSet's Headless Service - // to propagate SRV records for its Pods without respect to their readiness for purpose - // of peer discovery. - // +optional - PublishNotReadyAddresses bool - - // ipFamily specifies whether this Service has a preference for a particular IP family (e.g. IPv4 vs. - // IPv6). If a specific IP family is requested, the clusterIP field will be allocated from that family, if it is - // available in the cluster. If no IP family is requested, the cluster's primary IP family will be used. - // Other IP fields (loadBalancerIP, loadBalancerSourceRanges, externalIPs) and controllers which - // allocate external load-balancers should use the same IP family. Endpoints for this Service will be of - // this family. This field is immutable after creation. Assigning a ServiceIPFamily not available in the - // cluster (e.g. IPv6 in IPv4 only cluster) is an error condition and will fail during clusterIP assignment. - // +optional - IPFamily *IPFamily - - // topologyKeys is a preference-order list of topology keys which - // implementations of services should use to preferentially sort endpoints - // when accessing this Service, it can not be used at the same time as - // externalTrafficPolicy=Local. - // Topology keys must be valid label keys and at most 16 keys may be specified. - // Endpoints are chosen based on the first topology key with available backends. - // If this field is specified and all entries have no backends that match - // the topology of the client, the service has no backends for that client - // and connections should fail. - // The special value "*" may be used to mean "any topology". This catch-all - // value, if used, only makes sense as the last value in the list. - // If this is not specified or empty, no topology constraints will be applied. - // +optional - TopologyKeys []string -} - -// ServicePort represents the port on which the service is exposed -type ServicePort struct { - // Optional if only one ServicePort is defined on this service: The - // name of this port within the service. This must be a DNS_LABEL. - // All ports within a ServiceSpec must have unique names. This maps to - // the 'Name' field in EndpointPort objects. - Name string - - // The IP protocol for this port. Supports "TCP", "UDP", and "SCTP". - Protocol Protocol - - // The application protocol for this port. - // This field follows standard Kubernetes label syntax. - // Un-prefixed names are reserved for IANA standard service names (as per - // RFC-6335 and http://www.iana.org/assignments/service-names). - // Non-standard protocols should use prefixed names such as - // mycompany.com/my-custom-protocol. - // Field can be enabled with ServiceAppProtocol feature gate. - // +optional - AppProtocol *string - - // The port that will be exposed on the service. - Port int32 - - // Optional: The target port on pods selected by this service. If this - // is a string, it will be looked up as a named port in the target - // Pod's container ports. If this is not specified, the value - // of the 'port' field is used (an identity map). - // This field is ignored for services with clusterIP=None, and should be - // omitted or set equal to the 'port' field. - TargetPort intstr.IntOrString - - // The port on each node on which this service is exposed. - // Default is to auto-allocate a port if the ServiceType of this Service requires one. - NodePort int32 -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// Service is a named abstraction of software service (for example, mysql) consisting of local port -// (for example 3306) that the proxy listens on, and the selector that determines which pods -// will answer requests sent through the proxy. -type Service struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Spec defines the behavior of a service. - // +optional - Spec ServiceSpec - - // Status represents the current status of a service. - // +optional - Status ServiceStatus -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ServiceAccount binds together: -// * a name, understood by users, and perhaps by peripheral systems, for an identity -// * a principal that can be authenticated and authorized -// * a set of secrets -type ServiceAccount struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Secrets is the list of secrets allowed to be used by pods running using this ServiceAccount - Secrets []ObjectReference - - // ImagePullSecrets is a list of references to secrets in the same namespace to use for pulling any images - // in pods that reference this ServiceAccount. ImagePullSecrets are distinct from Secrets because Secrets - // can be mounted in the pod, but ImagePullSecrets are only accessed by the kubelet. - // +optional - ImagePullSecrets []LocalObjectReference - - // AutomountServiceAccountToken indicates whether pods running as this service account should have an API token automatically mounted. - // Can be overridden at the pod level. - // +optional - AutomountServiceAccountToken *bool -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ServiceAccountList is a list of ServiceAccount objects -type ServiceAccountList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []ServiceAccount -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// Endpoints is a collection of endpoints that implement the actual service. Example: -// Name: "mysvc", -// Subsets: [ -// { -// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], -// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] -// }, -// { -// Addresses: [{"ip": "10.10.3.3"}], -// Ports: [{"name": "a", "port": 93}, {"name": "b", "port": 76}] -// }, -// ] -type Endpoints struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // The set of all endpoints is the union of all subsets. - Subsets []EndpointSubset -} - -// EndpointSubset is a group of addresses with a common set of ports. The -// expanded set of endpoints is the Cartesian product of Addresses x Ports. -// For example, given: -// { -// Addresses: [{"ip": "10.10.1.1"}, {"ip": "10.10.2.2"}], -// Ports: [{"name": "a", "port": 8675}, {"name": "b", "port": 309}] -// } -// The resulting set of endpoints can be viewed as: -// a: [ 10.10.1.1:8675, 10.10.2.2:8675 ], -// b: [ 10.10.1.1:309, 10.10.2.2:309 ] -type EndpointSubset struct { - Addresses []EndpointAddress - NotReadyAddresses []EndpointAddress - Ports []EndpointPort -} - -// EndpointAddress is a tuple that describes single IP address. -type EndpointAddress struct { - // The IP of this endpoint. - // IPv6 is also accepted but not fully supported on all platforms. Also, certain - // kubernetes components, like kube-proxy, are not IPv6 ready. - // TODO: This should allow hostname or IP, see #4447. - IP string - // Optional: Hostname of this endpoint - // Meant to be used by DNS servers etc. - // +optional - Hostname string - // Optional: Node hosting this endpoint. This can be used to determine endpoints local to a node. - // +optional - NodeName *string - // Optional: The kubernetes object related to the entry point. - TargetRef *ObjectReference -} - -// EndpointPort is a tuple that describes a single port. -type EndpointPort struct { - // The name of this port (corresponds to ServicePort.Name). Optional - // if only one port is defined. Must be a DNS_LABEL. - Name string - - // The port number. - Port int32 - - // The IP protocol for this port. - Protocol Protocol - - // The application protocol for this port. - // This field follows standard Kubernetes label syntax. - // Un-prefixed names are reserved for IANA standard service names (as per - // RFC-6335 and http://www.iana.org/assignments/service-names). - // Non-standard protocols should use prefixed names such as - // mycompany.com/my-custom-protocol. - // Field can be enabled with ServiceAppProtocol feature gate. - // +optional - AppProtocol *string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// EndpointsList is a list of endpoints. -type EndpointsList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []Endpoints -} - -// NodeSpec describes the attributes that a node is created with. -type NodeSpec struct { - // PodCIDRs represents the IP ranges assigned to the node for usage by Pods on that node. It may - // contain AT MOST one value for each of IPv4 and IPv6. - // Note: assigning IP ranges to nodes might need to be revisited when we support migratable IPs. - // +optional - PodCIDRs []string - - // ID of the node assigned by the cloud provider - // Note: format is "://" - // +optional - ProviderID string - - // Unschedulable controls node schedulability of new pods. By default node is schedulable. - // +optional - Unschedulable bool - - // If specified, the node's taints. - // +optional - Taints []Taint - - // If specified, the source to get node configuration from - // The DynamicKubeletConfig feature gate must be enabled for the Kubelet to use this field - // +optional - ConfigSource *NodeConfigSource - - // Deprecated. Not all kubelets will set this field. Remove field after 1.13. - // see: https://issues.k8s.io/61966 - // +optional - DoNotUseExternalID string -} - -// NodeConfigSource specifies a source of node configuration. Exactly one subfield must be non-nil. -type NodeConfigSource struct { - ConfigMap *ConfigMapNodeConfigSource -} - -// ConfigMapNodeConfigSource represents the config map of a node -type ConfigMapNodeConfigSource struct { - // Namespace is the metadata.namespace of the referenced ConfigMap. - // This field is required in all cases. - Namespace string - - // Name is the metadata.name of the referenced ConfigMap. - // This field is required in all cases. - Name string - - // UID is the metadata.UID of the referenced ConfigMap. - // This field is forbidden in Node.Spec, and required in Node.Status. - // +optional - UID types.UID - - // ResourceVersion is the metadata.ResourceVersion of the referenced ConfigMap. - // This field is forbidden in Node.Spec, and required in Node.Status. - // +optional - ResourceVersion string - - // KubeletConfigKey declares which key of the referenced ConfigMap corresponds to the KubeletConfiguration structure - // This field is required in all cases. - KubeletConfigKey string -} - -// DaemonEndpoint contains information about a single Daemon endpoint. -type DaemonEndpoint struct { - /* - The port tag was not properly in quotes in earlier releases, so it must be - uppercase for backwards compatibility (since it was falling back to var name of - 'Port'). - */ - - // Port number of the given endpoint. - Port int32 -} - -// NodeDaemonEndpoints lists ports opened by daemons running on the Node. -type NodeDaemonEndpoints struct { - // Endpoint on which Kubelet is listening. - // +optional - KubeletEndpoint DaemonEndpoint -} - -// NodeSystemInfo is a set of ids/uuids to uniquely identify the node. -type NodeSystemInfo struct { - // MachineID reported by the node. For unique machine identification - // in the cluster this field is preferred. Learn more from man(5) - // machine-id: http://man7.org/linux/man-pages/man5/machine-id.5.html - MachineID string - // SystemUUID reported by the node. For unique machine identification - // MachineID is preferred. This field is specific to Red Hat hosts - // https://access.redhat.com/documentation/en-US/Red_Hat_Subscription_Management/1/html/RHSM/getting-system-uuid.html - SystemUUID string - // Boot ID reported by the node. - BootID string - // Kernel Version reported by the node. - KernelVersion string - // OS Image reported by the node. - OSImage string - // ContainerRuntime Version reported by the node. - ContainerRuntimeVersion string - // Kubelet Version reported by the node. - KubeletVersion string - // KubeProxy Version reported by the node. - KubeProxyVersion string - // The Operating System reported by the node - OperatingSystem string - // The Architecture reported by the node - Architecture string -} - -// NodeConfigStatus describes the status of the config assigned by Node.Spec.ConfigSource. -type NodeConfigStatus struct { - // Assigned reports the checkpointed config the node will try to use. - // When Node.Spec.ConfigSource is updated, the node checkpoints the associated - // config payload to local disk, along with a record indicating intended - // config. The node refers to this record to choose its config checkpoint, and - // reports this record in Assigned. Assigned only updates in the status after - // the record has been checkpointed to disk. When the Kubelet is restarted, - // it tries to make the Assigned config the Active config by loading and - // validating the checkpointed payload identified by Assigned. - // +optional - Assigned *NodeConfigSource - // Active reports the checkpointed config the node is actively using. - // Active will represent either the current version of the Assigned config, - // or the current LastKnownGood config, depending on whether attempting to use the - // Assigned config results in an error. - // +optional - Active *NodeConfigSource - // LastKnownGood reports the checkpointed config the node will fall back to - // when it encounters an error attempting to use the Assigned config. - // The Assigned config becomes the LastKnownGood config when the node determines - // that the Assigned config is stable and correct. - // This is currently implemented as a 10-minute soak period starting when the local - // record of Assigned config is updated. If the Assigned config is Active at the end - // of this period, it becomes the LastKnownGood. Note that if Spec.ConfigSource is - // reset to nil (use local defaults), the LastKnownGood is also immediately reset to nil, - // because the local default config is always assumed good. - // You should not make assumptions about the node's method of determining config stability - // and correctness, as this may change or become configurable in the future. - // +optional - LastKnownGood *NodeConfigSource - // Error describes any problems reconciling the Spec.ConfigSource to the Active config. - // Errors may occur, for example, attempting to checkpoint Spec.ConfigSource to the local Assigned - // record, attempting to checkpoint the payload associated with Spec.ConfigSource, attempting - // to load or validate the Assigned config, etc. - // Errors may occur at different points while syncing config. Earlier errors (e.g. download or - // checkpointing errors) will not result in a rollback to LastKnownGood, and may resolve across - // Kubelet retries. Later errors (e.g. loading or validating a checkpointed config) will result in - // a rollback to LastKnownGood. In the latter case, it is usually possible to resolve the error - // by fixing the config assigned in Spec.ConfigSource. - // You can find additional information for debugging by searching the error message in the Kubelet log. - // Error is a human-readable description of the error state; machines can check whether or not Error - // is empty, but should not rely on the stability of the Error text across Kubelet versions. - // +optional - Error string -} - -// NodeStatus is information about the current status of a node. -type NodeStatus struct { - // Capacity represents the total resources of a node. - // +optional - Capacity ResourceList - // Allocatable represents the resources of a node that are available for scheduling. - // +optional - Allocatable ResourceList - // NodePhase is the current lifecycle phase of the node. - // +optional - Phase NodePhase - // Conditions is an array of current node conditions. - // +optional - Conditions []NodeCondition - // Queried from cloud provider, if available. - // +optional - Addresses []NodeAddress - // Endpoints of daemons running on the Node. - // +optional - DaemonEndpoints NodeDaemonEndpoints - // Set of ids/uuids to uniquely identify the node. - // +optional - NodeInfo NodeSystemInfo - // List of container images on this node - // +optional - Images []ContainerImage - // List of attachable volumes in use (mounted) by the node. - // +optional - VolumesInUse []UniqueVolumeName - // List of volumes that are attached to the node. - // +optional - VolumesAttached []AttachedVolume - // Status of the config assigned to the node via the dynamic Kubelet config feature. - // +optional - Config *NodeConfigStatus -} - -// UniqueVolumeName defines the name of attached volume -type UniqueVolumeName string - -// AttachedVolume describes a volume attached to a node -type AttachedVolume struct { - // Name of the attached volume - Name UniqueVolumeName - - // DevicePath represents the device path where the volume should be available - DevicePath string -} - -// AvoidPods describes pods that should avoid this node. This is the value for a -// Node annotation with key scheduler.alpha.kubernetes.io/preferAvoidPods and -// will eventually become a field of NodeStatus. -type AvoidPods struct { - // Bounded-sized list of signatures of pods that should avoid this node, sorted - // in timestamp order from oldest to newest. Size of the slice is unspecified. - // +optional - PreferAvoidPods []PreferAvoidPodsEntry -} - -// PreferAvoidPodsEntry describes a class of pods that should avoid this node. -type PreferAvoidPodsEntry struct { - // The class of pods. - PodSignature PodSignature - // Time at which this entry was added to the list. - // +optional - EvictionTime metav1.Time - // (brief) reason why this entry was added to the list. - // +optional - Reason string - // Human readable message indicating why this entry was added to the list. - // +optional - Message string -} - -// PodSignature describes the class of pods that should avoid this node. -// Exactly one field should be set. -type PodSignature struct { - // Reference to controller whose pods should avoid this node. - // +optional - PodController *metav1.OwnerReference -} - -// ContainerImage describe a container image -type ContainerImage struct { - // Names by which this image is known. - Names []string - // The size of the image in bytes. - // +optional - SizeBytes int64 -} - -// NodePhase defines the phase in which a node is in -type NodePhase string - -// These are the valid phases of node. -const ( - // NodePending means the node has been created/added by the system, but not configured. - NodePending NodePhase = "Pending" - // NodeRunning means the node has been configured and has Kubernetes components running. - NodeRunning NodePhase = "Running" - // NodeTerminated means the node has been removed from the cluster. - NodeTerminated NodePhase = "Terminated" -) - -// NodeConditionType defines node's condition -type NodeConditionType string - -// These are valid conditions of node. Currently, we don't have enough information to decide -// node condition. In the future, we will add more. The proposed set of conditions are: -// NodeReady, NodeReachable -const ( - // NodeReady means kubelet is healthy and ready to accept pods. - NodeReady NodeConditionType = "Ready" - // NodeMemoryPressure means the kubelet is under pressure due to insufficient available memory. - NodeMemoryPressure NodeConditionType = "MemoryPressure" - // NodeDiskPressure means the kubelet is under pressure due to insufficient available disk. - NodeDiskPressure NodeConditionType = "DiskPressure" - // NodeNetworkUnavailable means that network for the node is not correctly configured. - NodeNetworkUnavailable NodeConditionType = "NetworkUnavailable" -) - -// NodeCondition represents the node's condition -type NodeCondition struct { - Type NodeConditionType - Status ConditionStatus - // +optional - LastHeartbeatTime metav1.Time - // +optional - LastTransitionTime metav1.Time - // +optional - Reason string - // +optional - Message string -} - -// NodeAddressType defines the node's address type -type NodeAddressType string - -// These are valid values of node address type -const ( - NodeHostName NodeAddressType = "Hostname" - NodeExternalIP NodeAddressType = "ExternalIP" - NodeInternalIP NodeAddressType = "InternalIP" - NodeExternalDNS NodeAddressType = "ExternalDNS" - NodeInternalDNS NodeAddressType = "InternalDNS" -) - -// NodeAddress represents node's address -type NodeAddress struct { - Type NodeAddressType - Address string -} - -// NodeResources is an object for conveying resource information about a node. -// see http://releases.k8s.io/HEAD/docs/design/resources.md for more details. -type NodeResources struct { - // Capacity represents the available resources of a node - // +optional - Capacity ResourceList -} - -// ResourceName is the name identifying various resources in a ResourceList. -type ResourceName string - -// Resource names must be not more than 63 characters, consisting of upper- or lower-case alphanumeric characters, -// with the -, _, and . characters allowed anywhere, except the first or last character. -// The default convention, matching that for annotations, is to use lower-case names, with dashes, rather than -// camel case, separating compound words. -// Fully-qualified resource typenames are constructed from a DNS-style subdomain, followed by a slash `/` and a name. -const ( - // CPU, in cores. (500m = .5 cores) - ResourceCPU ResourceName = "cpu" - // Memory, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) - ResourceMemory ResourceName = "memory" - // Volume size, in bytes (e,g. 5Gi = 5GiB = 5 * 1024 * 1024 * 1024) - ResourceStorage ResourceName = "storage" - // Local ephemeral storage, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) - // The resource name for ResourceEphemeralStorage is alpha and it can change across releases. - ResourceEphemeralStorage ResourceName = "ephemeral-storage" -) - -const ( - // ResourceDefaultNamespacePrefix is the default namespace prefix. - ResourceDefaultNamespacePrefix = "kubernetes.io/" - // ResourceHugePagesPrefix is the name prefix for huge page resources (alpha). - ResourceHugePagesPrefix = "hugepages-" - // ResourceAttachableVolumesPrefix is the name prefix for storage resource limits - ResourceAttachableVolumesPrefix = "attachable-volumes-" -) - -// ResourceList is a set of (resource name, quantity) pairs. -type ResourceList map[ResourceName]resource.Quantity - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// Node is a worker node in Kubernetes -// The name of the node according to etcd is in ObjectMeta.Name. -type Node struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Spec defines the behavior of a node. - // +optional - Spec NodeSpec - - // Status describes the current status of a Node - // +optional - Status NodeStatus -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeList is a list of nodes. -type NodeList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []Node -} - -// 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 - Finalizers []FinalizerName -} - -// FinalizerName is the name identifying a finalizer during namespace lifecycle. -type FinalizerName string - -// These are internal finalizer values to Kubernetes, must be qualified name unless defined here or -// in metav1. -const ( - FinalizerKubernetes FinalizerName = "kubernetes" -) - -// NamespaceStatus is information about the current status of a Namespace. -type NamespaceStatus struct { - // Phase is the current lifecycle phase of the namespace. - // +optional - Phase NamespacePhase - // +optional - Conditions []NamespaceCondition -} - -// NamespacePhase defines the phase in which the namespace is -type NamespacePhase string - -// These are the valid phases of a namespace. -const ( - // NamespaceActive means the namespace is available for use in the system - NamespaceActive NamespacePhase = "Active" - // NamespaceTerminating means the namespace is undergoing graceful termination - NamespaceTerminating NamespacePhase = "Terminating" -) - -// NamespaceConditionType defines constants reporting on status during namespace lifetime and deletion progress -type NamespaceConditionType string - -// These are valid conditions of a namespace. -const ( - NamespaceDeletionDiscoveryFailure NamespaceConditionType = "NamespaceDeletionDiscoveryFailure" - NamespaceDeletionContentFailure NamespaceConditionType = "NamespaceDeletionContentFailure" - NamespaceDeletionGVParsingFailure NamespaceConditionType = "NamespaceDeletionGroupVersionParsingFailure" -) - -// NamespaceCondition contains details about state of namespace. -type NamespaceCondition struct { - // Type of namespace controller condition. - Type NamespaceConditionType - // Status of the condition, one of True, False, Unknown. - Status ConditionStatus - // +optional - LastTransitionTime metav1.Time - // +optional - Reason string - // +optional - Message string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// Namespace provides a scope for Names. -// Use of multiple namespaces is optional -type Namespace struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Spec defines the behavior of the Namespace. - // +optional - Spec NamespaceSpec - - // Status describes the current status of a Namespace - // +optional - Status NamespaceStatus -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NamespaceList is a list of Namespaces. -type NamespaceList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []Namespace -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// Binding ties one object to another; for example, a pod is bound to a node by a scheduler. -// Deprecated in 1.7, please use the bindings subresource of pods instead. -type Binding struct { - metav1.TypeMeta - // ObjectMeta describes the object that is being bound. - // +optional - metav1.ObjectMeta - - // Target is the object to bind to. - Target ObjectReference -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// EphemeralContainers is a list of ephemeral containers used with the Pod ephemeralcontainers subresource. -type EphemeralContainers struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // A list of ephemeral containers associated with this pod. New ephemeral containers - // may be appended to this list, but existing ephemeral containers may not be removed - // or modified. - EphemeralContainers []EphemeralContainer -} - -// Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. -type Preconditions struct { - // Specifies the target UID. - // +optional - UID *types.UID -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodLogOptions is the query options for a Pod's logs REST call -type PodLogOptions struct { - metav1.TypeMeta - - // Container for which to return logs - Container string - // If true, follow the logs for the pod - Follow bool - // If true, return previous terminated container logs - Previous bool - // A relative time in seconds before the current time from which to show logs. If this value - // precedes the time a pod was started, only logs since the pod start will be returned. - // If this value is in the future, no logs will be returned. - // Only one of sinceSeconds or sinceTime may be specified. - SinceSeconds *int64 - // An RFC3339 timestamp from which to show logs. If this value - // precedes the time a pod was started, only logs since the pod start will be returned. - // If this value is in the future, no logs will be returned. - // Only one of sinceSeconds or sinceTime may be specified. - SinceTime *metav1.Time - // If true, add an RFC3339 or RFC3339Nano timestamp at the beginning of every line - // of log output. - Timestamps bool - // If set, the number of lines from the end of the logs to show. If not specified, - // logs are shown from the creation of the container or sinceSeconds or sinceTime - TailLines *int64 - // If set, the number of bytes to read from the server before terminating the - // log output. This may not display a complete final line of logging, and may return - // slightly more or slightly less than the specified limit. - LimitBytes *int64 - - // insecureSkipTLSVerifyBackend indicates that the apiserver should not confirm the validity of the - // serving certificate of the backend it is connecting to. This will make the HTTPS connection between the apiserver - // and the backend insecure. This means the apiserver cannot verify the log data it is receiving came from the real - // kubelet. If the kubelet is configured to verify the apiserver's TLS credentials, it does not mean the - // connection to the real kubelet is vulnerable to a man in the middle attack (e.g. an attacker could not intercept - // the actual log data coming from the real kubelet). - // +optional - InsecureSkipTLSVerifyBackend bool -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodAttachOptions is the query options to a Pod's remote attach call -// TODO: merge w/ PodExecOptions below for stdin, stdout, etc -type PodAttachOptions struct { - metav1.TypeMeta - - // Stdin if true indicates that stdin is to be redirected for the attach call - // +optional - Stdin bool - - // Stdout if true indicates that stdout is to be redirected for the attach call - // +optional - Stdout bool - - // Stderr if true indicates that stderr is to be redirected for the attach call - // +optional - Stderr bool - - // TTY if true indicates that a tty will be allocated for the attach call - // +optional - TTY bool - - // Container to attach to. - // +optional - Container string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodExecOptions is the query options to a Pod's remote exec call -type PodExecOptions struct { - metav1.TypeMeta - - // Stdin if true indicates that stdin is to be redirected for the exec call - Stdin bool - - // Stdout if true indicates that stdout is to be redirected for the exec call - Stdout bool - - // Stderr if true indicates that stderr is to be redirected for the exec call - Stderr bool - - // TTY if true indicates that a tty will be allocated for the exec call - TTY bool - - // Container in which to execute the command. - Container string - - // Command is the remote command to execute; argv array; not executed within a shell. - Command []string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodPortForwardOptions is the query options to a Pod's port forward call -type PodPortForwardOptions struct { - metav1.TypeMeta - - // The list of ports to forward - // +optional - Ports []int32 -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// PodProxyOptions is the query options to a Pod's proxy call -type PodProxyOptions struct { - metav1.TypeMeta - - // Path is the URL path to use for the current proxy request - Path string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// NodeProxyOptions is the query options to a Node's proxy call -type NodeProxyOptions struct { - metav1.TypeMeta - - // Path is the URL path to use for the current proxy request - Path string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ServiceProxyOptions is the query options to a Service's proxy call. -type ServiceProxyOptions struct { - metav1.TypeMeta - - // Path is the part of URLs that include service endpoints, suffixes, - // and parameters to use for the current proxy request to service. - // For example, the whole request URL is - // http://localhost/api/v1/namespaces/kube-system/services/elasticsearch-logging/_search?q=user:kimchy. - // Path is _search?q=user:kimchy. - Path string -} - -// ObjectReference contains enough information to let you inspect or modify the referred object. -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object -type ObjectReference struct { - // +optional - Kind string - // +optional - Namespace string - // +optional - Name string - // +optional - UID types.UID - // +optional - APIVersion string - // +optional - ResourceVersion string - - // Optional. If referring to a piece of an object instead of an entire object, this string - // should contain information to identify the sub-object. For example, if the object - // reference is to a container within a pod, this would take on a value like: - // "spec.containers{name}" (where "name" refers to the name of the container that triggered - // the event) or if no container name is specified "spec.containers[2]" (container with - // index 2 in this pod). This syntax is chosen only to have some well-defined way of - // referencing a part of an object. - // TODO: this design is not final and this field is subject to change in the future. - // +optional - FieldPath string -} - -// LocalObjectReference contains enough information to let you locate the referenced object inside the same namespace. -type LocalObjectReference struct { - //TODO: Add other useful fields. apiVersion, kind, uid? - Name string -} - -// TypedLocalObjectReference contains enough information to let you locate the typed referenced object inside the same namespace. -type TypedLocalObjectReference struct { - // APIGroup is the group for the resource being referenced. - // If APIGroup is not specified, the specified Kind must be in the core API group. - // For any other third-party types, APIGroup is required. - // +optional - APIGroup *string - // Kind is the type of resource being referenced - Kind string - // Name is the name of resource being referenced - Name string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// SerializedReference represents a serialized object reference -type SerializedReference struct { - metav1.TypeMeta - // +optional - Reference ObjectReference -} - -// EventSource represents the source from which an event is generated -type EventSource struct { - // Component from which the event is generated. - // +optional - Component string - // Node name on which the event is generated. - // +optional - Host string -} - -// Valid values for event types (new types could be added in future) -const ( - // Information only and will not cause any problems - EventTypeNormal string = "Normal" - // These events are to warn that something might go wrong - EventTypeWarning string = "Warning" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// Event is a report of an event somewhere in the cluster. -// TODO: Decide whether to store these separately or with the object they apply to. -type Event struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Required. The object that this event is about. Mapped to events.Event.regarding - // +optional - InvolvedObject ObjectReference - - // Optional; this should be a short, machine understandable string that gives the reason - // for this event being generated. For example, if the event is reporting that a container - // can't start, the Reason might be "ImageNotFound". - // TODO: provide exact specification for format. - // +optional - Reason string - - // Optional. A human-readable description of the status of this operation. - // TODO: decide on maximum length. Mapped to events.Event.note - // +optional - Message string - - // Optional. The component reporting this event. Should be a short machine understandable string. - // +optional - Source EventSource - - // The time at which the event was first recorded. (Time of server receipt is in TypeMeta.) - // +optional - FirstTimestamp metav1.Time - - // The time at which the most recent occurrence of this event was recorded. - // +optional - LastTimestamp metav1.Time - - // The number of times this event has occurred. - // +optional - Count int32 - - // Type of this event (Normal, Warning), new types could be added in the future. - // +optional - Type string - - // Time when this Event was first observed. - // +optional - EventTime metav1.MicroTime - - // Data about the Event series this event represents or nil if it's a singleton Event. - // +optional - Series *EventSeries - - // What action was taken/failed regarding to the Regarding object. - // +optional - Action string - - // Optional secondary object for more complex actions. - // +optional - Related *ObjectReference - - // Name of the controller that emitted this Event, e.g. `kubernetes.io/kubelet`. - // +optional - ReportingController string - - // ID of the controller instance, e.g. `kubelet-xyzf`. - // +optional - ReportingInstance string -} - -// EventSeries represents a series ov events -type EventSeries struct { - // Number of occurrences in this series up to the last heartbeat time - Count int32 - // Time of the last occurrence observed - LastObservedTime metav1.MicroTime - // State of this Series: Ongoing or Finished - // Deprecated. Planned removal for 1.18 - State EventSeriesState -} - -// EventSeriesState defines the state of event series -type EventSeriesState string - -// These are valid values of event series state -const ( - EventSeriesStateOngoing EventSeriesState = "Ongoing" - EventSeriesStateFinished EventSeriesState = "Finished" - EventSeriesStateUnknown EventSeriesState = "Unknown" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// EventList is a list of events. -type EventList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []Event -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// List holds a list of objects, which may not be known by the server. -type List metainternalversion.List - -// LimitType defines a type of object that is limited -type LimitType string - -const ( - // LimitTypePod defines limit that applies to all pods in a namespace - LimitTypePod LimitType = "Pod" - // LimitTypeContainer defines limit that applies to all containers in a namespace - LimitTypeContainer LimitType = "Container" - // LimitTypePersistentVolumeClaim defines limit that applies to all persistent volume claims in a namespace - LimitTypePersistentVolumeClaim LimitType = "PersistentVolumeClaim" -) - -// LimitRangeItem defines a min/max usage limit for any resource that matches on kind -type LimitRangeItem struct { - // Type of resource that this limit applies to - // +optional - Type LimitType - // Max usage constraints on this kind by resource name - // +optional - Max ResourceList - // Min usage constraints on this kind by resource name - // +optional - Min ResourceList - // Default resource requirement limit value by resource name. - // +optional - Default ResourceList - // DefaultRequest resource requirement request value by resource name. - // +optional - DefaultRequest ResourceList - // MaxLimitRequestRatio represents the max burst value for the named resource - // +optional - MaxLimitRequestRatio ResourceList -} - -// LimitRangeSpec defines a min/max usage limit for resources that match on kind -type LimitRangeSpec struct { - // Limits is the list of LimitRangeItem objects that are enforced - Limits []LimitRangeItem -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// LimitRange sets resource usage limits for each kind of resource in a Namespace -type LimitRange struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Spec defines the limits enforced - // +optional - Spec LimitRangeSpec -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// LimitRangeList is a list of LimitRange items. -type LimitRangeList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - // Items is a list of LimitRange objects - Items []LimitRange -} - -// The following identify resource constants for Kubernetes object types -const ( - // Pods, number - ResourcePods ResourceName = "pods" - // Services, number - ResourceServices ResourceName = "services" - // ReplicationControllers, number - ResourceReplicationControllers ResourceName = "replicationcontrollers" - // ResourceQuotas, number - ResourceQuotas ResourceName = "resourcequotas" - // ResourceSecrets, number - ResourceSecrets ResourceName = "secrets" - // ResourceConfigMaps, number - ResourceConfigMaps ResourceName = "configmaps" - // ResourcePersistentVolumeClaims, number - ResourcePersistentVolumeClaims ResourceName = "persistentvolumeclaims" - // ResourceServicesNodePorts, number - ResourceServicesNodePorts ResourceName = "services.nodeports" - // ResourceServicesLoadBalancers, number - ResourceServicesLoadBalancers ResourceName = "services.loadbalancers" - // CPU request, in cores. (500m = .5 cores) - ResourceRequestsCPU ResourceName = "requests.cpu" - // Memory request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) - ResourceRequestsMemory ResourceName = "requests.memory" - // Storage request, in bytes - ResourceRequestsStorage ResourceName = "requests.storage" - // Local ephemeral storage request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) - ResourceRequestsEphemeralStorage ResourceName = "requests.ephemeral-storage" - // CPU limit, in cores. (500m = .5 cores) - ResourceLimitsCPU ResourceName = "limits.cpu" - // Memory limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) - ResourceLimitsMemory ResourceName = "limits.memory" - // Local ephemeral storage limit, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) - ResourceLimitsEphemeralStorage ResourceName = "limits.ephemeral-storage" -) - -// The following identify resource prefix for Kubernetes object types -const ( - // HugePages request, in bytes. (500Gi = 500GiB = 500 * 1024 * 1024 * 1024) - // As burst is not supported for HugePages, we would only quota its request, and ignore the limit. - ResourceRequestsHugePagesPrefix = "requests.hugepages-" - // Default resource requests prefix - DefaultResourceRequestsPrefix = "requests." -) - -// ResourceQuotaScope defines a filter that must match each object tracked by a quota -type ResourceQuotaScope string - -// These are valid values for resource quota spec -const ( - // Match all pod objects where spec.activeDeadlineSeconds - ResourceQuotaScopeTerminating ResourceQuotaScope = "Terminating" - // Match all pod objects where !spec.activeDeadlineSeconds - ResourceQuotaScopeNotTerminating ResourceQuotaScope = "NotTerminating" - // Match all pod objects that have best effort quality of service - ResourceQuotaScopeBestEffort ResourceQuotaScope = "BestEffort" - // Match all pod objects that do not have best effort quality of service - ResourceQuotaScopeNotBestEffort ResourceQuotaScope = "NotBestEffort" - // Match all pod objects that have priority class mentioned - ResourceQuotaScopePriorityClass ResourceQuotaScope = "PriorityClass" -) - -// 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 - // +optional - Hard ResourceList - // A collection of filters that must match each object tracked by a quota. - // If not specified, the quota matches all objects. - // +optional - Scopes []ResourceQuotaScope - // ScopeSelector is also a collection of filters like Scopes that must match each object tracked by a quota - // but expressed using ScopeSelectorOperator in combination with possible values. - // +optional - ScopeSelector *ScopeSelector -} - -// ScopeSelector represents the AND of the selectors represented -// by the scoped-resource selector terms. -type ScopeSelector struct { - // A list of scope selector requirements by scope of the resources. - // +optional - MatchExpressions []ScopedResourceSelectorRequirement -} - -// ScopedResourceSelectorRequirement is a selector that contains values, a scope name, and an operator -// that relates the scope name and values. -type ScopedResourceSelectorRequirement struct { - // The name of the scope that the selector applies to. - ScopeName ResourceQuotaScope - // Represents a scope's relationship to a set of values. - // Valid operators are In, NotIn, Exists, DoesNotExist. - Operator ScopeSelectorOperator - // An array of string values. If the operator is In or NotIn, - // the values array must be non-empty. If the operator is Exists or DoesNotExist, - // the values array must be empty. - // This array is replaced during a strategic merge patch. - // +optional - Values []string -} - -// ScopeSelectorOperator is the set of operators that can be used in -// a scope selector requirement. -type ScopeSelectorOperator string - -// These are the valid values for ScopeSelectorOperator -const ( - ScopeSelectorOpIn ScopeSelectorOperator = "In" - ScopeSelectorOpNotIn ScopeSelectorOperator = "NotIn" - ScopeSelectorOpExists ScopeSelectorOperator = "Exists" - ScopeSelectorOpDoesNotExist ScopeSelectorOperator = "DoesNotExist" -) - -// ResourceQuotaStatus defines the enforced hard limits and observed use -type ResourceQuotaStatus struct { - // Hard is the set of enforced hard limits for each named resource - // +optional - Hard ResourceList - // Used is the current observed total usage of the resource in the namespace - // +optional - Used ResourceList -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ResourceQuota sets aggregate quota restrictions enforced per namespace -type ResourceQuota struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Spec defines the desired quota - // +optional - Spec ResourceQuotaSpec - - // Status defines the actual enforced quota and its current usage - // +optional - Status ResourceQuotaStatus -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ResourceQuotaList is a list of ResourceQuota items -type ResourceQuotaList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - // Items is a list of ResourceQuota objects - Items []ResourceQuota -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// Secret holds secret data of a certain type. The total bytes of the values in -// the Data field must be less than MaxSecretSize bytes. -type Secret struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Immutable field, if set, ensures that data stored in the Secret cannot - // be updated (only object metadata can be modified). - // This is an alpha field enabled by ImmutableEphemeralVolumes feature gate. - // +optional - Immutable *bool - - // Data contains the secret data. Each key must consist of alphanumeric - // characters, '-', '_' or '.'. The serialized form of the secret data is a - // base64 encoded string, representing the arbitrary (possibly non-string) - // data value here. - // +optional - Data map[string][]byte - - // Used to facilitate programmatic handling of secret data. - // +optional - Type SecretType -} - -// MaxSecretSize represents the max secret size. -const MaxSecretSize = 1 * 1024 * 1024 - -// SecretType defines the types of secrets -type SecretType string - -// These are the valid values for SecretType -const ( - // SecretTypeOpaque is the default; arbitrary user-defined data - SecretTypeOpaque SecretType = "Opaque" - - // SecretTypeServiceAccountToken contains a token that identifies a service account to the API - // - // Required fields: - // - Secret.Annotations["kubernetes.io/service-account.name"] - the name of the ServiceAccount the token identifies - // - Secret.Annotations["kubernetes.io/service-account.uid"] - the UID of the ServiceAccount the token identifies - // - Secret.Data["token"] - a token that identifies the service account to the API - SecretTypeServiceAccountToken SecretType = "kubernetes.io/service-account-token" - - // ServiceAccountNameKey is the key of the required annotation for SecretTypeServiceAccountToken secrets - ServiceAccountNameKey = "kubernetes.io/service-account.name" - // ServiceAccountUIDKey is the key of the required annotation for SecretTypeServiceAccountToken secrets - ServiceAccountUIDKey = "kubernetes.io/service-account.uid" - // ServiceAccountTokenKey is the key of the required data for SecretTypeServiceAccountToken secrets - ServiceAccountTokenKey = "token" - // ServiceAccountKubeconfigKey is the key of the optional kubeconfig data for SecretTypeServiceAccountToken secrets - ServiceAccountKubeconfigKey = "kubernetes.kubeconfig" - // ServiceAccountRootCAKey is the key of the optional root certificate authority for SecretTypeServiceAccountToken secrets - ServiceAccountRootCAKey = "ca.crt" - // ServiceAccountNamespaceKey is the key of the optional namespace to use as the default for namespaced API calls - ServiceAccountNamespaceKey = "namespace" - - // SecretTypeDockercfg contains a dockercfg file that follows the same format rules as ~/.dockercfg - // - // Required fields: - // - Secret.Data[".dockercfg"] - a serialized ~/.dockercfg file - SecretTypeDockercfg SecretType = "kubernetes.io/dockercfg" - - // DockerConfigKey is the key of the required data for SecretTypeDockercfg secrets - DockerConfigKey = ".dockercfg" - - // SecretTypeDockerConfigJSON contains a dockercfg file that follows the same format rules as ~/.docker/config.json - // - // Required fields: - // - Secret.Data[".dockerconfigjson"] - a serialized ~/.docker/config.json file - SecretTypeDockerConfigJSON SecretType = "kubernetes.io/dockerconfigjson" - - // DockerConfigJSONKey is the key of the required data for SecretTypeDockerConfigJson secrets - DockerConfigJSONKey = ".dockerconfigjson" - - // SecretTypeBasicAuth contains data needed for basic authentication. - // - // Required at least one of fields: - // - Secret.Data["username"] - username used for authentication - // - Secret.Data["password"] - password or token needed for authentication - SecretTypeBasicAuth SecretType = "kubernetes.io/basic-auth" - - // BasicAuthUsernameKey is the key of the username for SecretTypeBasicAuth secrets - BasicAuthUsernameKey = "username" - // BasicAuthPasswordKey is the key of the password or token for SecretTypeBasicAuth secrets - BasicAuthPasswordKey = "password" - - // SecretTypeSSHAuth contains data needed for SSH authentication. - // - // Required field: - // - Secret.Data["ssh-privatekey"] - private SSH key needed for authentication - SecretTypeSSHAuth SecretType = "kubernetes.io/ssh-auth" - - // SSHAuthPrivateKey is the key of the required SSH private key for SecretTypeSSHAuth secrets - SSHAuthPrivateKey = "ssh-privatekey" - - // SecretTypeTLS contains information about a TLS client or server secret. It - // is primarily used with TLS termination of the Ingress resource, but may be - // used in other types. - // - // Required fields: - // - Secret.Data["tls.key"] - TLS private key. - // Secret.Data["tls.crt"] - TLS certificate. - // TODO: Consider supporting different formats, specifying CA/destinationCA. - SecretTypeTLS SecretType = "kubernetes.io/tls" - - // TLSCertKey is the key for tls certificates in a TLS secret. - TLSCertKey = "tls.crt" - // TLSPrivateKeyKey is the key for the private key field in a TLS secret. - TLSPrivateKeyKey = "tls.key" - // SecretTypeBootstrapToken is used during the automated bootstrap process (first - // implemented by kubeadm). It stores tokens that are used to sign well known - // ConfigMaps. They are used for authn. - SecretTypeBootstrapToken SecretType = "bootstrap.kubernetes.io/token" -) - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// SecretList represents the list of secrets -type SecretList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []Secret -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ConfigMap holds configuration data for components or applications to consume. -type ConfigMap struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // Immutable field, if set, ensures that data stored in the ConfigMap cannot - // be updated (only object metadata can be modified). - // This is an alpha field enabled by ImmutableEphemeralVolumes feature gate. - // +optional - Immutable *bool - - // Data contains the configuration data. - // Each key must consist of alphanumeric characters, '-', '_' or '.'. - // Values with non-UTF-8 byte sequences must use the BinaryData field. - // The keys stored in Data must not overlap with the keys in - // the BinaryData field, this is enforced during validation process. - // +optional - Data map[string]string - - // BinaryData contains the binary data. - // Each key must consist of alphanumeric characters, '-', '_' or '.'. - // BinaryData can contain byte sequences that are not in the UTF-8 range. - // The keys stored in BinaryData must not overlap with the ones in - // the Data field, this is enforced during validation process. - // Using this field will require 1.10+ apiserver and - // kubelet. - // +optional - BinaryData map[string][]byte -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ConfigMapList is a resource containing a list of ConfigMap objects. -type ConfigMapList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - // Items is the list of ConfigMaps. - Items []ConfigMap -} - -// These constants are for remote command execution and port forwarding and are -// used by both the client side and server side components. -// -// This is probably not the ideal place for them, but it didn't seem worth it -// to create pkg/exec and pkg/portforward just to contain a single file with -// constants in it. Suggestions for more appropriate alternatives are -// definitely welcome! -const ( - // Enable stdin for remote command execution - ExecStdinParam = "input" - // Enable stdout for remote command execution - ExecStdoutParam = "output" - // Enable stderr for remote command execution - ExecStderrParam = "error" - // Enable TTY for remote command execution - ExecTTYParam = "tty" - // Command to run for remote command execution - ExecCommandParam = "command" - - // Name of header that specifies stream type - StreamType = "streamType" - // Value for streamType header for stdin stream - StreamTypeStdin = "stdin" - // Value for streamType header for stdout stream - StreamTypeStdout = "stdout" - // Value for streamType header for stderr stream - StreamTypeStderr = "stderr" - // Value for streamType header for data stream - StreamTypeData = "data" - // Value for streamType header for error stream - StreamTypeError = "error" - // Value for streamType header for terminal resize stream - StreamTypeResize = "resize" - - // Name of header that specifies the port being forwarded - PortHeader = "port" - // Name of header that specifies a request ID used to associate the error - // and data streams for a single forwarded connection - PortForwardRequestIDHeader = "requestID" -) - -// ComponentConditionType defines type and constants for component health validation. -type ComponentConditionType string - -// These are the valid conditions for the component. -const ( - ComponentHealthy ComponentConditionType = "Healthy" -) - -// ComponentCondition represents the condition of a component -type ComponentCondition struct { - Type ComponentConditionType - Status ConditionStatus - // +optional - Message string - // +optional - Error string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ComponentStatus (and ComponentStatusList) holds the cluster validation info. -type ComponentStatus struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - - // +optional - Conditions []ComponentCondition -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// ComponentStatusList represents the list of component statuses -type ComponentStatusList struct { - metav1.TypeMeta - // +optional - metav1.ListMeta - - Items []ComponentStatus -} - -// SecurityContext holds security configuration that will be applied to a container. -// Some fields are present in both SecurityContext and PodSecurityContext. When both -// are set, the values in SecurityContext take precedence. -type SecurityContext struct { - // The capabilities to add/drop when running containers. - // Defaults to the default set of capabilities granted by the container runtime. - // +optional - Capabilities *Capabilities - // Run container in privileged mode. - // Processes in privileged containers are essentially equivalent to root on the host. - // Defaults to false. - // +optional - Privileged *bool - // The SELinux context to be applied to the container. - // If unspecified, the container runtime will allocate a random SELinux context for each - // container. May also be set in PodSecurityContext. If set in both SecurityContext and - // PodSecurityContext, the value specified in SecurityContext takes precedence. - // +optional - SELinuxOptions *SELinuxOptions - // The Windows specific settings applied to all containers. - // If unspecified, the options from the PodSecurityContext will be used. - // If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence. - // +optional - WindowsOptions *WindowsSecurityContextOptions - // The UID to run the entrypoint of the container process. - // Defaults to user specified in image metadata if unspecified. - // May also be set in PodSecurityContext. If set in both SecurityContext and - // PodSecurityContext, the value specified in SecurityContext takes precedence. - // +optional - RunAsUser *int64 - // The GID to run the entrypoint of the container process. - // Uses runtime default if unset. - // May also be set in PodSecurityContext. If set in both SecurityContext and - // PodSecurityContext, the value specified in SecurityContext takes precedence. - // +optional - RunAsGroup *int64 - // Indicates that the container must run as a non-root user. - // If true, the Kubelet will validate the image at runtime to ensure that it - // does not run as UID 0 (root) and fail to start the container if it does. - // If unset or false, no such validation will be performed. - // May also be set in PodSecurityContext. If set in both SecurityContext and - // PodSecurityContext, the value specified in SecurityContext takes precedence. - // +optional - RunAsNonRoot *bool - // The read-only root filesystem allows you to restrict the locations that an application can write - // files to, ensuring the persistent data can only be written to mounts. - // +optional - ReadOnlyRootFilesystem *bool - // AllowPrivilegeEscalation controls whether a process can gain more - // privileges than its parent process. This bool directly controls if - // the no_new_privs flag will be set on the container process. - // +optional - AllowPrivilegeEscalation *bool - // ProcMount denotes the type of proc mount to use for the containers. - // The default is DefaultProcMount which uses the container runtime defaults for - // readonly paths and masked paths. - // +optional - ProcMount *ProcMountType -} - -// ProcMountType defines the type of proc mount -type ProcMountType string - -const ( - // DefaultProcMount uses the container runtime defaults for readonly and masked - // paths for /proc. Most container runtimes mask certain paths in /proc to avoid - // accidental security exposure of special devices or information. - DefaultProcMount ProcMountType = "Default" - - // UnmaskedProcMount bypasses the default masking behavior of the container - // runtime and ensures the newly created /proc the container stays intact with - // no modifications. - UnmaskedProcMount ProcMountType = "Unmasked" -) - -// SELinuxOptions are the labels to be applied to the container. -type SELinuxOptions struct { - // SELinux user label - // +optional - User string - // SELinux role label - // +optional - Role string - // SELinux type label - // +optional - Type string - // SELinux level label. - // +optional - Level string -} - -// WindowsSecurityContextOptions contain Windows-specific options and credentials. -type WindowsSecurityContextOptions struct { - // GMSACredentialSpecName is the name of the GMSA credential spec to use. - // +optional - GMSACredentialSpecName *string - - // GMSACredentialSpec is where the GMSA admission webhook - // (https://github.com/kubernetes-sigs/windows-gmsa) inlines the contents of the - // GMSA credential spec named by the GMSACredentialSpecName field. - // +optional - GMSACredentialSpec *string - - // The UserName in Windows to run the entrypoint of the container process. - // Defaults to the user specified in image metadata if unspecified. - // May also be set in PodSecurityContext. If set in both SecurityContext and - // PodSecurityContext, the value specified in SecurityContext takes precedence. - // +optional - RunAsUserName *string -} - -// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object - -// RangeAllocation is an opaque API object (not exposed to end users) that can be persisted to record -// the global allocation state of the cluster. The schema of Range and Data generic, in that Range -// should be a string representation of the inputs to a range (for instance, for IP allocation it -// might be a CIDR) and Data is an opaque blob understood by an allocator which is typically a -// binary range. Consumers should use annotations to record additional information (schema version, -// data encoding hints). A range allocation should *ALWAYS* be recreatable at any time by observation -// of the cluster, thus the object is less strongly typed than most. -type RangeAllocation struct { - metav1.TypeMeta - // +optional - metav1.ObjectMeta - // A string representing a unique label for a range of resources, such as a CIDR "10.0.0.0/8" or - // port range "10000-30000". Range is not strongly schema'd here. The Range is expected to define - // a start and end unless there is an implicit end. - Range string - // A byte array representing the serialized state of a range allocation. Additional clarifiers on - // the type or format of data should be represented with annotations. For IP allocations, this is - // represented as a bit array starting at the base IP of the CIDR in Range, with each bit representing - // a single allocated address (the fifth bit on CIDR 10.0.0.0/8 is 10.0.0.4). - Data []byte -} - -const ( - // DefaultSchedulerName defines the name of default scheduler. - DefaultSchedulerName = "default-scheduler" - - // DefaultHardPodAffinitySymmetricWeight is the weight of implicit PreferredDuringScheduling affinity rule. - // - // RequiredDuringScheduling affinity is not symmetric, but there is an implicit PreferredDuringScheduling affinity rule - // corresponding to every RequiredDuringScheduling affinity rule. - // When the --hard-pod-affinity-weight scheduler flag is not specified, - // DefaultHardPodAffinityWeight defines the weight of the implicit PreferredDuringScheduling affinity rule. - DefaultHardPodAffinitySymmetricWeight int32 = 1 -) - -// UnsatisfiableConstraintAction defines the actions that can be taken for an -// unsatisfiable constraint. -type UnsatisfiableConstraintAction string - -const ( - // DoNotSchedule instructs the scheduler not to schedule the pod - // when constraints are not satisfied. - DoNotSchedule UnsatisfiableConstraintAction = "DoNotSchedule" - // ScheduleAnyway instructs the scheduler to schedule the pod - // even if constraints are not satisfied. - ScheduleAnyway UnsatisfiableConstraintAction = "ScheduleAnyway" -) - -// TopologySpreadConstraint specifies how to spread matching pods among the given topology. -type TopologySpreadConstraint struct { - // MaxSkew describes the degree to which pods may be unevenly distributed. - // It's the maximum permitted difference between the number of matching pods in - // any two topology domains of a given topology type. - // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same - // labelSelector spread as 1/1/0: - // +-------+-------+-------+ - // | zone1 | zone2 | zone3 | - // +-------+-------+-------+ - // | P | P | | - // +-------+-------+-------+ - // - if MaxSkew is 1, incoming pod can only be scheduled to zone3 to become 1/1/1; - // scheduling it onto zone1(zone2) would make the ActualSkew(2-0) on zone1(zone2) - // violate MaxSkew(1). - // - if MaxSkew is 2, incoming pod can be scheduled onto any zone. - // It's a required field. Default value is 1 and 0 is not allowed. - MaxSkew int32 - // TopologyKey is the key of node labels. Nodes that have a label with this key - // and identical values are considered to be in the same topology. - // We consider each as a "bucket", and try to put balanced number - // of pods into each bucket. - // It's a required field. - TopologyKey string - // WhenUnsatisfiable indicates how to deal with a pod if it doesn't satisfy - // the spread constraint. - // - DoNotSchedule (default) tells the scheduler not to schedule it - // - ScheduleAnyway tells the scheduler to still schedule it - // It's considered as "Unsatisfiable" if and only if placing incoming pod on any - // topology violates "MaxSkew". - // For example, in a 3-zone cluster, MaxSkew is set to 1, and pods with the same - // labelSelector spread as 3/1/1: - // +-------+-------+-------+ - // | zone1 | zone2 | zone3 | - // +-------+-------+-------+ - // | P P P | P | P | - // +-------+-------+-------+ - // If WhenUnsatisfiable is set to DoNotSchedule, incoming pod can only be scheduled - // to zone2(zone3) to become 3/2/1(3/1/2) as ActualSkew(2-1) on zone2(zone3) satisfies - // MaxSkew(1). In other words, the cluster can still be imbalanced, but scheduler - // won't make it *more* imbalanced. - // It's a required field. - WhenUnsatisfiable UnsatisfiableConstraintAction - // LabelSelector is used to find matching pods. - // Pods that match this label selector are counted to determine the number of pods - // in their corresponding topology domain. - // +optional - LabelSelector *metav1.LabelSelector -} diff --git a/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go b/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go deleted file mode 100644 index 1951d5e27..000000000 --- a/vendor/k8s.io/kubernetes/pkg/apis/core/zz_generated.deepcopy.go +++ /dev/null @@ -1,5790 +0,0 @@ -// +build !ignore_autogenerated - -/* -Copyright 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 deepcopy-gen. DO NOT EDIT. - -package core - -import ( - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - types "k8s.io/apimachinery/pkg/types" -) - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AWSElasticBlockStoreVolumeSource) DeepCopyInto(out *AWSElasticBlockStoreVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AWSElasticBlockStoreVolumeSource. -func (in *AWSElasticBlockStoreVolumeSource) DeepCopy() *AWSElasticBlockStoreVolumeSource { - if in == nil { - return nil - } - out := new(AWSElasticBlockStoreVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Affinity) DeepCopyInto(out *Affinity) { - *out = *in - if in.NodeAffinity != nil { - in, out := &in.NodeAffinity, &out.NodeAffinity - *out = new(NodeAffinity) - (*in).DeepCopyInto(*out) - } - if in.PodAffinity != nil { - in, out := &in.PodAffinity, &out.PodAffinity - *out = new(PodAffinity) - (*in).DeepCopyInto(*out) - } - if in.PodAntiAffinity != nil { - in, out := &in.PodAntiAffinity, &out.PodAntiAffinity - *out = new(PodAntiAffinity) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Affinity. -func (in *Affinity) DeepCopy() *Affinity { - if in == nil { - return nil - } - out := new(Affinity) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AttachedVolume) DeepCopyInto(out *AttachedVolume) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AttachedVolume. -func (in *AttachedVolume) DeepCopy() *AttachedVolume { - if in == nil { - return nil - } - out := new(AttachedVolume) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AvoidPods) DeepCopyInto(out *AvoidPods) { - *out = *in - if in.PreferAvoidPods != nil { - in, out := &in.PreferAvoidPods, &out.PreferAvoidPods - *out = make([]PreferAvoidPodsEntry, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AvoidPods. -func (in *AvoidPods) DeepCopy() *AvoidPods { - if in == nil { - return nil - } - out := new(AvoidPods) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureDiskVolumeSource) DeepCopyInto(out *AzureDiskVolumeSource) { - *out = *in - if in.CachingMode != nil { - in, out := &in.CachingMode, &out.CachingMode - *out = new(AzureDataDiskCachingMode) - **out = **in - } - if in.FSType != nil { - in, out := &in.FSType, &out.FSType - *out = new(string) - **out = **in - } - if in.ReadOnly != nil { - in, out := &in.ReadOnly, &out.ReadOnly - *out = new(bool) - **out = **in - } - if in.Kind != nil { - in, out := &in.Kind, &out.Kind - *out = new(AzureDataDiskKind) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureDiskVolumeSource. -func (in *AzureDiskVolumeSource) DeepCopy() *AzureDiskVolumeSource { - if in == nil { - return nil - } - out := new(AzureDiskVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureFilePersistentVolumeSource) DeepCopyInto(out *AzureFilePersistentVolumeSource) { - *out = *in - if in.SecretNamespace != nil { - in, out := &in.SecretNamespace, &out.SecretNamespace - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureFilePersistentVolumeSource. -func (in *AzureFilePersistentVolumeSource) DeepCopy() *AzureFilePersistentVolumeSource { - if in == nil { - return nil - } - out := new(AzureFilePersistentVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *AzureFileVolumeSource) DeepCopyInto(out *AzureFileVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new AzureFileVolumeSource. -func (in *AzureFileVolumeSource) DeepCopy() *AzureFileVolumeSource { - if in == nil { - return nil - } - out := new(AzureFileVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Binding) DeepCopyInto(out *Binding) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.Target = in.Target - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Binding. -func (in *Binding) DeepCopy() *Binding { - if in == nil { - return nil - } - out := new(Binding) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Binding) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSIPersistentVolumeSource) DeepCopyInto(out *CSIPersistentVolumeSource) { - *out = *in - if in.VolumeAttributes != nil { - in, out := &in.VolumeAttributes, &out.VolumeAttributes - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.ControllerPublishSecretRef != nil { - in, out := &in.ControllerPublishSecretRef, &out.ControllerPublishSecretRef - *out = new(SecretReference) - **out = **in - } - if in.NodeStageSecretRef != nil { - in, out := &in.NodeStageSecretRef, &out.NodeStageSecretRef - *out = new(SecretReference) - **out = **in - } - if in.NodePublishSecretRef != nil { - in, out := &in.NodePublishSecretRef, &out.NodePublishSecretRef - *out = new(SecretReference) - **out = **in - } - if in.ControllerExpandSecretRef != nil { - in, out := &in.ControllerExpandSecretRef, &out.ControllerExpandSecretRef - *out = new(SecretReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIPersistentVolumeSource. -func (in *CSIPersistentVolumeSource) DeepCopy() *CSIPersistentVolumeSource { - if in == nil { - return nil - } - out := new(CSIPersistentVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CSIVolumeSource) DeepCopyInto(out *CSIVolumeSource) { - *out = *in - if in.ReadOnly != nil { - in, out := &in.ReadOnly, &out.ReadOnly - *out = new(bool) - **out = **in - } - if in.FSType != nil { - in, out := &in.FSType, &out.FSType - *out = new(string) - **out = **in - } - if in.VolumeAttributes != nil { - in, out := &in.VolumeAttributes, &out.VolumeAttributes - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.NodePublishSecretRef != nil { - in, out := &in.NodePublishSecretRef, &out.NodePublishSecretRef - *out = new(LocalObjectReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CSIVolumeSource. -func (in *CSIVolumeSource) DeepCopy() *CSIVolumeSource { - if in == nil { - return nil - } - out := new(CSIVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Capabilities) DeepCopyInto(out *Capabilities) { - *out = *in - if in.Add != nil { - in, out := &in.Add, &out.Add - *out = make([]Capability, len(*in)) - copy(*out, *in) - } - if in.Drop != nil { - in, out := &in.Drop, &out.Drop - *out = make([]Capability, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Capabilities. -func (in *Capabilities) DeepCopy() *Capabilities { - if in == nil { - return nil - } - out := new(Capabilities) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CephFSPersistentVolumeSource) DeepCopyInto(out *CephFSPersistentVolumeSource) { - *out = *in - if in.Monitors != nil { - in, out := &in.Monitors, &out.Monitors - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(SecretReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CephFSPersistentVolumeSource. -func (in *CephFSPersistentVolumeSource) DeepCopy() *CephFSPersistentVolumeSource { - if in == nil { - return nil - } - out := new(CephFSPersistentVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CephFSVolumeSource) DeepCopyInto(out *CephFSVolumeSource) { - *out = *in - if in.Monitors != nil { - in, out := &in.Monitors, &out.Monitors - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CephFSVolumeSource. -func (in *CephFSVolumeSource) DeepCopy() *CephFSVolumeSource { - if in == nil { - return nil - } - out := new(CephFSVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CinderPersistentVolumeSource) DeepCopyInto(out *CinderPersistentVolumeSource) { - *out = *in - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(SecretReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CinderPersistentVolumeSource. -func (in *CinderPersistentVolumeSource) DeepCopy() *CinderPersistentVolumeSource { - if in == nil { - return nil - } - out := new(CinderPersistentVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *CinderVolumeSource) DeepCopyInto(out *CinderVolumeSource) { - *out = *in - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CinderVolumeSource. -func (in *CinderVolumeSource) DeepCopy() *CinderVolumeSource { - if in == nil { - return nil - } - out := new(CinderVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ClientIPConfig) DeepCopyInto(out *ClientIPConfig) { - *out = *in - if in.TimeoutSeconds != nil { - in, out := &in.TimeoutSeconds, &out.TimeoutSeconds - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ClientIPConfig. -func (in *ClientIPConfig) DeepCopy() *ClientIPConfig { - if in == nil { - return nil - } - out := new(ClientIPConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ComponentCondition) DeepCopyInto(out *ComponentCondition) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComponentCondition. -func (in *ComponentCondition) DeepCopy() *ComponentCondition { - if in == nil { - return nil - } - out := new(ComponentCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ComponentStatus) DeepCopyInto(out *ComponentStatus) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]ComponentCondition, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComponentStatus. -func (in *ComponentStatus) DeepCopy() *ComponentStatus { - if in == nil { - return nil - } - out := new(ComponentStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ComponentStatus) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ComponentStatusList) DeepCopyInto(out *ComponentStatusList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ComponentStatus, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ComponentStatusList. -func (in *ComponentStatusList) DeepCopy() *ComponentStatusList { - if in == nil { - return nil - } - out := new(ComponentStatusList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ComponentStatusList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConfigMap) DeepCopyInto(out *ConfigMap) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.Immutable != nil { - in, out := &in.Immutable, &out.Immutable - *out = new(bool) - **out = **in - } - if in.Data != nil { - in, out := &in.Data, &out.Data - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.BinaryData != nil { - in, out := &in.BinaryData, &out.BinaryData - *out = make(map[string][]byte, len(*in)) - for key, val := range *in { - var outVal []byte - if val == nil { - (*out)[key] = nil - } else { - in, out := &val, &outVal - *out = make([]byte, len(*in)) - copy(*out, *in) - } - (*out)[key] = outVal - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMap. -func (in *ConfigMap) DeepCopy() *ConfigMap { - if in == nil { - return nil - } - out := new(ConfigMap) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ConfigMap) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConfigMapEnvSource) DeepCopyInto(out *ConfigMapEnvSource) { - *out = *in - out.LocalObjectReference = in.LocalObjectReference - if in.Optional != nil { - in, out := &in.Optional, &out.Optional - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapEnvSource. -func (in *ConfigMapEnvSource) DeepCopy() *ConfigMapEnvSource { - if in == nil { - return nil - } - out := new(ConfigMapEnvSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConfigMapKeySelector) DeepCopyInto(out *ConfigMapKeySelector) { - *out = *in - out.LocalObjectReference = in.LocalObjectReference - if in.Optional != nil { - in, out := &in.Optional, &out.Optional - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapKeySelector. -func (in *ConfigMapKeySelector) DeepCopy() *ConfigMapKeySelector { - if in == nil { - return nil - } - out := new(ConfigMapKeySelector) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConfigMapList) DeepCopyInto(out *ConfigMapList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ConfigMap, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapList. -func (in *ConfigMapList) DeepCopy() *ConfigMapList { - if in == nil { - return nil - } - out := new(ConfigMapList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ConfigMapList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConfigMapNodeConfigSource) DeepCopyInto(out *ConfigMapNodeConfigSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapNodeConfigSource. -func (in *ConfigMapNodeConfigSource) DeepCopy() *ConfigMapNodeConfigSource { - if in == nil { - return nil - } - out := new(ConfigMapNodeConfigSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConfigMapProjection) DeepCopyInto(out *ConfigMapProjection) { - *out = *in - out.LocalObjectReference = in.LocalObjectReference - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]KeyToPath, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Optional != nil { - in, out := &in.Optional, &out.Optional - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapProjection. -func (in *ConfigMapProjection) DeepCopy() *ConfigMapProjection { - if in == nil { - return nil - } - out := new(ConfigMapProjection) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ConfigMapVolumeSource) DeepCopyInto(out *ConfigMapVolumeSource) { - *out = *in - out.LocalObjectReference = in.LocalObjectReference - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]KeyToPath, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.DefaultMode != nil { - in, out := &in.DefaultMode, &out.DefaultMode - *out = new(int32) - **out = **in - } - if in.Optional != nil { - in, out := &in.Optional, &out.Optional - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ConfigMapVolumeSource. -func (in *ConfigMapVolumeSource) DeepCopy() *ConfigMapVolumeSource { - if in == nil { - return nil - } - out := new(ConfigMapVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Container) DeepCopyInto(out *Container) { - *out = *in - if in.Command != nil { - in, out := &in.Command, &out.Command - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Args != nil { - in, out := &in.Args, &out.Args - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Ports != nil { - in, out := &in.Ports, &out.Ports - *out = make([]ContainerPort, len(*in)) - copy(*out, *in) - } - if in.EnvFrom != nil { - in, out := &in.EnvFrom, &out.EnvFrom - *out = make([]EnvFromSource, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Env != nil { - in, out := &in.Env, &out.Env - *out = make([]EnvVar, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - in.Resources.DeepCopyInto(&out.Resources) - if in.VolumeMounts != nil { - in, out := &in.VolumeMounts, &out.VolumeMounts - *out = make([]VolumeMount, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.VolumeDevices != nil { - in, out := &in.VolumeDevices, &out.VolumeDevices - *out = make([]VolumeDevice, len(*in)) - copy(*out, *in) - } - if in.LivenessProbe != nil { - in, out := &in.LivenessProbe, &out.LivenessProbe - *out = new(Probe) - (*in).DeepCopyInto(*out) - } - if in.ReadinessProbe != nil { - in, out := &in.ReadinessProbe, &out.ReadinessProbe - *out = new(Probe) - (*in).DeepCopyInto(*out) - } - if in.StartupProbe != nil { - in, out := &in.StartupProbe, &out.StartupProbe - *out = new(Probe) - (*in).DeepCopyInto(*out) - } - if in.Lifecycle != nil { - in, out := &in.Lifecycle, &out.Lifecycle - *out = new(Lifecycle) - (*in).DeepCopyInto(*out) - } - if in.SecurityContext != nil { - in, out := &in.SecurityContext, &out.SecurityContext - *out = new(SecurityContext) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Container. -func (in *Container) DeepCopy() *Container { - if in == nil { - return nil - } - out := new(Container) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ContainerImage) DeepCopyInto(out *ContainerImage) { - *out = *in - if in.Names != nil { - in, out := &in.Names, &out.Names - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerImage. -func (in *ContainerImage) DeepCopy() *ContainerImage { - if in == nil { - return nil - } - out := new(ContainerImage) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ContainerPort) DeepCopyInto(out *ContainerPort) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerPort. -func (in *ContainerPort) DeepCopy() *ContainerPort { - if in == nil { - return nil - } - out := new(ContainerPort) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ContainerState) DeepCopyInto(out *ContainerState) { - *out = *in - if in.Waiting != nil { - in, out := &in.Waiting, &out.Waiting - *out = new(ContainerStateWaiting) - **out = **in - } - if in.Running != nil { - in, out := &in.Running, &out.Running - *out = new(ContainerStateRunning) - (*in).DeepCopyInto(*out) - } - if in.Terminated != nil { - in, out := &in.Terminated, &out.Terminated - *out = new(ContainerStateTerminated) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerState. -func (in *ContainerState) DeepCopy() *ContainerState { - if in == nil { - return nil - } - out := new(ContainerState) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ContainerStateRunning) DeepCopyInto(out *ContainerStateRunning) { - *out = *in - in.StartedAt.DeepCopyInto(&out.StartedAt) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerStateRunning. -func (in *ContainerStateRunning) DeepCopy() *ContainerStateRunning { - if in == nil { - return nil - } - out := new(ContainerStateRunning) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ContainerStateTerminated) DeepCopyInto(out *ContainerStateTerminated) { - *out = *in - in.StartedAt.DeepCopyInto(&out.StartedAt) - in.FinishedAt.DeepCopyInto(&out.FinishedAt) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerStateTerminated. -func (in *ContainerStateTerminated) DeepCopy() *ContainerStateTerminated { - if in == nil { - return nil - } - out := new(ContainerStateTerminated) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ContainerStateWaiting) DeepCopyInto(out *ContainerStateWaiting) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerStateWaiting. -func (in *ContainerStateWaiting) DeepCopy() *ContainerStateWaiting { - if in == nil { - return nil - } - out := new(ContainerStateWaiting) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ContainerStatus) DeepCopyInto(out *ContainerStatus) { - *out = *in - in.State.DeepCopyInto(&out.State) - in.LastTerminationState.DeepCopyInto(&out.LastTerminationState) - if in.Started != nil { - in, out := &in.Started, &out.Started - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ContainerStatus. -func (in *ContainerStatus) DeepCopy() *ContainerStatus { - if in == nil { - return nil - } - out := new(ContainerStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DaemonEndpoint) DeepCopyInto(out *DaemonEndpoint) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DaemonEndpoint. -func (in *DaemonEndpoint) DeepCopy() *DaemonEndpoint { - if in == nil { - return nil - } - out := new(DaemonEndpoint) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DownwardAPIProjection) DeepCopyInto(out *DownwardAPIProjection) { - *out = *in - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]DownwardAPIVolumeFile, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DownwardAPIProjection. -func (in *DownwardAPIProjection) DeepCopy() *DownwardAPIProjection { - if in == nil { - return nil - } - out := new(DownwardAPIProjection) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DownwardAPIVolumeFile) DeepCopyInto(out *DownwardAPIVolumeFile) { - *out = *in - if in.FieldRef != nil { - in, out := &in.FieldRef, &out.FieldRef - *out = new(ObjectFieldSelector) - **out = **in - } - if in.ResourceFieldRef != nil { - in, out := &in.ResourceFieldRef, &out.ResourceFieldRef - *out = new(ResourceFieldSelector) - (*in).DeepCopyInto(*out) - } - if in.Mode != nil { - in, out := &in.Mode, &out.Mode - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DownwardAPIVolumeFile. -func (in *DownwardAPIVolumeFile) DeepCopy() *DownwardAPIVolumeFile { - if in == nil { - return nil - } - out := new(DownwardAPIVolumeFile) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *DownwardAPIVolumeSource) DeepCopyInto(out *DownwardAPIVolumeSource) { - *out = *in - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]DownwardAPIVolumeFile, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.DefaultMode != nil { - in, out := &in.DefaultMode, &out.DefaultMode - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DownwardAPIVolumeSource. -func (in *DownwardAPIVolumeSource) DeepCopy() *DownwardAPIVolumeSource { - if in == nil { - return nil - } - out := new(DownwardAPIVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EmptyDirVolumeSource) DeepCopyInto(out *EmptyDirVolumeSource) { - *out = *in - if in.SizeLimit != nil { - in, out := &in.SizeLimit, &out.SizeLimit - x := (*in).DeepCopy() - *out = &x - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EmptyDirVolumeSource. -func (in *EmptyDirVolumeSource) DeepCopy() *EmptyDirVolumeSource { - if in == nil { - return nil - } - out := new(EmptyDirVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EndpointAddress) DeepCopyInto(out *EndpointAddress) { - *out = *in - if in.NodeName != nil { - in, out := &in.NodeName, &out.NodeName - *out = new(string) - **out = **in - } - if in.TargetRef != nil { - in, out := &in.TargetRef, &out.TargetRef - *out = new(ObjectReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointAddress. -func (in *EndpointAddress) DeepCopy() *EndpointAddress { - if in == nil { - return nil - } - out := new(EndpointAddress) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EndpointPort) DeepCopyInto(out *EndpointPort) { - *out = *in - if in.AppProtocol != nil { - in, out := &in.AppProtocol, &out.AppProtocol - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointPort. -func (in *EndpointPort) DeepCopy() *EndpointPort { - if in == nil { - return nil - } - out := new(EndpointPort) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EndpointSubset) DeepCopyInto(out *EndpointSubset) { - *out = *in - if in.Addresses != nil { - in, out := &in.Addresses, &out.Addresses - *out = make([]EndpointAddress, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.NotReadyAddresses != nil { - in, out := &in.NotReadyAddresses, &out.NotReadyAddresses - *out = make([]EndpointAddress, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Ports != nil { - in, out := &in.Ports, &out.Ports - *out = make([]EndpointPort, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointSubset. -func (in *EndpointSubset) DeepCopy() *EndpointSubset { - if in == nil { - return nil - } - out := new(EndpointSubset) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Endpoints) DeepCopyInto(out *Endpoints) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.Subsets != nil { - in, out := &in.Subsets, &out.Subsets - *out = make([]EndpointSubset, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Endpoints. -func (in *Endpoints) DeepCopy() *Endpoints { - if in == nil { - return nil - } - out := new(Endpoints) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Endpoints) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EndpointsList) DeepCopyInto(out *EndpointsList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Endpoints, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EndpointsList. -func (in *EndpointsList) DeepCopy() *EndpointsList { - if in == nil { - return nil - } - out := new(EndpointsList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *EndpointsList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EnvFromSource) DeepCopyInto(out *EnvFromSource) { - *out = *in - if in.ConfigMapRef != nil { - in, out := &in.ConfigMapRef, &out.ConfigMapRef - *out = new(ConfigMapEnvSource) - (*in).DeepCopyInto(*out) - } - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(SecretEnvSource) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EnvFromSource. -func (in *EnvFromSource) DeepCopy() *EnvFromSource { - if in == nil { - return nil - } - out := new(EnvFromSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EnvVar) DeepCopyInto(out *EnvVar) { - *out = *in - if in.ValueFrom != nil { - in, out := &in.ValueFrom, &out.ValueFrom - *out = new(EnvVarSource) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EnvVar. -func (in *EnvVar) DeepCopy() *EnvVar { - if in == nil { - return nil - } - out := new(EnvVar) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EnvVarSource) DeepCopyInto(out *EnvVarSource) { - *out = *in - if in.FieldRef != nil { - in, out := &in.FieldRef, &out.FieldRef - *out = new(ObjectFieldSelector) - **out = **in - } - if in.ResourceFieldRef != nil { - in, out := &in.ResourceFieldRef, &out.ResourceFieldRef - *out = new(ResourceFieldSelector) - (*in).DeepCopyInto(*out) - } - if in.ConfigMapKeyRef != nil { - in, out := &in.ConfigMapKeyRef, &out.ConfigMapKeyRef - *out = new(ConfigMapKeySelector) - (*in).DeepCopyInto(*out) - } - if in.SecretKeyRef != nil { - in, out := &in.SecretKeyRef, &out.SecretKeyRef - *out = new(SecretKeySelector) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EnvVarSource. -func (in *EnvVarSource) DeepCopy() *EnvVarSource { - if in == nil { - return nil - } - out := new(EnvVarSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EphemeralContainer) DeepCopyInto(out *EphemeralContainer) { - *out = *in - in.EphemeralContainerCommon.DeepCopyInto(&out.EphemeralContainerCommon) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EphemeralContainer. -func (in *EphemeralContainer) DeepCopy() *EphemeralContainer { - if in == nil { - return nil - } - out := new(EphemeralContainer) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EphemeralContainerCommon) DeepCopyInto(out *EphemeralContainerCommon) { - *out = *in - if in.Command != nil { - in, out := &in.Command, &out.Command - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Args != nil { - in, out := &in.Args, &out.Args - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Ports != nil { - in, out := &in.Ports, &out.Ports - *out = make([]ContainerPort, len(*in)) - copy(*out, *in) - } - if in.EnvFrom != nil { - in, out := &in.EnvFrom, &out.EnvFrom - *out = make([]EnvFromSource, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Env != nil { - in, out := &in.Env, &out.Env - *out = make([]EnvVar, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - in.Resources.DeepCopyInto(&out.Resources) - if in.VolumeMounts != nil { - in, out := &in.VolumeMounts, &out.VolumeMounts - *out = make([]VolumeMount, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.VolumeDevices != nil { - in, out := &in.VolumeDevices, &out.VolumeDevices - *out = make([]VolumeDevice, len(*in)) - copy(*out, *in) - } - if in.LivenessProbe != nil { - in, out := &in.LivenessProbe, &out.LivenessProbe - *out = new(Probe) - (*in).DeepCopyInto(*out) - } - if in.ReadinessProbe != nil { - in, out := &in.ReadinessProbe, &out.ReadinessProbe - *out = new(Probe) - (*in).DeepCopyInto(*out) - } - if in.StartupProbe != nil { - in, out := &in.StartupProbe, &out.StartupProbe - *out = new(Probe) - (*in).DeepCopyInto(*out) - } - if in.Lifecycle != nil { - in, out := &in.Lifecycle, &out.Lifecycle - *out = new(Lifecycle) - (*in).DeepCopyInto(*out) - } - if in.SecurityContext != nil { - in, out := &in.SecurityContext, &out.SecurityContext - *out = new(SecurityContext) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EphemeralContainerCommon. -func (in *EphemeralContainerCommon) DeepCopy() *EphemeralContainerCommon { - if in == nil { - return nil - } - out := new(EphemeralContainerCommon) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EphemeralContainers) DeepCopyInto(out *EphemeralContainers) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.EphemeralContainers != nil { - in, out := &in.EphemeralContainers, &out.EphemeralContainers - *out = make([]EphemeralContainer, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EphemeralContainers. -func (in *EphemeralContainers) DeepCopy() *EphemeralContainers { - if in == nil { - return nil - } - out := new(EphemeralContainers) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *EphemeralContainers) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Event) DeepCopyInto(out *Event) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - out.InvolvedObject = in.InvolvedObject - out.Source = in.Source - in.FirstTimestamp.DeepCopyInto(&out.FirstTimestamp) - in.LastTimestamp.DeepCopyInto(&out.LastTimestamp) - in.EventTime.DeepCopyInto(&out.EventTime) - if in.Series != nil { - in, out := &in.Series, &out.Series - *out = new(EventSeries) - (*in).DeepCopyInto(*out) - } - if in.Related != nil { - in, out := &in.Related, &out.Related - *out = new(ObjectReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Event. -func (in *Event) DeepCopy() *Event { - if in == nil { - return nil - } - out := new(Event) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Event) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EventList) DeepCopyInto(out *EventList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Event, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EventList. -func (in *EventList) DeepCopy() *EventList { - if in == nil { - return nil - } - out := new(EventList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *EventList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EventSeries) DeepCopyInto(out *EventSeries) { - *out = *in - in.LastObservedTime.DeepCopyInto(&out.LastObservedTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EventSeries. -func (in *EventSeries) DeepCopy() *EventSeries { - if in == nil { - return nil - } - out := new(EventSeries) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *EventSource) DeepCopyInto(out *EventSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new EventSource. -func (in *EventSource) DeepCopy() *EventSource { - if in == nil { - return nil - } - out := new(EventSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ExecAction) DeepCopyInto(out *ExecAction) { - *out = *in - if in.Command != nil { - in, out := &in.Command, &out.Command - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExecAction. -func (in *ExecAction) DeepCopy() *ExecAction { - if in == nil { - return nil - } - out := new(ExecAction) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FCVolumeSource) DeepCopyInto(out *FCVolumeSource) { - *out = *in - if in.TargetWWNs != nil { - in, out := &in.TargetWWNs, &out.TargetWWNs - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Lun != nil { - in, out := &in.Lun, &out.Lun - *out = new(int32) - **out = **in - } - if in.WWIDs != nil { - in, out := &in.WWIDs, &out.WWIDs - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FCVolumeSource. -func (in *FCVolumeSource) DeepCopy() *FCVolumeSource { - if in == nil { - return nil - } - out := new(FCVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlexPersistentVolumeSource) DeepCopyInto(out *FlexPersistentVolumeSource) { - *out = *in - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(SecretReference) - **out = **in - } - if in.Options != nil { - in, out := &in.Options, &out.Options - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlexPersistentVolumeSource. -func (in *FlexPersistentVolumeSource) DeepCopy() *FlexPersistentVolumeSource { - if in == nil { - return nil - } - out := new(FlexPersistentVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlexVolumeSource) DeepCopyInto(out *FlexVolumeSource) { - *out = *in - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - **out = **in - } - if in.Options != nil { - in, out := &in.Options, &out.Options - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlexVolumeSource. -func (in *FlexVolumeSource) DeepCopy() *FlexVolumeSource { - if in == nil { - return nil - } - out := new(FlexVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *FlockerVolumeSource) DeepCopyInto(out *FlockerVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FlockerVolumeSource. -func (in *FlockerVolumeSource) DeepCopy() *FlockerVolumeSource { - if in == nil { - return nil - } - out := new(FlockerVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *GCEPersistentDiskVolumeSource) DeepCopyInto(out *GCEPersistentDiskVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GCEPersistentDiskVolumeSource. -func (in *GCEPersistentDiskVolumeSource) DeepCopy() *GCEPersistentDiskVolumeSource { - if in == nil { - return nil - } - out := new(GCEPersistentDiskVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *GitRepoVolumeSource) DeepCopyInto(out *GitRepoVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GitRepoVolumeSource. -func (in *GitRepoVolumeSource) DeepCopy() *GitRepoVolumeSource { - if in == nil { - return nil - } - out := new(GitRepoVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *GlusterfsPersistentVolumeSource) DeepCopyInto(out *GlusterfsPersistentVolumeSource) { - *out = *in - if in.EndpointsNamespace != nil { - in, out := &in.EndpointsNamespace, &out.EndpointsNamespace - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GlusterfsPersistentVolumeSource. -func (in *GlusterfsPersistentVolumeSource) DeepCopy() *GlusterfsPersistentVolumeSource { - if in == nil { - return nil - } - out := new(GlusterfsPersistentVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *GlusterfsVolumeSource) DeepCopyInto(out *GlusterfsVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new GlusterfsVolumeSource. -func (in *GlusterfsVolumeSource) DeepCopy() *GlusterfsVolumeSource { - if in == nil { - return nil - } - out := new(GlusterfsVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *HTTPGetAction) DeepCopyInto(out *HTTPGetAction) { - *out = *in - out.Port = in.Port - if in.HTTPHeaders != nil { - in, out := &in.HTTPHeaders, &out.HTTPHeaders - *out = make([]HTTPHeader, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPGetAction. -func (in *HTTPGetAction) DeepCopy() *HTTPGetAction { - if in == nil { - return nil - } - out := new(HTTPGetAction) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *HTTPHeader) DeepCopyInto(out *HTTPHeader) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPHeader. -func (in *HTTPHeader) DeepCopy() *HTTPHeader { - if in == nil { - return nil - } - out := new(HTTPHeader) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Handler) DeepCopyInto(out *Handler) { - *out = *in - if in.Exec != nil { - in, out := &in.Exec, &out.Exec - *out = new(ExecAction) - (*in).DeepCopyInto(*out) - } - if in.HTTPGet != nil { - in, out := &in.HTTPGet, &out.HTTPGet - *out = new(HTTPGetAction) - (*in).DeepCopyInto(*out) - } - if in.TCPSocket != nil { - in, out := &in.TCPSocket, &out.TCPSocket - *out = new(TCPSocketAction) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Handler. -func (in *Handler) DeepCopy() *Handler { - if in == nil { - return nil - } - out := new(Handler) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *HostAlias) DeepCopyInto(out *HostAlias) { - *out = *in - if in.Hostnames != nil { - in, out := &in.Hostnames, &out.Hostnames - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostAlias. -func (in *HostAlias) DeepCopy() *HostAlias { - if in == nil { - return nil - } - out := new(HostAlias) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *HostPathVolumeSource) DeepCopyInto(out *HostPathVolumeSource) { - *out = *in - if in.Type != nil { - in, out := &in.Type, &out.Type - *out = new(HostPathType) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HostPathVolumeSource. -func (in *HostPathVolumeSource) DeepCopy() *HostPathVolumeSource { - if in == nil { - return nil - } - out := new(HostPathVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ISCSIPersistentVolumeSource) DeepCopyInto(out *ISCSIPersistentVolumeSource) { - *out = *in - if in.Portals != nil { - in, out := &in.Portals, &out.Portals - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(SecretReference) - **out = **in - } - if in.InitiatorName != nil { - in, out := &in.InitiatorName, &out.InitiatorName - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ISCSIPersistentVolumeSource. -func (in *ISCSIPersistentVolumeSource) DeepCopy() *ISCSIPersistentVolumeSource { - if in == nil { - return nil - } - out := new(ISCSIPersistentVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ISCSIVolumeSource) DeepCopyInto(out *ISCSIVolumeSource) { - *out = *in - if in.Portals != nil { - in, out := &in.Portals, &out.Portals - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - **out = **in - } - if in.InitiatorName != nil { - in, out := &in.InitiatorName, &out.InitiatorName - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ISCSIVolumeSource. -func (in *ISCSIVolumeSource) DeepCopy() *ISCSIVolumeSource { - if in == nil { - return nil - } - out := new(ISCSIVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *KeyToPath) DeepCopyInto(out *KeyToPath) { - *out = *in - if in.Mode != nil { - in, out := &in.Mode, &out.Mode - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KeyToPath. -func (in *KeyToPath) DeepCopy() *KeyToPath { - if in == nil { - return nil - } - out := new(KeyToPath) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Lifecycle) DeepCopyInto(out *Lifecycle) { - *out = *in - if in.PostStart != nil { - in, out := &in.PostStart, &out.PostStart - *out = new(Handler) - (*in).DeepCopyInto(*out) - } - if in.PreStop != nil { - in, out := &in.PreStop, &out.PreStop - *out = new(Handler) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Lifecycle. -func (in *Lifecycle) DeepCopy() *Lifecycle { - if in == nil { - return nil - } - out := new(Lifecycle) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LimitRange) DeepCopyInto(out *LimitRange) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LimitRange. -func (in *LimitRange) DeepCopy() *LimitRange { - if in == nil { - return nil - } - out := new(LimitRange) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *LimitRange) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LimitRangeItem) DeepCopyInto(out *LimitRangeItem) { - *out = *in - if in.Max != nil { - in, out := &in.Max, &out.Max - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.Min != nil { - in, out := &in.Min, &out.Min - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.Default != nil { - in, out := &in.Default, &out.Default - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.DefaultRequest != nil { - in, out := &in.DefaultRequest, &out.DefaultRequest - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.MaxLimitRequestRatio != nil { - in, out := &in.MaxLimitRequestRatio, &out.MaxLimitRequestRatio - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LimitRangeItem. -func (in *LimitRangeItem) DeepCopy() *LimitRangeItem { - if in == nil { - return nil - } - out := new(LimitRangeItem) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LimitRangeList) DeepCopyInto(out *LimitRangeList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]LimitRange, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LimitRangeList. -func (in *LimitRangeList) DeepCopy() *LimitRangeList { - if in == nil { - return nil - } - out := new(LimitRangeList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *LimitRangeList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LimitRangeSpec) DeepCopyInto(out *LimitRangeSpec) { - *out = *in - if in.Limits != nil { - in, out := &in.Limits, &out.Limits - *out = make([]LimitRangeItem, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LimitRangeSpec. -func (in *LimitRangeSpec) DeepCopy() *LimitRangeSpec { - if in == nil { - return nil - } - out := new(LimitRangeSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *List) DeepCopyInto(out *List) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]runtime.Object, len(*in)) - for i := range *in { - if (*in)[i] != nil { - (*out)[i] = (*in)[i].DeepCopyObject() - } - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new List. -func (in *List) DeepCopy() *List { - if in == nil { - return nil - } - out := new(List) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *List) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LoadBalancerIngress) DeepCopyInto(out *LoadBalancerIngress) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerIngress. -func (in *LoadBalancerIngress) DeepCopy() *LoadBalancerIngress { - if in == nil { - return nil - } - out := new(LoadBalancerIngress) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LoadBalancerStatus) DeepCopyInto(out *LoadBalancerStatus) { - *out = *in - if in.Ingress != nil { - in, out := &in.Ingress, &out.Ingress - *out = make([]LoadBalancerIngress, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LoadBalancerStatus. -func (in *LoadBalancerStatus) DeepCopy() *LoadBalancerStatus { - if in == nil { - return nil - } - out := new(LoadBalancerStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LocalObjectReference) DeepCopyInto(out *LocalObjectReference) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalObjectReference. -func (in *LocalObjectReference) DeepCopy() *LocalObjectReference { - if in == nil { - return nil - } - out := new(LocalObjectReference) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *LocalVolumeSource) DeepCopyInto(out *LocalVolumeSource) { - *out = *in - if in.FSType != nil { - in, out := &in.FSType, &out.FSType - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new LocalVolumeSource. -func (in *LocalVolumeSource) DeepCopy() *LocalVolumeSource { - if in == nil { - return nil - } - out := new(LocalVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NFSVolumeSource) DeepCopyInto(out *NFSVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NFSVolumeSource. -func (in *NFSVolumeSource) DeepCopy() *NFSVolumeSource { - if in == nil { - return nil - } - out := new(NFSVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Namespace) DeepCopyInto(out *Namespace) { - *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 Namespace. -func (in *Namespace) DeepCopy() *Namespace { - if in == nil { - return nil - } - out := new(Namespace) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Namespace) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NamespaceCondition) DeepCopyInto(out *NamespaceCondition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespaceCondition. -func (in *NamespaceCondition) DeepCopy() *NamespaceCondition { - if in == nil { - return nil - } - out := new(NamespaceCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NamespaceList) DeepCopyInto(out *NamespaceList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Namespace, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespaceList. -func (in *NamespaceList) DeepCopy() *NamespaceList { - if in == nil { - return nil - } - out := new(NamespaceList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NamespaceList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NamespaceSpec) DeepCopyInto(out *NamespaceSpec) { - *out = *in - if in.Finalizers != nil { - in, out := &in.Finalizers, &out.Finalizers - *out = make([]FinalizerName, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespaceSpec. -func (in *NamespaceSpec) DeepCopy() *NamespaceSpec { - if in == nil { - return nil - } - out := new(NamespaceSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NamespaceStatus) DeepCopyInto(out *NamespaceStatus) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]NamespaceCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NamespaceStatus. -func (in *NamespaceStatus) DeepCopy() *NamespaceStatus { - if in == nil { - return nil - } - out := new(NamespaceStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Node) DeepCopyInto(out *Node) { - *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 Node. -func (in *Node) DeepCopy() *Node { - if in == nil { - return nil - } - out := new(Node) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Node) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeAddress) DeepCopyInto(out *NodeAddress) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeAddress. -func (in *NodeAddress) DeepCopy() *NodeAddress { - if in == nil { - return nil - } - out := new(NodeAddress) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeAffinity) DeepCopyInto(out *NodeAffinity) { - *out = *in - if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { - in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - *out = new(NodeSelector) - (*in).DeepCopyInto(*out) - } - if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { - in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution - *out = make([]PreferredSchedulingTerm, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeAffinity. -func (in *NodeAffinity) DeepCopy() *NodeAffinity { - if in == nil { - return nil - } - out := new(NodeAffinity) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeCondition) DeepCopyInto(out *NodeCondition) { - *out = *in - in.LastHeartbeatTime.DeepCopyInto(&out.LastHeartbeatTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeCondition. -func (in *NodeCondition) DeepCopy() *NodeCondition { - if in == nil { - return nil - } - out := new(NodeCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeConfigSource) DeepCopyInto(out *NodeConfigSource) { - *out = *in - if in.ConfigMap != nil { - in, out := &in.ConfigMap, &out.ConfigMap - *out = new(ConfigMapNodeConfigSource) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfigSource. -func (in *NodeConfigSource) DeepCopy() *NodeConfigSource { - if in == nil { - return nil - } - out := new(NodeConfigSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeConfigStatus) DeepCopyInto(out *NodeConfigStatus) { - *out = *in - if in.Assigned != nil { - in, out := &in.Assigned, &out.Assigned - *out = new(NodeConfigSource) - (*in).DeepCopyInto(*out) - } - if in.Active != nil { - in, out := &in.Active, &out.Active - *out = new(NodeConfigSource) - (*in).DeepCopyInto(*out) - } - if in.LastKnownGood != nil { - in, out := &in.LastKnownGood, &out.LastKnownGood - *out = new(NodeConfigSource) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeConfigStatus. -func (in *NodeConfigStatus) DeepCopy() *NodeConfigStatus { - if in == nil { - return nil - } - out := new(NodeConfigStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeDaemonEndpoints) DeepCopyInto(out *NodeDaemonEndpoints) { - *out = *in - out.KubeletEndpoint = in.KubeletEndpoint - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeDaemonEndpoints. -func (in *NodeDaemonEndpoints) DeepCopy() *NodeDaemonEndpoints { - if in == nil { - return nil - } - out := new(NodeDaemonEndpoints) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeList) DeepCopyInto(out *NodeList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Node, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeList. -func (in *NodeList) DeepCopy() *NodeList { - if in == nil { - return nil - } - out := new(NodeList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeProxyOptions) DeepCopyInto(out *NodeProxyOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeProxyOptions. -func (in *NodeProxyOptions) DeepCopy() *NodeProxyOptions { - if in == nil { - return nil - } - out := new(NodeProxyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *NodeProxyOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeResources) DeepCopyInto(out *NodeResources) { - *out = *in - if in.Capacity != nil { - in, out := &in.Capacity, &out.Capacity - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeResources. -func (in *NodeResources) DeepCopy() *NodeResources { - if in == nil { - return nil - } - out := new(NodeResources) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeSelector) DeepCopyInto(out *NodeSelector) { - *out = *in - if in.NodeSelectorTerms != nil { - in, out := &in.NodeSelectorTerms, &out.NodeSelectorTerms - *out = make([]NodeSelectorTerm, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeSelector. -func (in *NodeSelector) DeepCopy() *NodeSelector { - if in == nil { - return nil - } - out := new(NodeSelector) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeSelectorRequirement) DeepCopyInto(out *NodeSelectorRequirement) { - *out = *in - if in.Values != nil { - in, out := &in.Values, &out.Values - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeSelectorRequirement. -func (in *NodeSelectorRequirement) DeepCopy() *NodeSelectorRequirement { - if in == nil { - return nil - } - out := new(NodeSelectorRequirement) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeSelectorTerm) DeepCopyInto(out *NodeSelectorTerm) { - *out = *in - if in.MatchExpressions != nil { - in, out := &in.MatchExpressions, &out.MatchExpressions - *out = make([]NodeSelectorRequirement, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.MatchFields != nil { - in, out := &in.MatchFields, &out.MatchFields - *out = make([]NodeSelectorRequirement, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeSelectorTerm. -func (in *NodeSelectorTerm) DeepCopy() *NodeSelectorTerm { - if in == nil { - return nil - } - out := new(NodeSelectorTerm) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeSpec) DeepCopyInto(out *NodeSpec) { - *out = *in - if in.PodCIDRs != nil { - in, out := &in.PodCIDRs, &out.PodCIDRs - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Taints != nil { - in, out := &in.Taints, &out.Taints - *out = make([]Taint, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.ConfigSource != nil { - in, out := &in.ConfigSource, &out.ConfigSource - *out = new(NodeConfigSource) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeSpec. -func (in *NodeSpec) DeepCopy() *NodeSpec { - if in == nil { - return nil - } - out := new(NodeSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeStatus) DeepCopyInto(out *NodeStatus) { - *out = *in - if in.Capacity != nil { - in, out := &in.Capacity, &out.Capacity - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.Allocatable != nil { - in, out := &in.Allocatable, &out.Allocatable - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]NodeCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Addresses != nil { - in, out := &in.Addresses, &out.Addresses - *out = make([]NodeAddress, len(*in)) - copy(*out, *in) - } - out.DaemonEndpoints = in.DaemonEndpoints - out.NodeInfo = in.NodeInfo - if in.Images != nil { - in, out := &in.Images, &out.Images - *out = make([]ContainerImage, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.VolumesInUse != nil { - in, out := &in.VolumesInUse, &out.VolumesInUse - *out = make([]UniqueVolumeName, len(*in)) - copy(*out, *in) - } - if in.VolumesAttached != nil { - in, out := &in.VolumesAttached, &out.VolumesAttached - *out = make([]AttachedVolume, len(*in)) - copy(*out, *in) - } - if in.Config != nil { - in, out := &in.Config, &out.Config - *out = new(NodeConfigStatus) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeStatus. -func (in *NodeStatus) DeepCopy() *NodeStatus { - if in == nil { - return nil - } - out := new(NodeStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *NodeSystemInfo) DeepCopyInto(out *NodeSystemInfo) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeSystemInfo. -func (in *NodeSystemInfo) DeepCopy() *NodeSystemInfo { - if in == nil { - return nil - } - out := new(NodeSystemInfo) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ObjectFieldSelector) DeepCopyInto(out *ObjectFieldSelector) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectFieldSelector. -func (in *ObjectFieldSelector) DeepCopy() *ObjectFieldSelector { - if in == nil { - return nil - } - out := new(ObjectFieldSelector) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ObjectReference) DeepCopyInto(out *ObjectReference) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ObjectReference. -func (in *ObjectReference) DeepCopy() *ObjectReference { - if in == nil { - return nil - } - out := new(ObjectReference) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ObjectReference) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolume) DeepCopyInto(out *PersistentVolume) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - out.Status = in.Status - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolume. -func (in *PersistentVolume) DeepCopy() *PersistentVolume { - if in == nil { - return nil - } - out := new(PersistentVolume) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PersistentVolume) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeClaim) DeepCopyInto(out *PersistentVolumeClaim) { - *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 PersistentVolumeClaim. -func (in *PersistentVolumeClaim) DeepCopy() *PersistentVolumeClaim { - if in == nil { - return nil - } - out := new(PersistentVolumeClaim) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PersistentVolumeClaim) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeClaimCondition) DeepCopyInto(out *PersistentVolumeClaimCondition) { - *out = *in - in.LastProbeTime.DeepCopyInto(&out.LastProbeTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaimCondition. -func (in *PersistentVolumeClaimCondition) DeepCopy() *PersistentVolumeClaimCondition { - if in == nil { - return nil - } - out := new(PersistentVolumeClaimCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeClaimList) DeepCopyInto(out *PersistentVolumeClaimList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]PersistentVolumeClaim, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaimList. -func (in *PersistentVolumeClaimList) DeepCopy() *PersistentVolumeClaimList { - if in == nil { - return nil - } - out := new(PersistentVolumeClaimList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PersistentVolumeClaimList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeClaimSpec) DeepCopyInto(out *PersistentVolumeClaimSpec) { - *out = *in - if in.AccessModes != nil { - in, out := &in.AccessModes, &out.AccessModes - *out = make([]PersistentVolumeAccessMode, len(*in)) - copy(*out, *in) - } - if in.Selector != nil { - in, out := &in.Selector, &out.Selector - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } - in.Resources.DeepCopyInto(&out.Resources) - if in.StorageClassName != nil { - in, out := &in.StorageClassName, &out.StorageClassName - *out = new(string) - **out = **in - } - if in.VolumeMode != nil { - in, out := &in.VolumeMode, &out.VolumeMode - *out = new(PersistentVolumeMode) - **out = **in - } - if in.DataSource != nil { - in, out := &in.DataSource, &out.DataSource - *out = new(TypedLocalObjectReference) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaimSpec. -func (in *PersistentVolumeClaimSpec) DeepCopy() *PersistentVolumeClaimSpec { - if in == nil { - return nil - } - out := new(PersistentVolumeClaimSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeClaimStatus) DeepCopyInto(out *PersistentVolumeClaimStatus) { - *out = *in - if in.AccessModes != nil { - in, out := &in.AccessModes, &out.AccessModes - *out = make([]PersistentVolumeAccessMode, len(*in)) - copy(*out, *in) - } - if in.Capacity != nil { - in, out := &in.Capacity, &out.Capacity - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]PersistentVolumeClaimCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaimStatus. -func (in *PersistentVolumeClaimStatus) DeepCopy() *PersistentVolumeClaimStatus { - if in == nil { - return nil - } - out := new(PersistentVolumeClaimStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeClaimVolumeSource) DeepCopyInto(out *PersistentVolumeClaimVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeClaimVolumeSource. -func (in *PersistentVolumeClaimVolumeSource) DeepCopy() *PersistentVolumeClaimVolumeSource { - if in == nil { - return nil - } - out := new(PersistentVolumeClaimVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeList) DeepCopyInto(out *PersistentVolumeList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]PersistentVolume, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeList. -func (in *PersistentVolumeList) DeepCopy() *PersistentVolumeList { - if in == nil { - return nil - } - out := new(PersistentVolumeList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PersistentVolumeList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeSource) DeepCopyInto(out *PersistentVolumeSource) { - *out = *in - if in.GCEPersistentDisk != nil { - in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk - *out = new(GCEPersistentDiskVolumeSource) - **out = **in - } - if in.AWSElasticBlockStore != nil { - in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore - *out = new(AWSElasticBlockStoreVolumeSource) - **out = **in - } - if in.HostPath != nil { - in, out := &in.HostPath, &out.HostPath - *out = new(HostPathVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.Glusterfs != nil { - in, out := &in.Glusterfs, &out.Glusterfs - *out = new(GlusterfsPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.NFS != nil { - in, out := &in.NFS, &out.NFS - *out = new(NFSVolumeSource) - **out = **in - } - if in.RBD != nil { - in, out := &in.RBD, &out.RBD - *out = new(RBDPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.Quobyte != nil { - in, out := &in.Quobyte, &out.Quobyte - *out = new(QuobyteVolumeSource) - **out = **in - } - if in.ISCSI != nil { - in, out := &in.ISCSI, &out.ISCSI - *out = new(ISCSIPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.FlexVolume != nil { - in, out := &in.FlexVolume, &out.FlexVolume - *out = new(FlexPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.Cinder != nil { - in, out := &in.Cinder, &out.Cinder - *out = new(CinderPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.CephFS != nil { - in, out := &in.CephFS, &out.CephFS - *out = new(CephFSPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.FC != nil { - in, out := &in.FC, &out.FC - *out = new(FCVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.Flocker != nil { - in, out := &in.Flocker, &out.Flocker - *out = new(FlockerVolumeSource) - **out = **in - } - if in.AzureFile != nil { - in, out := &in.AzureFile, &out.AzureFile - *out = new(AzureFilePersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.VsphereVolume != nil { - in, out := &in.VsphereVolume, &out.VsphereVolume - *out = new(VsphereVirtualDiskVolumeSource) - **out = **in - } - if in.AzureDisk != nil { - in, out := &in.AzureDisk, &out.AzureDisk - *out = new(AzureDiskVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.PhotonPersistentDisk != nil { - in, out := &in.PhotonPersistentDisk, &out.PhotonPersistentDisk - *out = new(PhotonPersistentDiskVolumeSource) - **out = **in - } - if in.PortworxVolume != nil { - in, out := &in.PortworxVolume, &out.PortworxVolume - *out = new(PortworxVolumeSource) - **out = **in - } - if in.ScaleIO != nil { - in, out := &in.ScaleIO, &out.ScaleIO - *out = new(ScaleIOPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.Local != nil { - in, out := &in.Local, &out.Local - *out = new(LocalVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.StorageOS != nil { - in, out := &in.StorageOS, &out.StorageOS - *out = new(StorageOSPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.CSI != nil { - in, out := &in.CSI, &out.CSI - *out = new(CSIPersistentVolumeSource) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeSource. -func (in *PersistentVolumeSource) DeepCopy() *PersistentVolumeSource { - if in == nil { - return nil - } - out := new(PersistentVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeSpec) DeepCopyInto(out *PersistentVolumeSpec) { - *out = *in - if in.Capacity != nil { - in, out := &in.Capacity, &out.Capacity - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - in.PersistentVolumeSource.DeepCopyInto(&out.PersistentVolumeSource) - if in.AccessModes != nil { - in, out := &in.AccessModes, &out.AccessModes - *out = make([]PersistentVolumeAccessMode, len(*in)) - copy(*out, *in) - } - if in.ClaimRef != nil { - in, out := &in.ClaimRef, &out.ClaimRef - *out = new(ObjectReference) - **out = **in - } - if in.MountOptions != nil { - in, out := &in.MountOptions, &out.MountOptions - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.VolumeMode != nil { - in, out := &in.VolumeMode, &out.VolumeMode - *out = new(PersistentVolumeMode) - **out = **in - } - if in.NodeAffinity != nil { - in, out := &in.NodeAffinity, &out.NodeAffinity - *out = new(VolumeNodeAffinity) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeSpec. -func (in *PersistentVolumeSpec) DeepCopy() *PersistentVolumeSpec { - if in == nil { - return nil - } - out := new(PersistentVolumeSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PersistentVolumeStatus) DeepCopyInto(out *PersistentVolumeStatus) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PersistentVolumeStatus. -func (in *PersistentVolumeStatus) DeepCopy() *PersistentVolumeStatus { - if in == nil { - return nil - } - out := new(PersistentVolumeStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PhotonPersistentDiskVolumeSource) DeepCopyInto(out *PhotonPersistentDiskVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PhotonPersistentDiskVolumeSource. -func (in *PhotonPersistentDiskVolumeSource) DeepCopy() *PhotonPersistentDiskVolumeSource { - if in == nil { - return nil - } - out := new(PhotonPersistentDiskVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Pod) DeepCopyInto(out *Pod) { - *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 Pod. -func (in *Pod) DeepCopy() *Pod { - if in == nil { - return nil - } - out := new(Pod) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Pod) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodAffinity) DeepCopyInto(out *PodAffinity) { - *out = *in - if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { - in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - *out = make([]PodAffinityTerm, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { - in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution - *out = make([]WeightedPodAffinityTerm, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodAffinity. -func (in *PodAffinity) DeepCopy() *PodAffinity { - if in == nil { - return nil - } - out := new(PodAffinity) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodAffinityTerm) DeepCopyInto(out *PodAffinityTerm) { - *out = *in - if in.LabelSelector != nil { - in, out := &in.LabelSelector, &out.LabelSelector - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } - if in.Namespaces != nil { - in, out := &in.Namespaces, &out.Namespaces - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodAffinityTerm. -func (in *PodAffinityTerm) DeepCopy() *PodAffinityTerm { - if in == nil { - return nil - } - out := new(PodAffinityTerm) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodAntiAffinity) DeepCopyInto(out *PodAntiAffinity) { - *out = *in - if in.RequiredDuringSchedulingIgnoredDuringExecution != nil { - in, out := &in.RequiredDuringSchedulingIgnoredDuringExecution, &out.RequiredDuringSchedulingIgnoredDuringExecution - *out = make([]PodAffinityTerm, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.PreferredDuringSchedulingIgnoredDuringExecution != nil { - in, out := &in.PreferredDuringSchedulingIgnoredDuringExecution, &out.PreferredDuringSchedulingIgnoredDuringExecution - *out = make([]WeightedPodAffinityTerm, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodAntiAffinity. -func (in *PodAntiAffinity) DeepCopy() *PodAntiAffinity { - if in == nil { - return nil - } - out := new(PodAntiAffinity) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodAttachOptions) DeepCopyInto(out *PodAttachOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodAttachOptions. -func (in *PodAttachOptions) DeepCopy() *PodAttachOptions { - if in == nil { - return nil - } - out := new(PodAttachOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodAttachOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodCondition) DeepCopyInto(out *PodCondition) { - *out = *in - in.LastProbeTime.DeepCopyInto(&out.LastProbeTime) - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodCondition. -func (in *PodCondition) DeepCopy() *PodCondition { - if in == nil { - return nil - } - out := new(PodCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodDNSConfig) DeepCopyInto(out *PodDNSConfig) { - *out = *in - if in.Nameservers != nil { - in, out := &in.Nameservers, &out.Nameservers - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Searches != nil { - in, out := &in.Searches, &out.Searches - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.Options != nil { - in, out := &in.Options, &out.Options - *out = make([]PodDNSConfigOption, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodDNSConfig. -func (in *PodDNSConfig) DeepCopy() *PodDNSConfig { - if in == nil { - return nil - } - out := new(PodDNSConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodDNSConfigOption) DeepCopyInto(out *PodDNSConfigOption) { - *out = *in - if in.Value != nil { - in, out := &in.Value, &out.Value - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodDNSConfigOption. -func (in *PodDNSConfigOption) DeepCopy() *PodDNSConfigOption { - if in == nil { - return nil - } - out := new(PodDNSConfigOption) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodExecOptions) DeepCopyInto(out *PodExecOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Command != nil { - in, out := &in.Command, &out.Command - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodExecOptions. -func (in *PodExecOptions) DeepCopy() *PodExecOptions { - if in == nil { - return nil - } - out := new(PodExecOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodExecOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodIP) DeepCopyInto(out *PodIP) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodIP. -func (in *PodIP) DeepCopy() *PodIP { - if in == nil { - return nil - } - out := new(PodIP) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodList) DeepCopyInto(out *PodList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Pod, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodList. -func (in *PodList) DeepCopy() *PodList { - if in == nil { - return nil - } - out := new(PodList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodLogOptions) DeepCopyInto(out *PodLogOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.SinceSeconds != nil { - in, out := &in.SinceSeconds, &out.SinceSeconds - *out = new(int64) - **out = **in - } - if in.SinceTime != nil { - in, out := &in.SinceTime, &out.SinceTime - *out = (*in).DeepCopy() - } - if in.TailLines != nil { - in, out := &in.TailLines, &out.TailLines - *out = new(int64) - **out = **in - } - if in.LimitBytes != nil { - in, out := &in.LimitBytes, &out.LimitBytes - *out = new(int64) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodLogOptions. -func (in *PodLogOptions) DeepCopy() *PodLogOptions { - if in == nil { - return nil - } - out := new(PodLogOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodLogOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodPortForwardOptions) DeepCopyInto(out *PodPortForwardOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - if in.Ports != nil { - in, out := &in.Ports, &out.Ports - *out = make([]int32, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodPortForwardOptions. -func (in *PodPortForwardOptions) DeepCopy() *PodPortForwardOptions { - if in == nil { - return nil - } - out := new(PodPortForwardOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodPortForwardOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodProxyOptions) DeepCopyInto(out *PodProxyOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodProxyOptions. -func (in *PodProxyOptions) DeepCopy() *PodProxyOptions { - if in == nil { - return nil - } - out := new(PodProxyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodProxyOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodReadinessGate) DeepCopyInto(out *PodReadinessGate) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodReadinessGate. -func (in *PodReadinessGate) DeepCopy() *PodReadinessGate { - if in == nil { - return nil - } - out := new(PodReadinessGate) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodSecurityContext) DeepCopyInto(out *PodSecurityContext) { - *out = *in - if in.ShareProcessNamespace != nil { - in, out := &in.ShareProcessNamespace, &out.ShareProcessNamespace - *out = new(bool) - **out = **in - } - if in.SELinuxOptions != nil { - in, out := &in.SELinuxOptions, &out.SELinuxOptions - *out = new(SELinuxOptions) - **out = **in - } - if in.WindowsOptions != nil { - in, out := &in.WindowsOptions, &out.WindowsOptions - *out = new(WindowsSecurityContextOptions) - (*in).DeepCopyInto(*out) - } - if in.RunAsUser != nil { - in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) - **out = **in - } - if in.RunAsGroup != nil { - in, out := &in.RunAsGroup, &out.RunAsGroup - *out = new(int64) - **out = **in - } - if in.RunAsNonRoot != nil { - in, out := &in.RunAsNonRoot, &out.RunAsNonRoot - *out = new(bool) - **out = **in - } - if in.SupplementalGroups != nil { - in, out := &in.SupplementalGroups, &out.SupplementalGroups - *out = make([]int64, len(*in)) - copy(*out, *in) - } - if in.FSGroup != nil { - in, out := &in.FSGroup, &out.FSGroup - *out = new(int64) - **out = **in - } - if in.FSGroupChangePolicy != nil { - in, out := &in.FSGroupChangePolicy, &out.FSGroupChangePolicy - *out = new(PodFSGroupChangePolicy) - **out = **in - } - if in.Sysctls != nil { - in, out := &in.Sysctls, &out.Sysctls - *out = make([]Sysctl, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSecurityContext. -func (in *PodSecurityContext) DeepCopy() *PodSecurityContext { - if in == nil { - return nil - } - out := new(PodSecurityContext) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodSignature) DeepCopyInto(out *PodSignature) { - *out = *in - if in.PodController != nil { - in, out := &in.PodController, &out.PodController - *out = new(v1.OwnerReference) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSignature. -func (in *PodSignature) DeepCopy() *PodSignature { - if in == nil { - return nil - } - out := new(PodSignature) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodSpec) DeepCopyInto(out *PodSpec) { - *out = *in - if in.Volumes != nil { - in, out := &in.Volumes, &out.Volumes - *out = make([]Volume, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.InitContainers != nil { - in, out := &in.InitContainers, &out.InitContainers - *out = make([]Container, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Containers != nil { - in, out := &in.Containers, &out.Containers - *out = make([]Container, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.EphemeralContainers != nil { - in, out := &in.EphemeralContainers, &out.EphemeralContainers - *out = make([]EphemeralContainer, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.TerminationGracePeriodSeconds != nil { - in, out := &in.TerminationGracePeriodSeconds, &out.TerminationGracePeriodSeconds - *out = new(int64) - **out = **in - } - if in.ActiveDeadlineSeconds != nil { - in, out := &in.ActiveDeadlineSeconds, &out.ActiveDeadlineSeconds - *out = new(int64) - **out = **in - } - if in.NodeSelector != nil { - in, out := &in.NodeSelector, &out.NodeSelector - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.AutomountServiceAccountToken != nil { - in, out := &in.AutomountServiceAccountToken, &out.AutomountServiceAccountToken - *out = new(bool) - **out = **in - } - if in.SecurityContext != nil { - in, out := &in.SecurityContext, &out.SecurityContext - *out = new(PodSecurityContext) - (*in).DeepCopyInto(*out) - } - if in.ImagePullSecrets != nil { - in, out := &in.ImagePullSecrets, &out.ImagePullSecrets - *out = make([]LocalObjectReference, len(*in)) - copy(*out, *in) - } - if in.Affinity != nil { - in, out := &in.Affinity, &out.Affinity - *out = new(Affinity) - (*in).DeepCopyInto(*out) - } - if in.Tolerations != nil { - in, out := &in.Tolerations, &out.Tolerations - *out = make([]Toleration, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.HostAliases != nil { - in, out := &in.HostAliases, &out.HostAliases - *out = make([]HostAlias, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Priority != nil { - in, out := &in.Priority, &out.Priority - *out = new(int32) - **out = **in - } - if in.PreemptionPolicy != nil { - in, out := &in.PreemptionPolicy, &out.PreemptionPolicy - *out = new(PreemptionPolicy) - **out = **in - } - if in.DNSConfig != nil { - in, out := &in.DNSConfig, &out.DNSConfig - *out = new(PodDNSConfig) - (*in).DeepCopyInto(*out) - } - if in.ReadinessGates != nil { - in, out := &in.ReadinessGates, &out.ReadinessGates - *out = make([]PodReadinessGate, len(*in)) - copy(*out, *in) - } - if in.RuntimeClassName != nil { - in, out := &in.RuntimeClassName, &out.RuntimeClassName - *out = new(string) - **out = **in - } - if in.Overhead != nil { - in, out := &in.Overhead, &out.Overhead - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.EnableServiceLinks != nil { - in, out := &in.EnableServiceLinks, &out.EnableServiceLinks - *out = new(bool) - **out = **in - } - if in.TopologySpreadConstraints != nil { - in, out := &in.TopologySpreadConstraints, &out.TopologySpreadConstraints - *out = make([]TopologySpreadConstraint, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodSpec. -func (in *PodSpec) DeepCopy() *PodSpec { - if in == nil { - return nil - } - out := new(PodSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodStatus) DeepCopyInto(out *PodStatus) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]PodCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.PodIPs != nil { - in, out := &in.PodIPs, &out.PodIPs - *out = make([]PodIP, len(*in)) - copy(*out, *in) - } - if in.StartTime != nil { - in, out := &in.StartTime, &out.StartTime - *out = (*in).DeepCopy() - } - if in.InitContainerStatuses != nil { - in, out := &in.InitContainerStatuses, &out.InitContainerStatuses - *out = make([]ContainerStatus, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.ContainerStatuses != nil { - in, out := &in.ContainerStatuses, &out.ContainerStatuses - *out = make([]ContainerStatus, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.EphemeralContainerStatuses != nil { - in, out := &in.EphemeralContainerStatuses, &out.EphemeralContainerStatuses - *out = make([]ContainerStatus, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodStatus. -func (in *PodStatus) DeepCopy() *PodStatus { - if in == nil { - return nil - } - out := new(PodStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodStatusResult) DeepCopyInto(out *PodStatusResult) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Status.DeepCopyInto(&out.Status) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodStatusResult. -func (in *PodStatusResult) DeepCopy() *PodStatusResult { - if in == nil { - return nil - } - out := new(PodStatusResult) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodStatusResult) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodTemplate) DeepCopyInto(out *PodTemplate) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Template.DeepCopyInto(&out.Template) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodTemplate. -func (in *PodTemplate) DeepCopy() *PodTemplate { - if in == nil { - return nil - } - out := new(PodTemplate) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodTemplate) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodTemplateList) DeepCopyInto(out *PodTemplateList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]PodTemplate, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodTemplateList. -func (in *PodTemplateList) DeepCopy() *PodTemplateList { - if in == nil { - return nil - } - out := new(PodTemplateList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *PodTemplateList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PodTemplateSpec) DeepCopyInto(out *PodTemplateSpec) { - *out = *in - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - in.Spec.DeepCopyInto(&out.Spec) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PodTemplateSpec. -func (in *PodTemplateSpec) DeepCopy() *PodTemplateSpec { - if in == nil { - return nil - } - out := new(PodTemplateSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PortworxVolumeSource) DeepCopyInto(out *PortworxVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PortworxVolumeSource. -func (in *PortworxVolumeSource) DeepCopy() *PortworxVolumeSource { - if in == nil { - return nil - } - out := new(PortworxVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Preconditions) DeepCopyInto(out *Preconditions) { - *out = *in - if in.UID != nil { - in, out := &in.UID, &out.UID - *out = new(types.UID) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Preconditions. -func (in *Preconditions) DeepCopy() *Preconditions { - if in == nil { - return nil - } - out := new(Preconditions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PreferAvoidPodsEntry) DeepCopyInto(out *PreferAvoidPodsEntry) { - *out = *in - in.PodSignature.DeepCopyInto(&out.PodSignature) - in.EvictionTime.DeepCopyInto(&out.EvictionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PreferAvoidPodsEntry. -func (in *PreferAvoidPodsEntry) DeepCopy() *PreferAvoidPodsEntry { - if in == nil { - return nil - } - out := new(PreferAvoidPodsEntry) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *PreferredSchedulingTerm) DeepCopyInto(out *PreferredSchedulingTerm) { - *out = *in - in.Preference.DeepCopyInto(&out.Preference) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new PreferredSchedulingTerm. -func (in *PreferredSchedulingTerm) DeepCopy() *PreferredSchedulingTerm { - if in == nil { - return nil - } - out := new(PreferredSchedulingTerm) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Probe) DeepCopyInto(out *Probe) { - *out = *in - in.Handler.DeepCopyInto(&out.Handler) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Probe. -func (in *Probe) DeepCopy() *Probe { - if in == nil { - return nil - } - out := new(Probe) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ProjectedVolumeSource) DeepCopyInto(out *ProjectedVolumeSource) { - *out = *in - if in.Sources != nil { - in, out := &in.Sources, &out.Sources - *out = make([]VolumeProjection, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.DefaultMode != nil { - in, out := &in.DefaultMode, &out.DefaultMode - *out = new(int32) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ProjectedVolumeSource. -func (in *ProjectedVolumeSource) DeepCopy() *ProjectedVolumeSource { - if in == nil { - return nil - } - out := new(ProjectedVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *QuobyteVolumeSource) DeepCopyInto(out *QuobyteVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new QuobyteVolumeSource. -func (in *QuobyteVolumeSource) DeepCopy() *QuobyteVolumeSource { - if in == nil { - return nil - } - out := new(QuobyteVolumeSource) - in.DeepCopyInto(out) - 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 - *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 - 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 - *out = new(LocalObjectReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RBDVolumeSource. -func (in *RBDVolumeSource) DeepCopy() *RBDVolumeSource { - if in == nil { - return nil - } - out := new(RBDVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *RangeAllocation) DeepCopyInto(out *RangeAllocation) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.Data != nil { - in, out := &in.Data, &out.Data - *out = make([]byte, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new RangeAllocation. -func (in *RangeAllocation) DeepCopy() *RangeAllocation { - if in == nil { - return nil - } - out := new(RangeAllocation) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *RangeAllocation) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReplicationController) DeepCopyInto(out *ReplicationController) { - *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 ReplicationController. -func (in *ReplicationController) DeepCopy() *ReplicationController { - if in == nil { - return nil - } - out := new(ReplicationController) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ReplicationController) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReplicationControllerCondition) DeepCopyInto(out *ReplicationControllerCondition) { - *out = *in - in.LastTransitionTime.DeepCopyInto(&out.LastTransitionTime) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReplicationControllerCondition. -func (in *ReplicationControllerCondition) DeepCopy() *ReplicationControllerCondition { - if in == nil { - return nil - } - out := new(ReplicationControllerCondition) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReplicationControllerList) DeepCopyInto(out *ReplicationControllerList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ReplicationController, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReplicationControllerList. -func (in *ReplicationControllerList) DeepCopy() *ReplicationControllerList { - if in == nil { - return nil - } - out := new(ReplicationControllerList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ReplicationControllerList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReplicationControllerSpec) DeepCopyInto(out *ReplicationControllerSpec) { - *out = *in - if in.Selector != nil { - in, out := &in.Selector, &out.Selector - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.Template != nil { - in, out := &in.Template, &out.Template - *out = new(PodTemplateSpec) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReplicationControllerSpec. -func (in *ReplicationControllerSpec) DeepCopy() *ReplicationControllerSpec { - if in == nil { - return nil - } - out := new(ReplicationControllerSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ReplicationControllerStatus) DeepCopyInto(out *ReplicationControllerStatus) { - *out = *in - if in.Conditions != nil { - in, out := &in.Conditions, &out.Conditions - *out = make([]ReplicationControllerCondition, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ReplicationControllerStatus. -func (in *ReplicationControllerStatus) DeepCopy() *ReplicationControllerStatus { - if in == nil { - return nil - } - out := new(ReplicationControllerStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceFieldSelector) DeepCopyInto(out *ResourceFieldSelector) { - *out = *in - out.Divisor = in.Divisor.DeepCopy() - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceFieldSelector. -func (in *ResourceFieldSelector) DeepCopy() *ResourceFieldSelector { - if in == nil { - return nil - } - out := new(ResourceFieldSelector) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in ResourceList) DeepCopyInto(out *ResourceList) { - { - in := &in - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - return - } -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceList. -func (in ResourceList) DeepCopy() ResourceList { - if in == nil { - return nil - } - out := new(ResourceList) - in.DeepCopyInto(out) - return *out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceQuota) DeepCopyInto(out *ResourceQuota) { - *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 ResourceQuota. -func (in *ResourceQuota) DeepCopy() *ResourceQuota { - if in == nil { - return nil - } - out := new(ResourceQuota) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ResourceQuota) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceQuotaList) DeepCopyInto(out *ResourceQuotaList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ResourceQuota, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceQuotaList. -func (in *ResourceQuotaList) DeepCopy() *ResourceQuotaList { - if in == nil { - return nil - } - out := new(ResourceQuotaList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ResourceQuotaList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceQuotaSpec) DeepCopyInto(out *ResourceQuotaSpec) { - *out = *in - if in.Hard != nil { - in, out := &in.Hard, &out.Hard - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.Scopes != nil { - in, out := &in.Scopes, &out.Scopes - *out = make([]ResourceQuotaScope, len(*in)) - copy(*out, *in) - } - if in.ScopeSelector != nil { - in, out := &in.ScopeSelector, &out.ScopeSelector - *out = new(ScopeSelector) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceQuotaSpec. -func (in *ResourceQuotaSpec) DeepCopy() *ResourceQuotaSpec { - if in == nil { - return nil - } - out := new(ResourceQuotaSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceQuotaStatus) DeepCopyInto(out *ResourceQuotaStatus) { - *out = *in - if in.Hard != nil { - in, out := &in.Hard, &out.Hard - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.Used != nil { - in, out := &in.Used, &out.Used - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceQuotaStatus. -func (in *ResourceQuotaStatus) DeepCopy() *ResourceQuotaStatus { - if in == nil { - return nil - } - out := new(ResourceQuotaStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ResourceRequirements) DeepCopyInto(out *ResourceRequirements) { - *out = *in - if in.Limits != nil { - in, out := &in.Limits, &out.Limits - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - if in.Requests != nil { - in, out := &in.Requests, &out.Requests - *out = make(ResourceList, len(*in)) - for key, val := range *in { - (*out)[key] = val.DeepCopy() - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ResourceRequirements. -func (in *ResourceRequirements) DeepCopy() *ResourceRequirements { - if in == nil { - return nil - } - out := new(ResourceRequirements) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SELinuxOptions) DeepCopyInto(out *SELinuxOptions) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SELinuxOptions. -func (in *SELinuxOptions) DeepCopy() *SELinuxOptions { - if in == nil { - return nil - } - out := new(SELinuxOptions) - in.DeepCopyInto(out) - 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 - *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 - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScaleIOVolumeSource. -func (in *ScaleIOVolumeSource) DeepCopy() *ScaleIOVolumeSource { - if in == nil { - return nil - } - out := new(ScaleIOVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ScopeSelector) DeepCopyInto(out *ScopeSelector) { - *out = *in - if in.MatchExpressions != nil { - in, out := &in.MatchExpressions, &out.MatchExpressions - *out = make([]ScopedResourceSelectorRequirement, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScopeSelector. -func (in *ScopeSelector) DeepCopy() *ScopeSelector { - if in == nil { - return nil - } - out := new(ScopeSelector) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ScopedResourceSelectorRequirement) DeepCopyInto(out *ScopedResourceSelectorRequirement) { - *out = *in - if in.Values != nil { - in, out := &in.Values, &out.Values - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ScopedResourceSelectorRequirement. -func (in *ScopedResourceSelectorRequirement) DeepCopy() *ScopedResourceSelectorRequirement { - if in == nil { - return nil - } - out := new(ScopedResourceSelectorRequirement) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Secret) DeepCopyInto(out *Secret) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.Immutable != nil { - in, out := &in.Immutable, &out.Immutable - *out = new(bool) - **out = **in - } - if in.Data != nil { - in, out := &in.Data, &out.Data - *out = make(map[string][]byte, len(*in)) - for key, val := range *in { - var outVal []byte - if val == nil { - (*out)[key] = nil - } else { - in, out := &val, &outVal - *out = make([]byte, len(*in)) - copy(*out, *in) - } - (*out)[key] = outVal - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Secret. -func (in *Secret) DeepCopy() *Secret { - if in == nil { - return nil - } - out := new(Secret) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Secret) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecretEnvSource) DeepCopyInto(out *SecretEnvSource) { - *out = *in - out.LocalObjectReference = in.LocalObjectReference - if in.Optional != nil { - in, out := &in.Optional, &out.Optional - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretEnvSource. -func (in *SecretEnvSource) DeepCopy() *SecretEnvSource { - if in == nil { - return nil - } - out := new(SecretEnvSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecretKeySelector) DeepCopyInto(out *SecretKeySelector) { - *out = *in - out.LocalObjectReference = in.LocalObjectReference - if in.Optional != nil { - in, out := &in.Optional, &out.Optional - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretKeySelector. -func (in *SecretKeySelector) DeepCopy() *SecretKeySelector { - if in == nil { - return nil - } - out := new(SecretKeySelector) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecretList) DeepCopyInto(out *SecretList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Secret, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretList. -func (in *SecretList) DeepCopy() *SecretList { - if in == nil { - return nil - } - out := new(SecretList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *SecretList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecretProjection) DeepCopyInto(out *SecretProjection) { - *out = *in - out.LocalObjectReference = in.LocalObjectReference - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]KeyToPath, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Optional != nil { - in, out := &in.Optional, &out.Optional - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretProjection. -func (in *SecretProjection) DeepCopy() *SecretProjection { - if in == nil { - return nil - } - out := new(SecretProjection) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecretReference) DeepCopyInto(out *SecretReference) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretReference. -func (in *SecretReference) DeepCopy() *SecretReference { - if in == nil { - return nil - } - out := new(SecretReference) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecretVolumeSource) DeepCopyInto(out *SecretVolumeSource) { - *out = *in - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]KeyToPath, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.DefaultMode != nil { - in, out := &in.DefaultMode, &out.DefaultMode - *out = new(int32) - **out = **in - } - if in.Optional != nil { - in, out := &in.Optional, &out.Optional - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecretVolumeSource. -func (in *SecretVolumeSource) DeepCopy() *SecretVolumeSource { - if in == nil { - return nil - } - out := new(SecretVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SecurityContext) DeepCopyInto(out *SecurityContext) { - *out = *in - if in.Capabilities != nil { - in, out := &in.Capabilities, &out.Capabilities - *out = new(Capabilities) - (*in).DeepCopyInto(*out) - } - if in.Privileged != nil { - in, out := &in.Privileged, &out.Privileged - *out = new(bool) - **out = **in - } - if in.SELinuxOptions != nil { - in, out := &in.SELinuxOptions, &out.SELinuxOptions - *out = new(SELinuxOptions) - **out = **in - } - if in.WindowsOptions != nil { - in, out := &in.WindowsOptions, &out.WindowsOptions - *out = new(WindowsSecurityContextOptions) - (*in).DeepCopyInto(*out) - } - if in.RunAsUser != nil { - in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) - **out = **in - } - if in.RunAsGroup != nil { - in, out := &in.RunAsGroup, &out.RunAsGroup - *out = new(int64) - **out = **in - } - if in.RunAsNonRoot != nil { - in, out := &in.RunAsNonRoot, &out.RunAsNonRoot - *out = new(bool) - **out = **in - } - if in.ReadOnlyRootFilesystem != nil { - in, out := &in.ReadOnlyRootFilesystem, &out.ReadOnlyRootFilesystem - *out = new(bool) - **out = **in - } - if in.AllowPrivilegeEscalation != nil { - in, out := &in.AllowPrivilegeEscalation, &out.AllowPrivilegeEscalation - *out = new(bool) - **out = **in - } - if in.ProcMount != nil { - in, out := &in.ProcMount, &out.ProcMount - *out = new(ProcMountType) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SecurityContext. -func (in *SecurityContext) DeepCopy() *SecurityContext { - if in == nil { - return nil - } - out := new(SecurityContext) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SerializedReference) DeepCopyInto(out *SerializedReference) { - *out = *in - out.TypeMeta = in.TypeMeta - out.Reference = in.Reference - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SerializedReference. -func (in *SerializedReference) DeepCopy() *SerializedReference { - if in == nil { - return nil - } - out := new(SerializedReference) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *SerializedReference) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Service) DeepCopyInto(out *Service) { - *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 Service. -func (in *Service) DeepCopy() *Service { - if in == nil { - return nil - } - out := new(Service) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *Service) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceAccount) DeepCopyInto(out *ServiceAccount) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) - if in.Secrets != nil { - in, out := &in.Secrets, &out.Secrets - *out = make([]ObjectReference, len(*in)) - copy(*out, *in) - } - if in.ImagePullSecrets != nil { - in, out := &in.ImagePullSecrets, &out.ImagePullSecrets - *out = make([]LocalObjectReference, len(*in)) - copy(*out, *in) - } - if in.AutomountServiceAccountToken != nil { - in, out := &in.AutomountServiceAccountToken, &out.AutomountServiceAccountToken - *out = new(bool) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceAccount. -func (in *ServiceAccount) DeepCopy() *ServiceAccount { - if in == nil { - return nil - } - out := new(ServiceAccount) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ServiceAccount) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceAccountList) DeepCopyInto(out *ServiceAccountList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]ServiceAccount, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceAccountList. -func (in *ServiceAccountList) DeepCopy() *ServiceAccountList { - if in == nil { - return nil - } - out := new(ServiceAccountList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ServiceAccountList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceAccountTokenProjection) DeepCopyInto(out *ServiceAccountTokenProjection) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceAccountTokenProjection. -func (in *ServiceAccountTokenProjection) DeepCopy() *ServiceAccountTokenProjection { - if in == nil { - return nil - } - out := new(ServiceAccountTokenProjection) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceList) DeepCopyInto(out *ServiceList) { - *out = *in - out.TypeMeta = in.TypeMeta - in.ListMeta.DeepCopyInto(&out.ListMeta) - if in.Items != nil { - in, out := &in.Items, &out.Items - *out = make([]Service, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceList. -func (in *ServiceList) DeepCopy() *ServiceList { - if in == nil { - return nil - } - out := new(ServiceList) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ServiceList) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServicePort) DeepCopyInto(out *ServicePort) { - *out = *in - if in.AppProtocol != nil { - in, out := &in.AppProtocol, &out.AppProtocol - *out = new(string) - **out = **in - } - out.TargetPort = in.TargetPort - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServicePort. -func (in *ServicePort) DeepCopy() *ServicePort { - if in == nil { - return nil - } - out := new(ServicePort) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceProxyOptions) DeepCopyInto(out *ServiceProxyOptions) { - *out = *in - out.TypeMeta = in.TypeMeta - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceProxyOptions. -func (in *ServiceProxyOptions) DeepCopy() *ServiceProxyOptions { - if in == nil { - return nil - } - out := new(ServiceProxyOptions) - in.DeepCopyInto(out) - return out -} - -// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. -func (in *ServiceProxyOptions) DeepCopyObject() runtime.Object { - if c := in.DeepCopy(); c != nil { - return c - } - return nil -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceSpec) DeepCopyInto(out *ServiceSpec) { - *out = *in - if in.Ports != nil { - in, out := &in.Ports, &out.Ports - *out = make([]ServicePort, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - if in.Selector != nil { - in, out := &in.Selector, &out.Selector - *out = make(map[string]string, len(*in)) - for key, val := range *in { - (*out)[key] = val - } - } - if in.ExternalIPs != nil { - in, out := &in.ExternalIPs, &out.ExternalIPs - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.SessionAffinityConfig != nil { - in, out := &in.SessionAffinityConfig, &out.SessionAffinityConfig - *out = new(SessionAffinityConfig) - (*in).DeepCopyInto(*out) - } - if in.LoadBalancerSourceRanges != nil { - in, out := &in.LoadBalancerSourceRanges, &out.LoadBalancerSourceRanges - *out = make([]string, len(*in)) - copy(*out, *in) - } - if in.IPFamily != nil { - in, out := &in.IPFamily, &out.IPFamily - *out = new(IPFamily) - **out = **in - } - if in.TopologyKeys != nil { - in, out := &in.TopologyKeys, &out.TopologyKeys - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceSpec. -func (in *ServiceSpec) DeepCopy() *ServiceSpec { - if in == nil { - return nil - } - out := new(ServiceSpec) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *ServiceStatus) DeepCopyInto(out *ServiceStatus) { - *out = *in - in.LoadBalancer.DeepCopyInto(&out.LoadBalancer) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceStatus. -func (in *ServiceStatus) DeepCopy() *ServiceStatus { - if in == nil { - return nil - } - out := new(ServiceStatus) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SessionAffinityConfig) DeepCopyInto(out *SessionAffinityConfig) { - *out = *in - if in.ClientIP != nil { - in, out := &in.ClientIP, &out.ClientIP - *out = new(ClientIPConfig) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SessionAffinityConfig. -func (in *SessionAffinityConfig) DeepCopy() *SessionAffinityConfig { - if in == nil { - return nil - } - out := new(SessionAffinityConfig) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StorageOSPersistentVolumeSource) DeepCopyInto(out *StorageOSPersistentVolumeSource) { - *out = *in - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(ObjectReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageOSPersistentVolumeSource. -func (in *StorageOSPersistentVolumeSource) DeepCopy() *StorageOSPersistentVolumeSource { - if in == nil { - return nil - } - out := new(StorageOSPersistentVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *StorageOSVolumeSource) DeepCopyInto(out *StorageOSVolumeSource) { - *out = *in - if in.SecretRef != nil { - in, out := &in.SecretRef, &out.SecretRef - *out = new(LocalObjectReference) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new StorageOSVolumeSource. -func (in *StorageOSVolumeSource) DeepCopy() *StorageOSVolumeSource { - if in == nil { - return nil - } - out := new(StorageOSVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Sysctl) DeepCopyInto(out *Sysctl) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Sysctl. -func (in *Sysctl) DeepCopy() *Sysctl { - if in == nil { - return nil - } - out := new(Sysctl) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TCPSocketAction) DeepCopyInto(out *TCPSocketAction) { - *out = *in - out.Port = in.Port - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TCPSocketAction. -func (in *TCPSocketAction) DeepCopy() *TCPSocketAction { - if in == nil { - return nil - } - out := new(TCPSocketAction) - in.DeepCopyInto(out) - return out -} - -// 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 - if in.TimeAdded != nil { - in, out := &in.TimeAdded, &out.TimeAdded - *out = (*in).DeepCopy() - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Taint. -func (in *Taint) DeepCopy() *Taint { - if in == nil { - return nil - } - out := new(Taint) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Toleration) DeepCopyInto(out *Toleration) { - *out = *in - if in.TolerationSeconds != nil { - in, out := &in.TolerationSeconds, &out.TolerationSeconds - *out = new(int64) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Toleration. -func (in *Toleration) DeepCopy() *Toleration { - if in == nil { - return nil - } - out := new(Toleration) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TopologySelectorLabelRequirement) DeepCopyInto(out *TopologySelectorLabelRequirement) { - *out = *in - if in.Values != nil { - in, out := &in.Values, &out.Values - *out = make([]string, len(*in)) - copy(*out, *in) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TopologySelectorLabelRequirement. -func (in *TopologySelectorLabelRequirement) DeepCopy() *TopologySelectorLabelRequirement { - if in == nil { - return nil - } - out := new(TopologySelectorLabelRequirement) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TopologySelectorTerm) DeepCopyInto(out *TopologySelectorTerm) { - *out = *in - if in.MatchLabelExpressions != nil { - in, out := &in.MatchLabelExpressions, &out.MatchLabelExpressions - *out = make([]TopologySelectorLabelRequirement, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TopologySelectorTerm. -func (in *TopologySelectorTerm) DeepCopy() *TopologySelectorTerm { - if in == nil { - return nil - } - out := new(TopologySelectorTerm) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TopologySpreadConstraint) DeepCopyInto(out *TopologySpreadConstraint) { - *out = *in - if in.LabelSelector != nil { - in, out := &in.LabelSelector, &out.LabelSelector - *out = new(v1.LabelSelector) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TopologySpreadConstraint. -func (in *TopologySpreadConstraint) DeepCopy() *TopologySpreadConstraint { - if in == nil { - return nil - } - out := new(TopologySpreadConstraint) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *TypedLocalObjectReference) DeepCopyInto(out *TypedLocalObjectReference) { - *out = *in - if in.APIGroup != nil { - in, out := &in.APIGroup, &out.APIGroup - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TypedLocalObjectReference. -func (in *TypedLocalObjectReference) DeepCopy() *TypedLocalObjectReference { - if in == nil { - return nil - } - out := new(TypedLocalObjectReference) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Volume) DeepCopyInto(out *Volume) { - *out = *in - in.VolumeSource.DeepCopyInto(&out.VolumeSource) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Volume. -func (in *Volume) DeepCopy() *Volume { - if in == nil { - return nil - } - out := new(Volume) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VolumeDevice) DeepCopyInto(out *VolumeDevice) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeDevice. -func (in *VolumeDevice) DeepCopy() *VolumeDevice { - if in == nil { - return nil - } - out := new(VolumeDevice) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VolumeMount) DeepCopyInto(out *VolumeMount) { - *out = *in - if in.MountPropagation != nil { - in, out := &in.MountPropagation, &out.MountPropagation - *out = new(MountPropagationMode) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeMount. -func (in *VolumeMount) DeepCopy() *VolumeMount { - if in == nil { - return nil - } - out := new(VolumeMount) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VolumeNodeAffinity) DeepCopyInto(out *VolumeNodeAffinity) { - *out = *in - if in.Required != nil { - in, out := &in.Required, &out.Required - *out = new(NodeSelector) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeNodeAffinity. -func (in *VolumeNodeAffinity) DeepCopy() *VolumeNodeAffinity { - if in == nil { - return nil - } - out := new(VolumeNodeAffinity) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VolumeProjection) DeepCopyInto(out *VolumeProjection) { - *out = *in - if in.Secret != nil { - in, out := &in.Secret, &out.Secret - *out = new(SecretProjection) - (*in).DeepCopyInto(*out) - } - if in.DownwardAPI != nil { - in, out := &in.DownwardAPI, &out.DownwardAPI - *out = new(DownwardAPIProjection) - (*in).DeepCopyInto(*out) - } - if in.ConfigMap != nil { - in, out := &in.ConfigMap, &out.ConfigMap - *out = new(ConfigMapProjection) - (*in).DeepCopyInto(*out) - } - if in.ServiceAccountToken != nil { - in, out := &in.ServiceAccountToken, &out.ServiceAccountToken - *out = new(ServiceAccountTokenProjection) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeProjection. -func (in *VolumeProjection) DeepCopy() *VolumeProjection { - if in == nil { - return nil - } - out := new(VolumeProjection) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VolumeSource) DeepCopyInto(out *VolumeSource) { - *out = *in - if in.HostPath != nil { - in, out := &in.HostPath, &out.HostPath - *out = new(HostPathVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.EmptyDir != nil { - in, out := &in.EmptyDir, &out.EmptyDir - *out = new(EmptyDirVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.GCEPersistentDisk != nil { - in, out := &in.GCEPersistentDisk, &out.GCEPersistentDisk - *out = new(GCEPersistentDiskVolumeSource) - **out = **in - } - if in.AWSElasticBlockStore != nil { - in, out := &in.AWSElasticBlockStore, &out.AWSElasticBlockStore - *out = new(AWSElasticBlockStoreVolumeSource) - **out = **in - } - if in.GitRepo != nil { - in, out := &in.GitRepo, &out.GitRepo - *out = new(GitRepoVolumeSource) - **out = **in - } - if in.Secret != nil { - in, out := &in.Secret, &out.Secret - *out = new(SecretVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.NFS != nil { - in, out := &in.NFS, &out.NFS - *out = new(NFSVolumeSource) - **out = **in - } - if in.ISCSI != nil { - in, out := &in.ISCSI, &out.ISCSI - *out = new(ISCSIVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.Glusterfs != nil { - in, out := &in.Glusterfs, &out.Glusterfs - *out = new(GlusterfsVolumeSource) - **out = **in - } - if in.PersistentVolumeClaim != nil { - in, out := &in.PersistentVolumeClaim, &out.PersistentVolumeClaim - *out = new(PersistentVolumeClaimVolumeSource) - **out = **in - } - if in.RBD != nil { - in, out := &in.RBD, &out.RBD - *out = new(RBDVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.Quobyte != nil { - in, out := &in.Quobyte, &out.Quobyte - *out = new(QuobyteVolumeSource) - **out = **in - } - if in.FlexVolume != nil { - in, out := &in.FlexVolume, &out.FlexVolume - *out = new(FlexVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.Cinder != nil { - in, out := &in.Cinder, &out.Cinder - *out = new(CinderVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.CephFS != nil { - in, out := &in.CephFS, &out.CephFS - *out = new(CephFSVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.Flocker != nil { - in, out := &in.Flocker, &out.Flocker - *out = new(FlockerVolumeSource) - **out = **in - } - if in.DownwardAPI != nil { - in, out := &in.DownwardAPI, &out.DownwardAPI - *out = new(DownwardAPIVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.FC != nil { - in, out := &in.FC, &out.FC - *out = new(FCVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.AzureFile != nil { - in, out := &in.AzureFile, &out.AzureFile - *out = new(AzureFileVolumeSource) - **out = **in - } - if in.ConfigMap != nil { - in, out := &in.ConfigMap, &out.ConfigMap - *out = new(ConfigMapVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.VsphereVolume != nil { - in, out := &in.VsphereVolume, &out.VsphereVolume - *out = new(VsphereVirtualDiskVolumeSource) - **out = **in - } - if in.AzureDisk != nil { - in, out := &in.AzureDisk, &out.AzureDisk - *out = new(AzureDiskVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.PhotonPersistentDisk != nil { - in, out := &in.PhotonPersistentDisk, &out.PhotonPersistentDisk - *out = new(PhotonPersistentDiskVolumeSource) - **out = **in - } - if in.Projected != nil { - in, out := &in.Projected, &out.Projected - *out = new(ProjectedVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.PortworxVolume != nil { - in, out := &in.PortworxVolume, &out.PortworxVolume - *out = new(PortworxVolumeSource) - **out = **in - } - if in.ScaleIO != nil { - in, out := &in.ScaleIO, &out.ScaleIO - *out = new(ScaleIOVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.StorageOS != nil { - in, out := &in.StorageOS, &out.StorageOS - *out = new(StorageOSVolumeSource) - (*in).DeepCopyInto(*out) - } - if in.CSI != nil { - in, out := &in.CSI, &out.CSI - *out = new(CSIVolumeSource) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VolumeSource. -func (in *VolumeSource) DeepCopy() *VolumeSource { - if in == nil { - return nil - } - out := new(VolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *VsphereVirtualDiskVolumeSource) DeepCopyInto(out *VsphereVirtualDiskVolumeSource) { - *out = *in - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new VsphereVirtualDiskVolumeSource. -func (in *VsphereVirtualDiskVolumeSource) DeepCopy() *VsphereVirtualDiskVolumeSource { - if in == nil { - return nil - } - out := new(VsphereVirtualDiskVolumeSource) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *WeightedPodAffinityTerm) DeepCopyInto(out *WeightedPodAffinityTerm) { - *out = *in - in.PodAffinityTerm.DeepCopyInto(&out.PodAffinityTerm) - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WeightedPodAffinityTerm. -func (in *WeightedPodAffinityTerm) DeepCopy() *WeightedPodAffinityTerm { - if in == nil { - return nil - } - out := new(WeightedPodAffinityTerm) - in.DeepCopyInto(out) - return out -} - -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *WindowsSecurityContextOptions) DeepCopyInto(out *WindowsSecurityContextOptions) { - *out = *in - if in.GMSACredentialSpecName != nil { - in, out := &in.GMSACredentialSpecName, &out.GMSACredentialSpecName - *out = new(string) - **out = **in - } - if in.GMSACredentialSpec != nil { - in, out := &in.GMSACredentialSpec, &out.GMSACredentialSpec - *out = new(string) - **out = **in - } - if in.RunAsUserName != nil { - in, out := &in.RunAsUserName, &out.RunAsUserName - *out = new(string) - **out = **in - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new WindowsSecurityContextOptions. -func (in *WindowsSecurityContextOptions) DeepCopy() *WindowsSecurityContextOptions { - if in == nil { - return nil - } - out := new(WindowsSecurityContextOptions) - in.DeepCopyInto(out) - return out -} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/doc.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/doc.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/remote/doc.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/doc.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_image.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/remote_image.go similarity index 98% rename from vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_image.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/remote_image.go index 5de56e2f3..e8089f666 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_image.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/remote_image.go @@ -23,11 +23,11 @@ import ( "time" "google.golang.org/grpc" - "k8s.io/klog" + "k8s.io/klog/v2" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" - "k8s.io/kubernetes/pkg/kubelet/util" + "k8s.io/kubernetes/pkg/kubelet/cri/remote/util" ) // RemoteImageService is a gRPC implementation of internalapi.ImageManagerService. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_runtime.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/remote_runtime.go similarity index 76% rename from vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_runtime.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/remote_runtime.go index 30ee91409..24b6012b9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/remote_runtime.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/remote_runtime.go @@ -24,12 +24,12 @@ import ( "time" "google.golang.org/grpc" - "k8s.io/klog" + "k8s.io/klog/v2" + "k8s.io/component-base/logs/logreduction" internalapi "k8s.io/cri-api/pkg/apis" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" - "k8s.io/kubernetes/pkg/kubelet/util" - "k8s.io/kubernetes/pkg/kubelet/util/logreduction" + "k8s.io/kubernetes/pkg/kubelet/cri/remote/util" utilexec "k8s.io/utils/exec" ) @@ -71,6 +71,8 @@ func NewRemoteRuntimeService(endpoint string, connectionTimeout time.Duration) ( // Version returns the runtime name, runtime version and runtime API version. func (r *RemoteRuntimeService) Version(apiVersion string) (*runtimeapi.VersionResponse, error) { + klog.V(10).Infof("[RemoteRuntimeService] Version (apiVersion=%v, timeout=%v)", apiVersion, r.timeout) + ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -82,6 +84,8 @@ func (r *RemoteRuntimeService) Version(apiVersion string) (*runtimeapi.VersionRe return nil, err } + klog.V(10).Infof("[RemoteRuntimeService] Version Response (typedVersion=%v)", typedVersion) + if typedVersion.Version == "" || typedVersion.RuntimeName == "" || typedVersion.RuntimeApiVersion == "" || typedVersion.RuntimeVersion == "" { return nil, fmt.Errorf("not all fields are set in VersionResponse (%q)", *typedVersion) } @@ -94,7 +98,11 @@ func (r *RemoteRuntimeService) Version(apiVersion string) (*runtimeapi.VersionRe func (r *RemoteRuntimeService) RunPodSandbox(config *runtimeapi.PodSandboxConfig, runtimeHandler string) (string, error) { // Use 2 times longer timeout for sandbox operation (4 mins by default) // TODO: Make the pod sandbox timeout configurable. - ctx, cancel := getContextWithTimeout(r.timeout * 2) + timeout := r.timeout * 2 + + klog.V(10).Infof("[RemoteRuntimeService] RunPodSandbox (config=%v, runtimeHandler=%v, timeout=%v)", config, runtimeHandler, timeout) + + ctx, cancel := getContextWithTimeout(timeout) defer cancel() resp, err := r.runtimeClient.RunPodSandbox(ctx, &runtimeapi.RunPodSandboxRequest{ @@ -112,12 +120,16 @@ func (r *RemoteRuntimeService) RunPodSandbox(config *runtimeapi.PodSandboxConfig return "", errors.New(errorMessage) } + klog.V(10).Infof("[RemoteRuntimeService] RunPodSandbox Response (PodSandboxId=%v)", resp.PodSandboxId) + return resp.PodSandboxId, nil } // StopPodSandbox stops the sandbox. If there are any running containers in the // sandbox, they should be forced to termination. func (r *RemoteRuntimeService) StopPodSandbox(podSandBoxID string) error { + klog.V(10).Infof("[RemoteRuntimeService] StopPodSandbox (podSandboxID=%v, timeout=%v)", podSandBoxID, r.timeout) + ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -129,12 +141,15 @@ func (r *RemoteRuntimeService) StopPodSandbox(podSandBoxID string) error { return err } + klog.V(10).Infof("[RemoteRuntimeService] StopPodSandbox Response (podSandboxID=%v)", podSandBoxID) + return nil } // RemovePodSandbox removes the sandbox. If there are any containers in the // sandbox, they should be forcibly removed. func (r *RemoteRuntimeService) RemovePodSandbox(podSandBoxID string) error { + klog.V(10).Infof("[RemoteRuntimeService] RemovePodSandbox (podSandboxID=%v, timeout=%v)", podSandBoxID, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -146,11 +161,14 @@ func (r *RemoteRuntimeService) RemovePodSandbox(podSandBoxID string) error { return err } + klog.V(10).Infof("[RemoteRuntimeService] RemovePodSandbox Response (podSandboxID=%v)", podSandBoxID) + return nil } // PodSandboxStatus returns the status of the PodSandbox. func (r *RemoteRuntimeService) PodSandboxStatus(podSandBoxID string) (*runtimeapi.PodSandboxStatus, error) { + klog.V(10).Infof("[RemoteRuntimeService] PodSandboxStatus (podSandboxID=%v, timeout=%v)", podSandBoxID, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -161,6 +179,8 @@ func (r *RemoteRuntimeService) PodSandboxStatus(podSandBoxID string) (*runtimeap return nil, err } + klog.V(10).Infof("[RemoteRuntimeService] PodSandboxStatus Response (podSandboxID=%v, status=%v)", podSandBoxID, resp.Status) + if resp.Status != nil { if err := verifySandboxStatus(resp.Status); err != nil { return nil, err @@ -172,6 +192,7 @@ func (r *RemoteRuntimeService) PodSandboxStatus(podSandBoxID string) (*runtimeap // ListPodSandbox returns a list of PodSandboxes. func (r *RemoteRuntimeService) ListPodSandbox(filter *runtimeapi.PodSandboxFilter) ([]*runtimeapi.PodSandbox, error) { + klog.V(10).Infof("[RemoteRuntimeService] ListPodSandbox (filter=%v, timeout=%v)", filter, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -183,11 +204,14 @@ func (r *RemoteRuntimeService) ListPodSandbox(filter *runtimeapi.PodSandboxFilte return nil, err } + klog.V(10).Infof("[RemoteRuntimeService] ListPodSandbox Response (filter=%v, items=%v)", filter, resp.Items) + return resp.Items, nil } // CreateContainer creates a new container in the specified PodSandbox. func (r *RemoteRuntimeService) CreateContainer(podSandBoxID string, config *runtimeapi.ContainerConfig, sandboxConfig *runtimeapi.PodSandboxConfig) (string, error) { + klog.V(10).Infof("[RemoteRuntimeService] CreateContainer (podSandBoxID=%v, timeout=%v)", podSandBoxID, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -201,6 +225,7 @@ func (r *RemoteRuntimeService) CreateContainer(podSandBoxID string, config *runt return "", err } + klog.V(10).Infof("[RemoteRuntimeService] CreateContainer (podSandBoxID=%v, ContainerId=%v)", podSandBoxID, resp.ContainerId) if resp.ContainerId == "" { errorMessage := fmt.Sprintf("ContainerId is not set for container %q", config.GetMetadata()) klog.Errorf("CreateContainer failed: %s", errorMessage) @@ -212,6 +237,7 @@ func (r *RemoteRuntimeService) CreateContainer(podSandBoxID string, config *runt // StartContainer starts the container. func (r *RemoteRuntimeService) StartContainer(containerID string) error { + klog.V(10).Infof("[RemoteRuntimeService] StartContainer (containerID=%v, timeout=%v)", containerID, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -222,12 +248,14 @@ func (r *RemoteRuntimeService) StartContainer(containerID string) error { klog.Errorf("StartContainer %q from runtime service failed: %v", containerID, err) return err } + klog.V(10).Infof("[RemoteRuntimeService] StartContainer Response (containerID=%v)", containerID) return nil } // StopContainer stops a running container with a grace period (i.e., timeout). func (r *RemoteRuntimeService) StopContainer(containerID string, timeout int64) error { + klog.V(10).Infof("[RemoteRuntimeService] StopContainer (containerID=%v, timeout=%v)", containerID, timeout) // Use timeout + default timeout (2 minutes) as timeout to leave extra time // for SIGKILL container and request latency. t := r.timeout + time.Duration(timeout)*time.Second @@ -243,6 +271,7 @@ func (r *RemoteRuntimeService) StopContainer(containerID string, timeout int64) klog.Errorf("StopContainer %q from runtime service failed: %v", containerID, err) return err } + klog.V(10).Infof("[RemoteRuntimeService] StopContainer Response (containerID=%v)", containerID) return nil } @@ -250,6 +279,7 @@ func (r *RemoteRuntimeService) StopContainer(containerID string, timeout int64) // RemoveContainer removes the container. If the container is running, the container // should be forced to removal. func (r *RemoteRuntimeService) RemoveContainer(containerID string) error { + klog.V(10).Infof("[RemoteRuntimeService] RemoveContainer (containerID=%v, timeout=%v)", containerID, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -261,12 +291,14 @@ func (r *RemoteRuntimeService) RemoveContainer(containerID string) error { klog.Errorf("RemoveContainer %q from runtime service failed: %v", containerID, err) return err } + klog.V(10).Infof("[RemoteRuntimeService] RemoveContainer Response (containerID=%v)", containerID) return nil } // ListContainers lists containers by filters. func (r *RemoteRuntimeService) ListContainers(filter *runtimeapi.ContainerFilter) ([]*runtimeapi.Container, error) { + klog.V(10).Infof("[RemoteRuntimeService] ListContainers (filter=%v, timeout=%v)", filter, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -277,12 +309,14 @@ func (r *RemoteRuntimeService) ListContainers(filter *runtimeapi.ContainerFilter klog.Errorf("ListContainers with filter %+v from runtime service failed: %v", filter, err) return nil, err } + klog.V(10).Infof("[RemoteRuntimeService] ListContainers Response (filter=%v, containers=%v)", filter, resp.Containers) return resp.Containers, nil } // ContainerStatus returns the container status. func (r *RemoteRuntimeService) ContainerStatus(containerID string) (*runtimeapi.ContainerStatus, error) { + klog.V(10).Infof("[RemoteRuntimeService] ContainerStatus (containerID=%v, timeout=%v)", containerID, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -297,6 +331,7 @@ func (r *RemoteRuntimeService) ContainerStatus(containerID string) (*runtimeapi. return nil, err } r.logReduction.ClearID(containerID) + klog.V(10).Infof("[RemoteRuntimeService] ContainerStatus Response (containerID=%v, status=%v)", containerID, resp.Status) if resp.Status != nil { if err := verifyContainerStatus(resp.Status); err != nil { @@ -310,6 +345,7 @@ func (r *RemoteRuntimeService) ContainerStatus(containerID string) (*runtimeapi. // UpdateContainerResources updates a containers resource config func (r *RemoteRuntimeService) UpdateContainerResources(containerID string, resources *runtimeapi.LinuxContainerResources) error { + klog.V(10).Infof("[RemoteRuntimeService] UpdateContainerResources (containerID=%v, timeout=%v)", containerID, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -321,6 +357,7 @@ func (r *RemoteRuntimeService) UpdateContainerResources(containerID string, reso klog.Errorf("UpdateContainerResources %q from runtime service failed: %v", containerID, err) return err } + klog.V(10).Infof("[RemoteRuntimeService] UpdateContainerResources Response (containerID=%v)", containerID) return nil } @@ -328,6 +365,7 @@ func (r *RemoteRuntimeService) UpdateContainerResources(containerID string, reso // ExecSync executes a command in the container, and returns the stdout output. // If command exits with a non-zero exit code, an error is returned. func (r *RemoteRuntimeService) ExecSync(containerID string, cmd []string, timeout time.Duration) (stdout []byte, stderr []byte, err error) { + klog.V(10).Infof("[RemoteRuntimeService] ExecSync (containerID=%v, timeout=%v)", containerID, timeout) // Do not set timeout when timeout is 0. var ctx context.Context var cancel context.CancelFunc @@ -352,6 +390,7 @@ func (r *RemoteRuntimeService) ExecSync(containerID string, cmd []string, timeou return nil, nil, err } + klog.V(10).Infof("[RemoteRuntimeService] ExecSync Response (containerID=%v, ExitCode=%v)", containerID, resp.ExitCode) err = nil if resp.ExitCode != 0 { err = utilexec.CodeExitError{ @@ -365,6 +404,7 @@ func (r *RemoteRuntimeService) ExecSync(containerID string, cmd []string, timeou // Exec prepares a streaming endpoint to execute a command in the container, and returns the address. func (r *RemoteRuntimeService) Exec(req *runtimeapi.ExecRequest) (*runtimeapi.ExecResponse, error) { + klog.V(10).Infof("[RemoteRuntimeService] Exec (timeout=%v)", r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -373,6 +413,7 @@ func (r *RemoteRuntimeService) Exec(req *runtimeapi.ExecRequest) (*runtimeapi.Ex klog.Errorf("Exec %s '%s' from runtime service failed: %v", req.ContainerId, strings.Join(req.Cmd, " "), err) return nil, err } + klog.V(10).Info("[RemoteRuntimeService] Exec Response") if resp.Url == "" { errorMessage := "URL is not set" @@ -385,6 +426,7 @@ func (r *RemoteRuntimeService) Exec(req *runtimeapi.ExecRequest) (*runtimeapi.Ex // Attach prepares a streaming endpoint to attach to a running container, and returns the address. func (r *RemoteRuntimeService) Attach(req *runtimeapi.AttachRequest) (*runtimeapi.AttachResponse, error) { + klog.V(10).Infof("[RemoteRuntimeService] Attach (containerId=%v, timeout=%v)", req.ContainerId, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -393,10 +435,11 @@ func (r *RemoteRuntimeService) Attach(req *runtimeapi.AttachRequest) (*runtimeap klog.Errorf("Attach %s from runtime service failed: %v", req.ContainerId, err) return nil, err } + klog.V(10).Infof("[RemoteRuntimeService] Attach Response (containerId=%v)", req.ContainerId) if resp.Url == "" { errorMessage := "URL is not set" - klog.Errorf("Exec failed: %s", errorMessage) + klog.Errorf("Attach failed: %s", errorMessage) return nil, errors.New(errorMessage) } return resp, nil @@ -404,6 +447,7 @@ func (r *RemoteRuntimeService) Attach(req *runtimeapi.AttachRequest) (*runtimeap // PortForward prepares a streaming endpoint to forward ports from a PodSandbox, and returns the address. func (r *RemoteRuntimeService) PortForward(req *runtimeapi.PortForwardRequest) (*runtimeapi.PortForwardResponse, error) { + klog.V(10).Infof("[RemoteRuntimeService] PortForward (podSandboxID=%v, port=%v, timeout=%v)", req.PodSandboxId, req.Port, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -412,10 +456,11 @@ func (r *RemoteRuntimeService) PortForward(req *runtimeapi.PortForwardRequest) ( klog.Errorf("PortForward %s from runtime service failed: %v", req.PodSandboxId, err) return nil, err } + klog.V(10).Infof("[RemoteRuntimeService] PortForward Response (podSandboxID=%v)", req.PodSandboxId) if resp.Url == "" { errorMessage := "URL is not set" - klog.Errorf("Exec failed: %s", errorMessage) + klog.Errorf("PortForward failed: %s", errorMessage) return nil, errors.New(errorMessage) } @@ -426,6 +471,7 @@ func (r *RemoteRuntimeService) PortForward(req *runtimeapi.PortForwardRequest) ( // update payload currently supported is the pod CIDR assigned to a node, // and the runtime service just proxies it down to the network plugin. func (r *RemoteRuntimeService) UpdateRuntimeConfig(runtimeConfig *runtimeapi.RuntimeConfig) error { + klog.V(10).Infof("[RemoteRuntimeService] UpdateRuntimeConfig (runtimeConfig=%v, timeout=%v)", runtimeConfig, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -439,12 +485,14 @@ func (r *RemoteRuntimeService) UpdateRuntimeConfig(runtimeConfig *runtimeapi.Run if err != nil { return err } + klog.V(10).Infof("[RemoteRuntimeService] UpdateRuntimeConfig Response (runtimeConfig=%v)", runtimeConfig) return nil } // Status returns the status of the runtime. func (r *RemoteRuntimeService) Status() (*runtimeapi.RuntimeStatus, error) { + klog.V(10).Infof("[RemoteRuntimeService] Status (timeout=%v)", r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -454,6 +502,8 @@ func (r *RemoteRuntimeService) Status() (*runtimeapi.RuntimeStatus, error) { return nil, err } + klog.V(10).Infof("[RemoteRuntimeService] Status Response (status=%v)", resp.Status) + if resp.Status == nil || len(resp.Status.Conditions) < 2 { errorMessage := "RuntimeReady or NetworkReady condition are not set" klog.Errorf("Status failed: %s", errorMessage) @@ -465,6 +515,7 @@ func (r *RemoteRuntimeService) Status() (*runtimeapi.RuntimeStatus, error) { // ContainerStats returns the stats of the container. func (r *RemoteRuntimeService) ContainerStats(containerID string) (*runtimeapi.ContainerStats, error) { + klog.V(10).Infof("[RemoteRuntimeService] ContainerStats (containerID=%v, timeout=%v)", containerID, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -473,16 +524,18 @@ func (r *RemoteRuntimeService) ContainerStats(containerID string) (*runtimeapi.C }) if err != nil { if r.logReduction.ShouldMessageBePrinted(err.Error(), containerID) { - klog.Errorf("ContainerStatus %q from runtime service failed: %v", containerID, err) + klog.Errorf("ContainerStats %q from runtime service failed: %v", containerID, err) } return nil, err } r.logReduction.ClearID(containerID) + klog.V(10).Infof("[RemoteRuntimeService] ContainerStats Response (containerID=%v, stats=%v)", containerID, resp.GetStats()) return resp.GetStats(), nil } func (r *RemoteRuntimeService) ListContainerStats(filter *runtimeapi.ContainerStatsFilter) ([]*runtimeapi.ContainerStats, error) { + klog.V(10).Infof("[RemoteRuntimeService] ListContainerStats (filter=%v)", filter) // Do not set timeout, because writable layer stats collection takes time. // TODO(random-liu): Should we assume runtime should cache the result, and set timeout here? ctx, cancel := getContextWithCancel() @@ -495,11 +548,13 @@ func (r *RemoteRuntimeService) ListContainerStats(filter *runtimeapi.ContainerSt klog.Errorf("ListContainerStats with filter %+v from runtime service failed: %v", filter, err) return nil, err } + klog.V(10).Infof("[RemoteRuntimeService] ListContainerStats Response (filter=%v, stats=%v)", filter, resp.GetStats()) return resp.GetStats(), nil } func (r *RemoteRuntimeService) ReopenContainerLog(containerID string) error { + klog.V(10).Infof("[RemoteRuntimeService] ReopenContainerLog (containerID=%v, timeout=%v)", containerID, r.timeout) ctx, cancel := getContextWithTimeout(r.timeout) defer cancel() @@ -508,5 +563,7 @@ func (r *RemoteRuntimeService) ReopenContainerLog(containerID string) error { klog.Errorf("ReopenContainerLog %q from runtime service failed: %v", containerID, err) return err } + + klog.V(10).Infof("[RemoteRuntimeService] ReopenContainerLog Response (containerID=%v)", containerID) return nil } diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_unix.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_unix.go new file mode 100644 index 000000000..b8097ff57 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_unix.go @@ -0,0 +1,145 @@ +// +build freebsd linux darwin + +/* +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 ( + "context" + "fmt" + "io/ioutil" + "net" + "net/url" + "os" + "path/filepath" + + "golang.org/x/sys/unix" + "k8s.io/klog/v2" +) + +const ( + // unixProtocol is the network protocol of unix socket. + unixProtocol = "unix" +) + +// CreateListener creates a listener on the specified endpoint. +func CreateListener(endpoint string) (net.Listener, error) { + protocol, addr, err := parseEndpointWithFallbackProtocol(endpoint, unixProtocol) + if err != nil { + return nil, err + } + if protocol != unixProtocol { + return nil, fmt.Errorf("only support unix socket endpoint") + } + + // Unlink to cleanup the previous socket file. + err = unix.Unlink(addr) + if err != nil && !os.IsNotExist(err) { + return nil, fmt.Errorf("failed to unlink socket file %q: %v", addr, err) + } + + if err := os.MkdirAll(filepath.Dir(addr), 0750); err != nil { + return nil, fmt.Errorf("error creating socket directory %q: %v", filepath.Dir(addr), err) + } + + // Create the socket on a tempfile and move it to the destination socket to handle improprer cleanup + file, err := ioutil.TempFile(filepath.Dir(addr), "") + if err != nil { + return nil, fmt.Errorf("failed to create temporary file: %v", err) + } + + if err := os.Remove(file.Name()); err != nil { + return nil, fmt.Errorf("failed to remove temporary file: %v", err) + } + + l, err := net.Listen(protocol, file.Name()) + if err != nil { + return nil, err + } + + if err = os.Rename(file.Name(), addr); err != nil { + return nil, fmt.Errorf("failed to move temporary file to addr %q: %v", addr, err) + } + + return l, nil +} + +// GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer. +func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error) { + protocol, addr, err := parseEndpointWithFallbackProtocol(endpoint, unixProtocol) + if err != nil { + return "", nil, err + } + if protocol != unixProtocol { + return "", nil, fmt.Errorf("only support unix socket endpoint") + } + + return addr, dial, nil +} + +func dial(ctx context.Context, addr string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, unixProtocol, addr) +} + +func parseEndpointWithFallbackProtocol(endpoint string, fallbackProtocol string) (protocol string, addr string, err error) { + if protocol, addr, err = parseEndpoint(endpoint); err != nil && protocol == "" { + fallbackEndpoint := fallbackProtocol + "://" + endpoint + protocol, addr, err = parseEndpoint(fallbackEndpoint) + if err == nil { + klog.Warningf("Using %q as endpoint is deprecated, please consider using full url format %q.", endpoint, fallbackEndpoint) + } + } + return +} + +func parseEndpoint(endpoint string) (string, string, error) { + u, err := url.Parse(endpoint) + if err != nil { + return "", "", err + } + + switch u.Scheme { + case "tcp": + return "tcp", u.Host, nil + + case "unix": + return "unix", u.Path, nil + + case "": + return "", "", fmt.Errorf("using %q as endpoint is deprecated, please consider using full url format", endpoint) + + default: + return u.Scheme, "", fmt.Errorf("protocol %q not supported", u.Scheme) + } +} + +// IsUnixDomainSocket returns whether a given file is a AF_UNIX socket file +func IsUnixDomainSocket(filePath string) (bool, error) { + fi, err := os.Stat(filePath) + if err != nil { + return false, fmt.Errorf("stat file %s failed: %v", filePath, err) + } + if fi.Mode()&os.ModeSocket == 0 { + return false, nil + } + return true, nil +} + +// NormalizePath is a no-op for Linux for now +func NormalizePath(path string) string { + return path +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_unsupported.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_unsupported.go new file mode 100644 index 000000000..dbf86a5a4 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_unsupported.go @@ -0,0 +1,55 @@ +// +build !freebsd,!linux,!windows,!darwin + +/* +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 ( + "context" + "fmt" + "net" + "time" +) + +// CreateListener creates a listener on the specified endpoint. +func CreateListener(endpoint string) (net.Listener, error) { + return nil, fmt.Errorf("CreateListener is unsupported in this build") +} + +// GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer. +func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error) { + return "", nil, fmt.Errorf("GetAddressAndDialer is unsupported in this build") +} + +// LockAndCheckSubPath empty implementation +func LockAndCheckSubPath(volumePath, subPath string) ([]uintptr, error) { + return []uintptr{}, nil +} + +// UnlockPath empty implementation +func UnlockPath(fileHandles []uintptr) { +} + +// LocalEndpoint empty implementation +func LocalEndpoint(path, file string) (string, error) { + return "", fmt.Errorf("LocalEndpoints are unsupported in this build") +} + +// GetBootTime empty implementation +func GetBootTime() (time.Time, error) { + return time.Time{}, fmt.Errorf("GetBootTime is unsupported in this build") +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_windows.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_windows.go new file mode 100644 index 000000000..bc62eaa36 --- /dev/null +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/util/util_windows.go @@ -0,0 +1,149 @@ +// +build windows + +/* +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 ( + "context" + "fmt" + "net" + "net/url" + "strings" + "syscall" + "time" + + "github.com/Microsoft/go-winio" +) + +const ( + tcpProtocol = "tcp" + npipeProtocol = "npipe" +) + +// CreateListener creates a listener on the specified endpoint. +func CreateListener(endpoint string) (net.Listener, error) { + protocol, addr, err := parseEndpoint(endpoint) + if err != nil { + return nil, err + } + + switch protocol { + case tcpProtocol: + return net.Listen(tcpProtocol, addr) + + case npipeProtocol: + return winio.ListenPipe(addr, nil) + + default: + return nil, fmt.Errorf("only support tcp and npipe endpoint") + } +} + +// GetAddressAndDialer returns the address parsed from the given endpoint and a context dialer. +func GetAddressAndDialer(endpoint string) (string, func(ctx context.Context, addr string) (net.Conn, error), error) { + protocol, addr, err := parseEndpoint(endpoint) + if err != nil { + return "", nil, err + } + + if protocol == tcpProtocol { + return addr, tcpDial, nil + } + + if protocol == npipeProtocol { + return addr, npipeDial, nil + } + + return "", nil, fmt.Errorf("only support tcp and npipe endpoint") +} + +func tcpDial(ctx context.Context, addr string) (net.Conn, error) { + return (&net.Dialer{}).DialContext(ctx, tcpProtocol, addr) +} + +func npipeDial(ctx context.Context, addr string) (net.Conn, error) { + return winio.DialPipeContext(ctx, addr) +} + +func parseEndpoint(endpoint string) (string, string, error) { + // url.Parse doesn't recognize \, so replace with / first. + endpoint = strings.Replace(endpoint, "\\", "/", -1) + u, err := url.Parse(endpoint) + if err != nil { + return "", "", err + } + + if u.Scheme == "tcp" { + return "tcp", u.Host, nil + } else if u.Scheme == "npipe" { + if strings.HasPrefix(u.Path, "//./pipe") { + return "npipe", u.Path, nil + } + + // fallback host if not provided. + host := u.Host + if host == "" { + host = "." + } + return "npipe", fmt.Sprintf("//%s%s", host, u.Path), nil + } else if u.Scheme == "" { + return "", "", fmt.Errorf("Using %q as endpoint is deprecated, please consider using full url format", endpoint) + } else { + return u.Scheme, "", fmt.Errorf("protocol %q not supported", u.Scheme) + } +} + +var tickCount = syscall.NewLazyDLL("kernel32.dll").NewProc("GetTickCount64") + +// GetBootTime returns the time at which the machine was started, truncated to the nearest second +func GetBootTime() (time.Time, error) { + currentTime := time.Now() + output, _, err := tickCount.Call() + if errno, ok := err.(syscall.Errno); !ok || errno != 0 { + return time.Time{}, err + } + return currentTime.Add(-time.Duration(output) * time.Millisecond).Truncate(time.Second), nil +} + +// IsUnixDomainSocket returns whether a given file is a AF_UNIX socket file +func IsUnixDomainSocket(filePath string) (bool, error) { + // Due to the absence of golang support for os.ModeSocket in Windows (https://github.com/golang/go/issues/33357) + // we need to dial the file and check if we receive an error to determine if a file is Unix Domain Socket file. + + // Note that querrying for the Reparse Points (https://docs.microsoft.com/en-us/windows/win32/fileio/reparse-points) + // for the file (using FSCTL_GET_REPARSE_POINT) and checking for reparse tag: reparseTagSocket + // does NOT work in 1809 if the socket file is created within a bind mounted directory by a container + // and the FSCTL is issued in the host by the kubelet. + + c, err := net.Dial("unix", filePath) + if err == nil { + c.Close() + return true, nil + } + return false, nil +} + +// NormalizePath converts FS paths returned by certain go frameworks (like fsnotify) +// to native Windows paths that can be passed to Windows specific code +func NormalizePath(path string) string { + path = strings.ReplaceAll(path, "/", "\\") + if strings.HasPrefix(path, "\\") { + path = "c:" + path + } + return path +} diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/remote/utils.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/utils.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/remote/utils.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/remote/utils.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/errors.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/errors.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/errors.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/errors.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/constants.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/constants.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/constants.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/constants.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/httpstream.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/httpstream.go similarity index 99% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/httpstream.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/httpstream.go index 4b5e66d66..419113054 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/httpstream.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/httpstream.go @@ -24,13 +24,13 @@ import ( "sync" "time" + api "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/httpstream" "k8s.io/apimachinery/pkg/util/httpstream/spdy" utilruntime "k8s.io/apimachinery/pkg/util/runtime" - api "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/klog" + "k8s.io/klog/v2" ) func handleHTTPStreams(req *http.Request, w http.ResponseWriter, portForwarder PortForwarder, podName string, uid types.UID, supportedPortForwardProtocols []string, idleTimeout, streamCreationTimeout time.Duration) error { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/portforward.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/portforward.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/portforward.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/portforward.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/websocket.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/websocket.go similarity index 99% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/websocket.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/websocket.go index 69502a699..8b5428cb6 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/portforward/websocket.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward/websocket.go @@ -26,13 +26,13 @@ import ( "sync" "time" - "k8s.io/klog" + "k8s.io/klog/v2" + api "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apiserver/pkg/server/httplog" "k8s.io/apiserver/pkg/util/wsstream" - api "k8s.io/kubernetes/pkg/apis/core" ) const ( diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/attach.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/attach.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/attach.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/attach.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/doc.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/doc.go similarity index 88% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/doc.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/doc.go index a78404cb8..bf0d010b9 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/doc.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/doc.go @@ -15,4 +15,4 @@ limitations under the License. */ // Package remotecommand contains functions related to executing commands in and attaching to pods. -package remotecommand // import "k8s.io/kubernetes/pkg/kubelet/server/remotecommand" +package remotecommand diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/exec.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/exec.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/exec.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/exec.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/httpstream.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/httpstream.go similarity index 99% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/httpstream.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/httpstream.go index 833762d83..9be6c4345 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/httpstream.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/httpstream.go @@ -24,6 +24,7 @@ import ( "net/http" "time" + api "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/httpstream" @@ -32,9 +33,8 @@ import ( "k8s.io/apimachinery/pkg/util/runtime" "k8s.io/apiserver/pkg/util/wsstream" "k8s.io/client-go/tools/remotecommand" - api "k8s.io/kubernetes/pkg/apis/core" - "k8s.io/klog" + "k8s.io/klog/v2" ) // Options contains details about which streams are required for @@ -411,6 +411,7 @@ func (*v1ProtocolHandler) supportsTerminalResizing() bool { return false } func handleResizeEvents(stream io.Reader, channel chan<- remotecommand.TerminalSize) { defer runtime.HandleCrash() + defer close(channel) decoder := json.NewDecoder(stream) for { diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/websocket.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/websocket.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/remotecommand/websocket.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand/websocket.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/request_cache.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/request_cache.go similarity index 100% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/request_cache.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/request_cache.go diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/server.go similarity index 98% rename from vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go rename to vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/server.go index 8551f7ee9..d5cacbbf7 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/server/streaming/server.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/cri/streaming/server.go @@ -35,8 +35,8 @@ import ( remotecommandconsts "k8s.io/apimachinery/pkg/util/remotecommand" "k8s.io/client-go/tools/remotecommand" runtimeapi "k8s.io/cri-api/pkg/apis/runtime/v1alpha2" - "k8s.io/kubernetes/pkg/kubelet/server/portforward" - remotecommandserver "k8s.io/kubernetes/pkg/kubelet/server/remotecommand" + "k8s.io/kubernetes/pkg/kubelet/cri/streaming/portforward" + remotecommandserver "k8s.io/kubernetes/pkg/kubelet/cri/streaming/remotecommand" ) // Server is the library interface to serve the stream requests. diff --git a/vendor/k8s.io/kubernetes/pkg/kubelet/util/util_unix.go b/vendor/k8s.io/kubernetes/pkg/kubelet/util/util_unix.go index bcd8090b6..0350e4387 100644 --- a/vendor/k8s.io/kubernetes/pkg/kubelet/util/util_unix.go +++ b/vendor/k8s.io/kubernetes/pkg/kubelet/util/util_unix.go @@ -28,7 +28,7 @@ import ( "path/filepath" "golang.org/x/sys/unix" - "k8s.io/klog" + "k8s.io/klog/v2" ) const ( diff --git a/vendor/k8s.io/kubernetes/pkg/util/bandwidth/linux.go b/vendor/k8s.io/kubernetes/pkg/util/bandwidth/linux.go index d841f305a..c105fdea5 100644 --- a/vendor/k8s.io/kubernetes/pkg/util/bandwidth/linux.go +++ b/vendor/k8s.io/kubernetes/pkg/util/bandwidth/linux.go @@ -31,7 +31,7 @@ import ( "k8s.io/apimachinery/pkg/util/sets" "k8s.io/utils/exec" - "k8s.io/klog" + "k8s.io/klog/v2" ) var ( diff --git a/vendor/k8s.io/utils/README.md b/vendor/k8s.io/utils/README.md index 442dfb9a4..98e49223d 100644 --- a/vendor/k8s.io/utils/README.md +++ b/vendor/k8s.io/utils/README.md @@ -2,57 +2,37 @@ [![Build Status]](https://travis-ci.org/kubernetes/utils) [![GoDoc](https://godoc.org/k8s.io/utils?status.svg)](https://godoc.org/k8s.io/utils) -A set of Go libraries that provide low-level, -kubernetes-independent packages supplementing the [Go -standard libs]. +A set of Go libraries that provide low-level, kubernetes-independent packages +supplementing the [Go standard libs]. ## Purpose -As Kubernetes grows and spins functionality out of its -[core] and into cooperating repositories like -[apiserver], [kubectl], [kubeadm], etc., the need -arises for leaf repositories to house shared code and -avoid cycles in repository relationships. - -This repository is intended to hold shared utilities -with no Kubernetes dependence that may be of interest -to any Go project. See these [instructions for moving] -an existing package to this repository. +As Kubernetes grows and spins functionality out of its [core] and into +cooperating repositories like [apiserver], [kubectl], [kubeadm], etc., the need +arises for leaf repositories to house shared code and avoid cycles in repository +relationships. +This repository is intended to hold shared utilities with _no Kubernetes +dependencies_ that may be of interest to any Go project. See these [instructions +for moving] an existing package to this repository. ## Criteria for adding code here - Used by multiple Kubernetes repositories. -- Full unit test coverage. +- Complex enough to be worth vendoring, rather than copying (e.g. not 5 LOC). + +- Can be fully exercised by unit tests (e.g. no dependencies on kernels). + +- Has full unit test coverage. + +- Stable, or backward compatible, API, with complete godocs. - Go tools compliant (`go get`, `go test`, etc.). -- Complex enough to be worth vendoring, rather than copying. +- Very few (ideally zero) external dependencies. -- Stable, or backward compatible, API. - -- _No dependence on any Kubernetes repository_. - -## Libraries - -- [Exec](/exec) provides an interface for `os/exec`. It makes it easier - to mock and replace in tests, especially with - the [FakeExec](exec/testing/fake_exec.go) struct. - -- [Temp](/temp) provides an interface to create temporary directories. It also - provides a [FakeDir](temp/temptest) implementation to replace in tests. - -- [Clock](/clock) provides an interface for time-based operations. It allows - mocking time for testing. - -- [Pointer](/pointer) provides some functions for pointer-based operations. - -- [Io](/io) provides interfaces for working with file IO. Currently it provides - functionality for consistently reading a file. - -- [NSEnter](/nsenter) provides interfaces for executing and interacting with - processes running within a namespace. +- _No dependencies on any other Kubernetes repository_. [Build Status]: https://travis-ci.org/kubernetes/utils.svg?branch=master [Go standard libs]: https://golang.org/pkg/#stdlib diff --git a/vendor/k8s.io/utils/exec/README.md b/vendor/k8s.io/utils/exec/README.md new file mode 100644 index 000000000..7944e8dd3 --- /dev/null +++ b/vendor/k8s.io/utils/exec/README.md @@ -0,0 +1,5 @@ +# Exec + +This package provides an interface for `os/exec`. It makes it easier to mock +and replace in tests, especially with the [FakeExec](testing/fake_exec.go) +struct. diff --git a/vendor/k8s.io/utils/go.mod b/vendor/k8s.io/utils/go.mod index 73a60da8e..712369600 100644 --- a/vendor/k8s.io/utils/go.mod +++ b/vendor/k8s.io/utils/go.mod @@ -6,5 +6,5 @@ require ( github.com/davecgh/go-spew v1.1.1 github.com/spf13/afero v1.2.2 github.com/stretchr/testify v1.3.0 - k8s.io/klog v0.3.0 + k8s.io/klog/v2 v2.0.0 )