pax_global_header00006660000000000000000000000064150066763030014520gustar00rootroot0000000000000052 comment=9f069b3ee58b02d6f6736c5ebd6587075c1a1b22 cel-spec-0.24.0/000077500000000000000000000000001500667630300132765ustar00rootroot00000000000000cel-spec-0.24.0/.bazelversion000066400000000000000000000000671500667630300160050ustar00rootroot000000000000007.3.2 # Keep this pinned version in parity with cel-go cel-spec-0.24.0/.gitattributes000066400000000000000000000000651500667630300161720ustar00rootroot00000000000000*.pb.go linguist-generated=true *.pb.go -diff -merge cel-spec-0.24.0/.gitignore000066400000000000000000000000321500667630300152610ustar00rootroot00000000000000bazel-* MODULE.bazel.lock cel-spec-0.24.0/BUILD.bazel000066400000000000000000000020011500667630300151450ustar00rootroot00000000000000load("@io_bazel_rules_go//go:def.bzl", "go_library") package(default_visibility = ["//visibility:public"]) licenses(["notice"]) # Apache 2.0 go_library( name = "expr", srcs = [ "checked.pb.go", "eval.pb.go", "explain.pb.go", "syntax.pb.go", "value.pb.go", ], importpath = "cel.dev/expr", visibility = ["//visibility:public"], deps = [ "@org_golang_google_genproto_googleapis_rpc//status:go_default_library", "@org_golang_google_protobuf//reflect/protoreflect", "@org_golang_google_protobuf//runtime/protoimpl", "@org_golang_google_protobuf//types/known/anypb", "@org_golang_google_protobuf//types/known/durationpb", "@org_golang_google_protobuf//types/known/emptypb", "@org_golang_google_protobuf//types/known/structpb", "@org_golang_google_protobuf//types/known/timestamppb", ], ) alias( name = "go_default_library", actual = ":expr", visibility = ["//visibility:public"], ) cel-spec-0.24.0/CODE_OF_CONDUCT.md000066400000000000000000000022601500667630300160750ustar00rootroot00000000000000# Contributor Code of Conduct ## Version 0.1.1 (adapted from 0.3b-angular) As contributors and maintainers of the Common Expression Language (CEL) project, we pledge to respect everyone who contributes by posting issues, updating documentation, submitting pull requests, providing feedback in comments, and any other activities. Communication through any of CEL's channels (GitHub, Gitter, IRC, mailing lists, Google+, Twitter, etc.) must be constructive and never resort to personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct. We promise to extend courtesy and respect to everyone involved in this project regardless of gender, gender identity, sexual orientation, disability, age, race, ethnicity, religion, or level of experience. We expect anyone contributing to the project to do the same. If any member of the community violates this code of conduct, the maintainers of the CEL project may take action, removing issues, comments, and PRs or blocking accounts as deemed appropriate. If you are subject to or witness unacceptable behavior, or have any other concerns, please email us at [cel-conduct@google.com](mailto:cel-conduct@google.com). cel-spec-0.24.0/CONTRIBUTING.md000066400000000000000000000026061500667630300155330ustar00rootroot00000000000000# How to Contribute We'd love to accept your patches and contributions to this project. There are a few guidelines you need to follow. ## Contributor License Agreement Contributions to this project must be accompanied by a Contributor License Agreement. You (or your employer) retain the copyright to your contribution, this simply gives us permission to use and redistribute your contributions as part of the project. Head over to to see your current agreements on file or to sign a new one. You generally only need to submit a CLA once, so if you've already submitted one (even if it was for a different project), you probably don't need to do it again. ## Code reviews All submissions, including submissions by project members, require review. We use GitHub pull requests for this purpose. Consult [GitHub Help](https://help.github.com/articles/about-pull-requests/) for more information on using pull requests. ## What to expect from maintainers Expect maintainers to respond to new issues or pull requests within a week. For outstanding and ongoing issues and particularly for long-running pull requests, expect the maintainers to review within a week of a contributor asking for a new review. There is no commitment to resolution -- merging or closing a pull request, or fixing or closing an issue -- because some issues will require more discussion than others. cel-spec-0.24.0/GOVERNANCE.md000066400000000000000000000040221500667630300152450ustar00rootroot00000000000000# Project Governance This document defines the governance process for the CEL language. CEL is Google-developed, but openly governed. Major contributors to the CEL specification and its corresponding implementations constitute the CEL Language Council. New members may be added by a unanimous vote of the Council. The MAINTAINERS.md file lists the members of the CEL Language Council, and unofficially indicates the "areas of expertise" of each member with respect to the publicly available CEL repos. ## Code Changes Code changes must follow the standard pull request (PR) model documented in the CONTRIBUTING.md for each CEL repo. All fixes and features must be reviewed by a maintainer. The maintainer reserves the right to request that any feature request (FR) or PR be reviewed by the language council. ## Syntax and Semantic Changes Syntactic and semantic changes must be reviewed by the CEL Language Council. Maintainers may also request language council review at their discretion. The review process is as follows: - Create a Feature Request in the CEL-Spec repo. The feature description will serve as an abstract for the detailed design document. - Co-develop a design document with the Language Council. - Once the proposer gives the design document approval, the document will be linked to the FR in the CEL-Spec repo and opened for comments to members of the cel-lang-discuss@googlegroups.com. - The Language Council will review the design doc at the next council meeting (once every three weeks) and the council decision included in the document. If the proposal is approved, the spec will be updated by a maintainer (if applicable) and a rationale will be included in the CEL-Spec wiki to ensure future developers may follow CEL's growth and direction over time. Approved proposals may be implemented by the proposer or by the maintainers as the parties see fit. At the discretion of the maintainer, changes from the approved design are permitted during implementation if they improve the user experience and clarity of the feature. cel-spec-0.24.0/LICENSE000066400000000000000000000261361500667630300143130ustar00rootroot00000000000000 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. cel-spec-0.24.0/MAINTAINERS.md000066400000000000000000000006531500667630300153760ustar00rootroot00000000000000# CEL Language Council | Name | Company | Area of Expertise | |-----------------|--------------|-------------------| | Alfred Fuller | Facebook | cel-cpp, cel-spec | | Jim Larson | Google | cel-go, cel-spec | | Matthais Blume | Google | cel-spec | | Tristan Swadell | Google | cel-go, cel-spec | ## Emeritus * Sanjay Ghemawat (Google) * Wolfgang Grieskamp (Facebook) cel-spec-0.24.0/MODULE.bazel000066400000000000000000000026641500667630300153120ustar00rootroot00000000000000module( name = "cel-spec", ) bazel_dep( name = "bazel_skylib", version = "1.7.1", ) bazel_dep( name = "gazelle", version = "0.39.1", repo_name = "bazel_gazelle", ) bazel_dep( name = "googleapis", version = "0.0.0-20241220-5e258e33.bcr.1", repo_name = "com_google_googleapis", ) bazel_dep( name = "googleapis-cc", version = "1.0.0", ) bazel_dep( name = "googleapis-java", version = "1.0.0", ) bazel_dep( name = "googleapis-go", version = "1.0.0", ) bazel_dep( name = "protobuf", version = "27.0", repo_name = "com_google_protobuf", ) bazel_dep( name = "rules_cc", version = "0.0.17", ) bazel_dep( name = "rules_go", version = "0.53.0", repo_name = "io_bazel_rules_go", ) bazel_dep( name = "rules_java", version = "7.6.5", ) bazel_dep( name = "rules_proto", version = "7.0.2", ) bazel_dep( name = "rules_python", version = "0.35.0", ) ### PYTHON ### python = use_extension("@rules_python//python/extensions:python.bzl", "python") python.toolchain( ignore_root_user_error = True, python_version = "3.11", ) go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download(version = "1.22.0") go_deps = use_extension("@bazel_gazelle//:extensions.bzl", "go_deps") go_deps.from_file(go_mod = "//:go.mod") use_repo( go_deps, "org_golang_google_genproto_googleapis_rpc", "org_golang_google_protobuf", ) cel-spec-0.24.0/README.md000066400000000000000000000057011500667630300145600ustar00rootroot00000000000000# Common Expression Language The Common Expression Language (CEL) implements common semantics for expression evaluation, enabling different applications to more easily interoperate. Key Applications * Security policy: organizations have complex infrastructure and need common tooling to reason about the system as a whole * Protocols: expressions are a useful data type and require interoperability across programming languages and platforms. Guiding philosophy: 1. Keep it small & fast. * CEL evaluates in linear time, is mutation free, and not Turing-complete. This limitation is a feature of the language design, which allows the implementation to evaluate orders of magnitude faster than equivalently sandboxed JavaScript. 2. Make it extensible. * CEL is designed to be embedded in applications, and allows for extensibility via its context which allows for functions and data to be provided by the software that embeds it. 3. Developer-friendly. * The language is approachable to developers. The initial spec was based on the experience of developing Firebase Rules and usability testing many prior iterations. * The library itself and accompanying toolings should be easy to adopt by teams that seek to integrate CEL into their platforms. The required components of a system that supports CEL are: * The textual representation of an expression as written by a developer. It is of similar syntax to expressions in C/C++/Java/JavaScript * A representation of the program's abstract syntax tree (AST). * A compiler library that converts the textual representation to the binary representation. This can be done ahead of time (in the control plane) or just before evaluation (in the data plane). * A context containing one or more typed variables, often protobuf messages. Most use-cases will use `attribute_context.proto` * An evaluator library that takes the binary format in the context and produces a result, usually a Boolean. For use cases which require persistence or cross-process communcation, it is highly recommended to serialize the type-checked expression as a protocol buffer. The CEL team will maintains canonical protocol buffers for ASTs and will keep these versions identical and wire-compatible in perpetuity: * [CEL canonical](https://github.com/google/cel-spec/tree/master/proto/cel/expr) * [CEL v1alpha1](https://github.com/googleapis/googleapis/tree/master/google/api/expr/v1alpha1) Example of boolean conditions and object construction: ``` c // Condition account.balance >= transaction.withdrawal || (account.overdraftProtection && account.overdraftLimit >= transaction.withdrawal - account.balance) // Object construction common.GeoPoint{ latitude: 10.0, longitude: -5.5 } ``` For more detail, see: * [Introduction](doc/intro.md) * [Language Definition](doc/langdef.md) Released under the [Apache License](LICENSE). cel-spec-0.24.0/WORKSPACE000066400000000000000000000120271500667630300145610ustar00rootroot00000000000000load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") http_archive( name = "io_bazel_rules_go", sha256 = "099a9fb96a376ccbbb7d291ed4ecbdfd42f6bc822ab77ae6f1b5cb9e914e94fa", urls = [ "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.35.0/rules_go-v0.35.0.zip", "https://github.com/bazelbuild/rules_go/releases/download/v0.35.0/rules_go-v0.35.0.zip", ], ) http_archive( name = "bazel_gazelle", sha256 = "ecba0f04f96b4960a5b250c8e8eeec42281035970aa8852dda73098274d14a1d", urls = [ "https://mirror.bazel.build/github.com/bazelbuild/bazel-gazelle/releases/download/v0.29.0/bazel-gazelle-v0.29.0.tar.gz", "https://github.com/bazelbuild/bazel-gazelle/releases/download/v0.29.0/bazel-gazelle-v0.29.0.tar.gz", ], ) http_archive( name = "rules_proto", sha256 = "e017528fd1c91c5a33f15493e3a398181a9e821a804eb7ff5acdd1d2d6c2b18d", strip_prefix = "rules_proto-4.0.0-3.20.0", urls = [ "https://github.com/bazelbuild/rules_proto/archive/refs/tags/4.0.0-3.20.0.tar.gz", ], ) # googleapis as of 09/16/2024 http_archive( name = "com_google_googleapis", strip_prefix = "googleapis-4082d5e51e8481f6ccc384cacd896f4e78f19dee", sha256 = "57319889d47578b3c89bf1b3f34888d796a8913d63b32d750a4cd12ed303c4e8", urls = [ "https://github.com/googleapis/googleapis/archive/4082d5e51e8481f6ccc384cacd896f4e78f19dee.tar.gz", ], ) # protobuf http_archive( name = "com_google_protobuf", sha256 = "8242327e5df8c80ba49e4165250b8f79a76bd11765facefaaecfca7747dc8da2", strip_prefix = "protobuf-3.21.5", urls = ["https://github.com/protocolbuffers/protobuf/archive/v3.21.5.zip"], ) # googletest http_archive( name = "com_google_googletest", urls = ["https://github.com/google/googletest/archive/master.zip"], strip_prefix = "googletest-master", ) # gflags http_archive( name = "com_github_gflags_gflags", sha256 = "6e16c8bc91b1310a44f3965e616383dbda48f83e8c1eaa2370a215057b00cabe", strip_prefix = "gflags-77592648e3f3be87d6c7123eb81cbad75f9aef5a", urls = [ "https://mirror.bazel.build/github.com/gflags/gflags/archive/77592648e3f3be87d6c7123eb81cbad75f9aef5a.tar.gz", "https://github.com/gflags/gflags/archive/77592648e3f3be87d6c7123eb81cbad75f9aef5a.tar.gz", ], ) # glog http_archive( name = "com_google_glog", sha256 = "1ee310e5d0a19b9d584a855000434bb724aa744745d5b8ab1855c85bff8a8e21", strip_prefix = "glog-028d37889a1e80e8a07da1b8945ac706259e5fd8", urls = [ "https://mirror.bazel.build/github.com/google/glog/archive/028d37889a1e80e8a07da1b8945ac706259e5fd8.tar.gz", "https://github.com/google/glog/archive/028d37889a1e80e8a07da1b8945ac706259e5fd8.tar.gz", ], ) # absl http_archive( name = "com_google_absl", strip_prefix = "abseil-cpp-master", urls = ["https://github.com/abseil/abseil-cpp/archive/master.zip"], ) load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains") load("@bazel_gazelle//:deps.bzl", "gazelle_dependencies", "go_repository") load("@com_google_googleapis//:repository_rules.bzl", "switched_rules_by_language") load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains") load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") switched_rules_by_language( name = "com_google_googleapis_imports", cc = True, ) # Do *not* call *_dependencies(), etc, yet. See comment at the end. # Generated Google APIs protos for Golang # Generated Google APIs protos for Golang 08/26/2024 go_repository( name = "org_golang_google_genproto_googleapis_api", build_file_proto_mode = "disable_global", importpath = "google.golang.org/genproto/googleapis/api", sum = "h1:YcyjlL1PRr2Q17/I0dPk2JmYS5CDXfcdb2Z3YRioEbw=", version = "v0.0.0-20240826202546-f6391c0de4c7", ) # Generated Google APIs protos for Golang 08/26/2024 go_repository( name = "org_golang_google_genproto_googleapis_rpc", build_file_proto_mode = "disable_global", importpath = "google.golang.org/genproto/googleapis/rpc", sum = "h1:2035KHhUv+EpyB+hWgJnaWKJOdX1E95w2S8Rr4uWKTs=", version = "v0.0.0-20240826202546-f6391c0de4c7", ) # gRPC deps go_repository( name = "org_golang_google_grpc", build_file_proto_mode = "disable_global", importpath = "google.golang.org/grpc", tag = "v1.49.0", ) go_repository( name = "org_golang_x_net", importpath = "golang.org/x/net", sum = "h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=", version = "v0.0.0-20190311183353-d8887717615a", ) go_repository( name = "org_golang_x_text", importpath = "golang.org/x/text", sum = "h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=", version = "v0.3.2", ) # Run the dependencies at the end. These will silently try to import some # of the above repositories but at different versions, so ours must come first. go_rules_dependencies() go_register_toolchains(version = "1.19.1") gazelle_dependencies() rules_proto_dependencies() rules_proto_toolchains() protobuf_deps() cel-spec-0.24.0/WORKSPACE.bzlmod000066400000000000000000000000001500667630300160330ustar00rootroot00000000000000cel-spec-0.24.0/checked.pb.go000077500000000000000000001426201500667630300156230ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 // protoc v3.21.5 // source: cel/expr/checked.proto package expr import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" emptypb "google.golang.org/protobuf/types/known/emptypb" structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type Type_PrimitiveType int32 const ( Type_PRIMITIVE_TYPE_UNSPECIFIED Type_PrimitiveType = 0 Type_BOOL Type_PrimitiveType = 1 Type_INT64 Type_PrimitiveType = 2 Type_UINT64 Type_PrimitiveType = 3 Type_DOUBLE Type_PrimitiveType = 4 Type_STRING Type_PrimitiveType = 5 Type_BYTES Type_PrimitiveType = 6 ) // Enum value maps for Type_PrimitiveType. var ( Type_PrimitiveType_name = map[int32]string{ 0: "PRIMITIVE_TYPE_UNSPECIFIED", 1: "BOOL", 2: "INT64", 3: "UINT64", 4: "DOUBLE", 5: "STRING", 6: "BYTES", } Type_PrimitiveType_value = map[string]int32{ "PRIMITIVE_TYPE_UNSPECIFIED": 0, "BOOL": 1, "INT64": 2, "UINT64": 3, "DOUBLE": 4, "STRING": 5, "BYTES": 6, } ) func (x Type_PrimitiveType) Enum() *Type_PrimitiveType { p := new(Type_PrimitiveType) *p = x return p } func (x Type_PrimitiveType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Type_PrimitiveType) Descriptor() protoreflect.EnumDescriptor { return file_cel_expr_checked_proto_enumTypes[0].Descriptor() } func (Type_PrimitiveType) Type() protoreflect.EnumType { return &file_cel_expr_checked_proto_enumTypes[0] } func (x Type_PrimitiveType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Type_PrimitiveType.Descriptor instead. func (Type_PrimitiveType) EnumDescriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{1, 0} } type Type_WellKnownType int32 const ( Type_WELL_KNOWN_TYPE_UNSPECIFIED Type_WellKnownType = 0 Type_ANY Type_WellKnownType = 1 Type_TIMESTAMP Type_WellKnownType = 2 Type_DURATION Type_WellKnownType = 3 ) // Enum value maps for Type_WellKnownType. var ( Type_WellKnownType_name = map[int32]string{ 0: "WELL_KNOWN_TYPE_UNSPECIFIED", 1: "ANY", 2: "TIMESTAMP", 3: "DURATION", } Type_WellKnownType_value = map[string]int32{ "WELL_KNOWN_TYPE_UNSPECIFIED": 0, "ANY": 1, "TIMESTAMP": 2, "DURATION": 3, } ) func (x Type_WellKnownType) Enum() *Type_WellKnownType { p := new(Type_WellKnownType) *p = x return p } func (x Type_WellKnownType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (Type_WellKnownType) Descriptor() protoreflect.EnumDescriptor { return file_cel_expr_checked_proto_enumTypes[1].Descriptor() } func (Type_WellKnownType) Type() protoreflect.EnumType { return &file_cel_expr_checked_proto_enumTypes[1] } func (x Type_WellKnownType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use Type_WellKnownType.Descriptor instead. func (Type_WellKnownType) EnumDescriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{1, 1} } type CheckedExpr struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ReferenceMap map[int64]*Reference `protobuf:"bytes,2,rep,name=reference_map,json=referenceMap,proto3" json:"reference_map,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` TypeMap map[int64]*Type `protobuf:"bytes,3,rep,name=type_map,json=typeMap,proto3" json:"type_map,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` SourceInfo *SourceInfo `protobuf:"bytes,5,opt,name=source_info,json=sourceInfo,proto3" json:"source_info,omitempty"` ExprVersion string `protobuf:"bytes,6,opt,name=expr_version,json=exprVersion,proto3" json:"expr_version,omitempty"` Expr *Expr `protobuf:"bytes,4,opt,name=expr,proto3" json:"expr,omitempty"` } func (x *CheckedExpr) Reset() { *x = CheckedExpr{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *CheckedExpr) String() string { return protoimpl.X.MessageStringOf(x) } func (*CheckedExpr) ProtoMessage() {} func (x *CheckedExpr) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CheckedExpr.ProtoReflect.Descriptor instead. func (*CheckedExpr) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{0} } func (x *CheckedExpr) GetReferenceMap() map[int64]*Reference { if x != nil { return x.ReferenceMap } return nil } func (x *CheckedExpr) GetTypeMap() map[int64]*Type { if x != nil { return x.TypeMap } return nil } func (x *CheckedExpr) GetSourceInfo() *SourceInfo { if x != nil { return x.SourceInfo } return nil } func (x *CheckedExpr) GetExprVersion() string { if x != nil { return x.ExprVersion } return "" } func (x *CheckedExpr) GetExpr() *Expr { if x != nil { return x.Expr } return nil } type Type struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to TypeKind: // // *Type_Dyn // *Type_Null // *Type_Primitive // *Type_Wrapper // *Type_WellKnown // *Type_ListType_ // *Type_MapType_ // *Type_Function // *Type_MessageType // *Type_TypeParam // *Type_Type // *Type_Error // *Type_AbstractType_ TypeKind isType_TypeKind `protobuf_oneof:"type_kind"` } func (x *Type) Reset() { *x = Type{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Type) String() string { return protoimpl.X.MessageStringOf(x) } func (*Type) ProtoMessage() {} func (x *Type) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Type.ProtoReflect.Descriptor instead. func (*Type) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{1} } func (m *Type) GetTypeKind() isType_TypeKind { if m != nil { return m.TypeKind } return nil } func (x *Type) GetDyn() *emptypb.Empty { if x, ok := x.GetTypeKind().(*Type_Dyn); ok { return x.Dyn } return nil } func (x *Type) GetNull() structpb.NullValue { if x, ok := x.GetTypeKind().(*Type_Null); ok { return x.Null } return structpb.NullValue(0) } func (x *Type) GetPrimitive() Type_PrimitiveType { if x, ok := x.GetTypeKind().(*Type_Primitive); ok { return x.Primitive } return Type_PRIMITIVE_TYPE_UNSPECIFIED } func (x *Type) GetWrapper() Type_PrimitiveType { if x, ok := x.GetTypeKind().(*Type_Wrapper); ok { return x.Wrapper } return Type_PRIMITIVE_TYPE_UNSPECIFIED } func (x *Type) GetWellKnown() Type_WellKnownType { if x, ok := x.GetTypeKind().(*Type_WellKnown); ok { return x.WellKnown } return Type_WELL_KNOWN_TYPE_UNSPECIFIED } func (x *Type) GetListType() *Type_ListType { if x, ok := x.GetTypeKind().(*Type_ListType_); ok { return x.ListType } return nil } func (x *Type) GetMapType() *Type_MapType { if x, ok := x.GetTypeKind().(*Type_MapType_); ok { return x.MapType } return nil } func (x *Type) GetFunction() *Type_FunctionType { if x, ok := x.GetTypeKind().(*Type_Function); ok { return x.Function } return nil } func (x *Type) GetMessageType() string { if x, ok := x.GetTypeKind().(*Type_MessageType); ok { return x.MessageType } return "" } func (x *Type) GetTypeParam() string { if x, ok := x.GetTypeKind().(*Type_TypeParam); ok { return x.TypeParam } return "" } func (x *Type) GetType() *Type { if x, ok := x.GetTypeKind().(*Type_Type); ok { return x.Type } return nil } func (x *Type) GetError() *emptypb.Empty { if x, ok := x.GetTypeKind().(*Type_Error); ok { return x.Error } return nil } func (x *Type) GetAbstractType() *Type_AbstractType { if x, ok := x.GetTypeKind().(*Type_AbstractType_); ok { return x.AbstractType } return nil } type isType_TypeKind interface { isType_TypeKind() } type Type_Dyn struct { Dyn *emptypb.Empty `protobuf:"bytes,1,opt,name=dyn,proto3,oneof"` } type Type_Null struct { Null structpb.NullValue `protobuf:"varint,2,opt,name=null,proto3,enum=google.protobuf.NullValue,oneof"` } type Type_Primitive struct { Primitive Type_PrimitiveType `protobuf:"varint,3,opt,name=primitive,proto3,enum=cel.expr.Type_PrimitiveType,oneof"` } type Type_Wrapper struct { Wrapper Type_PrimitiveType `protobuf:"varint,4,opt,name=wrapper,proto3,enum=cel.expr.Type_PrimitiveType,oneof"` } type Type_WellKnown struct { WellKnown Type_WellKnownType `protobuf:"varint,5,opt,name=well_known,json=wellKnown,proto3,enum=cel.expr.Type_WellKnownType,oneof"` } type Type_ListType_ struct { ListType *Type_ListType `protobuf:"bytes,6,opt,name=list_type,json=listType,proto3,oneof"` } type Type_MapType_ struct { MapType *Type_MapType `protobuf:"bytes,7,opt,name=map_type,json=mapType,proto3,oneof"` } type Type_Function struct { Function *Type_FunctionType `protobuf:"bytes,8,opt,name=function,proto3,oneof"` } type Type_MessageType struct { MessageType string `protobuf:"bytes,9,opt,name=message_type,json=messageType,proto3,oneof"` } type Type_TypeParam struct { TypeParam string `protobuf:"bytes,10,opt,name=type_param,json=typeParam,proto3,oneof"` } type Type_Type struct { Type *Type `protobuf:"bytes,11,opt,name=type,proto3,oneof"` } type Type_Error struct { Error *emptypb.Empty `protobuf:"bytes,12,opt,name=error,proto3,oneof"` } type Type_AbstractType_ struct { AbstractType *Type_AbstractType `protobuf:"bytes,14,opt,name=abstract_type,json=abstractType,proto3,oneof"` } func (*Type_Dyn) isType_TypeKind() {} func (*Type_Null) isType_TypeKind() {} func (*Type_Primitive) isType_TypeKind() {} func (*Type_Wrapper) isType_TypeKind() {} func (*Type_WellKnown) isType_TypeKind() {} func (*Type_ListType_) isType_TypeKind() {} func (*Type_MapType_) isType_TypeKind() {} func (*Type_Function) isType_TypeKind() {} func (*Type_MessageType) isType_TypeKind() {} func (*Type_TypeParam) isType_TypeKind() {} func (*Type_Type) isType_TypeKind() {} func (*Type_Error) isType_TypeKind() {} func (*Type_AbstractType_) isType_TypeKind() {} type Decl struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` // Types that are assignable to DeclKind: // // *Decl_Ident // *Decl_Function DeclKind isDecl_DeclKind `protobuf_oneof:"decl_kind"` } func (x *Decl) Reset() { *x = Decl{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Decl) String() string { return protoimpl.X.MessageStringOf(x) } func (*Decl) ProtoMessage() {} func (x *Decl) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Decl.ProtoReflect.Descriptor instead. func (*Decl) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{2} } func (x *Decl) GetName() string { if x != nil { return x.Name } return "" } func (m *Decl) GetDeclKind() isDecl_DeclKind { if m != nil { return m.DeclKind } return nil } func (x *Decl) GetIdent() *Decl_IdentDecl { if x, ok := x.GetDeclKind().(*Decl_Ident); ok { return x.Ident } return nil } func (x *Decl) GetFunction() *Decl_FunctionDecl { if x, ok := x.GetDeclKind().(*Decl_Function); ok { return x.Function } return nil } type isDecl_DeclKind interface { isDecl_DeclKind() } type Decl_Ident struct { Ident *Decl_IdentDecl `protobuf:"bytes,2,opt,name=ident,proto3,oneof"` } type Decl_Function struct { Function *Decl_FunctionDecl `protobuf:"bytes,3,opt,name=function,proto3,oneof"` } func (*Decl_Ident) isDecl_DeclKind() {} func (*Decl_Function) isDecl_DeclKind() {} type Reference struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` OverloadId []string `protobuf:"bytes,3,rep,name=overload_id,json=overloadId,proto3" json:"overload_id,omitempty"` Value *Constant `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` } func (x *Reference) Reset() { *x = Reference{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Reference) String() string { return protoimpl.X.MessageStringOf(x) } func (*Reference) ProtoMessage() {} func (x *Reference) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Reference.ProtoReflect.Descriptor instead. func (*Reference) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{3} } func (x *Reference) GetName() string { if x != nil { return x.Name } return "" } func (x *Reference) GetOverloadId() []string { if x != nil { return x.OverloadId } return nil } func (x *Reference) GetValue() *Constant { if x != nil { return x.Value } return nil } type Type_ListType struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ElemType *Type `protobuf:"bytes,1,opt,name=elem_type,json=elemType,proto3" json:"elem_type,omitempty"` } func (x *Type_ListType) Reset() { *x = Type_ListType{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Type_ListType) String() string { return protoimpl.X.MessageStringOf(x) } func (*Type_ListType) ProtoMessage() {} func (x *Type_ListType) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Type_ListType.ProtoReflect.Descriptor instead. func (*Type_ListType) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{1, 0} } func (x *Type_ListType) GetElemType() *Type { if x != nil { return x.ElemType } return nil } type Type_MapType struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields KeyType *Type `protobuf:"bytes,1,opt,name=key_type,json=keyType,proto3" json:"key_type,omitempty"` ValueType *Type `protobuf:"bytes,2,opt,name=value_type,json=valueType,proto3" json:"value_type,omitempty"` } func (x *Type_MapType) Reset() { *x = Type_MapType{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Type_MapType) String() string { return protoimpl.X.MessageStringOf(x) } func (*Type_MapType) ProtoMessage() {} func (x *Type_MapType) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Type_MapType.ProtoReflect.Descriptor instead. func (*Type_MapType) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{1, 1} } func (x *Type_MapType) GetKeyType() *Type { if x != nil { return x.KeyType } return nil } func (x *Type_MapType) GetValueType() *Type { if x != nil { return x.ValueType } return nil } type Type_FunctionType struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields ResultType *Type `protobuf:"bytes,1,opt,name=result_type,json=resultType,proto3" json:"result_type,omitempty"` ArgTypes []*Type `protobuf:"bytes,2,rep,name=arg_types,json=argTypes,proto3" json:"arg_types,omitempty"` } func (x *Type_FunctionType) Reset() { *x = Type_FunctionType{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Type_FunctionType) String() string { return protoimpl.X.MessageStringOf(x) } func (*Type_FunctionType) ProtoMessage() {} func (x *Type_FunctionType) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Type_FunctionType.ProtoReflect.Descriptor instead. func (*Type_FunctionType) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{1, 2} } func (x *Type_FunctionType) GetResultType() *Type { if x != nil { return x.ResultType } return nil } func (x *Type_FunctionType) GetArgTypes() []*Type { if x != nil { return x.ArgTypes } return nil } type Type_AbstractType struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` ParameterTypes []*Type `protobuf:"bytes,2,rep,name=parameter_types,json=parameterTypes,proto3" json:"parameter_types,omitempty"` } func (x *Type_AbstractType) Reset() { *x = Type_AbstractType{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Type_AbstractType) String() string { return protoimpl.X.MessageStringOf(x) } func (*Type_AbstractType) ProtoMessage() {} func (x *Type_AbstractType) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Type_AbstractType.ProtoReflect.Descriptor instead. func (*Type_AbstractType) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{1, 3} } func (x *Type_AbstractType) GetName() string { if x != nil { return x.Name } return "" } func (x *Type_AbstractType) GetParameterTypes() []*Type { if x != nil { return x.ParameterTypes } return nil } type Decl_IdentDecl struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type *Type `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` Value *Constant `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` Doc string `protobuf:"bytes,3,opt,name=doc,proto3" json:"doc,omitempty"` } func (x *Decl_IdentDecl) Reset() { *x = Decl_IdentDecl{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Decl_IdentDecl) String() string { return protoimpl.X.MessageStringOf(x) } func (*Decl_IdentDecl) ProtoMessage() {} func (x *Decl_IdentDecl) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Decl_IdentDecl.ProtoReflect.Descriptor instead. func (*Decl_IdentDecl) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{2, 0} } func (x *Decl_IdentDecl) GetType() *Type { if x != nil { return x.Type } return nil } func (x *Decl_IdentDecl) GetValue() *Constant { if x != nil { return x.Value } return nil } func (x *Decl_IdentDecl) GetDoc() string { if x != nil { return x.Doc } return "" } type Decl_FunctionDecl struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Overloads []*Decl_FunctionDecl_Overload `protobuf:"bytes,1,rep,name=overloads,proto3" json:"overloads,omitempty"` } func (x *Decl_FunctionDecl) Reset() { *x = Decl_FunctionDecl{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Decl_FunctionDecl) String() string { return protoimpl.X.MessageStringOf(x) } func (*Decl_FunctionDecl) ProtoMessage() {} func (x *Decl_FunctionDecl) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Decl_FunctionDecl.ProtoReflect.Descriptor instead. func (*Decl_FunctionDecl) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{2, 1} } func (x *Decl_FunctionDecl) GetOverloads() []*Decl_FunctionDecl_Overload { if x != nil { return x.Overloads } return nil } type Decl_FunctionDecl_Overload struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields OverloadId string `protobuf:"bytes,1,opt,name=overload_id,json=overloadId,proto3" json:"overload_id,omitempty"` Params []*Type `protobuf:"bytes,2,rep,name=params,proto3" json:"params,omitempty"` TypeParams []string `protobuf:"bytes,3,rep,name=type_params,json=typeParams,proto3" json:"type_params,omitempty"` ResultType *Type `protobuf:"bytes,4,opt,name=result_type,json=resultType,proto3" json:"result_type,omitempty"` IsInstanceFunction bool `protobuf:"varint,5,opt,name=is_instance_function,json=isInstanceFunction,proto3" json:"is_instance_function,omitempty"` Doc string `protobuf:"bytes,6,opt,name=doc,proto3" json:"doc,omitempty"` } func (x *Decl_FunctionDecl_Overload) Reset() { *x = Decl_FunctionDecl_Overload{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_checked_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Decl_FunctionDecl_Overload) String() string { return protoimpl.X.MessageStringOf(x) } func (*Decl_FunctionDecl_Overload) ProtoMessage() {} func (x *Decl_FunctionDecl_Overload) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_checked_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Decl_FunctionDecl_Overload.ProtoReflect.Descriptor instead. func (*Decl_FunctionDecl_Overload) Descriptor() ([]byte, []int) { return file_cel_expr_checked_proto_rawDescGZIP(), []int{2, 1, 0} } func (x *Decl_FunctionDecl_Overload) GetOverloadId() string { if x != nil { return x.OverloadId } return "" } func (x *Decl_FunctionDecl_Overload) GetParams() []*Type { if x != nil { return x.Params } return nil } func (x *Decl_FunctionDecl_Overload) GetTypeParams() []string { if x != nil { return x.TypeParams } return nil } func (x *Decl_FunctionDecl_Overload) GetResultType() *Type { if x != nil { return x.ResultType } return nil } func (x *Decl_FunctionDecl_Overload) GetIsInstanceFunction() bool { if x != nil { return x.IsInstanceFunction } return false } func (x *Decl_FunctionDecl_Overload) GetDoc() string { if x != nil { return x.Doc } return "" } var File_cel_expr_checked_proto protoreflect.FileDescriptor var file_cel_expr_checked_proto_rawDesc = []byte{ 0x0a, 0x16, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x1a, 0x15, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xba, 0x03, 0x0a, 0x0b, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x12, 0x4c, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x12, 0x3d, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6d, 0x61, 0x70, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x12, 0x35, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x21, 0x0a, 0x0c, 0x65, 0x78, 0x70, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x65, 0x78, 0x70, 0x72, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x04, 0x65, 0x78, 0x70, 0x72, 0x1a, 0x54, 0x0a, 0x11, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4a, 0x0a, 0x0c, 0x54, 0x79, 0x70, 0x65, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xe6, 0x09, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2a, 0x0a, 0x03, 0x64, 0x79, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x03, 0x64, 0x79, 0x6e, 0x12, 0x30, 0x0a, 0x04, 0x6e, 0x75, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x04, 0x6e, 0x75, 0x6c, 0x6c, 0x12, 0x3c, 0x0a, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x70, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x07, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x3d, 0x0a, 0x0a, 0x77, 0x65, 0x6c, 0x6c, 0x5f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x09, 0x77, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x36, 0x0a, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x69, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x33, 0x0a, 0x08, 0x6d, 0x61, 0x70, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x4d, 0x61, 0x70, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x61, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x24, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x42, 0x0a, 0x0d, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x2e, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x37, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x09, 0x65, 0x6c, 0x65, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x63, 0x0a, 0x07, 0x4d, 0x61, 0x70, 0x54, 0x79, 0x70, 0x65, 0x12, 0x29, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2d, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x1a, 0x6c, 0x0a, 0x0c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x2b, 0x0a, 0x09, 0x61, 0x72, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x61, 0x72, 0x67, 0x54, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x5b, 0x0a, 0x0c, 0x41, 0x62, 0x73, 0x74, 0x72, 0x61, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x0f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0e, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x73, 0x0a, 0x0d, 0x50, 0x72, 0x69, 0x6d, 0x69, 0x74, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x50, 0x52, 0x49, 0x4d, 0x49, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x04, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x06, 0x22, 0x56, 0x0a, 0x0d, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x1b, 0x57, 0x45, 0x4c, 0x4c, 0x5f, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x59, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x49, 0x4d, 0x45, 0x53, 0x54, 0x41, 0x4d, 0x50, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x55, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x42, 0x0b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xc2, 0x04, 0x0a, 0x04, 0x44, 0x65, 0x63, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x30, 0x0a, 0x05, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x48, 0x00, 0x52, 0x05, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x6b, 0x0a, 0x09, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x63, 0x6c, 0x12, 0x22, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x1a, 0xbe, 0x02, 0x0a, 0x0c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x12, 0x42, 0x0a, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x63, 0x6c, 0x2e, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x73, 0x1a, 0xe9, 0x01, 0x0a, 0x08, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x2f, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x69, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x12, 0x69, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x64, 0x6f, 0x63, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x64, 0x6f, 0x63, 0x42, 0x0b, 0x0a, 0x09, 0x64, 0x65, 0x63, 0x6c, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x6a, 0x0a, 0x09, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x76, 0x65, 0x72, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x64, 0x12, 0x28, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2c, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x42, 0x09, 0x44, 0x65, 0x63, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0c, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_checked_proto_rawDescOnce sync.Once file_cel_expr_checked_proto_rawDescData = file_cel_expr_checked_proto_rawDesc ) func file_cel_expr_checked_proto_rawDescGZIP() []byte { file_cel_expr_checked_proto_rawDescOnce.Do(func() { file_cel_expr_checked_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_checked_proto_rawDescData) }) return file_cel_expr_checked_proto_rawDescData } var file_cel_expr_checked_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_cel_expr_checked_proto_msgTypes = make([]protoimpl.MessageInfo, 13) var file_cel_expr_checked_proto_goTypes = []interface{}{ (Type_PrimitiveType)(0), // 0: cel.expr.Type.PrimitiveType (Type_WellKnownType)(0), // 1: cel.expr.Type.WellKnownType (*CheckedExpr)(nil), // 2: cel.expr.CheckedExpr (*Type)(nil), // 3: cel.expr.Type (*Decl)(nil), // 4: cel.expr.Decl (*Reference)(nil), // 5: cel.expr.Reference nil, // 6: cel.expr.CheckedExpr.ReferenceMapEntry nil, // 7: cel.expr.CheckedExpr.TypeMapEntry (*Type_ListType)(nil), // 8: cel.expr.Type.ListType (*Type_MapType)(nil), // 9: cel.expr.Type.MapType (*Type_FunctionType)(nil), // 10: cel.expr.Type.FunctionType (*Type_AbstractType)(nil), // 11: cel.expr.Type.AbstractType (*Decl_IdentDecl)(nil), // 12: cel.expr.Decl.IdentDecl (*Decl_FunctionDecl)(nil), // 13: cel.expr.Decl.FunctionDecl (*Decl_FunctionDecl_Overload)(nil), // 14: cel.expr.Decl.FunctionDecl.Overload (*SourceInfo)(nil), // 15: cel.expr.SourceInfo (*Expr)(nil), // 16: cel.expr.Expr (*emptypb.Empty)(nil), // 17: google.protobuf.Empty (structpb.NullValue)(0), // 18: google.protobuf.NullValue (*Constant)(nil), // 19: cel.expr.Constant } var file_cel_expr_checked_proto_depIdxs = []int32{ 6, // 0: cel.expr.CheckedExpr.reference_map:type_name -> cel.expr.CheckedExpr.ReferenceMapEntry 7, // 1: cel.expr.CheckedExpr.type_map:type_name -> cel.expr.CheckedExpr.TypeMapEntry 15, // 2: cel.expr.CheckedExpr.source_info:type_name -> cel.expr.SourceInfo 16, // 3: cel.expr.CheckedExpr.expr:type_name -> cel.expr.Expr 17, // 4: cel.expr.Type.dyn:type_name -> google.protobuf.Empty 18, // 5: cel.expr.Type.null:type_name -> google.protobuf.NullValue 0, // 6: cel.expr.Type.primitive:type_name -> cel.expr.Type.PrimitiveType 0, // 7: cel.expr.Type.wrapper:type_name -> cel.expr.Type.PrimitiveType 1, // 8: cel.expr.Type.well_known:type_name -> cel.expr.Type.WellKnownType 8, // 9: cel.expr.Type.list_type:type_name -> cel.expr.Type.ListType 9, // 10: cel.expr.Type.map_type:type_name -> cel.expr.Type.MapType 10, // 11: cel.expr.Type.function:type_name -> cel.expr.Type.FunctionType 3, // 12: cel.expr.Type.type:type_name -> cel.expr.Type 17, // 13: cel.expr.Type.error:type_name -> google.protobuf.Empty 11, // 14: cel.expr.Type.abstract_type:type_name -> cel.expr.Type.AbstractType 12, // 15: cel.expr.Decl.ident:type_name -> cel.expr.Decl.IdentDecl 13, // 16: cel.expr.Decl.function:type_name -> cel.expr.Decl.FunctionDecl 19, // 17: cel.expr.Reference.value:type_name -> cel.expr.Constant 5, // 18: cel.expr.CheckedExpr.ReferenceMapEntry.value:type_name -> cel.expr.Reference 3, // 19: cel.expr.CheckedExpr.TypeMapEntry.value:type_name -> cel.expr.Type 3, // 20: cel.expr.Type.ListType.elem_type:type_name -> cel.expr.Type 3, // 21: cel.expr.Type.MapType.key_type:type_name -> cel.expr.Type 3, // 22: cel.expr.Type.MapType.value_type:type_name -> cel.expr.Type 3, // 23: cel.expr.Type.FunctionType.result_type:type_name -> cel.expr.Type 3, // 24: cel.expr.Type.FunctionType.arg_types:type_name -> cel.expr.Type 3, // 25: cel.expr.Type.AbstractType.parameter_types:type_name -> cel.expr.Type 3, // 26: cel.expr.Decl.IdentDecl.type:type_name -> cel.expr.Type 19, // 27: cel.expr.Decl.IdentDecl.value:type_name -> cel.expr.Constant 14, // 28: cel.expr.Decl.FunctionDecl.overloads:type_name -> cel.expr.Decl.FunctionDecl.Overload 3, // 29: cel.expr.Decl.FunctionDecl.Overload.params:type_name -> cel.expr.Type 3, // 30: cel.expr.Decl.FunctionDecl.Overload.result_type:type_name -> cel.expr.Type 31, // [31:31] is the sub-list for method output_type 31, // [31:31] is the sub-list for method input_type 31, // [31:31] is the sub-list for extension type_name 31, // [31:31] is the sub-list for extension extendee 0, // [0:31] is the sub-list for field type_name } func init() { file_cel_expr_checked_proto_init() } func file_cel_expr_checked_proto_init() { if File_cel_expr_checked_proto != nil { return } file_cel_expr_syntax_proto_init() if !protoimpl.UnsafeEnabled { file_cel_expr_checked_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CheckedExpr); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Type); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Decl); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Reference); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Type_ListType); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Type_MapType); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Type_FunctionType); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Type_AbstractType); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Decl_IdentDecl); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Decl_FunctionDecl); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_checked_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Decl_FunctionDecl_Overload); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_cel_expr_checked_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Type_Dyn)(nil), (*Type_Null)(nil), (*Type_Primitive)(nil), (*Type_Wrapper)(nil), (*Type_WellKnown)(nil), (*Type_ListType_)(nil), (*Type_MapType_)(nil), (*Type_Function)(nil), (*Type_MessageType)(nil), (*Type_TypeParam)(nil), (*Type_Type)(nil), (*Type_Error)(nil), (*Type_AbstractType_)(nil), } file_cel_expr_checked_proto_msgTypes[2].OneofWrappers = []interface{}{ (*Decl_Ident)(nil), (*Decl_Function)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_checked_proto_rawDesc, NumEnums: 2, NumMessages: 13, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_checked_proto_goTypes, DependencyIndexes: file_cel_expr_checked_proto_depIdxs, EnumInfos: file_cel_expr_checked_proto_enumTypes, MessageInfos: file_cel_expr_checked_proto_msgTypes, }.Build() File_cel_expr_checked_proto = out.File file_cel_expr_checked_proto_rawDesc = nil file_cel_expr_checked_proto_goTypes = nil file_cel_expr_checked_proto_depIdxs = nil } cel-spec-0.24.0/cloudbuild.yaml000066400000000000000000000002701500667630300163070ustar00rootroot00000000000000steps: - name: 'gcr.io/cloud-builders/bazel:7.3.2' entrypoint: bazel args: ['build', '...'] id: bazel-build waitFor: ['-'] timeout: 15m options: machineType: 'N1_HIGHCPU_32' cel-spec-0.24.0/conformance/000077500000000000000000000000001500667630300155705ustar00rootroot00000000000000cel-spec-0.24.0/conformance/BUILD.bazel000077500000000000000000000023661500667630300174600ustar00rootroot00000000000000# Copyright 2024 Google LLC # # 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 # # https://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. load("@io_bazel_rules_go//go:def.bzl", "go_library") package( default_visibility = ["//visibility:public"], licenses = ["notice"], # Apache 2.0 ) go_library( name = "go_default_library", srcs = [ "conformance_service.pb.go", "env_config.pb.go", ], importpath = "cel.dev/expr/conformance", deps = [ "//:expr", "@org_golang_google_genproto_googleapis_rpc//status:go_default_library", "@org_golang_google_protobuf//reflect/protoreflect", "@org_golang_google_protobuf//runtime/protoimpl", "@org_golang_google_protobuf//types/descriptorpb", "@org_golang_google_protobuf//types/known/structpb", ], ) cel-spec-0.24.0/conformance/conformance_service.pb.go000077500000000000000000001021331500667630300225340ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.3 // protoc v5.27.1 // source: cel/expr/conformance/conformance_service.proto package conformance import ( expr "cel.dev/expr" status "google.golang.org/genproto/googleapis/rpc/status" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type IssueDetails_Severity int32 const ( IssueDetails_SEVERITY_UNSPECIFIED IssueDetails_Severity = 0 IssueDetails_DEPRECATION IssueDetails_Severity = 1 IssueDetails_WARNING IssueDetails_Severity = 2 IssueDetails_ERROR IssueDetails_Severity = 3 ) // Enum value maps for IssueDetails_Severity. var ( IssueDetails_Severity_name = map[int32]string{ 0: "SEVERITY_UNSPECIFIED", 1: "DEPRECATION", 2: "WARNING", 3: "ERROR", } IssueDetails_Severity_value = map[string]int32{ "SEVERITY_UNSPECIFIED": 0, "DEPRECATION": 1, "WARNING": 2, "ERROR": 3, } ) func (x IssueDetails_Severity) Enum() *IssueDetails_Severity { p := new(IssueDetails_Severity) *p = x return p } func (x IssueDetails_Severity) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (IssueDetails_Severity) Descriptor() protoreflect.EnumDescriptor { return file_cel_expr_conformance_conformance_service_proto_enumTypes[0].Descriptor() } func (IssueDetails_Severity) Type() protoreflect.EnumType { return &file_cel_expr_conformance_conformance_service_proto_enumTypes[0] } func (x IssueDetails_Severity) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use IssueDetails_Severity.Descriptor instead. func (IssueDetails_Severity) EnumDescriptor() ([]byte, []int) { return file_cel_expr_conformance_conformance_service_proto_rawDescGZIP(), []int{7, 0} } type ParseRequest struct { state protoimpl.MessageState `protogen:"open.v1"` CelSource string `protobuf:"bytes,1,opt,name=cel_source,json=celSource,proto3" json:"cel_source,omitempty"` SyntaxVersion string `protobuf:"bytes,2,opt,name=syntax_version,json=syntaxVersion,proto3" json:"syntax_version,omitempty"` SourceLocation string `protobuf:"bytes,3,opt,name=source_location,json=sourceLocation,proto3" json:"source_location,omitempty"` DisableMacros bool `protobuf:"varint,4,opt,name=disable_macros,json=disableMacros,proto3" json:"disable_macros,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ParseRequest) Reset() { *x = ParseRequest{} mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ParseRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*ParseRequest) ProtoMessage() {} func (x *ParseRequest) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ParseRequest.ProtoReflect.Descriptor instead. func (*ParseRequest) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_conformance_service_proto_rawDescGZIP(), []int{0} } func (x *ParseRequest) GetCelSource() string { if x != nil { return x.CelSource } return "" } func (x *ParseRequest) GetSyntaxVersion() string { if x != nil { return x.SyntaxVersion } return "" } func (x *ParseRequest) GetSourceLocation() string { if x != nil { return x.SourceLocation } return "" } func (x *ParseRequest) GetDisableMacros() bool { if x != nil { return x.DisableMacros } return false } type ParseResponse struct { state protoimpl.MessageState `protogen:"open.v1"` ParsedExpr *expr.ParsedExpr `protobuf:"bytes,1,opt,name=parsed_expr,json=parsedExpr,proto3" json:"parsed_expr,omitempty"` Issues []*status.Status `protobuf:"bytes,2,rep,name=issues,proto3" json:"issues,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ParseResponse) Reset() { *x = ParseResponse{} mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ParseResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*ParseResponse) ProtoMessage() {} func (x *ParseResponse) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ParseResponse.ProtoReflect.Descriptor instead. func (*ParseResponse) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_conformance_service_proto_rawDescGZIP(), []int{1} } func (x *ParseResponse) GetParsedExpr() *expr.ParsedExpr { if x != nil { return x.ParsedExpr } return nil } func (x *ParseResponse) GetIssues() []*status.Status { if x != nil { return x.Issues } return nil } type CheckRequest struct { state protoimpl.MessageState `protogen:"open.v1"` ParsedExpr *expr.ParsedExpr `protobuf:"bytes,1,opt,name=parsed_expr,json=parsedExpr,proto3" json:"parsed_expr,omitempty"` TypeEnv []*expr.Decl `protobuf:"bytes,2,rep,name=type_env,json=typeEnv,proto3" json:"type_env,omitempty"` Container string `protobuf:"bytes,3,opt,name=container,proto3" json:"container,omitempty"` NoStdEnv bool `protobuf:"varint,4,opt,name=no_std_env,json=noStdEnv,proto3" json:"no_std_env,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CheckRequest) Reset() { *x = CheckRequest{} mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *CheckRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*CheckRequest) ProtoMessage() {} func (x *CheckRequest) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CheckRequest.ProtoReflect.Descriptor instead. func (*CheckRequest) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_conformance_service_proto_rawDescGZIP(), []int{2} } func (x *CheckRequest) GetParsedExpr() *expr.ParsedExpr { if x != nil { return x.ParsedExpr } return nil } func (x *CheckRequest) GetTypeEnv() []*expr.Decl { if x != nil { return x.TypeEnv } return nil } func (x *CheckRequest) GetContainer() string { if x != nil { return x.Container } return "" } func (x *CheckRequest) GetNoStdEnv() bool { if x != nil { return x.NoStdEnv } return false } type CheckResponse struct { state protoimpl.MessageState `protogen:"open.v1"` CheckedExpr *expr.CheckedExpr `protobuf:"bytes,1,opt,name=checked_expr,json=checkedExpr,proto3" json:"checked_expr,omitempty"` Issues []*status.Status `protobuf:"bytes,2,rep,name=issues,proto3" json:"issues,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *CheckResponse) Reset() { *x = CheckResponse{} mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *CheckResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*CheckResponse) ProtoMessage() {} func (x *CheckResponse) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use CheckResponse.ProtoReflect.Descriptor instead. func (*CheckResponse) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_conformance_service_proto_rawDescGZIP(), []int{3} } func (x *CheckResponse) GetCheckedExpr() *expr.CheckedExpr { if x != nil { return x.CheckedExpr } return nil } func (x *CheckResponse) GetIssues() []*status.Status { if x != nil { return x.Issues } return nil } type EvalRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to ExprKind: // // *EvalRequest_ParsedExpr // *EvalRequest_CheckedExpr ExprKind isEvalRequest_ExprKind `protobuf_oneof:"expr_kind"` Bindings map[string]*expr.ExprValue `protobuf:"bytes,3,rep,name=bindings,proto3" json:"bindings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` Container string `protobuf:"bytes,4,opt,name=container,proto3" json:"container,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *EvalRequest) Reset() { *x = EvalRequest{} mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *EvalRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*EvalRequest) ProtoMessage() {} func (x *EvalRequest) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EvalRequest.ProtoReflect.Descriptor instead. func (*EvalRequest) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_conformance_service_proto_rawDescGZIP(), []int{4} } func (x *EvalRequest) GetExprKind() isEvalRequest_ExprKind { if x != nil { return x.ExprKind } return nil } func (x *EvalRequest) GetParsedExpr() *expr.ParsedExpr { if x != nil { if x, ok := x.ExprKind.(*EvalRequest_ParsedExpr); ok { return x.ParsedExpr } } return nil } func (x *EvalRequest) GetCheckedExpr() *expr.CheckedExpr { if x != nil { if x, ok := x.ExprKind.(*EvalRequest_CheckedExpr); ok { return x.CheckedExpr } } return nil } func (x *EvalRequest) GetBindings() map[string]*expr.ExprValue { if x != nil { return x.Bindings } return nil } func (x *EvalRequest) GetContainer() string { if x != nil { return x.Container } return "" } type isEvalRequest_ExprKind interface { isEvalRequest_ExprKind() } type EvalRequest_ParsedExpr struct { ParsedExpr *expr.ParsedExpr `protobuf:"bytes,1,opt,name=parsed_expr,json=parsedExpr,proto3,oneof"` } type EvalRequest_CheckedExpr struct { CheckedExpr *expr.CheckedExpr `protobuf:"bytes,2,opt,name=checked_expr,json=checkedExpr,proto3,oneof"` } func (*EvalRequest_ParsedExpr) isEvalRequest_ExprKind() {} func (*EvalRequest_CheckedExpr) isEvalRequest_ExprKind() {} type EvalResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Result *expr.ExprValue `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` Issues []*status.Status `protobuf:"bytes,2,rep,name=issues,proto3" json:"issues,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *EvalResponse) Reset() { *x = EvalResponse{} mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *EvalResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*EvalResponse) ProtoMessage() {} func (x *EvalResponse) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EvalResponse.ProtoReflect.Descriptor instead. func (*EvalResponse) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_conformance_service_proto_rawDescGZIP(), []int{5} } func (x *EvalResponse) GetResult() *expr.ExprValue { if x != nil { return x.Result } return nil } func (x *EvalResponse) GetIssues() []*status.Status { if x != nil { return x.Issues } return nil } type SourcePosition struct { state protoimpl.MessageState `protogen:"open.v1"` Location string `protobuf:"bytes,1,opt,name=location,proto3" json:"location,omitempty"` Offset int32 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` Line int32 `protobuf:"varint,3,opt,name=line,proto3" json:"line,omitempty"` Column int32 `protobuf:"varint,4,opt,name=column,proto3" json:"column,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *SourcePosition) Reset() { *x = SourcePosition{} mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *SourcePosition) String() string { return protoimpl.X.MessageStringOf(x) } func (*SourcePosition) ProtoMessage() {} func (x *SourcePosition) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SourcePosition.ProtoReflect.Descriptor instead. func (*SourcePosition) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_conformance_service_proto_rawDescGZIP(), []int{6} } func (x *SourcePosition) GetLocation() string { if x != nil { return x.Location } return "" } func (x *SourcePosition) GetOffset() int32 { if x != nil { return x.Offset } return 0 } func (x *SourcePosition) GetLine() int32 { if x != nil { return x.Line } return 0 } func (x *SourcePosition) GetColumn() int32 { if x != nil { return x.Column } return 0 } type IssueDetails struct { state protoimpl.MessageState `protogen:"open.v1"` Severity IssueDetails_Severity `protobuf:"varint,1,opt,name=severity,proto3,enum=cel.expr.conformance.IssueDetails_Severity" json:"severity,omitempty"` Position *SourcePosition `protobuf:"bytes,2,opt,name=position,proto3" json:"position,omitempty"` Id int64 `protobuf:"varint,3,opt,name=id,proto3" json:"id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *IssueDetails) Reset() { *x = IssueDetails{} mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *IssueDetails) String() string { return protoimpl.X.MessageStringOf(x) } func (*IssueDetails) ProtoMessage() {} func (x *IssueDetails) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_conformance_service_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use IssueDetails.ProtoReflect.Descriptor instead. func (*IssueDetails) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_conformance_service_proto_rawDescGZIP(), []int{7} } func (x *IssueDetails) GetSeverity() IssueDetails_Severity { if x != nil { return x.Severity } return IssueDetails_SEVERITY_UNSPECIFIED } func (x *IssueDetails) GetPosition() *SourcePosition { if x != nil { return x.Position } return nil } func (x *IssueDetails) GetId() int64 { if x != nil { return x.Id } return 0 } var File_cel_expr_conformance_conformance_service_proto protoreflect.FileDescriptor var file_cel_expr_conformance_conformance_service_proto_rawDesc = []byte{ 0x0a, 0x2e, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x1a, 0x16, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x65, 0x76, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa4, 0x01, 0x0a, 0x0c, 0x50, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x65, 0x6c, 0x5f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x65, 0x6c, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x22, 0x72, 0x0a, 0x0d, 0x50, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x22, 0xac, 0x01, 0x0a, 0x0c, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x12, 0x29, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x6e, 0x76, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x76, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x0a, 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x64, 0x5f, 0x65, 0x6e, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, 0x53, 0x74, 0x64, 0x45, 0x6e, 0x76, 0x22, 0x75, 0x0a, 0x0d, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x22, 0xcc, 0x02, 0x0a, 0x0b, 0x45, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x37, 0x0a, 0x0b, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x48, 0x00, 0x52, 0x0a, 0x70, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x12, 0x3a, 0x0a, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x12, 0x4b, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x1a, 0x50, 0x0a, 0x0d, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x72, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x67, 0x0a, 0x0c, 0x45, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x22, 0x70, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x75, 0x6d, 0x6e, 0x22, 0xf8, 0x01, 0x0a, 0x0c, 0x49, 0x73, 0x73, 0x75, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x47, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x2e, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x40, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x22, 0x4d, 0x0a, 0x08, 0x53, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x56, 0x45, 0x52, 0x49, 0x54, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x50, 0x52, 0x45, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x57, 0x41, 0x52, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x32, 0x8d, 0x02, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x52, 0x0a, 0x05, 0x50, 0x61, 0x72, 0x73, 0x65, 0x12, 0x22, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x50, 0x61, 0x72, 0x73, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x52, 0x0a, 0x05, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x22, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4f, 0x0a, 0x04, 0x45, 0x76, 0x61, 0x6c, 0x12, 0x21, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x52, 0x0a, 0x18, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x17, 0x43, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x18, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_conformance_conformance_service_proto_rawDescOnce sync.Once file_cel_expr_conformance_conformance_service_proto_rawDescData = file_cel_expr_conformance_conformance_service_proto_rawDesc ) func file_cel_expr_conformance_conformance_service_proto_rawDescGZIP() []byte { file_cel_expr_conformance_conformance_service_proto_rawDescOnce.Do(func() { file_cel_expr_conformance_conformance_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_conformance_conformance_service_proto_rawDescData) }) return file_cel_expr_conformance_conformance_service_proto_rawDescData } var file_cel_expr_conformance_conformance_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_cel_expr_conformance_conformance_service_proto_msgTypes = make([]protoimpl.MessageInfo, 9) var file_cel_expr_conformance_conformance_service_proto_goTypes = []any{ (IssueDetails_Severity)(0), // 0: cel.expr.conformance.IssueDetails.Severity (*ParseRequest)(nil), // 1: cel.expr.conformance.ParseRequest (*ParseResponse)(nil), // 2: cel.expr.conformance.ParseResponse (*CheckRequest)(nil), // 3: cel.expr.conformance.CheckRequest (*CheckResponse)(nil), // 4: cel.expr.conformance.CheckResponse (*EvalRequest)(nil), // 5: cel.expr.conformance.EvalRequest (*EvalResponse)(nil), // 6: cel.expr.conformance.EvalResponse (*SourcePosition)(nil), // 7: cel.expr.conformance.SourcePosition (*IssueDetails)(nil), // 8: cel.expr.conformance.IssueDetails nil, // 9: cel.expr.conformance.EvalRequest.BindingsEntry (*expr.ParsedExpr)(nil), // 10: cel.expr.ParsedExpr (*status.Status)(nil), // 11: google.rpc.Status (*expr.Decl)(nil), // 12: cel.expr.Decl (*expr.CheckedExpr)(nil), // 13: cel.expr.CheckedExpr (*expr.ExprValue)(nil), // 14: cel.expr.ExprValue } var file_cel_expr_conformance_conformance_service_proto_depIdxs = []int32{ 10, // 0: cel.expr.conformance.ParseResponse.parsed_expr:type_name -> cel.expr.ParsedExpr 11, // 1: cel.expr.conformance.ParseResponse.issues:type_name -> google.rpc.Status 10, // 2: cel.expr.conformance.CheckRequest.parsed_expr:type_name -> cel.expr.ParsedExpr 12, // 3: cel.expr.conformance.CheckRequest.type_env:type_name -> cel.expr.Decl 13, // 4: cel.expr.conformance.CheckResponse.checked_expr:type_name -> cel.expr.CheckedExpr 11, // 5: cel.expr.conformance.CheckResponse.issues:type_name -> google.rpc.Status 10, // 6: cel.expr.conformance.EvalRequest.parsed_expr:type_name -> cel.expr.ParsedExpr 13, // 7: cel.expr.conformance.EvalRequest.checked_expr:type_name -> cel.expr.CheckedExpr 9, // 8: cel.expr.conformance.EvalRequest.bindings:type_name -> cel.expr.conformance.EvalRequest.BindingsEntry 14, // 9: cel.expr.conformance.EvalResponse.result:type_name -> cel.expr.ExprValue 11, // 10: cel.expr.conformance.EvalResponse.issues:type_name -> google.rpc.Status 0, // 11: cel.expr.conformance.IssueDetails.severity:type_name -> cel.expr.conformance.IssueDetails.Severity 7, // 12: cel.expr.conformance.IssueDetails.position:type_name -> cel.expr.conformance.SourcePosition 14, // 13: cel.expr.conformance.EvalRequest.BindingsEntry.value:type_name -> cel.expr.ExprValue 1, // 14: cel.expr.conformance.ConformanceService.Parse:input_type -> cel.expr.conformance.ParseRequest 3, // 15: cel.expr.conformance.ConformanceService.Check:input_type -> cel.expr.conformance.CheckRequest 5, // 16: cel.expr.conformance.ConformanceService.Eval:input_type -> cel.expr.conformance.EvalRequest 2, // 17: cel.expr.conformance.ConformanceService.Parse:output_type -> cel.expr.conformance.ParseResponse 4, // 18: cel.expr.conformance.ConformanceService.Check:output_type -> cel.expr.conformance.CheckResponse 6, // 19: cel.expr.conformance.ConformanceService.Eval:output_type -> cel.expr.conformance.EvalResponse 17, // [17:20] is the sub-list for method output_type 14, // [14:17] is the sub-list for method input_type 14, // [14:14] is the sub-list for extension type_name 14, // [14:14] is the sub-list for extension extendee 0, // [0:14] is the sub-list for field type_name } func init() { file_cel_expr_conformance_conformance_service_proto_init() } func file_cel_expr_conformance_conformance_service_proto_init() { if File_cel_expr_conformance_conformance_service_proto != nil { return } file_cel_expr_conformance_conformance_service_proto_msgTypes[4].OneofWrappers = []any{ (*EvalRequest_ParsedExpr)(nil), (*EvalRequest_CheckedExpr)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_conformance_conformance_service_proto_rawDesc, NumEnums: 1, NumMessages: 9, NumExtensions: 0, NumServices: 1, }, GoTypes: file_cel_expr_conformance_conformance_service_proto_goTypes, DependencyIndexes: file_cel_expr_conformance_conformance_service_proto_depIdxs, EnumInfos: file_cel_expr_conformance_conformance_service_proto_enumTypes, MessageInfos: file_cel_expr_conformance_conformance_service_proto_msgTypes, }.Build() File_cel_expr_conformance_conformance_service_proto = out.File file_cel_expr_conformance_conformance_service_proto_rawDesc = nil file_cel_expr_conformance_conformance_service_proto_goTypes = nil file_cel_expr_conformance_conformance_service_proto_depIdxs = nil } cel-spec-0.24.0/conformance/env_config.pb.go000077500000000000000000000704731500667630300206520ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.3 // protoc v5.27.1 // source: cel/expr/conformance/env_config.proto package conformance import ( expr "cel.dev/expr" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" descriptorpb "google.golang.org/protobuf/types/descriptorpb" structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type Environment struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` Container string `protobuf:"bytes,3,opt,name=container,proto3" json:"container,omitempty"` Imports []*Environment_Import `protobuf:"bytes,4,rep,name=imports,proto3" json:"imports,omitempty"` Stdlib *LibrarySubset `protobuf:"bytes,5,opt,name=stdlib,proto3" json:"stdlib,omitempty"` Extensions []*Extension `protobuf:"bytes,6,rep,name=extensions,proto3" json:"extensions,omitempty"` ContextVariable *Environment_ContextVariable `protobuf:"bytes,7,opt,name=context_variable,json=contextVariable,proto3" json:"context_variable,omitempty"` Declarations []*expr.Decl `protobuf:"bytes,8,rep,name=declarations,proto3" json:"declarations,omitempty"` Validators []*Validator `protobuf:"bytes,9,rep,name=validators,proto3" json:"validators,omitempty"` Features []*Feature `protobuf:"bytes,10,rep,name=features,proto3" json:"features,omitempty"` DisableStandardCelDeclarations bool `protobuf:"varint,11,opt,name=disable_standard_cel_declarations,json=disableStandardCelDeclarations,proto3" json:"disable_standard_cel_declarations,omitempty"` MessageTypeExtension *descriptorpb.FileDescriptorSet `protobuf:"bytes,12,opt,name=message_type_extension,json=messageTypeExtension,proto3" json:"message_type_extension,omitempty"` EnableMacroCallTracking bool `protobuf:"varint,13,opt,name=enable_macro_call_tracking,json=enableMacroCallTracking,proto3" json:"enable_macro_call_tracking,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Environment) Reset() { *x = Environment{} mi := &file_cel_expr_conformance_env_config_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Environment) String() string { return protoimpl.X.MessageStringOf(x) } func (*Environment) ProtoMessage() {} func (x *Environment) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_env_config_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Environment.ProtoReflect.Descriptor instead. func (*Environment) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_env_config_proto_rawDescGZIP(), []int{0} } func (x *Environment) GetName() string { if x != nil { return x.Name } return "" } func (x *Environment) GetDescription() string { if x != nil { return x.Description } return "" } func (x *Environment) GetContainer() string { if x != nil { return x.Container } return "" } func (x *Environment) GetImports() []*Environment_Import { if x != nil { return x.Imports } return nil } func (x *Environment) GetStdlib() *LibrarySubset { if x != nil { return x.Stdlib } return nil } func (x *Environment) GetExtensions() []*Extension { if x != nil { return x.Extensions } return nil } func (x *Environment) GetContextVariable() *Environment_ContextVariable { if x != nil { return x.ContextVariable } return nil } func (x *Environment) GetDeclarations() []*expr.Decl { if x != nil { return x.Declarations } return nil } func (x *Environment) GetValidators() []*Validator { if x != nil { return x.Validators } return nil } func (x *Environment) GetFeatures() []*Feature { if x != nil { return x.Features } return nil } func (x *Environment) GetDisableStandardCelDeclarations() bool { if x != nil { return x.DisableStandardCelDeclarations } return false } func (x *Environment) GetMessageTypeExtension() *descriptorpb.FileDescriptorSet { if x != nil { return x.MessageTypeExtension } return nil } func (x *Environment) GetEnableMacroCallTracking() bool { if x != nil { return x.EnableMacroCallTracking } return false } type Validator struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Config map[string]*structpb.Value `protobuf:"bytes,2,rep,name=config,proto3" json:"config,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Validator) Reset() { *x = Validator{} mi := &file_cel_expr_conformance_env_config_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Validator) String() string { return protoimpl.X.MessageStringOf(x) } func (*Validator) ProtoMessage() {} func (x *Validator) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_env_config_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Validator.ProtoReflect.Descriptor instead. func (*Validator) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_env_config_proto_rawDescGZIP(), []int{1} } func (x *Validator) GetName() string { if x != nil { return x.Name } return "" } func (x *Validator) GetConfig() map[string]*structpb.Value { if x != nil { return x.Config } return nil } type Feature struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Enabled bool `protobuf:"varint,2,opt,name=enabled,proto3" json:"enabled,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Feature) Reset() { *x = Feature{} mi := &file_cel_expr_conformance_env_config_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Feature) String() string { return protoimpl.X.MessageStringOf(x) } func (*Feature) ProtoMessage() {} func (x *Feature) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_env_config_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Feature.ProtoReflect.Descriptor instead. func (*Feature) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_env_config_proto_rawDescGZIP(), []int{2} } func (x *Feature) GetName() string { if x != nil { return x.Name } return "" } func (x *Feature) GetEnabled() bool { if x != nil { return x.Enabled } return false } type Extension struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Extension) Reset() { *x = Extension{} mi := &file_cel_expr_conformance_env_config_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Extension) String() string { return protoimpl.X.MessageStringOf(x) } func (*Extension) ProtoMessage() {} func (x *Extension) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_env_config_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Extension.ProtoReflect.Descriptor instead. func (*Extension) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_env_config_proto_rawDescGZIP(), []int{3} } func (x *Extension) GetName() string { if x != nil { return x.Name } return "" } func (x *Extension) GetVersion() string { if x != nil { return x.Version } return "" } type LibrarySubset struct { state protoimpl.MessageState `protogen:"open.v1"` Disabled bool `protobuf:"varint,1,opt,name=disabled,proto3" json:"disabled,omitempty"` DisableMacros bool `protobuf:"varint,2,opt,name=disable_macros,json=disableMacros,proto3" json:"disable_macros,omitempty"` IncludeMacros []string `protobuf:"bytes,3,rep,name=include_macros,json=includeMacros,proto3" json:"include_macros,omitempty"` ExcludeMacros []string `protobuf:"bytes,4,rep,name=exclude_macros,json=excludeMacros,proto3" json:"exclude_macros,omitempty"` IncludeFunctions []*expr.Decl `protobuf:"bytes,5,rep,name=include_functions,json=includeFunctions,proto3" json:"include_functions,omitempty"` ExcludeFunctions []*expr.Decl `protobuf:"bytes,6,rep,name=exclude_functions,json=excludeFunctions,proto3" json:"exclude_functions,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *LibrarySubset) Reset() { *x = LibrarySubset{} mi := &file_cel_expr_conformance_env_config_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *LibrarySubset) String() string { return protoimpl.X.MessageStringOf(x) } func (*LibrarySubset) ProtoMessage() {} func (x *LibrarySubset) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_env_config_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LibrarySubset.ProtoReflect.Descriptor instead. func (*LibrarySubset) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_env_config_proto_rawDescGZIP(), []int{4} } func (x *LibrarySubset) GetDisabled() bool { if x != nil { return x.Disabled } return false } func (x *LibrarySubset) GetDisableMacros() bool { if x != nil { return x.DisableMacros } return false } func (x *LibrarySubset) GetIncludeMacros() []string { if x != nil { return x.IncludeMacros } return nil } func (x *LibrarySubset) GetExcludeMacros() []string { if x != nil { return x.ExcludeMacros } return nil } func (x *LibrarySubset) GetIncludeFunctions() []*expr.Decl { if x != nil { return x.IncludeFunctions } return nil } func (x *LibrarySubset) GetExcludeFunctions() []*expr.Decl { if x != nil { return x.ExcludeFunctions } return nil } type Environment_Import struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Environment_Import) Reset() { *x = Environment_Import{} mi := &file_cel_expr_conformance_env_config_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Environment_Import) String() string { return protoimpl.X.MessageStringOf(x) } func (*Environment_Import) ProtoMessage() {} func (x *Environment_Import) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_env_config_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Environment_Import.ProtoReflect.Descriptor instead. func (*Environment_Import) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_env_config_proto_rawDescGZIP(), []int{0, 0} } func (x *Environment_Import) GetName() string { if x != nil { return x.Name } return "" } type Environment_ContextVariable struct { state protoimpl.MessageState `protogen:"open.v1"` TypeName string `protobuf:"bytes,1,opt,name=type_name,json=typeName,proto3" json:"type_name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Environment_ContextVariable) Reset() { *x = Environment_ContextVariable{} mi := &file_cel_expr_conformance_env_config_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Environment_ContextVariable) String() string { return protoimpl.X.MessageStringOf(x) } func (*Environment_ContextVariable) ProtoMessage() {} func (x *Environment_ContextVariable) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_env_config_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Environment_ContextVariable.ProtoReflect.Descriptor instead. func (*Environment_ContextVariable) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_env_config_proto_rawDescGZIP(), []int{0, 1} } func (x *Environment_ContextVariable) GetTypeName() string { if x != nil { return x.TypeName } return "" } var File_cel_expr_conformance_env_config_proto protoreflect.FileDescriptor var file_cel_expr_conformance_env_config_proto_rawDesc = []byte{ 0x0a, 0x25, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x65, 0x6e, 0x76, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x14, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x1a, 0x16, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe1, 0x06, 0x0a, 0x0b, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x42, 0x0a, 0x07, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x07, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x52, 0x06, 0x73, 0x74, 0x64, 0x6c, 0x69, 0x62, 0x12, 0x3f, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5c, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x0c, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x0c, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3f, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x39, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x49, 0x0a, 0x21, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x65, 0x6c, 0x5f, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x43, 0x65, 0x6c, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x16, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x52, 0x14, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3b, 0x0a, 0x1a, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x69, 0x6e, 0x67, 0x1a, 0x1c, 0x0a, 0x06, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x2e, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x56, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xb7, 0x01, 0x0a, 0x09, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x1a, 0x51, 0x0a, 0x0b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x37, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x22, 0x39, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x9a, 0x02, 0x0a, 0x0d, 0x4c, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x53, 0x75, 0x62, 0x73, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x3b, 0x0a, 0x11, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3b, 0x0a, 0x11, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x10, 0x65, 0x78, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x42, 0x4b, 0x0a, 0x18, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x10, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x18, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_conformance_env_config_proto_rawDescOnce sync.Once file_cel_expr_conformance_env_config_proto_rawDescData = file_cel_expr_conformance_env_config_proto_rawDesc ) func file_cel_expr_conformance_env_config_proto_rawDescGZIP() []byte { file_cel_expr_conformance_env_config_proto_rawDescOnce.Do(func() { file_cel_expr_conformance_env_config_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_conformance_env_config_proto_rawDescData) }) return file_cel_expr_conformance_env_config_proto_rawDescData } var file_cel_expr_conformance_env_config_proto_msgTypes = make([]protoimpl.MessageInfo, 8) var file_cel_expr_conformance_env_config_proto_goTypes = []any{ (*Environment)(nil), // 0: cel.expr.conformance.Environment (*Validator)(nil), // 1: cel.expr.conformance.Validator (*Feature)(nil), // 2: cel.expr.conformance.Feature (*Extension)(nil), // 3: cel.expr.conformance.Extension (*LibrarySubset)(nil), // 4: cel.expr.conformance.LibrarySubset (*Environment_Import)(nil), // 5: cel.expr.conformance.Environment.Import (*Environment_ContextVariable)(nil), // 6: cel.expr.conformance.Environment.ContextVariable nil, // 7: cel.expr.conformance.Validator.ConfigEntry (*expr.Decl)(nil), // 8: cel.expr.Decl (*descriptorpb.FileDescriptorSet)(nil), // 9: google.protobuf.FileDescriptorSet (*structpb.Value)(nil), // 10: google.protobuf.Value } var file_cel_expr_conformance_env_config_proto_depIdxs = []int32{ 5, // 0: cel.expr.conformance.Environment.imports:type_name -> cel.expr.conformance.Environment.Import 4, // 1: cel.expr.conformance.Environment.stdlib:type_name -> cel.expr.conformance.LibrarySubset 3, // 2: cel.expr.conformance.Environment.extensions:type_name -> cel.expr.conformance.Extension 6, // 3: cel.expr.conformance.Environment.context_variable:type_name -> cel.expr.conformance.Environment.ContextVariable 8, // 4: cel.expr.conformance.Environment.declarations:type_name -> cel.expr.Decl 1, // 5: cel.expr.conformance.Environment.validators:type_name -> cel.expr.conformance.Validator 2, // 6: cel.expr.conformance.Environment.features:type_name -> cel.expr.conformance.Feature 9, // 7: cel.expr.conformance.Environment.message_type_extension:type_name -> google.protobuf.FileDescriptorSet 7, // 8: cel.expr.conformance.Validator.config:type_name -> cel.expr.conformance.Validator.ConfigEntry 8, // 9: cel.expr.conformance.LibrarySubset.include_functions:type_name -> cel.expr.Decl 8, // 10: cel.expr.conformance.LibrarySubset.exclude_functions:type_name -> cel.expr.Decl 10, // 11: cel.expr.conformance.Validator.ConfigEntry.value:type_name -> google.protobuf.Value 12, // [12:12] is the sub-list for method output_type 12, // [12:12] is the sub-list for method input_type 12, // [12:12] is the sub-list for extension type_name 12, // [12:12] is the sub-list for extension extendee 0, // [0:12] is the sub-list for field type_name } func init() { file_cel_expr_conformance_env_config_proto_init() } func file_cel_expr_conformance_env_config_proto_init() { if File_cel_expr_conformance_env_config_proto != nil { return } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_conformance_env_config_proto_rawDesc, NumEnums: 0, NumMessages: 8, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_conformance_env_config_proto_goTypes, DependencyIndexes: file_cel_expr_conformance_env_config_proto_depIdxs, MessageInfos: file_cel_expr_conformance_env_config_proto_msgTypes, }.Build() File_cel_expr_conformance_env_config_proto = out.File file_cel_expr_conformance_env_config_proto_rawDesc = nil file_cel_expr_conformance_env_config_proto_goTypes = nil file_cel_expr_conformance_env_config_proto_depIdxs = nil } cel-spec-0.24.0/conformance/proto2/000077500000000000000000000000001500667630300170155ustar00rootroot00000000000000cel-spec-0.24.0/conformance/proto2/BUILD.bazel000077500000000000000000000027341500667630300207040ustar00rootroot00000000000000# Copyright 2024 Google LLC # # 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 # # https://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. load("@io_bazel_rules_go//go:def.bzl", "go_library") package( default_visibility = ["//visibility:public"], licenses = ["notice"], # Apache 2.0 ) go_library( name = "go_default_library", srcs = [ "test_all_types.pb.go", "test_all_types_extensions.pb.go", ], importpath = "cel.dev/expr/conformance/proto2", deps = [ "@org_golang_google_protobuf//reflect/protoreflect", "@org_golang_google_protobuf//runtime/protoimpl", "@org_golang_google_protobuf//types/known/anypb", "@org_golang_google_protobuf//types/known/durationpb", "@org_golang_google_protobuf//types/known/emptypb", "@org_golang_google_protobuf//types/known/fieldmaskpb", "@org_golang_google_protobuf//types/known/structpb", "@org_golang_google_protobuf//types/known/timestamppb", "@org_golang_google_protobuf//types/known/wrapperspb", ], ) cel-spec-0.24.0/conformance/proto2/test_all_types.pb.go000077500000000000000000014214161500667630300230130ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.3 // protoc v5.27.1 // source: cel/expr/conformance/proto2/test_all_types.proto package proto2 import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" durationpb "google.golang.org/protobuf/types/known/durationpb" emptypb "google.golang.org/protobuf/types/known/emptypb" fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" structpb "google.golang.org/protobuf/types/known/structpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type GlobalEnum int32 const ( GlobalEnum_GOO GlobalEnum = 0 GlobalEnum_GAR GlobalEnum = 1 GlobalEnum_GAZ GlobalEnum = 2 ) // Enum value maps for GlobalEnum. var ( GlobalEnum_name = map[int32]string{ 0: "GOO", 1: "GAR", 2: "GAZ", } GlobalEnum_value = map[string]int32{ "GOO": 0, "GAR": 1, "GAZ": 2, } ) func (x GlobalEnum) Enum() *GlobalEnum { p := new(GlobalEnum) *p = x return p } func (x GlobalEnum) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (GlobalEnum) Descriptor() protoreflect.EnumDescriptor { return file_cel_expr_conformance_proto2_test_all_types_proto_enumTypes[0].Descriptor() } func (GlobalEnum) Type() protoreflect.EnumType { return &file_cel_expr_conformance_proto2_test_all_types_proto_enumTypes[0] } func (x GlobalEnum) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *GlobalEnum) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = GlobalEnum(num) return nil } // Deprecated: Use GlobalEnum.Descriptor instead. func (GlobalEnum) EnumDescriptor() ([]byte, []int) { return file_cel_expr_conformance_proto2_test_all_types_proto_rawDescGZIP(), []int{0} } type TestAllTypes_NestedEnum int32 const ( TestAllTypes_FOO TestAllTypes_NestedEnum = 0 TestAllTypes_BAR TestAllTypes_NestedEnum = 1 TestAllTypes_BAZ TestAllTypes_NestedEnum = 2 ) // Enum value maps for TestAllTypes_NestedEnum. var ( TestAllTypes_NestedEnum_name = map[int32]string{ 0: "FOO", 1: "BAR", 2: "BAZ", } TestAllTypes_NestedEnum_value = map[string]int32{ "FOO": 0, "BAR": 1, "BAZ": 2, } ) func (x TestAllTypes_NestedEnum) Enum() *TestAllTypes_NestedEnum { p := new(TestAllTypes_NestedEnum) *p = x return p } func (x TestAllTypes_NestedEnum) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (TestAllTypes_NestedEnum) Descriptor() protoreflect.EnumDescriptor { return file_cel_expr_conformance_proto2_test_all_types_proto_enumTypes[1].Descriptor() } func (TestAllTypes_NestedEnum) Type() protoreflect.EnumType { return &file_cel_expr_conformance_proto2_test_all_types_proto_enumTypes[1] } func (x TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. func (x *TestAllTypes_NestedEnum) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } *x = TestAllTypes_NestedEnum(num) return nil } // Deprecated: Use TestAllTypes_NestedEnum.Descriptor instead. func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) { return file_cel_expr_conformance_proto2_test_all_types_proto_rawDescGZIP(), []int{0, 0} } type TestAllTypes struct { state protoimpl.MessageState `protogen:"open.v1"` SingleInt32 *int32 `protobuf:"varint,1,opt,name=single_int32,json=singleInt32,def=-32" json:"single_int32,omitempty"` SingleInt64 *int64 `protobuf:"varint,2,opt,name=single_int64,json=singleInt64,def=-64" json:"single_int64,omitempty"` SingleUint32 *uint32 `protobuf:"varint,3,opt,name=single_uint32,json=singleUint32,def=32" json:"single_uint32,omitempty"` SingleUint64 *uint64 `protobuf:"varint,4,opt,name=single_uint64,json=singleUint64,def=64" json:"single_uint64,omitempty"` SingleSint32 *int32 `protobuf:"zigzag32,5,opt,name=single_sint32,json=singleSint32" json:"single_sint32,omitempty"` SingleSint64 *int64 `protobuf:"zigzag64,6,opt,name=single_sint64,json=singleSint64" json:"single_sint64,omitempty"` SingleFixed32 *uint32 `protobuf:"fixed32,7,opt,name=single_fixed32,json=singleFixed32" json:"single_fixed32,omitempty"` SingleFixed64 *uint64 `protobuf:"fixed64,8,opt,name=single_fixed64,json=singleFixed64" json:"single_fixed64,omitempty"` SingleSfixed32 *int32 `protobuf:"fixed32,9,opt,name=single_sfixed32,json=singleSfixed32" json:"single_sfixed32,omitempty"` SingleSfixed64 *int64 `protobuf:"fixed64,10,opt,name=single_sfixed64,json=singleSfixed64" json:"single_sfixed64,omitempty"` SingleFloat *float32 `protobuf:"fixed32,11,opt,name=single_float,json=singleFloat,def=3" json:"single_float,omitempty"` SingleDouble *float64 `protobuf:"fixed64,12,opt,name=single_double,json=singleDouble,def=6.4" json:"single_double,omitempty"` SingleBool *bool `protobuf:"varint,13,opt,name=single_bool,json=singleBool,def=1" json:"single_bool,omitempty"` SingleString *string `protobuf:"bytes,14,opt,name=single_string,json=singleString,def=empty" json:"single_string,omitempty"` SingleBytes []byte `protobuf:"bytes,15,opt,name=single_bytes,json=singleBytes,def=none" json:"single_bytes,omitempty"` In *bool `protobuf:"varint,18,opt,name=in" json:"in,omitempty"` SingleAny *anypb.Any `protobuf:"bytes,100,opt,name=single_any,json=singleAny" json:"single_any,omitempty"` SingleDuration *durationpb.Duration `protobuf:"bytes,101,opt,name=single_duration,json=singleDuration" json:"single_duration,omitempty"` SingleTimestamp *timestamppb.Timestamp `protobuf:"bytes,102,opt,name=single_timestamp,json=singleTimestamp" json:"single_timestamp,omitempty"` SingleStruct *structpb.Struct `protobuf:"bytes,103,opt,name=single_struct,json=singleStruct" json:"single_struct,omitempty"` SingleValue *structpb.Value `protobuf:"bytes,104,opt,name=single_value,json=singleValue" json:"single_value,omitempty"` SingleInt64Wrapper *wrapperspb.Int64Value `protobuf:"bytes,105,opt,name=single_int64_wrapper,json=singleInt64Wrapper" json:"single_int64_wrapper,omitempty"` SingleInt32Wrapper *wrapperspb.Int32Value `protobuf:"bytes,106,opt,name=single_int32_wrapper,json=singleInt32Wrapper" json:"single_int32_wrapper,omitempty"` SingleDoubleWrapper *wrapperspb.DoubleValue `protobuf:"bytes,107,opt,name=single_double_wrapper,json=singleDoubleWrapper" json:"single_double_wrapper,omitempty"` SingleFloatWrapper *wrapperspb.FloatValue `protobuf:"bytes,108,opt,name=single_float_wrapper,json=singleFloatWrapper" json:"single_float_wrapper,omitempty"` SingleUint64Wrapper *wrapperspb.UInt64Value `protobuf:"bytes,109,opt,name=single_uint64_wrapper,json=singleUint64Wrapper" json:"single_uint64_wrapper,omitempty"` SingleUint32Wrapper *wrapperspb.UInt32Value `protobuf:"bytes,110,opt,name=single_uint32_wrapper,json=singleUint32Wrapper" json:"single_uint32_wrapper,omitempty"` SingleStringWrapper *wrapperspb.StringValue `protobuf:"bytes,111,opt,name=single_string_wrapper,json=singleStringWrapper" json:"single_string_wrapper,omitempty"` SingleBoolWrapper *wrapperspb.BoolValue `protobuf:"bytes,112,opt,name=single_bool_wrapper,json=singleBoolWrapper" json:"single_bool_wrapper,omitempty"` SingleBytesWrapper *wrapperspb.BytesValue `protobuf:"bytes,113,opt,name=single_bytes_wrapper,json=singleBytesWrapper" json:"single_bytes_wrapper,omitempty"` ListValue *structpb.ListValue `protobuf:"bytes,114,opt,name=list_value,json=listValue" json:"list_value,omitempty"` NullValue *structpb.NullValue `protobuf:"varint,115,opt,name=null_value,json=nullValue,enum=google.protobuf.NullValue" json:"null_value,omitempty"` OptionalNullValue *structpb.NullValue `protobuf:"varint,116,opt,name=optional_null_value,json=optionalNullValue,enum=google.protobuf.NullValue" json:"optional_null_value,omitempty"` FieldMask *fieldmaskpb.FieldMask `protobuf:"bytes,117,opt,name=field_mask,json=fieldMask" json:"field_mask,omitempty"` Empty *emptypb.Empty `protobuf:"bytes,118,opt,name=empty" json:"empty,omitempty"` // Types that are valid to be assigned to NestedType: // // *TestAllTypes_SingleNestedMessage // *TestAllTypes_SingleNestedEnum NestedType isTestAllTypes_NestedType `protobuf_oneof:"nested_type"` StandaloneMessage *TestAllTypes_NestedMessage `protobuf:"bytes,23,opt,name=standalone_message,json=standaloneMessage" json:"standalone_message,omitempty"` StandaloneEnum *TestAllTypes_NestedEnum `protobuf:"varint,24,opt,name=standalone_enum,json=standaloneEnum,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum" json:"standalone_enum,omitempty"` RepeatedInt32 []int32 `protobuf:"varint,31,rep,name=repeated_int32,json=repeatedInt32" json:"repeated_int32,omitempty"` RepeatedInt64 []int64 `protobuf:"varint,32,rep,name=repeated_int64,json=repeatedInt64" json:"repeated_int64,omitempty"` RepeatedUint32 []uint32 `protobuf:"varint,33,rep,name=repeated_uint32,json=repeatedUint32" json:"repeated_uint32,omitempty"` RepeatedUint64 []uint64 `protobuf:"varint,34,rep,name=repeated_uint64,json=repeatedUint64" json:"repeated_uint64,omitempty"` RepeatedSint32 []int32 `protobuf:"zigzag32,35,rep,name=repeated_sint32,json=repeatedSint32" json:"repeated_sint32,omitempty"` RepeatedSint64 []int64 `protobuf:"zigzag64,36,rep,name=repeated_sint64,json=repeatedSint64" json:"repeated_sint64,omitempty"` RepeatedFixed32 []uint32 `protobuf:"fixed32,37,rep,name=repeated_fixed32,json=repeatedFixed32" json:"repeated_fixed32,omitempty"` RepeatedFixed64 []uint64 `protobuf:"fixed64,38,rep,name=repeated_fixed64,json=repeatedFixed64" json:"repeated_fixed64,omitempty"` RepeatedSfixed32 []int32 `protobuf:"fixed32,39,rep,name=repeated_sfixed32,json=repeatedSfixed32" json:"repeated_sfixed32,omitempty"` RepeatedSfixed64 []int64 `protobuf:"fixed64,40,rep,name=repeated_sfixed64,json=repeatedSfixed64" json:"repeated_sfixed64,omitempty"` RepeatedFloat []float32 `protobuf:"fixed32,41,rep,name=repeated_float,json=repeatedFloat" json:"repeated_float,omitempty"` RepeatedDouble []float64 `protobuf:"fixed64,42,rep,name=repeated_double,json=repeatedDouble" json:"repeated_double,omitempty"` RepeatedBool []bool `protobuf:"varint,43,rep,name=repeated_bool,json=repeatedBool" json:"repeated_bool,omitempty"` RepeatedString []string `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString" json:"repeated_string,omitempty"` RepeatedBytes [][]byte `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes" json:"repeated_bytes,omitempty"` RepeatedNestedMessage []*TestAllTypes_NestedMessage `protobuf:"bytes,51,rep,name=repeated_nested_message,json=repeatedNestedMessage" json:"repeated_nested_message,omitempty"` RepeatedNestedEnum []TestAllTypes_NestedEnum `protobuf:"varint,52,rep,name=repeated_nested_enum,json=repeatedNestedEnum,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum" json:"repeated_nested_enum,omitempty"` RepeatedStringPiece []string `protobuf:"bytes,53,rep,name=repeated_string_piece,json=repeatedStringPiece" json:"repeated_string_piece,omitempty"` RepeatedCord []string `protobuf:"bytes,54,rep,name=repeated_cord,json=repeatedCord" json:"repeated_cord,omitempty"` RepeatedLazyMessage []*TestAllTypes_NestedMessage `protobuf:"bytes,55,rep,name=repeated_lazy_message,json=repeatedLazyMessage" json:"repeated_lazy_message,omitempty"` RepeatedAny []*anypb.Any `protobuf:"bytes,120,rep,name=repeated_any,json=repeatedAny" json:"repeated_any,omitempty"` RepeatedDuration []*durationpb.Duration `protobuf:"bytes,121,rep,name=repeated_duration,json=repeatedDuration" json:"repeated_duration,omitempty"` RepeatedTimestamp []*timestamppb.Timestamp `protobuf:"bytes,122,rep,name=repeated_timestamp,json=repeatedTimestamp" json:"repeated_timestamp,omitempty"` RepeatedStruct []*structpb.Struct `protobuf:"bytes,123,rep,name=repeated_struct,json=repeatedStruct" json:"repeated_struct,omitempty"` RepeatedValue []*structpb.Value `protobuf:"bytes,124,rep,name=repeated_value,json=repeatedValue" json:"repeated_value,omitempty"` RepeatedInt64Wrapper []*wrapperspb.Int64Value `protobuf:"bytes,125,rep,name=repeated_int64_wrapper,json=repeatedInt64Wrapper" json:"repeated_int64_wrapper,omitempty"` RepeatedInt32Wrapper []*wrapperspb.Int32Value `protobuf:"bytes,126,rep,name=repeated_int32_wrapper,json=repeatedInt32Wrapper" json:"repeated_int32_wrapper,omitempty"` RepeatedDoubleWrapper []*wrapperspb.DoubleValue `protobuf:"bytes,127,rep,name=repeated_double_wrapper,json=repeatedDoubleWrapper" json:"repeated_double_wrapper,omitempty"` RepeatedFloatWrapper []*wrapperspb.FloatValue `protobuf:"bytes,128,rep,name=repeated_float_wrapper,json=repeatedFloatWrapper" json:"repeated_float_wrapper,omitempty"` RepeatedUint64Wrapper []*wrapperspb.UInt64Value `protobuf:"bytes,129,rep,name=repeated_uint64_wrapper,json=repeatedUint64Wrapper" json:"repeated_uint64_wrapper,omitempty"` RepeatedUint32Wrapper []*wrapperspb.UInt32Value `protobuf:"bytes,130,rep,name=repeated_uint32_wrapper,json=repeatedUint32Wrapper" json:"repeated_uint32_wrapper,omitempty"` RepeatedStringWrapper []*wrapperspb.StringValue `protobuf:"bytes,131,rep,name=repeated_string_wrapper,json=repeatedStringWrapper" json:"repeated_string_wrapper,omitempty"` RepeatedBoolWrapper []*wrapperspb.BoolValue `protobuf:"bytes,132,rep,name=repeated_bool_wrapper,json=repeatedBoolWrapper" json:"repeated_bool_wrapper,omitempty"` RepeatedBytesWrapper []*wrapperspb.BytesValue `protobuf:"bytes,133,rep,name=repeated_bytes_wrapper,json=repeatedBytesWrapper" json:"repeated_bytes_wrapper,omitempty"` RepeatedListValue []*structpb.ListValue `protobuf:"bytes,134,rep,name=repeated_list_value,json=repeatedListValue" json:"repeated_list_value,omitempty"` RepeatedNullValue []structpb.NullValue `protobuf:"varint,135,rep,name=repeated_null_value,json=repeatedNullValue,enum=google.protobuf.NullValue" json:"repeated_null_value,omitempty"` MapInt64NestedType map[int64]*NestedTestAllTypes `protobuf:"bytes,62,rep,name=map_int64_nested_type,json=mapInt64NestedType" json:"map_int64_nested_type,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolBool map[bool]bool `protobuf:"bytes,63,rep,name=map_bool_bool,json=mapBoolBool" json:"map_bool_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolString map[bool]string `protobuf:"bytes,64,rep,name=map_bool_string,json=mapBoolString" json:"map_bool_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolBytes map[bool][]byte `protobuf:"bytes,65,rep,name=map_bool_bytes,json=mapBoolBytes" json:"map_bool_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolInt32 map[bool]int32 `protobuf:"bytes,66,rep,name=map_bool_int32,json=mapBoolInt32" json:"map_bool_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolInt64 map[bool]int64 `protobuf:"bytes,67,rep,name=map_bool_int64,json=mapBoolInt64" json:"map_bool_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolUint32 map[bool]uint32 `protobuf:"bytes,68,rep,name=map_bool_uint32,json=mapBoolUint32" json:"map_bool_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolUint64 map[bool]uint64 `protobuf:"bytes,69,rep,name=map_bool_uint64,json=mapBoolUint64" json:"map_bool_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolFloat map[bool]float32 `protobuf:"bytes,70,rep,name=map_bool_float,json=mapBoolFloat" json:"map_bool_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapBoolDouble map[bool]float64 `protobuf:"bytes,71,rep,name=map_bool_double,json=mapBoolDouble" json:"map_bool_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapBoolEnum map[bool]TestAllTypes_NestedEnum `protobuf:"bytes,72,rep,name=map_bool_enum,json=mapBoolEnum" json:"map_bool_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum"` MapBoolMessage map[bool]*TestAllTypes_NestedMessage `protobuf:"bytes,73,rep,name=map_bool_message,json=mapBoolMessage" json:"map_bool_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolDuration map[bool]*durationpb.Duration `protobuf:"bytes,228,rep,name=map_bool_duration,json=mapBoolDuration" json:"map_bool_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolTimestamp map[bool]*timestamppb.Timestamp `protobuf:"bytes,229,rep,name=map_bool_timestamp,json=mapBoolTimestamp" json:"map_bool_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolNullValue map[bool]structpb.NullValue `protobuf:"bytes,230,rep,name=map_bool_null_value,json=mapBoolNullValue" json:"map_bool_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapBoolAny map[bool]*anypb.Any `protobuf:"bytes,246,rep,name=map_bool_any,json=mapBoolAny" json:"map_bool_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolStruct map[bool]*structpb.Struct `protobuf:"bytes,247,rep,name=map_bool_struct,json=mapBoolStruct" json:"map_bool_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolValue map[bool]*structpb.Value `protobuf:"bytes,248,rep,name=map_bool_value,json=mapBoolValue" json:"map_bool_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolListValue map[bool]*structpb.ListValue `protobuf:"bytes,249,rep,name=map_bool_list_value,json=mapBoolListValue" json:"map_bool_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolInt64Wrapper map[bool]*wrapperspb.Int64Value `protobuf:"bytes,250,rep,name=map_bool_int64_wrapper,json=mapBoolInt64Wrapper" json:"map_bool_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolInt32Wrapper map[bool]*wrapperspb.Int32Value `protobuf:"bytes,251,rep,name=map_bool_int32_wrapper,json=mapBoolInt32Wrapper" json:"map_bool_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolDoubleWrapper map[bool]*wrapperspb.DoubleValue `protobuf:"bytes,252,rep,name=map_bool_double_wrapper,json=mapBoolDoubleWrapper" json:"map_bool_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolFloatWrapper map[bool]*wrapperspb.FloatValue `protobuf:"bytes,253,rep,name=map_bool_float_wrapper,json=mapBoolFloatWrapper" json:"map_bool_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolUint64Wrapper map[bool]*wrapperspb.UInt64Value `protobuf:"bytes,254,rep,name=map_bool_uint64_wrapper,json=mapBoolUint64Wrapper" json:"map_bool_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolUint32Wrapper map[bool]*wrapperspb.UInt32Value `protobuf:"bytes,255,rep,name=map_bool_uint32_wrapper,json=mapBoolUint32Wrapper" json:"map_bool_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolStringWrapper map[bool]*wrapperspb.StringValue `protobuf:"bytes,256,rep,name=map_bool_string_wrapper,json=mapBoolStringWrapper" json:"map_bool_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolBoolWrapper map[bool]*wrapperspb.BoolValue `protobuf:"bytes,257,rep,name=map_bool_bool_wrapper,json=mapBoolBoolWrapper" json:"map_bool_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolBytesWrapper map[bool]*wrapperspb.BytesValue `protobuf:"bytes,258,rep,name=map_bool_bytes_wrapper,json=mapBoolBytesWrapper" json:"map_bool_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Bool map[int32]bool `protobuf:"bytes,74,rep,name=map_int32_bool,json=mapInt32Bool" json:"map_int32_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32String map[int32]string `protobuf:"bytes,75,rep,name=map_int32_string,json=mapInt32String" json:"map_int32_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Bytes map[int32][]byte `protobuf:"bytes,76,rep,name=map_int32_bytes,json=mapInt32Bytes" json:"map_int32_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Int32 map[int32]int32 `protobuf:"bytes,77,rep,name=map_int32_int32,json=mapInt32Int32" json:"map_int32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32Int64 map[int32]int64 `protobuf:"bytes,78,rep,name=map_int32_int64,json=mapInt32Int64" json:"map_int32_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32Uint32 map[int32]uint32 `protobuf:"bytes,79,rep,name=map_int32_uint32,json=mapInt32Uint32" json:"map_int32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32Uint64 map[int32]uint64 `protobuf:"bytes,80,rep,name=map_int32_uint64,json=mapInt32Uint64" json:"map_int32_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32Float map[int32]float32 `protobuf:"bytes,81,rep,name=map_int32_float,json=mapInt32Float" json:"map_int32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapInt32Double map[int32]float64 `protobuf:"bytes,82,rep,name=map_int32_double,json=mapInt32Double" json:"map_int32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapInt32Enum map[int32]TestAllTypes_NestedEnum `protobuf:"bytes,83,rep,name=map_int32_enum,json=mapInt32Enum" json:"map_int32_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum"` MapInt32Message map[int32]*TestAllTypes_NestedMessage `protobuf:"bytes,84,rep,name=map_int32_message,json=mapInt32Message" json:"map_int32_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Duration map[int32]*durationpb.Duration `protobuf:"bytes,231,rep,name=map_int32_duration,json=mapInt32Duration" json:"map_int32_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Timestamp map[int32]*timestamppb.Timestamp `protobuf:"bytes,232,rep,name=map_int32_timestamp,json=mapInt32Timestamp" json:"map_int32_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32NullValue map[int32]structpb.NullValue `protobuf:"bytes,233,rep,name=map_int32_null_value,json=mapInt32NullValue" json:"map_int32_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapInt32Any map[int32]*anypb.Any `protobuf:"bytes,259,rep,name=map_int32_any,json=mapInt32Any" json:"map_int32_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Struct map[int32]*structpb.Struct `protobuf:"bytes,260,rep,name=map_int32_struct,json=mapInt32Struct" json:"map_int32_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Value map[int32]*structpb.Value `protobuf:"bytes,261,rep,name=map_int32_value,json=mapInt32Value" json:"map_int32_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32ListValue map[int32]*structpb.ListValue `protobuf:"bytes,262,rep,name=map_int32_list_value,json=mapInt32ListValue" json:"map_int32_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Int64Wrapper map[int32]*wrapperspb.Int64Value `protobuf:"bytes,263,rep,name=map_int32_int64_wrapper,json=mapInt32Int64Wrapper" json:"map_int32_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Int32Wrapper map[int32]*wrapperspb.Int32Value `protobuf:"bytes,264,rep,name=map_int32_int32_wrapper,json=mapInt32Int32Wrapper" json:"map_int32_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32DoubleWrapper map[int32]*wrapperspb.DoubleValue `protobuf:"bytes,265,rep,name=map_int32_double_wrapper,json=mapInt32DoubleWrapper" json:"map_int32_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32FloatWrapper map[int32]*wrapperspb.FloatValue `protobuf:"bytes,266,rep,name=map_int32_float_wrapper,json=mapInt32FloatWrapper" json:"map_int32_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Uint64Wrapper map[int32]*wrapperspb.UInt64Value `protobuf:"bytes,267,rep,name=map_int32_uint64_wrapper,json=mapInt32Uint64Wrapper" json:"map_int32_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Uint32Wrapper map[int32]*wrapperspb.UInt32Value `protobuf:"bytes,268,rep,name=map_int32_uint32_wrapper,json=mapInt32Uint32Wrapper" json:"map_int32_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32StringWrapper map[int32]*wrapperspb.StringValue `protobuf:"bytes,269,rep,name=map_int32_string_wrapper,json=mapInt32StringWrapper" json:"map_int32_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32BoolWrapper map[int32]*wrapperspb.BoolValue `protobuf:"bytes,270,rep,name=map_int32_bool_wrapper,json=mapInt32BoolWrapper" json:"map_int32_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32BytesWrapper map[int32]*wrapperspb.BytesValue `protobuf:"bytes,271,rep,name=map_int32_bytes_wrapper,json=mapInt32BytesWrapper" json:"map_int32_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Bool map[int64]bool `protobuf:"bytes,85,rep,name=map_int64_bool,json=mapInt64Bool" json:"map_int64_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64String map[int64]string `protobuf:"bytes,86,rep,name=map_int64_string,json=mapInt64String" json:"map_int64_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Bytes map[int64][]byte `protobuf:"bytes,87,rep,name=map_int64_bytes,json=mapInt64Bytes" json:"map_int64_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Int32 map[int64]int32 `protobuf:"bytes,88,rep,name=map_int64_int32,json=mapInt64Int32" json:"map_int64_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64Int64 map[int64]int64 `protobuf:"bytes,89,rep,name=map_int64_int64,json=mapInt64Int64" json:"map_int64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64Uint32 map[int64]uint32 `protobuf:"bytes,90,rep,name=map_int64_uint32,json=mapInt64Uint32" json:"map_int64_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64Uint64 map[int64]uint64 `protobuf:"bytes,91,rep,name=map_int64_uint64,json=mapInt64Uint64" json:"map_int64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64Float map[int64]float32 `protobuf:"bytes,92,rep,name=map_int64_float,json=mapInt64Float" json:"map_int64_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapInt64Double map[int64]float64 `protobuf:"bytes,93,rep,name=map_int64_double,json=mapInt64Double" json:"map_int64_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapInt64Enum map[int64]TestAllTypes_NestedEnum `protobuf:"bytes,94,rep,name=map_int64_enum,json=mapInt64Enum" json:"map_int64_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum"` MapInt64Message map[int64]*TestAllTypes_NestedMessage `protobuf:"bytes,95,rep,name=map_int64_message,json=mapInt64Message" json:"map_int64_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Duration map[int64]*durationpb.Duration `protobuf:"bytes,234,rep,name=map_int64_duration,json=mapInt64Duration" json:"map_int64_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Timestamp map[int64]*timestamppb.Timestamp `protobuf:"bytes,235,rep,name=map_int64_timestamp,json=mapInt64Timestamp" json:"map_int64_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64NullValue map[int64]structpb.NullValue `protobuf:"bytes,236,rep,name=map_int64_null_value,json=mapInt64NullValue" json:"map_int64_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapInt64Any map[int64]*anypb.Any `protobuf:"bytes,272,rep,name=map_int64_any,json=mapInt64Any" json:"map_int64_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Struct map[int64]*structpb.Struct `protobuf:"bytes,273,rep,name=map_int64_struct,json=mapInt64Struct" json:"map_int64_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Value map[int64]*structpb.Value `protobuf:"bytes,274,rep,name=map_int64_value,json=mapInt64Value" json:"map_int64_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64ListValue map[int64]*structpb.ListValue `protobuf:"bytes,275,rep,name=map_int64_list_value,json=mapInt64ListValue" json:"map_int64_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Int64Wrapper map[int64]*wrapperspb.Int64Value `protobuf:"bytes,276,rep,name=map_int64_int64_wrapper,json=mapInt64Int64Wrapper" json:"map_int64_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Int32Wrapper map[int64]*wrapperspb.Int32Value `protobuf:"bytes,277,rep,name=map_int64_int32_wrapper,json=mapInt64Int32Wrapper" json:"map_int64_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64DoubleWrapper map[int64]*wrapperspb.DoubleValue `protobuf:"bytes,278,rep,name=map_int64_double_wrapper,json=mapInt64DoubleWrapper" json:"map_int64_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64FloatWrapper map[int64]*wrapperspb.FloatValue `protobuf:"bytes,279,rep,name=map_int64_float_wrapper,json=mapInt64FloatWrapper" json:"map_int64_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Uint64Wrapper map[int64]*wrapperspb.UInt64Value `protobuf:"bytes,280,rep,name=map_int64_uint64_wrapper,json=mapInt64Uint64Wrapper" json:"map_int64_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Uint32Wrapper map[int64]*wrapperspb.UInt32Value `protobuf:"bytes,281,rep,name=map_int64_uint32_wrapper,json=mapInt64Uint32Wrapper" json:"map_int64_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64StringWrapper map[int64]*wrapperspb.StringValue `protobuf:"bytes,282,rep,name=map_int64_string_wrapper,json=mapInt64StringWrapper" json:"map_int64_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64BoolWrapper map[int64]*wrapperspb.BoolValue `protobuf:"bytes,283,rep,name=map_int64_bool_wrapper,json=mapInt64BoolWrapper" json:"map_int64_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64BytesWrapper map[int64]*wrapperspb.BytesValue `protobuf:"bytes,284,rep,name=map_int64_bytes_wrapper,json=mapInt64BytesWrapper" json:"map_int64_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Bool map[uint32]bool `protobuf:"bytes,96,rep,name=map_uint32_bool,json=mapUint32Bool" json:"map_uint32_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32String map[uint32]string `protobuf:"bytes,97,rep,name=map_uint32_string,json=mapUint32String" json:"map_uint32_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Bytes map[uint32][]byte `protobuf:"bytes,98,rep,name=map_uint32_bytes,json=mapUint32Bytes" json:"map_uint32_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Int32 map[uint32]int32 `protobuf:"bytes,99,rep,name=map_uint32_int32,json=mapUint32Int32" json:"map_uint32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32Int64 map[uint32]int64 `protobuf:"bytes,200,rep,name=map_uint32_int64,json=mapUint32Int64" json:"map_uint32_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32Uint32 map[uint32]uint32 `protobuf:"bytes,201,rep,name=map_uint32_uint32,json=mapUint32Uint32" json:"map_uint32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32Uint64 map[uint32]uint64 `protobuf:"bytes,202,rep,name=map_uint32_uint64,json=mapUint32Uint64" json:"map_uint32_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32Float map[uint32]float32 `protobuf:"bytes,203,rep,name=map_uint32_float,json=mapUint32Float" json:"map_uint32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapUint32Double map[uint32]float64 `protobuf:"bytes,204,rep,name=map_uint32_double,json=mapUint32Double" json:"map_uint32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapUint32Enum map[uint32]TestAllTypes_NestedEnum `protobuf:"bytes,205,rep,name=map_uint32_enum,json=mapUint32Enum" json:"map_uint32_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum"` MapUint32Message map[uint32]*TestAllTypes_NestedMessage `protobuf:"bytes,206,rep,name=map_uint32_message,json=mapUint32Message" json:"map_uint32_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Duration map[uint32]*durationpb.Duration `protobuf:"bytes,237,rep,name=map_uint32_duration,json=mapUint32Duration" json:"map_uint32_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Timestamp map[uint32]*timestamppb.Timestamp `protobuf:"bytes,238,rep,name=map_uint32_timestamp,json=mapUint32Timestamp" json:"map_uint32_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32NullValue map[uint32]structpb.NullValue `protobuf:"bytes,239,rep,name=map_uint32_null_value,json=mapUint32NullValue" json:"map_uint32_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapUint32Any map[uint32]*anypb.Any `protobuf:"bytes,285,rep,name=map_uint32_any,json=mapUint32Any" json:"map_uint32_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Struct map[uint32]*structpb.Struct `protobuf:"bytes,286,rep,name=map_uint32_struct,json=mapUint32Struct" json:"map_uint32_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Value map[uint32]*structpb.Value `protobuf:"bytes,287,rep,name=map_uint32_value,json=mapUint32Value" json:"map_uint32_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32ListValue map[uint32]*structpb.ListValue `protobuf:"bytes,288,rep,name=map_uint32_list_value,json=mapUint32ListValue" json:"map_uint32_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Int64Wrapper map[uint32]*wrapperspb.Int64Value `protobuf:"bytes,289,rep,name=map_uint32_int64_wrapper,json=mapUint32Int64Wrapper" json:"map_uint32_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Int32Wrapper map[uint32]*wrapperspb.Int32Value `protobuf:"bytes,290,rep,name=map_uint32_int32_wrapper,json=mapUint32Int32Wrapper" json:"map_uint32_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32DoubleWrapper map[uint32]*wrapperspb.DoubleValue `protobuf:"bytes,291,rep,name=map_uint32_double_wrapper,json=mapUint32DoubleWrapper" json:"map_uint32_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32FloatWrapper map[uint32]*wrapperspb.FloatValue `protobuf:"bytes,292,rep,name=map_uint32_float_wrapper,json=mapUint32FloatWrapper" json:"map_uint32_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Uint64Wrapper map[uint32]*wrapperspb.UInt64Value `protobuf:"bytes,293,rep,name=map_uint32_uint64_wrapper,json=mapUint32Uint64Wrapper" json:"map_uint32_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Uint32Wrapper map[uint32]*wrapperspb.UInt32Value `protobuf:"bytes,294,rep,name=map_uint32_uint32_wrapper,json=mapUint32Uint32Wrapper" json:"map_uint32_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32StringWrapper map[uint32]*wrapperspb.StringValue `protobuf:"bytes,295,rep,name=map_uint32_string_wrapper,json=mapUint32StringWrapper" json:"map_uint32_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32BoolWrapper map[uint32]*wrapperspb.BoolValue `protobuf:"bytes,296,rep,name=map_uint32_bool_wrapper,json=mapUint32BoolWrapper" json:"map_uint32_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32BytesWrapper map[uint32]*wrapperspb.BytesValue `protobuf:"bytes,297,rep,name=map_uint32_bytes_wrapper,json=mapUint32BytesWrapper" json:"map_uint32_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Bool map[uint64]bool `protobuf:"bytes,207,rep,name=map_uint64_bool,json=mapUint64Bool" json:"map_uint64_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64String map[uint64]string `protobuf:"bytes,208,rep,name=map_uint64_string,json=mapUint64String" json:"map_uint64_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Bytes map[uint64][]byte `protobuf:"bytes,209,rep,name=map_uint64_bytes,json=mapUint64Bytes" json:"map_uint64_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Int32 map[uint64]int32 `protobuf:"bytes,210,rep,name=map_uint64_int32,json=mapUint64Int32" json:"map_uint64_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64Int64 map[uint64]int64 `protobuf:"bytes,211,rep,name=map_uint64_int64,json=mapUint64Int64" json:"map_uint64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64Uint32 map[uint64]uint32 `protobuf:"bytes,212,rep,name=map_uint64_uint32,json=mapUint64Uint32" json:"map_uint64_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64Uint64 map[uint64]uint64 `protobuf:"bytes,213,rep,name=map_uint64_uint64,json=mapUint64Uint64" json:"map_uint64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64Float map[uint64]float32 `protobuf:"bytes,214,rep,name=map_uint64_float,json=mapUint64Float" json:"map_uint64_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapUint64Double map[uint64]float64 `protobuf:"bytes,215,rep,name=map_uint64_double,json=mapUint64Double" json:"map_uint64_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapUint64Enum map[uint64]TestAllTypes_NestedEnum `protobuf:"bytes,216,rep,name=map_uint64_enum,json=mapUint64Enum" json:"map_uint64_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum"` MapUint64Message map[uint64]*TestAllTypes_NestedMessage `protobuf:"bytes,217,rep,name=map_uint64_message,json=mapUint64Message" json:"map_uint64_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Duration map[uint64]*durationpb.Duration `protobuf:"bytes,240,rep,name=map_uint64_duration,json=mapUint64Duration" json:"map_uint64_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Timestamp map[uint64]*timestamppb.Timestamp `protobuf:"bytes,241,rep,name=map_uint64_timestamp,json=mapUint64Timestamp" json:"map_uint64_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64NullValue map[uint64]structpb.NullValue `protobuf:"bytes,242,rep,name=map_uint64_null_value,json=mapUint64NullValue" json:"map_uint64_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapUint64Any map[uint64]*anypb.Any `protobuf:"bytes,298,rep,name=map_uint64_any,json=mapUint64Any" json:"map_uint64_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Struct map[uint64]*structpb.Struct `protobuf:"bytes,299,rep,name=map_uint64_struct,json=mapUint64Struct" json:"map_uint64_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Value map[uint64]*structpb.Value `protobuf:"bytes,300,rep,name=map_uint64_value,json=mapUint64Value" json:"map_uint64_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64ListValue map[uint64]*structpb.ListValue `protobuf:"bytes,301,rep,name=map_uint64_list_value,json=mapUint64ListValue" json:"map_uint64_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Int64Wrapper map[uint64]*wrapperspb.Int64Value `protobuf:"bytes,302,rep,name=map_uint64_int64_wrapper,json=mapUint64Int64Wrapper" json:"map_uint64_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Int32Wrapper map[uint64]*wrapperspb.Int32Value `protobuf:"bytes,303,rep,name=map_uint64_int32_wrapper,json=mapUint64Int32Wrapper" json:"map_uint64_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64DoubleWrapper map[uint64]*wrapperspb.DoubleValue `protobuf:"bytes,304,rep,name=map_uint64_double_wrapper,json=mapUint64DoubleWrapper" json:"map_uint64_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64FloatWrapper map[uint64]*wrapperspb.FloatValue `protobuf:"bytes,305,rep,name=map_uint64_float_wrapper,json=mapUint64FloatWrapper" json:"map_uint64_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Uint64Wrapper map[uint64]*wrapperspb.UInt64Value `protobuf:"bytes,306,rep,name=map_uint64_uint64_wrapper,json=mapUint64Uint64Wrapper" json:"map_uint64_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Uint32Wrapper map[uint64]*wrapperspb.UInt32Value `protobuf:"bytes,307,rep,name=map_uint64_uint32_wrapper,json=mapUint64Uint32Wrapper" json:"map_uint64_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64StringWrapper map[uint64]*wrapperspb.StringValue `protobuf:"bytes,308,rep,name=map_uint64_string_wrapper,json=mapUint64StringWrapper" json:"map_uint64_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64BoolWrapper map[uint64]*wrapperspb.BoolValue `protobuf:"bytes,309,rep,name=map_uint64_bool_wrapper,json=mapUint64BoolWrapper" json:"map_uint64_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64BytesWrapper map[uint64]*wrapperspb.BytesValue `protobuf:"bytes,310,rep,name=map_uint64_bytes_wrapper,json=mapUint64BytesWrapper" json:"map_uint64_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringBool map[string]bool `protobuf:"bytes,218,rep,name=map_string_bool,json=mapStringBool" json:"map_string_bool,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringString map[string]string `protobuf:"bytes,61,rep,name=map_string_string,json=mapStringString" json:"map_string_string,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringBytes map[string][]byte `protobuf:"bytes,219,rep,name=map_string_bytes,json=mapStringBytes" json:"map_string_bytes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringInt32 map[string]int32 `protobuf:"bytes,220,rep,name=map_string_int32,json=mapStringInt32" json:"map_string_int32,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringInt64 map[string]int64 `protobuf:"bytes,221,rep,name=map_string_int64,json=mapStringInt64" json:"map_string_int64,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringUint32 map[string]uint32 `protobuf:"bytes,222,rep,name=map_string_uint32,json=mapStringUint32" json:"map_string_uint32,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringUint64 map[string]uint64 `protobuf:"bytes,223,rep,name=map_string_uint64,json=mapStringUint64" json:"map_string_uint64,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringFloat map[string]float32 `protobuf:"bytes,224,rep,name=map_string_float,json=mapStringFloat" json:"map_string_float,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapStringDouble map[string]float64 `protobuf:"bytes,225,rep,name=map_string_double,json=mapStringDouble" json:"map_string_double,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapStringEnum map[string]TestAllTypes_NestedEnum `protobuf:"bytes,226,rep,name=map_string_enum,json=mapStringEnum" json:"map_string_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum"` MapStringMessage map[string]*TestAllTypes_NestedMessage `protobuf:"bytes,227,rep,name=map_string_message,json=mapStringMessage" json:"map_string_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringDuration map[string]*durationpb.Duration `protobuf:"bytes,243,rep,name=map_string_duration,json=mapStringDuration" json:"map_string_duration,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringTimestamp map[string]*timestamppb.Timestamp `protobuf:"bytes,244,rep,name=map_string_timestamp,json=mapStringTimestamp" json:"map_string_timestamp,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringNullValue map[string]structpb.NullValue `protobuf:"bytes,245,rep,name=map_string_null_value,json=mapStringNullValue" json:"map_string_null_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapStringAny map[string]*anypb.Any `protobuf:"bytes,311,rep,name=map_string_any,json=mapStringAny" json:"map_string_any,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringStruct map[string]*structpb.Struct `protobuf:"bytes,312,rep,name=map_string_struct,json=mapStringStruct" json:"map_string_struct,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringValue map[string]*structpb.Value `protobuf:"bytes,313,rep,name=map_string_value,json=mapStringValue" json:"map_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringListValue map[string]*structpb.ListValue `protobuf:"bytes,314,rep,name=map_string_list_value,json=mapStringListValue" json:"map_string_list_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringInt64Wrapper map[string]*wrapperspb.Int64Value `protobuf:"bytes,315,rep,name=map_string_int64_wrapper,json=mapStringInt64Wrapper" json:"map_string_int64_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringInt32Wrapper map[string]*wrapperspb.Int32Value `protobuf:"bytes,316,rep,name=map_string_int32_wrapper,json=mapStringInt32Wrapper" json:"map_string_int32_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringDoubleWrapper map[string]*wrapperspb.DoubleValue `protobuf:"bytes,317,rep,name=map_string_double_wrapper,json=mapStringDoubleWrapper" json:"map_string_double_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringFloatWrapper map[string]*wrapperspb.FloatValue `protobuf:"bytes,318,rep,name=map_string_float_wrapper,json=mapStringFloatWrapper" json:"map_string_float_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringUint64Wrapper map[string]*wrapperspb.UInt64Value `protobuf:"bytes,319,rep,name=map_string_uint64_wrapper,json=mapStringUint64Wrapper" json:"map_string_uint64_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringUint32Wrapper map[string]*wrapperspb.UInt32Value `protobuf:"bytes,320,rep,name=map_string_uint32_wrapper,json=mapStringUint32Wrapper" json:"map_string_uint32_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringStringWrapper map[string]*wrapperspb.StringValue `protobuf:"bytes,321,rep,name=map_string_string_wrapper,json=mapStringStringWrapper" json:"map_string_string_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringBoolWrapper map[string]*wrapperspb.BoolValue `protobuf:"bytes,322,rep,name=map_string_bool_wrapper,json=mapStringBoolWrapper" json:"map_string_bool_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringBytesWrapper map[string]*wrapperspb.BytesValue `protobuf:"bytes,323,rep,name=map_string_bytes_wrapper,json=mapStringBytesWrapper" json:"map_string_bytes_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Types that are valid to be assigned to Kind: // // *TestAllTypes_OneofType // *TestAllTypes_OneofMsg // *TestAllTypes_OneofBool Kind isTestAllTypes_Kind `protobuf_oneof:"kind"` Nestedgroup *TestAllTypes_NestedGroup `protobuf:"group,403,opt,name=NestedGroup,json=nestedgroup" json:"nestedgroup,omitempty"` extensionFields protoimpl.ExtensionFields unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } // Default values for TestAllTypes fields. const ( Default_TestAllTypes_SingleInt32 = int32(-32) Default_TestAllTypes_SingleInt64 = int64(-64) Default_TestAllTypes_SingleUint32 = uint32(32) Default_TestAllTypes_SingleUint64 = uint64(64) Default_TestAllTypes_SingleFloat = float32(3) Default_TestAllTypes_SingleDouble = float64(6.4) Default_TestAllTypes_SingleBool = bool(true) Default_TestAllTypes_SingleString = string("empty") Default_TestAllTypes_SingleNestedEnum = TestAllTypes_BAR ) // Default values for TestAllTypes fields. var ( Default_TestAllTypes_SingleBytes = []byte("none") ) func (x *TestAllTypes) Reset() { *x = TestAllTypes{} mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestAllTypes) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestAllTypes) ProtoMessage() {} func (x *TestAllTypes) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestAllTypes.ProtoReflect.Descriptor instead. func (*TestAllTypes) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_proto2_test_all_types_proto_rawDescGZIP(), []int{0} } func (x *TestAllTypes) GetSingleInt32() int32 { if x != nil && x.SingleInt32 != nil { return *x.SingleInt32 } return Default_TestAllTypes_SingleInt32 } func (x *TestAllTypes) GetSingleInt64() int64 { if x != nil && x.SingleInt64 != nil { return *x.SingleInt64 } return Default_TestAllTypes_SingleInt64 } func (x *TestAllTypes) GetSingleUint32() uint32 { if x != nil && x.SingleUint32 != nil { return *x.SingleUint32 } return Default_TestAllTypes_SingleUint32 } func (x *TestAllTypes) GetSingleUint64() uint64 { if x != nil && x.SingleUint64 != nil { return *x.SingleUint64 } return Default_TestAllTypes_SingleUint64 } func (x *TestAllTypes) GetSingleSint32() int32 { if x != nil && x.SingleSint32 != nil { return *x.SingleSint32 } return 0 } func (x *TestAllTypes) GetSingleSint64() int64 { if x != nil && x.SingleSint64 != nil { return *x.SingleSint64 } return 0 } func (x *TestAllTypes) GetSingleFixed32() uint32 { if x != nil && x.SingleFixed32 != nil { return *x.SingleFixed32 } return 0 } func (x *TestAllTypes) GetSingleFixed64() uint64 { if x != nil && x.SingleFixed64 != nil { return *x.SingleFixed64 } return 0 } func (x *TestAllTypes) GetSingleSfixed32() int32 { if x != nil && x.SingleSfixed32 != nil { return *x.SingleSfixed32 } return 0 } func (x *TestAllTypes) GetSingleSfixed64() int64 { if x != nil && x.SingleSfixed64 != nil { return *x.SingleSfixed64 } return 0 } func (x *TestAllTypes) GetSingleFloat() float32 { if x != nil && x.SingleFloat != nil { return *x.SingleFloat } return Default_TestAllTypes_SingleFloat } func (x *TestAllTypes) GetSingleDouble() float64 { if x != nil && x.SingleDouble != nil { return *x.SingleDouble } return Default_TestAllTypes_SingleDouble } func (x *TestAllTypes) GetSingleBool() bool { if x != nil && x.SingleBool != nil { return *x.SingleBool } return Default_TestAllTypes_SingleBool } func (x *TestAllTypes) GetSingleString() string { if x != nil && x.SingleString != nil { return *x.SingleString } return Default_TestAllTypes_SingleString } func (x *TestAllTypes) GetSingleBytes() []byte { if x != nil && x.SingleBytes != nil { return x.SingleBytes } return append([]byte(nil), Default_TestAllTypes_SingleBytes...) } func (x *TestAllTypes) GetIn() bool { if x != nil && x.In != nil { return *x.In } return false } func (x *TestAllTypes) GetSingleAny() *anypb.Any { if x != nil { return x.SingleAny } return nil } func (x *TestAllTypes) GetSingleDuration() *durationpb.Duration { if x != nil { return x.SingleDuration } return nil } func (x *TestAllTypes) GetSingleTimestamp() *timestamppb.Timestamp { if x != nil { return x.SingleTimestamp } return nil } func (x *TestAllTypes) GetSingleStruct() *structpb.Struct { if x != nil { return x.SingleStruct } return nil } func (x *TestAllTypes) GetSingleValue() *structpb.Value { if x != nil { return x.SingleValue } return nil } func (x *TestAllTypes) GetSingleInt64Wrapper() *wrapperspb.Int64Value { if x != nil { return x.SingleInt64Wrapper } return nil } func (x *TestAllTypes) GetSingleInt32Wrapper() *wrapperspb.Int32Value { if x != nil { return x.SingleInt32Wrapper } return nil } func (x *TestAllTypes) GetSingleDoubleWrapper() *wrapperspb.DoubleValue { if x != nil { return x.SingleDoubleWrapper } return nil } func (x *TestAllTypes) GetSingleFloatWrapper() *wrapperspb.FloatValue { if x != nil { return x.SingleFloatWrapper } return nil } func (x *TestAllTypes) GetSingleUint64Wrapper() *wrapperspb.UInt64Value { if x != nil { return x.SingleUint64Wrapper } return nil } func (x *TestAllTypes) GetSingleUint32Wrapper() *wrapperspb.UInt32Value { if x != nil { return x.SingleUint32Wrapper } return nil } func (x *TestAllTypes) GetSingleStringWrapper() *wrapperspb.StringValue { if x != nil { return x.SingleStringWrapper } return nil } func (x *TestAllTypes) GetSingleBoolWrapper() *wrapperspb.BoolValue { if x != nil { return x.SingleBoolWrapper } return nil } func (x *TestAllTypes) GetSingleBytesWrapper() *wrapperspb.BytesValue { if x != nil { return x.SingleBytesWrapper } return nil } func (x *TestAllTypes) GetListValue() *structpb.ListValue { if x != nil { return x.ListValue } return nil } func (x *TestAllTypes) GetNullValue() structpb.NullValue { if x != nil && x.NullValue != nil { return *x.NullValue } return structpb.NullValue(0) } func (x *TestAllTypes) GetOptionalNullValue() structpb.NullValue { if x != nil && x.OptionalNullValue != nil { return *x.OptionalNullValue } return structpb.NullValue(0) } func (x *TestAllTypes) GetFieldMask() *fieldmaskpb.FieldMask { if x != nil { return x.FieldMask } return nil } func (x *TestAllTypes) GetEmpty() *emptypb.Empty { if x != nil { return x.Empty } return nil } func (x *TestAllTypes) GetNestedType() isTestAllTypes_NestedType { if x != nil { return x.NestedType } return nil } func (x *TestAllTypes) GetSingleNestedMessage() *TestAllTypes_NestedMessage { if x != nil { if x, ok := x.NestedType.(*TestAllTypes_SingleNestedMessage); ok { return x.SingleNestedMessage } } return nil } func (x *TestAllTypes) GetSingleNestedEnum() TestAllTypes_NestedEnum { if x != nil { if x, ok := x.NestedType.(*TestAllTypes_SingleNestedEnum); ok { return x.SingleNestedEnum } } return Default_TestAllTypes_SingleNestedEnum } func (x *TestAllTypes) GetStandaloneMessage() *TestAllTypes_NestedMessage { if x != nil { return x.StandaloneMessage } return nil } func (x *TestAllTypes) GetStandaloneEnum() TestAllTypes_NestedEnum { if x != nil && x.StandaloneEnum != nil { return *x.StandaloneEnum } return TestAllTypes_FOO } func (x *TestAllTypes) GetRepeatedInt32() []int32 { if x != nil { return x.RepeatedInt32 } return nil } func (x *TestAllTypes) GetRepeatedInt64() []int64 { if x != nil { return x.RepeatedInt64 } return nil } func (x *TestAllTypes) GetRepeatedUint32() []uint32 { if x != nil { return x.RepeatedUint32 } return nil } func (x *TestAllTypes) GetRepeatedUint64() []uint64 { if x != nil { return x.RepeatedUint64 } return nil } func (x *TestAllTypes) GetRepeatedSint32() []int32 { if x != nil { return x.RepeatedSint32 } return nil } func (x *TestAllTypes) GetRepeatedSint64() []int64 { if x != nil { return x.RepeatedSint64 } return nil } func (x *TestAllTypes) GetRepeatedFixed32() []uint32 { if x != nil { return x.RepeatedFixed32 } return nil } func (x *TestAllTypes) GetRepeatedFixed64() []uint64 { if x != nil { return x.RepeatedFixed64 } return nil } func (x *TestAllTypes) GetRepeatedSfixed32() []int32 { if x != nil { return x.RepeatedSfixed32 } return nil } func (x *TestAllTypes) GetRepeatedSfixed64() []int64 { if x != nil { return x.RepeatedSfixed64 } return nil } func (x *TestAllTypes) GetRepeatedFloat() []float32 { if x != nil { return x.RepeatedFloat } return nil } func (x *TestAllTypes) GetRepeatedDouble() []float64 { if x != nil { return x.RepeatedDouble } return nil } func (x *TestAllTypes) GetRepeatedBool() []bool { if x != nil { return x.RepeatedBool } return nil } func (x *TestAllTypes) GetRepeatedString() []string { if x != nil { return x.RepeatedString } return nil } func (x *TestAllTypes) GetRepeatedBytes() [][]byte { if x != nil { return x.RepeatedBytes } return nil } func (x *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage { if x != nil { return x.RepeatedNestedMessage } return nil } func (x *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum { if x != nil { return x.RepeatedNestedEnum } return nil } func (x *TestAllTypes) GetRepeatedStringPiece() []string { if x != nil { return x.RepeatedStringPiece } return nil } func (x *TestAllTypes) GetRepeatedCord() []string { if x != nil { return x.RepeatedCord } return nil } func (x *TestAllTypes) GetRepeatedLazyMessage() []*TestAllTypes_NestedMessage { if x != nil { return x.RepeatedLazyMessage } return nil } func (x *TestAllTypes) GetRepeatedAny() []*anypb.Any { if x != nil { return x.RepeatedAny } return nil } func (x *TestAllTypes) GetRepeatedDuration() []*durationpb.Duration { if x != nil { return x.RepeatedDuration } return nil } func (x *TestAllTypes) GetRepeatedTimestamp() []*timestamppb.Timestamp { if x != nil { return x.RepeatedTimestamp } return nil } func (x *TestAllTypes) GetRepeatedStruct() []*structpb.Struct { if x != nil { return x.RepeatedStruct } return nil } func (x *TestAllTypes) GetRepeatedValue() []*structpb.Value { if x != nil { return x.RepeatedValue } return nil } func (x *TestAllTypes) GetRepeatedInt64Wrapper() []*wrapperspb.Int64Value { if x != nil { return x.RepeatedInt64Wrapper } return nil } func (x *TestAllTypes) GetRepeatedInt32Wrapper() []*wrapperspb.Int32Value { if x != nil { return x.RepeatedInt32Wrapper } return nil } func (x *TestAllTypes) GetRepeatedDoubleWrapper() []*wrapperspb.DoubleValue { if x != nil { return x.RepeatedDoubleWrapper } return nil } func (x *TestAllTypes) GetRepeatedFloatWrapper() []*wrapperspb.FloatValue { if x != nil { return x.RepeatedFloatWrapper } return nil } func (x *TestAllTypes) GetRepeatedUint64Wrapper() []*wrapperspb.UInt64Value { if x != nil { return x.RepeatedUint64Wrapper } return nil } func (x *TestAllTypes) GetRepeatedUint32Wrapper() []*wrapperspb.UInt32Value { if x != nil { return x.RepeatedUint32Wrapper } return nil } func (x *TestAllTypes) GetRepeatedStringWrapper() []*wrapperspb.StringValue { if x != nil { return x.RepeatedStringWrapper } return nil } func (x *TestAllTypes) GetRepeatedBoolWrapper() []*wrapperspb.BoolValue { if x != nil { return x.RepeatedBoolWrapper } return nil } func (x *TestAllTypes) GetRepeatedBytesWrapper() []*wrapperspb.BytesValue { if x != nil { return x.RepeatedBytesWrapper } return nil } func (x *TestAllTypes) GetRepeatedListValue() []*structpb.ListValue { if x != nil { return x.RepeatedListValue } return nil } func (x *TestAllTypes) GetRepeatedNullValue() []structpb.NullValue { if x != nil { return x.RepeatedNullValue } return nil } func (x *TestAllTypes) GetMapInt64NestedType() map[int64]*NestedTestAllTypes { if x != nil { return x.MapInt64NestedType } return nil } func (x *TestAllTypes) GetMapBoolBool() map[bool]bool { if x != nil { return x.MapBoolBool } return nil } func (x *TestAllTypes) GetMapBoolString() map[bool]string { if x != nil { return x.MapBoolString } return nil } func (x *TestAllTypes) GetMapBoolBytes() map[bool][]byte { if x != nil { return x.MapBoolBytes } return nil } func (x *TestAllTypes) GetMapBoolInt32() map[bool]int32 { if x != nil { return x.MapBoolInt32 } return nil } func (x *TestAllTypes) GetMapBoolInt64() map[bool]int64 { if x != nil { return x.MapBoolInt64 } return nil } func (x *TestAllTypes) GetMapBoolUint32() map[bool]uint32 { if x != nil { return x.MapBoolUint32 } return nil } func (x *TestAllTypes) GetMapBoolUint64() map[bool]uint64 { if x != nil { return x.MapBoolUint64 } return nil } func (x *TestAllTypes) GetMapBoolFloat() map[bool]float32 { if x != nil { return x.MapBoolFloat } return nil } func (x *TestAllTypes) GetMapBoolDouble() map[bool]float64 { if x != nil { return x.MapBoolDouble } return nil } func (x *TestAllTypes) GetMapBoolEnum() map[bool]TestAllTypes_NestedEnum { if x != nil { return x.MapBoolEnum } return nil } func (x *TestAllTypes) GetMapBoolMessage() map[bool]*TestAllTypes_NestedMessage { if x != nil { return x.MapBoolMessage } return nil } func (x *TestAllTypes) GetMapBoolDuration() map[bool]*durationpb.Duration { if x != nil { return x.MapBoolDuration } return nil } func (x *TestAllTypes) GetMapBoolTimestamp() map[bool]*timestamppb.Timestamp { if x != nil { return x.MapBoolTimestamp } return nil } func (x *TestAllTypes) GetMapBoolNullValue() map[bool]structpb.NullValue { if x != nil { return x.MapBoolNullValue } return nil } func (x *TestAllTypes) GetMapBoolAny() map[bool]*anypb.Any { if x != nil { return x.MapBoolAny } return nil } func (x *TestAllTypes) GetMapBoolStruct() map[bool]*structpb.Struct { if x != nil { return x.MapBoolStruct } return nil } func (x *TestAllTypes) GetMapBoolValue() map[bool]*structpb.Value { if x != nil { return x.MapBoolValue } return nil } func (x *TestAllTypes) GetMapBoolListValue() map[bool]*structpb.ListValue { if x != nil { return x.MapBoolListValue } return nil } func (x *TestAllTypes) GetMapBoolInt64Wrapper() map[bool]*wrapperspb.Int64Value { if x != nil { return x.MapBoolInt64Wrapper } return nil } func (x *TestAllTypes) GetMapBoolInt32Wrapper() map[bool]*wrapperspb.Int32Value { if x != nil { return x.MapBoolInt32Wrapper } return nil } func (x *TestAllTypes) GetMapBoolDoubleWrapper() map[bool]*wrapperspb.DoubleValue { if x != nil { return x.MapBoolDoubleWrapper } return nil } func (x *TestAllTypes) GetMapBoolFloatWrapper() map[bool]*wrapperspb.FloatValue { if x != nil { return x.MapBoolFloatWrapper } return nil } func (x *TestAllTypes) GetMapBoolUint64Wrapper() map[bool]*wrapperspb.UInt64Value { if x != nil { return x.MapBoolUint64Wrapper } return nil } func (x *TestAllTypes) GetMapBoolUint32Wrapper() map[bool]*wrapperspb.UInt32Value { if x != nil { return x.MapBoolUint32Wrapper } return nil } func (x *TestAllTypes) GetMapBoolStringWrapper() map[bool]*wrapperspb.StringValue { if x != nil { return x.MapBoolStringWrapper } return nil } func (x *TestAllTypes) GetMapBoolBoolWrapper() map[bool]*wrapperspb.BoolValue { if x != nil { return x.MapBoolBoolWrapper } return nil } func (x *TestAllTypes) GetMapBoolBytesWrapper() map[bool]*wrapperspb.BytesValue { if x != nil { return x.MapBoolBytesWrapper } return nil } func (x *TestAllTypes) GetMapInt32Bool() map[int32]bool { if x != nil { return x.MapInt32Bool } return nil } func (x *TestAllTypes) GetMapInt32String() map[int32]string { if x != nil { return x.MapInt32String } return nil } func (x *TestAllTypes) GetMapInt32Bytes() map[int32][]byte { if x != nil { return x.MapInt32Bytes } return nil } func (x *TestAllTypes) GetMapInt32Int32() map[int32]int32 { if x != nil { return x.MapInt32Int32 } return nil } func (x *TestAllTypes) GetMapInt32Int64() map[int32]int64 { if x != nil { return x.MapInt32Int64 } return nil } func (x *TestAllTypes) GetMapInt32Uint32() map[int32]uint32 { if x != nil { return x.MapInt32Uint32 } return nil } func (x *TestAllTypes) GetMapInt32Uint64() map[int32]uint64 { if x != nil { return x.MapInt32Uint64 } return nil } func (x *TestAllTypes) GetMapInt32Float() map[int32]float32 { if x != nil { return x.MapInt32Float } return nil } func (x *TestAllTypes) GetMapInt32Double() map[int32]float64 { if x != nil { return x.MapInt32Double } return nil } func (x *TestAllTypes) GetMapInt32Enum() map[int32]TestAllTypes_NestedEnum { if x != nil { return x.MapInt32Enum } return nil } func (x *TestAllTypes) GetMapInt32Message() map[int32]*TestAllTypes_NestedMessage { if x != nil { return x.MapInt32Message } return nil } func (x *TestAllTypes) GetMapInt32Duration() map[int32]*durationpb.Duration { if x != nil { return x.MapInt32Duration } return nil } func (x *TestAllTypes) GetMapInt32Timestamp() map[int32]*timestamppb.Timestamp { if x != nil { return x.MapInt32Timestamp } return nil } func (x *TestAllTypes) GetMapInt32NullValue() map[int32]structpb.NullValue { if x != nil { return x.MapInt32NullValue } return nil } func (x *TestAllTypes) GetMapInt32Any() map[int32]*anypb.Any { if x != nil { return x.MapInt32Any } return nil } func (x *TestAllTypes) GetMapInt32Struct() map[int32]*structpb.Struct { if x != nil { return x.MapInt32Struct } return nil } func (x *TestAllTypes) GetMapInt32Value() map[int32]*structpb.Value { if x != nil { return x.MapInt32Value } return nil } func (x *TestAllTypes) GetMapInt32ListValue() map[int32]*structpb.ListValue { if x != nil { return x.MapInt32ListValue } return nil } func (x *TestAllTypes) GetMapInt32Int64Wrapper() map[int32]*wrapperspb.Int64Value { if x != nil { return x.MapInt32Int64Wrapper } return nil } func (x *TestAllTypes) GetMapInt32Int32Wrapper() map[int32]*wrapperspb.Int32Value { if x != nil { return x.MapInt32Int32Wrapper } return nil } func (x *TestAllTypes) GetMapInt32DoubleWrapper() map[int32]*wrapperspb.DoubleValue { if x != nil { return x.MapInt32DoubleWrapper } return nil } func (x *TestAllTypes) GetMapInt32FloatWrapper() map[int32]*wrapperspb.FloatValue { if x != nil { return x.MapInt32FloatWrapper } return nil } func (x *TestAllTypes) GetMapInt32Uint64Wrapper() map[int32]*wrapperspb.UInt64Value { if x != nil { return x.MapInt32Uint64Wrapper } return nil } func (x *TestAllTypes) GetMapInt32Uint32Wrapper() map[int32]*wrapperspb.UInt32Value { if x != nil { return x.MapInt32Uint32Wrapper } return nil } func (x *TestAllTypes) GetMapInt32StringWrapper() map[int32]*wrapperspb.StringValue { if x != nil { return x.MapInt32StringWrapper } return nil } func (x *TestAllTypes) GetMapInt32BoolWrapper() map[int32]*wrapperspb.BoolValue { if x != nil { return x.MapInt32BoolWrapper } return nil } func (x *TestAllTypes) GetMapInt32BytesWrapper() map[int32]*wrapperspb.BytesValue { if x != nil { return x.MapInt32BytesWrapper } return nil } func (x *TestAllTypes) GetMapInt64Bool() map[int64]bool { if x != nil { return x.MapInt64Bool } return nil } func (x *TestAllTypes) GetMapInt64String() map[int64]string { if x != nil { return x.MapInt64String } return nil } func (x *TestAllTypes) GetMapInt64Bytes() map[int64][]byte { if x != nil { return x.MapInt64Bytes } return nil } func (x *TestAllTypes) GetMapInt64Int32() map[int64]int32 { if x != nil { return x.MapInt64Int32 } return nil } func (x *TestAllTypes) GetMapInt64Int64() map[int64]int64 { if x != nil { return x.MapInt64Int64 } return nil } func (x *TestAllTypes) GetMapInt64Uint32() map[int64]uint32 { if x != nil { return x.MapInt64Uint32 } return nil } func (x *TestAllTypes) GetMapInt64Uint64() map[int64]uint64 { if x != nil { return x.MapInt64Uint64 } return nil } func (x *TestAllTypes) GetMapInt64Float() map[int64]float32 { if x != nil { return x.MapInt64Float } return nil } func (x *TestAllTypes) GetMapInt64Double() map[int64]float64 { if x != nil { return x.MapInt64Double } return nil } func (x *TestAllTypes) GetMapInt64Enum() map[int64]TestAllTypes_NestedEnum { if x != nil { return x.MapInt64Enum } return nil } func (x *TestAllTypes) GetMapInt64Message() map[int64]*TestAllTypes_NestedMessage { if x != nil { return x.MapInt64Message } return nil } func (x *TestAllTypes) GetMapInt64Duration() map[int64]*durationpb.Duration { if x != nil { return x.MapInt64Duration } return nil } func (x *TestAllTypes) GetMapInt64Timestamp() map[int64]*timestamppb.Timestamp { if x != nil { return x.MapInt64Timestamp } return nil } func (x *TestAllTypes) GetMapInt64NullValue() map[int64]structpb.NullValue { if x != nil { return x.MapInt64NullValue } return nil } func (x *TestAllTypes) GetMapInt64Any() map[int64]*anypb.Any { if x != nil { return x.MapInt64Any } return nil } func (x *TestAllTypes) GetMapInt64Struct() map[int64]*structpb.Struct { if x != nil { return x.MapInt64Struct } return nil } func (x *TestAllTypes) GetMapInt64Value() map[int64]*structpb.Value { if x != nil { return x.MapInt64Value } return nil } func (x *TestAllTypes) GetMapInt64ListValue() map[int64]*structpb.ListValue { if x != nil { return x.MapInt64ListValue } return nil } func (x *TestAllTypes) GetMapInt64Int64Wrapper() map[int64]*wrapperspb.Int64Value { if x != nil { return x.MapInt64Int64Wrapper } return nil } func (x *TestAllTypes) GetMapInt64Int32Wrapper() map[int64]*wrapperspb.Int32Value { if x != nil { return x.MapInt64Int32Wrapper } return nil } func (x *TestAllTypes) GetMapInt64DoubleWrapper() map[int64]*wrapperspb.DoubleValue { if x != nil { return x.MapInt64DoubleWrapper } return nil } func (x *TestAllTypes) GetMapInt64FloatWrapper() map[int64]*wrapperspb.FloatValue { if x != nil { return x.MapInt64FloatWrapper } return nil } func (x *TestAllTypes) GetMapInt64Uint64Wrapper() map[int64]*wrapperspb.UInt64Value { if x != nil { return x.MapInt64Uint64Wrapper } return nil } func (x *TestAllTypes) GetMapInt64Uint32Wrapper() map[int64]*wrapperspb.UInt32Value { if x != nil { return x.MapInt64Uint32Wrapper } return nil } func (x *TestAllTypes) GetMapInt64StringWrapper() map[int64]*wrapperspb.StringValue { if x != nil { return x.MapInt64StringWrapper } return nil } func (x *TestAllTypes) GetMapInt64BoolWrapper() map[int64]*wrapperspb.BoolValue { if x != nil { return x.MapInt64BoolWrapper } return nil } func (x *TestAllTypes) GetMapInt64BytesWrapper() map[int64]*wrapperspb.BytesValue { if x != nil { return x.MapInt64BytesWrapper } return nil } func (x *TestAllTypes) GetMapUint32Bool() map[uint32]bool { if x != nil { return x.MapUint32Bool } return nil } func (x *TestAllTypes) GetMapUint32String() map[uint32]string { if x != nil { return x.MapUint32String } return nil } func (x *TestAllTypes) GetMapUint32Bytes() map[uint32][]byte { if x != nil { return x.MapUint32Bytes } return nil } func (x *TestAllTypes) GetMapUint32Int32() map[uint32]int32 { if x != nil { return x.MapUint32Int32 } return nil } func (x *TestAllTypes) GetMapUint32Int64() map[uint32]int64 { if x != nil { return x.MapUint32Int64 } return nil } func (x *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 { if x != nil { return x.MapUint32Uint32 } return nil } func (x *TestAllTypes) GetMapUint32Uint64() map[uint32]uint64 { if x != nil { return x.MapUint32Uint64 } return nil } func (x *TestAllTypes) GetMapUint32Float() map[uint32]float32 { if x != nil { return x.MapUint32Float } return nil } func (x *TestAllTypes) GetMapUint32Double() map[uint32]float64 { if x != nil { return x.MapUint32Double } return nil } func (x *TestAllTypes) GetMapUint32Enum() map[uint32]TestAllTypes_NestedEnum { if x != nil { return x.MapUint32Enum } return nil } func (x *TestAllTypes) GetMapUint32Message() map[uint32]*TestAllTypes_NestedMessage { if x != nil { return x.MapUint32Message } return nil } func (x *TestAllTypes) GetMapUint32Duration() map[uint32]*durationpb.Duration { if x != nil { return x.MapUint32Duration } return nil } func (x *TestAllTypes) GetMapUint32Timestamp() map[uint32]*timestamppb.Timestamp { if x != nil { return x.MapUint32Timestamp } return nil } func (x *TestAllTypes) GetMapUint32NullValue() map[uint32]structpb.NullValue { if x != nil { return x.MapUint32NullValue } return nil } func (x *TestAllTypes) GetMapUint32Any() map[uint32]*anypb.Any { if x != nil { return x.MapUint32Any } return nil } func (x *TestAllTypes) GetMapUint32Struct() map[uint32]*structpb.Struct { if x != nil { return x.MapUint32Struct } return nil } func (x *TestAllTypes) GetMapUint32Value() map[uint32]*structpb.Value { if x != nil { return x.MapUint32Value } return nil } func (x *TestAllTypes) GetMapUint32ListValue() map[uint32]*structpb.ListValue { if x != nil { return x.MapUint32ListValue } return nil } func (x *TestAllTypes) GetMapUint32Int64Wrapper() map[uint32]*wrapperspb.Int64Value { if x != nil { return x.MapUint32Int64Wrapper } return nil } func (x *TestAllTypes) GetMapUint32Int32Wrapper() map[uint32]*wrapperspb.Int32Value { if x != nil { return x.MapUint32Int32Wrapper } return nil } func (x *TestAllTypes) GetMapUint32DoubleWrapper() map[uint32]*wrapperspb.DoubleValue { if x != nil { return x.MapUint32DoubleWrapper } return nil } func (x *TestAllTypes) GetMapUint32FloatWrapper() map[uint32]*wrapperspb.FloatValue { if x != nil { return x.MapUint32FloatWrapper } return nil } func (x *TestAllTypes) GetMapUint32Uint64Wrapper() map[uint32]*wrapperspb.UInt64Value { if x != nil { return x.MapUint32Uint64Wrapper } return nil } func (x *TestAllTypes) GetMapUint32Uint32Wrapper() map[uint32]*wrapperspb.UInt32Value { if x != nil { return x.MapUint32Uint32Wrapper } return nil } func (x *TestAllTypes) GetMapUint32StringWrapper() map[uint32]*wrapperspb.StringValue { if x != nil { return x.MapUint32StringWrapper } return nil } func (x *TestAllTypes) GetMapUint32BoolWrapper() map[uint32]*wrapperspb.BoolValue { if x != nil { return x.MapUint32BoolWrapper } return nil } func (x *TestAllTypes) GetMapUint32BytesWrapper() map[uint32]*wrapperspb.BytesValue { if x != nil { return x.MapUint32BytesWrapper } return nil } func (x *TestAllTypes) GetMapUint64Bool() map[uint64]bool { if x != nil { return x.MapUint64Bool } return nil } func (x *TestAllTypes) GetMapUint64String() map[uint64]string { if x != nil { return x.MapUint64String } return nil } func (x *TestAllTypes) GetMapUint64Bytes() map[uint64][]byte { if x != nil { return x.MapUint64Bytes } return nil } func (x *TestAllTypes) GetMapUint64Int32() map[uint64]int32 { if x != nil { return x.MapUint64Int32 } return nil } func (x *TestAllTypes) GetMapUint64Int64() map[uint64]int64 { if x != nil { return x.MapUint64Int64 } return nil } func (x *TestAllTypes) GetMapUint64Uint32() map[uint64]uint32 { if x != nil { return x.MapUint64Uint32 } return nil } func (x *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 { if x != nil { return x.MapUint64Uint64 } return nil } func (x *TestAllTypes) GetMapUint64Float() map[uint64]float32 { if x != nil { return x.MapUint64Float } return nil } func (x *TestAllTypes) GetMapUint64Double() map[uint64]float64 { if x != nil { return x.MapUint64Double } return nil } func (x *TestAllTypes) GetMapUint64Enum() map[uint64]TestAllTypes_NestedEnum { if x != nil { return x.MapUint64Enum } return nil } func (x *TestAllTypes) GetMapUint64Message() map[uint64]*TestAllTypes_NestedMessage { if x != nil { return x.MapUint64Message } return nil } func (x *TestAllTypes) GetMapUint64Duration() map[uint64]*durationpb.Duration { if x != nil { return x.MapUint64Duration } return nil } func (x *TestAllTypes) GetMapUint64Timestamp() map[uint64]*timestamppb.Timestamp { if x != nil { return x.MapUint64Timestamp } return nil } func (x *TestAllTypes) GetMapUint64NullValue() map[uint64]structpb.NullValue { if x != nil { return x.MapUint64NullValue } return nil } func (x *TestAllTypes) GetMapUint64Any() map[uint64]*anypb.Any { if x != nil { return x.MapUint64Any } return nil } func (x *TestAllTypes) GetMapUint64Struct() map[uint64]*structpb.Struct { if x != nil { return x.MapUint64Struct } return nil } func (x *TestAllTypes) GetMapUint64Value() map[uint64]*structpb.Value { if x != nil { return x.MapUint64Value } return nil } func (x *TestAllTypes) GetMapUint64ListValue() map[uint64]*structpb.ListValue { if x != nil { return x.MapUint64ListValue } return nil } func (x *TestAllTypes) GetMapUint64Int64Wrapper() map[uint64]*wrapperspb.Int64Value { if x != nil { return x.MapUint64Int64Wrapper } return nil } func (x *TestAllTypes) GetMapUint64Int32Wrapper() map[uint64]*wrapperspb.Int32Value { if x != nil { return x.MapUint64Int32Wrapper } return nil } func (x *TestAllTypes) GetMapUint64DoubleWrapper() map[uint64]*wrapperspb.DoubleValue { if x != nil { return x.MapUint64DoubleWrapper } return nil } func (x *TestAllTypes) GetMapUint64FloatWrapper() map[uint64]*wrapperspb.FloatValue { if x != nil { return x.MapUint64FloatWrapper } return nil } func (x *TestAllTypes) GetMapUint64Uint64Wrapper() map[uint64]*wrapperspb.UInt64Value { if x != nil { return x.MapUint64Uint64Wrapper } return nil } func (x *TestAllTypes) GetMapUint64Uint32Wrapper() map[uint64]*wrapperspb.UInt32Value { if x != nil { return x.MapUint64Uint32Wrapper } return nil } func (x *TestAllTypes) GetMapUint64StringWrapper() map[uint64]*wrapperspb.StringValue { if x != nil { return x.MapUint64StringWrapper } return nil } func (x *TestAllTypes) GetMapUint64BoolWrapper() map[uint64]*wrapperspb.BoolValue { if x != nil { return x.MapUint64BoolWrapper } return nil } func (x *TestAllTypes) GetMapUint64BytesWrapper() map[uint64]*wrapperspb.BytesValue { if x != nil { return x.MapUint64BytesWrapper } return nil } func (x *TestAllTypes) GetMapStringBool() map[string]bool { if x != nil { return x.MapStringBool } return nil } func (x *TestAllTypes) GetMapStringString() map[string]string { if x != nil { return x.MapStringString } return nil } func (x *TestAllTypes) GetMapStringBytes() map[string][]byte { if x != nil { return x.MapStringBytes } return nil } func (x *TestAllTypes) GetMapStringInt32() map[string]int32 { if x != nil { return x.MapStringInt32 } return nil } func (x *TestAllTypes) GetMapStringInt64() map[string]int64 { if x != nil { return x.MapStringInt64 } return nil } func (x *TestAllTypes) GetMapStringUint32() map[string]uint32 { if x != nil { return x.MapStringUint32 } return nil } func (x *TestAllTypes) GetMapStringUint64() map[string]uint64 { if x != nil { return x.MapStringUint64 } return nil } func (x *TestAllTypes) GetMapStringFloat() map[string]float32 { if x != nil { return x.MapStringFloat } return nil } func (x *TestAllTypes) GetMapStringDouble() map[string]float64 { if x != nil { return x.MapStringDouble } return nil } func (x *TestAllTypes) GetMapStringEnum() map[string]TestAllTypes_NestedEnum { if x != nil { return x.MapStringEnum } return nil } func (x *TestAllTypes) GetMapStringMessage() map[string]*TestAllTypes_NestedMessage { if x != nil { return x.MapStringMessage } return nil } func (x *TestAllTypes) GetMapStringDuration() map[string]*durationpb.Duration { if x != nil { return x.MapStringDuration } return nil } func (x *TestAllTypes) GetMapStringTimestamp() map[string]*timestamppb.Timestamp { if x != nil { return x.MapStringTimestamp } return nil } func (x *TestAllTypes) GetMapStringNullValue() map[string]structpb.NullValue { if x != nil { return x.MapStringNullValue } return nil } func (x *TestAllTypes) GetMapStringAny() map[string]*anypb.Any { if x != nil { return x.MapStringAny } return nil } func (x *TestAllTypes) GetMapStringStruct() map[string]*structpb.Struct { if x != nil { return x.MapStringStruct } return nil } func (x *TestAllTypes) GetMapStringValue() map[string]*structpb.Value { if x != nil { return x.MapStringValue } return nil } func (x *TestAllTypes) GetMapStringListValue() map[string]*structpb.ListValue { if x != nil { return x.MapStringListValue } return nil } func (x *TestAllTypes) GetMapStringInt64Wrapper() map[string]*wrapperspb.Int64Value { if x != nil { return x.MapStringInt64Wrapper } return nil } func (x *TestAllTypes) GetMapStringInt32Wrapper() map[string]*wrapperspb.Int32Value { if x != nil { return x.MapStringInt32Wrapper } return nil } func (x *TestAllTypes) GetMapStringDoubleWrapper() map[string]*wrapperspb.DoubleValue { if x != nil { return x.MapStringDoubleWrapper } return nil } func (x *TestAllTypes) GetMapStringFloatWrapper() map[string]*wrapperspb.FloatValue { if x != nil { return x.MapStringFloatWrapper } return nil } func (x *TestAllTypes) GetMapStringUint64Wrapper() map[string]*wrapperspb.UInt64Value { if x != nil { return x.MapStringUint64Wrapper } return nil } func (x *TestAllTypes) GetMapStringUint32Wrapper() map[string]*wrapperspb.UInt32Value { if x != nil { return x.MapStringUint32Wrapper } return nil } func (x *TestAllTypes) GetMapStringStringWrapper() map[string]*wrapperspb.StringValue { if x != nil { return x.MapStringStringWrapper } return nil } func (x *TestAllTypes) GetMapStringBoolWrapper() map[string]*wrapperspb.BoolValue { if x != nil { return x.MapStringBoolWrapper } return nil } func (x *TestAllTypes) GetMapStringBytesWrapper() map[string]*wrapperspb.BytesValue { if x != nil { return x.MapStringBytesWrapper } return nil } func (x *TestAllTypes) GetKind() isTestAllTypes_Kind { if x != nil { return x.Kind } return nil } func (x *TestAllTypes) GetOneofType() *NestedTestAllTypes { if x != nil { if x, ok := x.Kind.(*TestAllTypes_OneofType); ok { return x.OneofType } } return nil } func (x *TestAllTypes) GetOneofMsg() *TestAllTypes_NestedMessage { if x != nil { if x, ok := x.Kind.(*TestAllTypes_OneofMsg); ok { return x.OneofMsg } } return nil } func (x *TestAllTypes) GetOneofBool() bool { if x != nil { if x, ok := x.Kind.(*TestAllTypes_OneofBool); ok { return x.OneofBool } } return false } func (x *TestAllTypes) GetNestedgroup() *TestAllTypes_NestedGroup { if x != nil { return x.Nestedgroup } return nil } type isTestAllTypes_NestedType interface { isTestAllTypes_NestedType() } type TestAllTypes_SingleNestedMessage struct { SingleNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,21,opt,name=single_nested_message,json=singleNestedMessage,oneof"` } type TestAllTypes_SingleNestedEnum struct { SingleNestedEnum TestAllTypes_NestedEnum `protobuf:"varint,22,opt,name=single_nested_enum,json=singleNestedEnum,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum,oneof,def=1"` } func (*TestAllTypes_SingleNestedMessage) isTestAllTypes_NestedType() {} func (*TestAllTypes_SingleNestedEnum) isTestAllTypes_NestedType() {} type isTestAllTypes_Kind interface { isTestAllTypes_Kind() } type TestAllTypes_OneofType struct { OneofType *NestedTestAllTypes `protobuf:"bytes,400,opt,name=oneof_type,json=oneofType,oneof"` } type TestAllTypes_OneofMsg struct { OneofMsg *TestAllTypes_NestedMessage `protobuf:"bytes,401,opt,name=oneof_msg,json=oneofMsg,oneof"` } type TestAllTypes_OneofBool struct { OneofBool bool `protobuf:"varint,402,opt,name=oneof_bool,json=oneofBool,oneof"` } func (*TestAllTypes_OneofType) isTestAllTypes_Kind() {} func (*TestAllTypes_OneofMsg) isTestAllTypes_Kind() {} func (*TestAllTypes_OneofBool) isTestAllTypes_Kind() {} type NestedTestAllTypes struct { state protoimpl.MessageState `protogen:"open.v1"` Child *NestedTestAllTypes `protobuf:"bytes,1,opt,name=child" json:"child,omitempty"` Payload *TestAllTypes `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *NestedTestAllTypes) Reset() { *x = NestedTestAllTypes{} mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *NestedTestAllTypes) String() string { return protoimpl.X.MessageStringOf(x) } func (*NestedTestAllTypes) ProtoMessage() {} func (x *NestedTestAllTypes) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use NestedTestAllTypes.ProtoReflect.Descriptor instead. func (*NestedTestAllTypes) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_proto2_test_all_types_proto_rawDescGZIP(), []int{1} } func (x *NestedTestAllTypes) GetChild() *NestedTestAllTypes { if x != nil { return x.Child } return nil } func (x *NestedTestAllTypes) GetPayload() *TestAllTypes { if x != nil { return x.Payload } return nil } type TestRequired struct { state protoimpl.MessageState `protogen:"open.v1"` RequiredInt32 *int32 `protobuf:"varint,1,req,name=required_int32,json=requiredInt32" json:"required_int32,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TestRequired) Reset() { *x = TestRequired{} mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestRequired) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestRequired) ProtoMessage() {} func (x *TestRequired) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestRequired.ProtoReflect.Descriptor instead. func (*TestRequired) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_proto2_test_all_types_proto_rawDescGZIP(), []int{2} } func (x *TestRequired) GetRequiredInt32() int32 { if x != nil && x.RequiredInt32 != nil { return *x.RequiredInt32 } return 0 } type TestAllTypes_NestedMessage struct { state protoimpl.MessageState `protogen:"open.v1"` Bb *int32 `protobuf:"varint,1,opt,name=bb" json:"bb,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TestAllTypes_NestedMessage) Reset() { *x = TestAllTypes_NestedMessage{} mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestAllTypes_NestedMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestAllTypes_NestedMessage) ProtoMessage() {} func (x *TestAllTypes_NestedMessage) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestAllTypes_NestedMessage.ProtoReflect.Descriptor instead. func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_proto2_test_all_types_proto_rawDescGZIP(), []int{0, 0} } func (x *TestAllTypes_NestedMessage) GetBb() int32 { if x != nil && x.Bb != nil { return *x.Bb } return 0 } type TestAllTypes_NestedGroup struct { state protoimpl.MessageState `protogen:"open.v1"` SingleId *int32 `protobuf:"varint,404,opt,name=single_id,json=singleId" json:"single_id,omitempty"` SingleName *string `protobuf:"bytes,405,opt,name=single_name,json=singleName" json:"single_name,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TestAllTypes_NestedGroup) Reset() { *x = TestAllTypes_NestedGroup{} mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[167] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestAllTypes_NestedGroup) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestAllTypes_NestedGroup) ProtoMessage() {} func (x *TestAllTypes_NestedGroup) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[167] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestAllTypes_NestedGroup.ProtoReflect.Descriptor instead. func (*TestAllTypes_NestedGroup) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_proto2_test_all_types_proto_rawDescGZIP(), []int{0, 164} } func (x *TestAllTypes_NestedGroup) GetSingleId() int32 { if x != nil && x.SingleId != nil { return *x.SingleId } return 0 } func (x *TestAllTypes_NestedGroup) GetSingleName() string { if x != nil && x.SingleName != nil { return *x.SingleName } return "" } var File_cel_expr_conformance_proto2_test_all_types_proto protoreflect.FileDescriptor var file_cel_expr_conformance_proto2_test_all_types_proto_rawDesc = []byte{ 0x0a, 0x30, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1b, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xeb, 0xab, 0x02, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x3a, 0x03, 0x2d, 0x33, 0x32, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x26, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x3a, 0x03, 0x2d, 0x36, 0x34, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x3a, 0x02, 0x33, 0x32, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x3a, 0x02, 0x36, 0x34, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x24, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x3a, 0x01, 0x33, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x28, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x3a, 0x03, 0x36, 0x2e, 0x34, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x25, 0x0a, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x2a, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x3a, 0x05, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x3a, 0x04, 0x6e, 0x6f, 0x6e, 0x65, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x6e, 0x79, 0x12, 0x42, 0x0a, 0x0f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x10, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x67, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x39, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x68, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4d, 0x0a, 0x14, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x69, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x14, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x14, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x70, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x14, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x71, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x72, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x73, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x74, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x75, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x76, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x05, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x6d, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x69, 0x0a, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x03, 0x42, 0x41, 0x52, 0x48, 0x00, 0x52, 0x10, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x66, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x11, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x20, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x22, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x23, 0x20, 0x03, 0x28, 0x11, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x24, 0x20, 0x03, 0x28, 0x12, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x25, 0x20, 0x03, 0x28, 0x07, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x26, 0x20, 0x03, 0x28, 0x06, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x28, 0x20, 0x03, 0x28, 0x10, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x29, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x01, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x2b, 0x20, 0x03, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x2c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x6f, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x33, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x66, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x34, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x18, 0x35, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x08, 0x02, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x36, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x08, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x72, 0x64, 0x12, 0x6b, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x7a, 0x79, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x37, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x61, 0x7a, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x78, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x12, 0x46, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x79, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x7a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x40, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x7b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x3d, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x7c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x51, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x7d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x7e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x7f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x80, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x81, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x82, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x83, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x84, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x85, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x86, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x87, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x3e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5e, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x3f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x40, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x41, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x42, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x43, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x44, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x45, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x46, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x47, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x5e, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x48, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x49, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe4, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xe5, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x6f, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xe6, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5c, 0x0a, 0x0c, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0xf6, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x41, 0x6e, 0x79, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0xf7, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x62, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xf8, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6f, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xf9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfa, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfb, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfc, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfe, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xff, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x80, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x81, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x82, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x4a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x4b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x4c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x4d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x4e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x4f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x50, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x51, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x52, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x53, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6a, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x54, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xe8, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x72, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xe9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5f, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x83, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x84, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x85, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x72, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x86, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x87, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x88, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x89, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8a, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8b, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8c, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8d, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8e, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8f, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x55, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x56, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x57, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x58, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x59, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x5c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x5d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x5e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6a, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x5f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xea, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xeb, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x72, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xec, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5f, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x90, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x91, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x92, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x72, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x93, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x94, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x95, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x96, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x97, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x98, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x99, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x9a, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x9b, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x9c, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x60, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x6a, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x61, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x62, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x63, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xc8, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xca, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0xcb, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0xcc, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xcd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xce, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xed, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xee, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xef, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x62, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x9d, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x9e, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x9f, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xa0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa1, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa2, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa3, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa4, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa5, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa6, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa7, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa8, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa9, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0xcf, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0xd0, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xd1, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xd2, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xd3, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xd4, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xd5, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0xd6, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0xd7, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xd8, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xd9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf0, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xf1, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xf2, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x62, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0xaa, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0xab, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xac, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xad, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xae, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xaf, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb1, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb2, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb3, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb4, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb5, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb6, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0xda, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x6a, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xdb, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xdc, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xdd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xde, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xdf, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0xe0, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0xe1, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xe2, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe3, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf3, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xf4, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xf5, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x62, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0xb7, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x79, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0xb8, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xb9, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xba, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbb, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbc, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbd, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbe, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbf, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xc0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xc1, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xc2, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xc3, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x90, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x48, 0x01, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x57, 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x91, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x08, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4d, 0x73, 0x67, 0x12, 0x20, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x92, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x58, 0x0a, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x93, 0x03, 0x20, 0x01, 0x28, 0x0a, 0x32, 0x35, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x1f, 0x0a, 0x0d, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x62, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x62, 0x62, 0x1a, 0x76, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x74, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7a, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x53, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x75, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5a, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x62, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x75, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5a, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x62, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x76, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7c, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x76, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7c, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x76, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7c, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, 0x0b, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x94, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x95, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x27, 0x0a, 0x0a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x4f, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x41, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x41, 0x5a, 0x10, 0x02, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xa0, 0x01, 0x0a, 0x12, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x43, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x35, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x01, 0x20, 0x02, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x2a, 0x27, 0x0a, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x4f, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x41, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x41, 0x5a, 0x10, 0x02, 0x42, 0x5a, 0x0a, 0x1f, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x42, 0x11, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x1f, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xf8, 0x01, 0x01, } var ( file_cel_expr_conformance_proto2_test_all_types_proto_rawDescOnce sync.Once file_cel_expr_conformance_proto2_test_all_types_proto_rawDescData = file_cel_expr_conformance_proto2_test_all_types_proto_rawDesc ) func file_cel_expr_conformance_proto2_test_all_types_proto_rawDescGZIP() []byte { file_cel_expr_conformance_proto2_test_all_types_proto_rawDescOnce.Do(func() { file_cel_expr_conformance_proto2_test_all_types_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_conformance_proto2_test_all_types_proto_rawDescData) }) return file_cel_expr_conformance_proto2_test_all_types_proto_rawDescData } var file_cel_expr_conformance_proto2_test_all_types_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes = make([]protoimpl.MessageInfo, 168) var file_cel_expr_conformance_proto2_test_all_types_proto_goTypes = []any{ (GlobalEnum)(0), // 0: cel.expr.conformance.proto2.GlobalEnum (TestAllTypes_NestedEnum)(0), // 1: cel.expr.conformance.proto2.TestAllTypes.NestedEnum (*TestAllTypes)(nil), // 2: cel.expr.conformance.proto2.TestAllTypes (*NestedTestAllTypes)(nil), // 3: cel.expr.conformance.proto2.NestedTestAllTypes (*TestRequired)(nil), // 4: cel.expr.conformance.proto2.TestRequired (*TestAllTypes_NestedMessage)(nil), // 5: cel.expr.conformance.proto2.TestAllTypes.NestedMessage nil, // 6: cel.expr.conformance.proto2.TestAllTypes.MapInt64NestedTypeEntry nil, // 7: cel.expr.conformance.proto2.TestAllTypes.MapBoolBoolEntry nil, // 8: cel.expr.conformance.proto2.TestAllTypes.MapBoolStringEntry nil, // 9: cel.expr.conformance.proto2.TestAllTypes.MapBoolBytesEntry nil, // 10: cel.expr.conformance.proto2.TestAllTypes.MapBoolInt32Entry nil, // 11: cel.expr.conformance.proto2.TestAllTypes.MapBoolInt64Entry nil, // 12: cel.expr.conformance.proto2.TestAllTypes.MapBoolUint32Entry nil, // 13: cel.expr.conformance.proto2.TestAllTypes.MapBoolUint64Entry nil, // 14: cel.expr.conformance.proto2.TestAllTypes.MapBoolFloatEntry nil, // 15: cel.expr.conformance.proto2.TestAllTypes.MapBoolDoubleEntry nil, // 16: cel.expr.conformance.proto2.TestAllTypes.MapBoolEnumEntry nil, // 17: cel.expr.conformance.proto2.TestAllTypes.MapBoolMessageEntry nil, // 18: cel.expr.conformance.proto2.TestAllTypes.MapBoolDurationEntry nil, // 19: cel.expr.conformance.proto2.TestAllTypes.MapBoolTimestampEntry nil, // 20: cel.expr.conformance.proto2.TestAllTypes.MapBoolNullValueEntry nil, // 21: cel.expr.conformance.proto2.TestAllTypes.MapBoolAnyEntry nil, // 22: cel.expr.conformance.proto2.TestAllTypes.MapBoolStructEntry nil, // 23: cel.expr.conformance.proto2.TestAllTypes.MapBoolValueEntry nil, // 24: cel.expr.conformance.proto2.TestAllTypes.MapBoolListValueEntry nil, // 25: cel.expr.conformance.proto2.TestAllTypes.MapBoolInt64WrapperEntry nil, // 26: cel.expr.conformance.proto2.TestAllTypes.MapBoolInt32WrapperEntry nil, // 27: cel.expr.conformance.proto2.TestAllTypes.MapBoolDoubleWrapperEntry nil, // 28: cel.expr.conformance.proto2.TestAllTypes.MapBoolFloatWrapperEntry nil, // 29: cel.expr.conformance.proto2.TestAllTypes.MapBoolUint64WrapperEntry nil, // 30: cel.expr.conformance.proto2.TestAllTypes.MapBoolUint32WrapperEntry nil, // 31: cel.expr.conformance.proto2.TestAllTypes.MapBoolStringWrapperEntry nil, // 32: cel.expr.conformance.proto2.TestAllTypes.MapBoolBoolWrapperEntry nil, // 33: cel.expr.conformance.proto2.TestAllTypes.MapBoolBytesWrapperEntry nil, // 34: cel.expr.conformance.proto2.TestAllTypes.MapInt32BoolEntry nil, // 35: cel.expr.conformance.proto2.TestAllTypes.MapInt32StringEntry nil, // 36: cel.expr.conformance.proto2.TestAllTypes.MapInt32BytesEntry nil, // 37: cel.expr.conformance.proto2.TestAllTypes.MapInt32Int32Entry nil, // 38: cel.expr.conformance.proto2.TestAllTypes.MapInt32Int64Entry nil, // 39: cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint32Entry nil, // 40: cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint64Entry nil, // 41: cel.expr.conformance.proto2.TestAllTypes.MapInt32FloatEntry nil, // 42: cel.expr.conformance.proto2.TestAllTypes.MapInt32DoubleEntry nil, // 43: cel.expr.conformance.proto2.TestAllTypes.MapInt32EnumEntry nil, // 44: cel.expr.conformance.proto2.TestAllTypes.MapInt32MessageEntry nil, // 45: cel.expr.conformance.proto2.TestAllTypes.MapInt32DurationEntry nil, // 46: cel.expr.conformance.proto2.TestAllTypes.MapInt32TimestampEntry nil, // 47: cel.expr.conformance.proto2.TestAllTypes.MapInt32NullValueEntry nil, // 48: cel.expr.conformance.proto2.TestAllTypes.MapInt32AnyEntry nil, // 49: cel.expr.conformance.proto2.TestAllTypes.MapInt32StructEntry nil, // 50: cel.expr.conformance.proto2.TestAllTypes.MapInt32ValueEntry nil, // 51: cel.expr.conformance.proto2.TestAllTypes.MapInt32ListValueEntry nil, // 52: cel.expr.conformance.proto2.TestAllTypes.MapInt32Int64WrapperEntry nil, // 53: cel.expr.conformance.proto2.TestAllTypes.MapInt32Int32WrapperEntry nil, // 54: cel.expr.conformance.proto2.TestAllTypes.MapInt32DoubleWrapperEntry nil, // 55: cel.expr.conformance.proto2.TestAllTypes.MapInt32FloatWrapperEntry nil, // 56: cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint64WrapperEntry nil, // 57: cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint32WrapperEntry nil, // 58: cel.expr.conformance.proto2.TestAllTypes.MapInt32StringWrapperEntry nil, // 59: cel.expr.conformance.proto2.TestAllTypes.MapInt32BoolWrapperEntry nil, // 60: cel.expr.conformance.proto2.TestAllTypes.MapInt32BytesWrapperEntry nil, // 61: cel.expr.conformance.proto2.TestAllTypes.MapInt64BoolEntry nil, // 62: cel.expr.conformance.proto2.TestAllTypes.MapInt64StringEntry nil, // 63: cel.expr.conformance.proto2.TestAllTypes.MapInt64BytesEntry nil, // 64: cel.expr.conformance.proto2.TestAllTypes.MapInt64Int32Entry nil, // 65: cel.expr.conformance.proto2.TestAllTypes.MapInt64Int64Entry nil, // 66: cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint32Entry nil, // 67: cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint64Entry nil, // 68: cel.expr.conformance.proto2.TestAllTypes.MapInt64FloatEntry nil, // 69: cel.expr.conformance.proto2.TestAllTypes.MapInt64DoubleEntry nil, // 70: cel.expr.conformance.proto2.TestAllTypes.MapInt64EnumEntry nil, // 71: cel.expr.conformance.proto2.TestAllTypes.MapInt64MessageEntry nil, // 72: cel.expr.conformance.proto2.TestAllTypes.MapInt64DurationEntry nil, // 73: cel.expr.conformance.proto2.TestAllTypes.MapInt64TimestampEntry nil, // 74: cel.expr.conformance.proto2.TestAllTypes.MapInt64NullValueEntry nil, // 75: cel.expr.conformance.proto2.TestAllTypes.MapInt64AnyEntry nil, // 76: cel.expr.conformance.proto2.TestAllTypes.MapInt64StructEntry nil, // 77: cel.expr.conformance.proto2.TestAllTypes.MapInt64ValueEntry nil, // 78: cel.expr.conformance.proto2.TestAllTypes.MapInt64ListValueEntry nil, // 79: cel.expr.conformance.proto2.TestAllTypes.MapInt64Int64WrapperEntry nil, // 80: cel.expr.conformance.proto2.TestAllTypes.MapInt64Int32WrapperEntry nil, // 81: cel.expr.conformance.proto2.TestAllTypes.MapInt64DoubleWrapperEntry nil, // 82: cel.expr.conformance.proto2.TestAllTypes.MapInt64FloatWrapperEntry nil, // 83: cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint64WrapperEntry nil, // 84: cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint32WrapperEntry nil, // 85: cel.expr.conformance.proto2.TestAllTypes.MapInt64StringWrapperEntry nil, // 86: cel.expr.conformance.proto2.TestAllTypes.MapInt64BoolWrapperEntry nil, // 87: cel.expr.conformance.proto2.TestAllTypes.MapInt64BytesWrapperEntry nil, // 88: cel.expr.conformance.proto2.TestAllTypes.MapUint32BoolEntry nil, // 89: cel.expr.conformance.proto2.TestAllTypes.MapUint32StringEntry nil, // 90: cel.expr.conformance.proto2.TestAllTypes.MapUint32BytesEntry nil, // 91: cel.expr.conformance.proto2.TestAllTypes.MapUint32Int32Entry nil, // 92: cel.expr.conformance.proto2.TestAllTypes.MapUint32Int64Entry nil, // 93: cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint32Entry nil, // 94: cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint64Entry nil, // 95: cel.expr.conformance.proto2.TestAllTypes.MapUint32FloatEntry nil, // 96: cel.expr.conformance.proto2.TestAllTypes.MapUint32DoubleEntry nil, // 97: cel.expr.conformance.proto2.TestAllTypes.MapUint32EnumEntry nil, // 98: cel.expr.conformance.proto2.TestAllTypes.MapUint32MessageEntry nil, // 99: cel.expr.conformance.proto2.TestAllTypes.MapUint32DurationEntry nil, // 100: cel.expr.conformance.proto2.TestAllTypes.MapUint32TimestampEntry nil, // 101: cel.expr.conformance.proto2.TestAllTypes.MapUint32NullValueEntry nil, // 102: cel.expr.conformance.proto2.TestAllTypes.MapUint32AnyEntry nil, // 103: cel.expr.conformance.proto2.TestAllTypes.MapUint32StructEntry nil, // 104: cel.expr.conformance.proto2.TestAllTypes.MapUint32ValueEntry nil, // 105: cel.expr.conformance.proto2.TestAllTypes.MapUint32ListValueEntry nil, // 106: cel.expr.conformance.proto2.TestAllTypes.MapUint32Int64WrapperEntry nil, // 107: cel.expr.conformance.proto2.TestAllTypes.MapUint32Int32WrapperEntry nil, // 108: cel.expr.conformance.proto2.TestAllTypes.MapUint32DoubleWrapperEntry nil, // 109: cel.expr.conformance.proto2.TestAllTypes.MapUint32FloatWrapperEntry nil, // 110: cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint64WrapperEntry nil, // 111: cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint32WrapperEntry nil, // 112: cel.expr.conformance.proto2.TestAllTypes.MapUint32StringWrapperEntry nil, // 113: cel.expr.conformance.proto2.TestAllTypes.MapUint32BoolWrapperEntry nil, // 114: cel.expr.conformance.proto2.TestAllTypes.MapUint32BytesWrapperEntry nil, // 115: cel.expr.conformance.proto2.TestAllTypes.MapUint64BoolEntry nil, // 116: cel.expr.conformance.proto2.TestAllTypes.MapUint64StringEntry nil, // 117: cel.expr.conformance.proto2.TestAllTypes.MapUint64BytesEntry nil, // 118: cel.expr.conformance.proto2.TestAllTypes.MapUint64Int32Entry nil, // 119: cel.expr.conformance.proto2.TestAllTypes.MapUint64Int64Entry nil, // 120: cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint32Entry nil, // 121: cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint64Entry nil, // 122: cel.expr.conformance.proto2.TestAllTypes.MapUint64FloatEntry nil, // 123: cel.expr.conformance.proto2.TestAllTypes.MapUint64DoubleEntry nil, // 124: cel.expr.conformance.proto2.TestAllTypes.MapUint64EnumEntry nil, // 125: cel.expr.conformance.proto2.TestAllTypes.MapUint64MessageEntry nil, // 126: cel.expr.conformance.proto2.TestAllTypes.MapUint64DurationEntry nil, // 127: cel.expr.conformance.proto2.TestAllTypes.MapUint64TimestampEntry nil, // 128: cel.expr.conformance.proto2.TestAllTypes.MapUint64NullValueEntry nil, // 129: cel.expr.conformance.proto2.TestAllTypes.MapUint64AnyEntry nil, // 130: cel.expr.conformance.proto2.TestAllTypes.MapUint64StructEntry nil, // 131: cel.expr.conformance.proto2.TestAllTypes.MapUint64ValueEntry nil, // 132: cel.expr.conformance.proto2.TestAllTypes.MapUint64ListValueEntry nil, // 133: cel.expr.conformance.proto2.TestAllTypes.MapUint64Int64WrapperEntry nil, // 134: cel.expr.conformance.proto2.TestAllTypes.MapUint64Int32WrapperEntry nil, // 135: cel.expr.conformance.proto2.TestAllTypes.MapUint64DoubleWrapperEntry nil, // 136: cel.expr.conformance.proto2.TestAllTypes.MapUint64FloatWrapperEntry nil, // 137: cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint64WrapperEntry nil, // 138: cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint32WrapperEntry nil, // 139: cel.expr.conformance.proto2.TestAllTypes.MapUint64StringWrapperEntry nil, // 140: cel.expr.conformance.proto2.TestAllTypes.MapUint64BoolWrapperEntry nil, // 141: cel.expr.conformance.proto2.TestAllTypes.MapUint64BytesWrapperEntry nil, // 142: cel.expr.conformance.proto2.TestAllTypes.MapStringBoolEntry nil, // 143: cel.expr.conformance.proto2.TestAllTypes.MapStringStringEntry nil, // 144: cel.expr.conformance.proto2.TestAllTypes.MapStringBytesEntry nil, // 145: cel.expr.conformance.proto2.TestAllTypes.MapStringInt32Entry nil, // 146: cel.expr.conformance.proto2.TestAllTypes.MapStringInt64Entry nil, // 147: cel.expr.conformance.proto2.TestAllTypes.MapStringUint32Entry nil, // 148: cel.expr.conformance.proto2.TestAllTypes.MapStringUint64Entry nil, // 149: cel.expr.conformance.proto2.TestAllTypes.MapStringFloatEntry nil, // 150: cel.expr.conformance.proto2.TestAllTypes.MapStringDoubleEntry nil, // 151: cel.expr.conformance.proto2.TestAllTypes.MapStringEnumEntry nil, // 152: cel.expr.conformance.proto2.TestAllTypes.MapStringMessageEntry nil, // 153: cel.expr.conformance.proto2.TestAllTypes.MapStringDurationEntry nil, // 154: cel.expr.conformance.proto2.TestAllTypes.MapStringTimestampEntry nil, // 155: cel.expr.conformance.proto2.TestAllTypes.MapStringNullValueEntry nil, // 156: cel.expr.conformance.proto2.TestAllTypes.MapStringAnyEntry nil, // 157: cel.expr.conformance.proto2.TestAllTypes.MapStringStructEntry nil, // 158: cel.expr.conformance.proto2.TestAllTypes.MapStringValueEntry nil, // 159: cel.expr.conformance.proto2.TestAllTypes.MapStringListValueEntry nil, // 160: cel.expr.conformance.proto2.TestAllTypes.MapStringInt64WrapperEntry nil, // 161: cel.expr.conformance.proto2.TestAllTypes.MapStringInt32WrapperEntry nil, // 162: cel.expr.conformance.proto2.TestAllTypes.MapStringDoubleWrapperEntry nil, // 163: cel.expr.conformance.proto2.TestAllTypes.MapStringFloatWrapperEntry nil, // 164: cel.expr.conformance.proto2.TestAllTypes.MapStringUint64WrapperEntry nil, // 165: cel.expr.conformance.proto2.TestAllTypes.MapStringUint32WrapperEntry nil, // 166: cel.expr.conformance.proto2.TestAllTypes.MapStringStringWrapperEntry nil, // 167: cel.expr.conformance.proto2.TestAllTypes.MapStringBoolWrapperEntry nil, // 168: cel.expr.conformance.proto2.TestAllTypes.MapStringBytesWrapperEntry (*TestAllTypes_NestedGroup)(nil), // 169: cel.expr.conformance.proto2.TestAllTypes.NestedGroup (*anypb.Any)(nil), // 170: google.protobuf.Any (*durationpb.Duration)(nil), // 171: google.protobuf.Duration (*timestamppb.Timestamp)(nil), // 172: google.protobuf.Timestamp (*structpb.Struct)(nil), // 173: google.protobuf.Struct (*structpb.Value)(nil), // 174: google.protobuf.Value (*wrapperspb.Int64Value)(nil), // 175: google.protobuf.Int64Value (*wrapperspb.Int32Value)(nil), // 176: google.protobuf.Int32Value (*wrapperspb.DoubleValue)(nil), // 177: google.protobuf.DoubleValue (*wrapperspb.FloatValue)(nil), // 178: google.protobuf.FloatValue (*wrapperspb.UInt64Value)(nil), // 179: google.protobuf.UInt64Value (*wrapperspb.UInt32Value)(nil), // 180: google.protobuf.UInt32Value (*wrapperspb.StringValue)(nil), // 181: google.protobuf.StringValue (*wrapperspb.BoolValue)(nil), // 182: google.protobuf.BoolValue (*wrapperspb.BytesValue)(nil), // 183: google.protobuf.BytesValue (*structpb.ListValue)(nil), // 184: google.protobuf.ListValue (structpb.NullValue)(0), // 185: google.protobuf.NullValue (*fieldmaskpb.FieldMask)(nil), // 186: google.protobuf.FieldMask (*emptypb.Empty)(nil), // 187: google.protobuf.Empty } var file_cel_expr_conformance_proto2_test_all_types_proto_depIdxs = []int32{ 170, // 0: cel.expr.conformance.proto2.TestAllTypes.single_any:type_name -> google.protobuf.Any 171, // 1: cel.expr.conformance.proto2.TestAllTypes.single_duration:type_name -> google.protobuf.Duration 172, // 2: cel.expr.conformance.proto2.TestAllTypes.single_timestamp:type_name -> google.protobuf.Timestamp 173, // 3: cel.expr.conformance.proto2.TestAllTypes.single_struct:type_name -> google.protobuf.Struct 174, // 4: cel.expr.conformance.proto2.TestAllTypes.single_value:type_name -> google.protobuf.Value 175, // 5: cel.expr.conformance.proto2.TestAllTypes.single_int64_wrapper:type_name -> google.protobuf.Int64Value 176, // 6: cel.expr.conformance.proto2.TestAllTypes.single_int32_wrapper:type_name -> google.protobuf.Int32Value 177, // 7: cel.expr.conformance.proto2.TestAllTypes.single_double_wrapper:type_name -> google.protobuf.DoubleValue 178, // 8: cel.expr.conformance.proto2.TestAllTypes.single_float_wrapper:type_name -> google.protobuf.FloatValue 179, // 9: cel.expr.conformance.proto2.TestAllTypes.single_uint64_wrapper:type_name -> google.protobuf.UInt64Value 180, // 10: cel.expr.conformance.proto2.TestAllTypes.single_uint32_wrapper:type_name -> google.protobuf.UInt32Value 181, // 11: cel.expr.conformance.proto2.TestAllTypes.single_string_wrapper:type_name -> google.protobuf.StringValue 182, // 12: cel.expr.conformance.proto2.TestAllTypes.single_bool_wrapper:type_name -> google.protobuf.BoolValue 183, // 13: cel.expr.conformance.proto2.TestAllTypes.single_bytes_wrapper:type_name -> google.protobuf.BytesValue 184, // 14: cel.expr.conformance.proto2.TestAllTypes.list_value:type_name -> google.protobuf.ListValue 185, // 15: cel.expr.conformance.proto2.TestAllTypes.null_value:type_name -> google.protobuf.NullValue 185, // 16: cel.expr.conformance.proto2.TestAllTypes.optional_null_value:type_name -> google.protobuf.NullValue 186, // 17: cel.expr.conformance.proto2.TestAllTypes.field_mask:type_name -> google.protobuf.FieldMask 187, // 18: cel.expr.conformance.proto2.TestAllTypes.empty:type_name -> google.protobuf.Empty 5, // 19: cel.expr.conformance.proto2.TestAllTypes.single_nested_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 1, // 20: cel.expr.conformance.proto2.TestAllTypes.single_nested_enum:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 5, // 21: cel.expr.conformance.proto2.TestAllTypes.standalone_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 1, // 22: cel.expr.conformance.proto2.TestAllTypes.standalone_enum:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 5, // 23: cel.expr.conformance.proto2.TestAllTypes.repeated_nested_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 1, // 24: cel.expr.conformance.proto2.TestAllTypes.repeated_nested_enum:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 5, // 25: cel.expr.conformance.proto2.TestAllTypes.repeated_lazy_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 170, // 26: cel.expr.conformance.proto2.TestAllTypes.repeated_any:type_name -> google.protobuf.Any 171, // 27: cel.expr.conformance.proto2.TestAllTypes.repeated_duration:type_name -> google.protobuf.Duration 172, // 28: cel.expr.conformance.proto2.TestAllTypes.repeated_timestamp:type_name -> google.protobuf.Timestamp 173, // 29: cel.expr.conformance.proto2.TestAllTypes.repeated_struct:type_name -> google.protobuf.Struct 174, // 30: cel.expr.conformance.proto2.TestAllTypes.repeated_value:type_name -> google.protobuf.Value 175, // 31: cel.expr.conformance.proto2.TestAllTypes.repeated_int64_wrapper:type_name -> google.protobuf.Int64Value 176, // 32: cel.expr.conformance.proto2.TestAllTypes.repeated_int32_wrapper:type_name -> google.protobuf.Int32Value 177, // 33: cel.expr.conformance.proto2.TestAllTypes.repeated_double_wrapper:type_name -> google.protobuf.DoubleValue 178, // 34: cel.expr.conformance.proto2.TestAllTypes.repeated_float_wrapper:type_name -> google.protobuf.FloatValue 179, // 35: cel.expr.conformance.proto2.TestAllTypes.repeated_uint64_wrapper:type_name -> google.protobuf.UInt64Value 180, // 36: cel.expr.conformance.proto2.TestAllTypes.repeated_uint32_wrapper:type_name -> google.protobuf.UInt32Value 181, // 37: cel.expr.conformance.proto2.TestAllTypes.repeated_string_wrapper:type_name -> google.protobuf.StringValue 182, // 38: cel.expr.conformance.proto2.TestAllTypes.repeated_bool_wrapper:type_name -> google.protobuf.BoolValue 183, // 39: cel.expr.conformance.proto2.TestAllTypes.repeated_bytes_wrapper:type_name -> google.protobuf.BytesValue 184, // 40: cel.expr.conformance.proto2.TestAllTypes.repeated_list_value:type_name -> google.protobuf.ListValue 185, // 41: cel.expr.conformance.proto2.TestAllTypes.repeated_null_value:type_name -> google.protobuf.NullValue 6, // 42: cel.expr.conformance.proto2.TestAllTypes.map_int64_nested_type:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64NestedTypeEntry 7, // 43: cel.expr.conformance.proto2.TestAllTypes.map_bool_bool:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolBoolEntry 8, // 44: cel.expr.conformance.proto2.TestAllTypes.map_bool_string:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolStringEntry 9, // 45: cel.expr.conformance.proto2.TestAllTypes.map_bool_bytes:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolBytesEntry 10, // 46: cel.expr.conformance.proto2.TestAllTypes.map_bool_int32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolInt32Entry 11, // 47: cel.expr.conformance.proto2.TestAllTypes.map_bool_int64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolInt64Entry 12, // 48: cel.expr.conformance.proto2.TestAllTypes.map_bool_uint32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolUint32Entry 13, // 49: cel.expr.conformance.proto2.TestAllTypes.map_bool_uint64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolUint64Entry 14, // 50: cel.expr.conformance.proto2.TestAllTypes.map_bool_float:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolFloatEntry 15, // 51: cel.expr.conformance.proto2.TestAllTypes.map_bool_double:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolDoubleEntry 16, // 52: cel.expr.conformance.proto2.TestAllTypes.map_bool_enum:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolEnumEntry 17, // 53: cel.expr.conformance.proto2.TestAllTypes.map_bool_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolMessageEntry 18, // 54: cel.expr.conformance.proto2.TestAllTypes.map_bool_duration:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolDurationEntry 19, // 55: cel.expr.conformance.proto2.TestAllTypes.map_bool_timestamp:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolTimestampEntry 20, // 56: cel.expr.conformance.proto2.TestAllTypes.map_bool_null_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolNullValueEntry 21, // 57: cel.expr.conformance.proto2.TestAllTypes.map_bool_any:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolAnyEntry 22, // 58: cel.expr.conformance.proto2.TestAllTypes.map_bool_struct:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolStructEntry 23, // 59: cel.expr.conformance.proto2.TestAllTypes.map_bool_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolValueEntry 24, // 60: cel.expr.conformance.proto2.TestAllTypes.map_bool_list_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolListValueEntry 25, // 61: cel.expr.conformance.proto2.TestAllTypes.map_bool_int64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolInt64WrapperEntry 26, // 62: cel.expr.conformance.proto2.TestAllTypes.map_bool_int32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolInt32WrapperEntry 27, // 63: cel.expr.conformance.proto2.TestAllTypes.map_bool_double_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolDoubleWrapperEntry 28, // 64: cel.expr.conformance.proto2.TestAllTypes.map_bool_float_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolFloatWrapperEntry 29, // 65: cel.expr.conformance.proto2.TestAllTypes.map_bool_uint64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolUint64WrapperEntry 30, // 66: cel.expr.conformance.proto2.TestAllTypes.map_bool_uint32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolUint32WrapperEntry 31, // 67: cel.expr.conformance.proto2.TestAllTypes.map_bool_string_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolStringWrapperEntry 32, // 68: cel.expr.conformance.proto2.TestAllTypes.map_bool_bool_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolBoolWrapperEntry 33, // 69: cel.expr.conformance.proto2.TestAllTypes.map_bool_bytes_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapBoolBytesWrapperEntry 34, // 70: cel.expr.conformance.proto2.TestAllTypes.map_int32_bool:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32BoolEntry 35, // 71: cel.expr.conformance.proto2.TestAllTypes.map_int32_string:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32StringEntry 36, // 72: cel.expr.conformance.proto2.TestAllTypes.map_int32_bytes:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32BytesEntry 37, // 73: cel.expr.conformance.proto2.TestAllTypes.map_int32_int32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32Int32Entry 38, // 74: cel.expr.conformance.proto2.TestAllTypes.map_int32_int64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32Int64Entry 39, // 75: cel.expr.conformance.proto2.TestAllTypes.map_int32_uint32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint32Entry 40, // 76: cel.expr.conformance.proto2.TestAllTypes.map_int32_uint64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint64Entry 41, // 77: cel.expr.conformance.proto2.TestAllTypes.map_int32_float:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32FloatEntry 42, // 78: cel.expr.conformance.proto2.TestAllTypes.map_int32_double:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32DoubleEntry 43, // 79: cel.expr.conformance.proto2.TestAllTypes.map_int32_enum:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32EnumEntry 44, // 80: cel.expr.conformance.proto2.TestAllTypes.map_int32_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32MessageEntry 45, // 81: cel.expr.conformance.proto2.TestAllTypes.map_int32_duration:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32DurationEntry 46, // 82: cel.expr.conformance.proto2.TestAllTypes.map_int32_timestamp:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32TimestampEntry 47, // 83: cel.expr.conformance.proto2.TestAllTypes.map_int32_null_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32NullValueEntry 48, // 84: cel.expr.conformance.proto2.TestAllTypes.map_int32_any:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32AnyEntry 49, // 85: cel.expr.conformance.proto2.TestAllTypes.map_int32_struct:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32StructEntry 50, // 86: cel.expr.conformance.proto2.TestAllTypes.map_int32_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32ValueEntry 51, // 87: cel.expr.conformance.proto2.TestAllTypes.map_int32_list_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32ListValueEntry 52, // 88: cel.expr.conformance.proto2.TestAllTypes.map_int32_int64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32Int64WrapperEntry 53, // 89: cel.expr.conformance.proto2.TestAllTypes.map_int32_int32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32Int32WrapperEntry 54, // 90: cel.expr.conformance.proto2.TestAllTypes.map_int32_double_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32DoubleWrapperEntry 55, // 91: cel.expr.conformance.proto2.TestAllTypes.map_int32_float_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32FloatWrapperEntry 56, // 92: cel.expr.conformance.proto2.TestAllTypes.map_int32_uint64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint64WrapperEntry 57, // 93: cel.expr.conformance.proto2.TestAllTypes.map_int32_uint32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint32WrapperEntry 58, // 94: cel.expr.conformance.proto2.TestAllTypes.map_int32_string_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32StringWrapperEntry 59, // 95: cel.expr.conformance.proto2.TestAllTypes.map_int32_bool_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32BoolWrapperEntry 60, // 96: cel.expr.conformance.proto2.TestAllTypes.map_int32_bytes_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt32BytesWrapperEntry 61, // 97: cel.expr.conformance.proto2.TestAllTypes.map_int64_bool:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64BoolEntry 62, // 98: cel.expr.conformance.proto2.TestAllTypes.map_int64_string:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64StringEntry 63, // 99: cel.expr.conformance.proto2.TestAllTypes.map_int64_bytes:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64BytesEntry 64, // 100: cel.expr.conformance.proto2.TestAllTypes.map_int64_int32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64Int32Entry 65, // 101: cel.expr.conformance.proto2.TestAllTypes.map_int64_int64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64Int64Entry 66, // 102: cel.expr.conformance.proto2.TestAllTypes.map_int64_uint32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint32Entry 67, // 103: cel.expr.conformance.proto2.TestAllTypes.map_int64_uint64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint64Entry 68, // 104: cel.expr.conformance.proto2.TestAllTypes.map_int64_float:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64FloatEntry 69, // 105: cel.expr.conformance.proto2.TestAllTypes.map_int64_double:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64DoubleEntry 70, // 106: cel.expr.conformance.proto2.TestAllTypes.map_int64_enum:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64EnumEntry 71, // 107: cel.expr.conformance.proto2.TestAllTypes.map_int64_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64MessageEntry 72, // 108: cel.expr.conformance.proto2.TestAllTypes.map_int64_duration:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64DurationEntry 73, // 109: cel.expr.conformance.proto2.TestAllTypes.map_int64_timestamp:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64TimestampEntry 74, // 110: cel.expr.conformance.proto2.TestAllTypes.map_int64_null_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64NullValueEntry 75, // 111: cel.expr.conformance.proto2.TestAllTypes.map_int64_any:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64AnyEntry 76, // 112: cel.expr.conformance.proto2.TestAllTypes.map_int64_struct:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64StructEntry 77, // 113: cel.expr.conformance.proto2.TestAllTypes.map_int64_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64ValueEntry 78, // 114: cel.expr.conformance.proto2.TestAllTypes.map_int64_list_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64ListValueEntry 79, // 115: cel.expr.conformance.proto2.TestAllTypes.map_int64_int64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64Int64WrapperEntry 80, // 116: cel.expr.conformance.proto2.TestAllTypes.map_int64_int32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64Int32WrapperEntry 81, // 117: cel.expr.conformance.proto2.TestAllTypes.map_int64_double_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64DoubleWrapperEntry 82, // 118: cel.expr.conformance.proto2.TestAllTypes.map_int64_float_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64FloatWrapperEntry 83, // 119: cel.expr.conformance.proto2.TestAllTypes.map_int64_uint64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint64WrapperEntry 84, // 120: cel.expr.conformance.proto2.TestAllTypes.map_int64_uint32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint32WrapperEntry 85, // 121: cel.expr.conformance.proto2.TestAllTypes.map_int64_string_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64StringWrapperEntry 86, // 122: cel.expr.conformance.proto2.TestAllTypes.map_int64_bool_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64BoolWrapperEntry 87, // 123: cel.expr.conformance.proto2.TestAllTypes.map_int64_bytes_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapInt64BytesWrapperEntry 88, // 124: cel.expr.conformance.proto2.TestAllTypes.map_uint32_bool:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32BoolEntry 89, // 125: cel.expr.conformance.proto2.TestAllTypes.map_uint32_string:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32StringEntry 90, // 126: cel.expr.conformance.proto2.TestAllTypes.map_uint32_bytes:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32BytesEntry 91, // 127: cel.expr.conformance.proto2.TestAllTypes.map_uint32_int32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32Int32Entry 92, // 128: cel.expr.conformance.proto2.TestAllTypes.map_uint32_int64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32Int64Entry 93, // 129: cel.expr.conformance.proto2.TestAllTypes.map_uint32_uint32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint32Entry 94, // 130: cel.expr.conformance.proto2.TestAllTypes.map_uint32_uint64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint64Entry 95, // 131: cel.expr.conformance.proto2.TestAllTypes.map_uint32_float:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32FloatEntry 96, // 132: cel.expr.conformance.proto2.TestAllTypes.map_uint32_double:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32DoubleEntry 97, // 133: cel.expr.conformance.proto2.TestAllTypes.map_uint32_enum:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32EnumEntry 98, // 134: cel.expr.conformance.proto2.TestAllTypes.map_uint32_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32MessageEntry 99, // 135: cel.expr.conformance.proto2.TestAllTypes.map_uint32_duration:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32DurationEntry 100, // 136: cel.expr.conformance.proto2.TestAllTypes.map_uint32_timestamp:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32TimestampEntry 101, // 137: cel.expr.conformance.proto2.TestAllTypes.map_uint32_null_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32NullValueEntry 102, // 138: cel.expr.conformance.proto2.TestAllTypes.map_uint32_any:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32AnyEntry 103, // 139: cel.expr.conformance.proto2.TestAllTypes.map_uint32_struct:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32StructEntry 104, // 140: cel.expr.conformance.proto2.TestAllTypes.map_uint32_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32ValueEntry 105, // 141: cel.expr.conformance.proto2.TestAllTypes.map_uint32_list_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32ListValueEntry 106, // 142: cel.expr.conformance.proto2.TestAllTypes.map_uint32_int64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32Int64WrapperEntry 107, // 143: cel.expr.conformance.proto2.TestAllTypes.map_uint32_int32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32Int32WrapperEntry 108, // 144: cel.expr.conformance.proto2.TestAllTypes.map_uint32_double_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32DoubleWrapperEntry 109, // 145: cel.expr.conformance.proto2.TestAllTypes.map_uint32_float_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32FloatWrapperEntry 110, // 146: cel.expr.conformance.proto2.TestAllTypes.map_uint32_uint64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint64WrapperEntry 111, // 147: cel.expr.conformance.proto2.TestAllTypes.map_uint32_uint32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint32WrapperEntry 112, // 148: cel.expr.conformance.proto2.TestAllTypes.map_uint32_string_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32StringWrapperEntry 113, // 149: cel.expr.conformance.proto2.TestAllTypes.map_uint32_bool_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32BoolWrapperEntry 114, // 150: cel.expr.conformance.proto2.TestAllTypes.map_uint32_bytes_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint32BytesWrapperEntry 115, // 151: cel.expr.conformance.proto2.TestAllTypes.map_uint64_bool:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64BoolEntry 116, // 152: cel.expr.conformance.proto2.TestAllTypes.map_uint64_string:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64StringEntry 117, // 153: cel.expr.conformance.proto2.TestAllTypes.map_uint64_bytes:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64BytesEntry 118, // 154: cel.expr.conformance.proto2.TestAllTypes.map_uint64_int32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64Int32Entry 119, // 155: cel.expr.conformance.proto2.TestAllTypes.map_uint64_int64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64Int64Entry 120, // 156: cel.expr.conformance.proto2.TestAllTypes.map_uint64_uint32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint32Entry 121, // 157: cel.expr.conformance.proto2.TestAllTypes.map_uint64_uint64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint64Entry 122, // 158: cel.expr.conformance.proto2.TestAllTypes.map_uint64_float:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64FloatEntry 123, // 159: cel.expr.conformance.proto2.TestAllTypes.map_uint64_double:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64DoubleEntry 124, // 160: cel.expr.conformance.proto2.TestAllTypes.map_uint64_enum:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64EnumEntry 125, // 161: cel.expr.conformance.proto2.TestAllTypes.map_uint64_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64MessageEntry 126, // 162: cel.expr.conformance.proto2.TestAllTypes.map_uint64_duration:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64DurationEntry 127, // 163: cel.expr.conformance.proto2.TestAllTypes.map_uint64_timestamp:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64TimestampEntry 128, // 164: cel.expr.conformance.proto2.TestAllTypes.map_uint64_null_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64NullValueEntry 129, // 165: cel.expr.conformance.proto2.TestAllTypes.map_uint64_any:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64AnyEntry 130, // 166: cel.expr.conformance.proto2.TestAllTypes.map_uint64_struct:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64StructEntry 131, // 167: cel.expr.conformance.proto2.TestAllTypes.map_uint64_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64ValueEntry 132, // 168: cel.expr.conformance.proto2.TestAllTypes.map_uint64_list_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64ListValueEntry 133, // 169: cel.expr.conformance.proto2.TestAllTypes.map_uint64_int64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64Int64WrapperEntry 134, // 170: cel.expr.conformance.proto2.TestAllTypes.map_uint64_int32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64Int32WrapperEntry 135, // 171: cel.expr.conformance.proto2.TestAllTypes.map_uint64_double_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64DoubleWrapperEntry 136, // 172: cel.expr.conformance.proto2.TestAllTypes.map_uint64_float_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64FloatWrapperEntry 137, // 173: cel.expr.conformance.proto2.TestAllTypes.map_uint64_uint64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint64WrapperEntry 138, // 174: cel.expr.conformance.proto2.TestAllTypes.map_uint64_uint32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint32WrapperEntry 139, // 175: cel.expr.conformance.proto2.TestAllTypes.map_uint64_string_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64StringWrapperEntry 140, // 176: cel.expr.conformance.proto2.TestAllTypes.map_uint64_bool_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64BoolWrapperEntry 141, // 177: cel.expr.conformance.proto2.TestAllTypes.map_uint64_bytes_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapUint64BytesWrapperEntry 142, // 178: cel.expr.conformance.proto2.TestAllTypes.map_string_bool:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringBoolEntry 143, // 179: cel.expr.conformance.proto2.TestAllTypes.map_string_string:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringStringEntry 144, // 180: cel.expr.conformance.proto2.TestAllTypes.map_string_bytes:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringBytesEntry 145, // 181: cel.expr.conformance.proto2.TestAllTypes.map_string_int32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringInt32Entry 146, // 182: cel.expr.conformance.proto2.TestAllTypes.map_string_int64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringInt64Entry 147, // 183: cel.expr.conformance.proto2.TestAllTypes.map_string_uint32:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringUint32Entry 148, // 184: cel.expr.conformance.proto2.TestAllTypes.map_string_uint64:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringUint64Entry 149, // 185: cel.expr.conformance.proto2.TestAllTypes.map_string_float:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringFloatEntry 150, // 186: cel.expr.conformance.proto2.TestAllTypes.map_string_double:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringDoubleEntry 151, // 187: cel.expr.conformance.proto2.TestAllTypes.map_string_enum:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringEnumEntry 152, // 188: cel.expr.conformance.proto2.TestAllTypes.map_string_message:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringMessageEntry 153, // 189: cel.expr.conformance.proto2.TestAllTypes.map_string_duration:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringDurationEntry 154, // 190: cel.expr.conformance.proto2.TestAllTypes.map_string_timestamp:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringTimestampEntry 155, // 191: cel.expr.conformance.proto2.TestAllTypes.map_string_null_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringNullValueEntry 156, // 192: cel.expr.conformance.proto2.TestAllTypes.map_string_any:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringAnyEntry 157, // 193: cel.expr.conformance.proto2.TestAllTypes.map_string_struct:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringStructEntry 158, // 194: cel.expr.conformance.proto2.TestAllTypes.map_string_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringValueEntry 159, // 195: cel.expr.conformance.proto2.TestAllTypes.map_string_list_value:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringListValueEntry 160, // 196: cel.expr.conformance.proto2.TestAllTypes.map_string_int64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringInt64WrapperEntry 161, // 197: cel.expr.conformance.proto2.TestAllTypes.map_string_int32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringInt32WrapperEntry 162, // 198: cel.expr.conformance.proto2.TestAllTypes.map_string_double_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringDoubleWrapperEntry 163, // 199: cel.expr.conformance.proto2.TestAllTypes.map_string_float_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringFloatWrapperEntry 164, // 200: cel.expr.conformance.proto2.TestAllTypes.map_string_uint64_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringUint64WrapperEntry 165, // 201: cel.expr.conformance.proto2.TestAllTypes.map_string_uint32_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringUint32WrapperEntry 166, // 202: cel.expr.conformance.proto2.TestAllTypes.map_string_string_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringStringWrapperEntry 167, // 203: cel.expr.conformance.proto2.TestAllTypes.map_string_bool_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringBoolWrapperEntry 168, // 204: cel.expr.conformance.proto2.TestAllTypes.map_string_bytes_wrapper:type_name -> cel.expr.conformance.proto2.TestAllTypes.MapStringBytesWrapperEntry 3, // 205: cel.expr.conformance.proto2.TestAllTypes.oneof_type:type_name -> cel.expr.conformance.proto2.NestedTestAllTypes 5, // 206: cel.expr.conformance.proto2.TestAllTypes.oneof_msg:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 169, // 207: cel.expr.conformance.proto2.TestAllTypes.nestedgroup:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedGroup 3, // 208: cel.expr.conformance.proto2.NestedTestAllTypes.child:type_name -> cel.expr.conformance.proto2.NestedTestAllTypes 2, // 209: cel.expr.conformance.proto2.NestedTestAllTypes.payload:type_name -> cel.expr.conformance.proto2.TestAllTypes 3, // 210: cel.expr.conformance.proto2.TestAllTypes.MapInt64NestedTypeEntry.value:type_name -> cel.expr.conformance.proto2.NestedTestAllTypes 1, // 211: cel.expr.conformance.proto2.TestAllTypes.MapBoolEnumEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 5, // 212: cel.expr.conformance.proto2.TestAllTypes.MapBoolMessageEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 171, // 213: cel.expr.conformance.proto2.TestAllTypes.MapBoolDurationEntry.value:type_name -> google.protobuf.Duration 172, // 214: cel.expr.conformance.proto2.TestAllTypes.MapBoolTimestampEntry.value:type_name -> google.protobuf.Timestamp 185, // 215: cel.expr.conformance.proto2.TestAllTypes.MapBoolNullValueEntry.value:type_name -> google.protobuf.NullValue 170, // 216: cel.expr.conformance.proto2.TestAllTypes.MapBoolAnyEntry.value:type_name -> google.protobuf.Any 173, // 217: cel.expr.conformance.proto2.TestAllTypes.MapBoolStructEntry.value:type_name -> google.protobuf.Struct 174, // 218: cel.expr.conformance.proto2.TestAllTypes.MapBoolValueEntry.value:type_name -> google.protobuf.Value 184, // 219: cel.expr.conformance.proto2.TestAllTypes.MapBoolListValueEntry.value:type_name -> google.protobuf.ListValue 175, // 220: cel.expr.conformance.proto2.TestAllTypes.MapBoolInt64WrapperEntry.value:type_name -> google.protobuf.Int64Value 176, // 221: cel.expr.conformance.proto2.TestAllTypes.MapBoolInt32WrapperEntry.value:type_name -> google.protobuf.Int32Value 177, // 222: cel.expr.conformance.proto2.TestAllTypes.MapBoolDoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 178, // 223: cel.expr.conformance.proto2.TestAllTypes.MapBoolFloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 179, // 224: cel.expr.conformance.proto2.TestAllTypes.MapBoolUint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 180, // 225: cel.expr.conformance.proto2.TestAllTypes.MapBoolUint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 181, // 226: cel.expr.conformance.proto2.TestAllTypes.MapBoolStringWrapperEntry.value:type_name -> google.protobuf.StringValue 182, // 227: cel.expr.conformance.proto2.TestAllTypes.MapBoolBoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 183, // 228: cel.expr.conformance.proto2.TestAllTypes.MapBoolBytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 229: cel.expr.conformance.proto2.TestAllTypes.MapInt32EnumEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 5, // 230: cel.expr.conformance.proto2.TestAllTypes.MapInt32MessageEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 171, // 231: cel.expr.conformance.proto2.TestAllTypes.MapInt32DurationEntry.value:type_name -> google.protobuf.Duration 172, // 232: cel.expr.conformance.proto2.TestAllTypes.MapInt32TimestampEntry.value:type_name -> google.protobuf.Timestamp 185, // 233: cel.expr.conformance.proto2.TestAllTypes.MapInt32NullValueEntry.value:type_name -> google.protobuf.NullValue 170, // 234: cel.expr.conformance.proto2.TestAllTypes.MapInt32AnyEntry.value:type_name -> google.protobuf.Any 173, // 235: cel.expr.conformance.proto2.TestAllTypes.MapInt32StructEntry.value:type_name -> google.protobuf.Struct 174, // 236: cel.expr.conformance.proto2.TestAllTypes.MapInt32ValueEntry.value:type_name -> google.protobuf.Value 184, // 237: cel.expr.conformance.proto2.TestAllTypes.MapInt32ListValueEntry.value:type_name -> google.protobuf.ListValue 175, // 238: cel.expr.conformance.proto2.TestAllTypes.MapInt32Int64WrapperEntry.value:type_name -> google.protobuf.Int64Value 176, // 239: cel.expr.conformance.proto2.TestAllTypes.MapInt32Int32WrapperEntry.value:type_name -> google.protobuf.Int32Value 177, // 240: cel.expr.conformance.proto2.TestAllTypes.MapInt32DoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 178, // 241: cel.expr.conformance.proto2.TestAllTypes.MapInt32FloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 179, // 242: cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 180, // 243: cel.expr.conformance.proto2.TestAllTypes.MapInt32Uint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 181, // 244: cel.expr.conformance.proto2.TestAllTypes.MapInt32StringWrapperEntry.value:type_name -> google.protobuf.StringValue 182, // 245: cel.expr.conformance.proto2.TestAllTypes.MapInt32BoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 183, // 246: cel.expr.conformance.proto2.TestAllTypes.MapInt32BytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 247: cel.expr.conformance.proto2.TestAllTypes.MapInt64EnumEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 5, // 248: cel.expr.conformance.proto2.TestAllTypes.MapInt64MessageEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 171, // 249: cel.expr.conformance.proto2.TestAllTypes.MapInt64DurationEntry.value:type_name -> google.protobuf.Duration 172, // 250: cel.expr.conformance.proto2.TestAllTypes.MapInt64TimestampEntry.value:type_name -> google.protobuf.Timestamp 185, // 251: cel.expr.conformance.proto2.TestAllTypes.MapInt64NullValueEntry.value:type_name -> google.protobuf.NullValue 170, // 252: cel.expr.conformance.proto2.TestAllTypes.MapInt64AnyEntry.value:type_name -> google.protobuf.Any 173, // 253: cel.expr.conformance.proto2.TestAllTypes.MapInt64StructEntry.value:type_name -> google.protobuf.Struct 174, // 254: cel.expr.conformance.proto2.TestAllTypes.MapInt64ValueEntry.value:type_name -> google.protobuf.Value 184, // 255: cel.expr.conformance.proto2.TestAllTypes.MapInt64ListValueEntry.value:type_name -> google.protobuf.ListValue 175, // 256: cel.expr.conformance.proto2.TestAllTypes.MapInt64Int64WrapperEntry.value:type_name -> google.protobuf.Int64Value 176, // 257: cel.expr.conformance.proto2.TestAllTypes.MapInt64Int32WrapperEntry.value:type_name -> google.protobuf.Int32Value 177, // 258: cel.expr.conformance.proto2.TestAllTypes.MapInt64DoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 178, // 259: cel.expr.conformance.proto2.TestAllTypes.MapInt64FloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 179, // 260: cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 180, // 261: cel.expr.conformance.proto2.TestAllTypes.MapInt64Uint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 181, // 262: cel.expr.conformance.proto2.TestAllTypes.MapInt64StringWrapperEntry.value:type_name -> google.protobuf.StringValue 182, // 263: cel.expr.conformance.proto2.TestAllTypes.MapInt64BoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 183, // 264: cel.expr.conformance.proto2.TestAllTypes.MapInt64BytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 265: cel.expr.conformance.proto2.TestAllTypes.MapUint32EnumEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 5, // 266: cel.expr.conformance.proto2.TestAllTypes.MapUint32MessageEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 171, // 267: cel.expr.conformance.proto2.TestAllTypes.MapUint32DurationEntry.value:type_name -> google.protobuf.Duration 172, // 268: cel.expr.conformance.proto2.TestAllTypes.MapUint32TimestampEntry.value:type_name -> google.protobuf.Timestamp 185, // 269: cel.expr.conformance.proto2.TestAllTypes.MapUint32NullValueEntry.value:type_name -> google.protobuf.NullValue 170, // 270: cel.expr.conformance.proto2.TestAllTypes.MapUint32AnyEntry.value:type_name -> google.protobuf.Any 173, // 271: cel.expr.conformance.proto2.TestAllTypes.MapUint32StructEntry.value:type_name -> google.protobuf.Struct 174, // 272: cel.expr.conformance.proto2.TestAllTypes.MapUint32ValueEntry.value:type_name -> google.protobuf.Value 184, // 273: cel.expr.conformance.proto2.TestAllTypes.MapUint32ListValueEntry.value:type_name -> google.protobuf.ListValue 175, // 274: cel.expr.conformance.proto2.TestAllTypes.MapUint32Int64WrapperEntry.value:type_name -> google.protobuf.Int64Value 176, // 275: cel.expr.conformance.proto2.TestAllTypes.MapUint32Int32WrapperEntry.value:type_name -> google.protobuf.Int32Value 177, // 276: cel.expr.conformance.proto2.TestAllTypes.MapUint32DoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 178, // 277: cel.expr.conformance.proto2.TestAllTypes.MapUint32FloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 179, // 278: cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 180, // 279: cel.expr.conformance.proto2.TestAllTypes.MapUint32Uint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 181, // 280: cel.expr.conformance.proto2.TestAllTypes.MapUint32StringWrapperEntry.value:type_name -> google.protobuf.StringValue 182, // 281: cel.expr.conformance.proto2.TestAllTypes.MapUint32BoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 183, // 282: cel.expr.conformance.proto2.TestAllTypes.MapUint32BytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 283: cel.expr.conformance.proto2.TestAllTypes.MapUint64EnumEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 5, // 284: cel.expr.conformance.proto2.TestAllTypes.MapUint64MessageEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 171, // 285: cel.expr.conformance.proto2.TestAllTypes.MapUint64DurationEntry.value:type_name -> google.protobuf.Duration 172, // 286: cel.expr.conformance.proto2.TestAllTypes.MapUint64TimestampEntry.value:type_name -> google.protobuf.Timestamp 185, // 287: cel.expr.conformance.proto2.TestAllTypes.MapUint64NullValueEntry.value:type_name -> google.protobuf.NullValue 170, // 288: cel.expr.conformance.proto2.TestAllTypes.MapUint64AnyEntry.value:type_name -> google.protobuf.Any 173, // 289: cel.expr.conformance.proto2.TestAllTypes.MapUint64StructEntry.value:type_name -> google.protobuf.Struct 174, // 290: cel.expr.conformance.proto2.TestAllTypes.MapUint64ValueEntry.value:type_name -> google.protobuf.Value 184, // 291: cel.expr.conformance.proto2.TestAllTypes.MapUint64ListValueEntry.value:type_name -> google.protobuf.ListValue 175, // 292: cel.expr.conformance.proto2.TestAllTypes.MapUint64Int64WrapperEntry.value:type_name -> google.protobuf.Int64Value 176, // 293: cel.expr.conformance.proto2.TestAllTypes.MapUint64Int32WrapperEntry.value:type_name -> google.protobuf.Int32Value 177, // 294: cel.expr.conformance.proto2.TestAllTypes.MapUint64DoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 178, // 295: cel.expr.conformance.proto2.TestAllTypes.MapUint64FloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 179, // 296: cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 180, // 297: cel.expr.conformance.proto2.TestAllTypes.MapUint64Uint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 181, // 298: cel.expr.conformance.proto2.TestAllTypes.MapUint64StringWrapperEntry.value:type_name -> google.protobuf.StringValue 182, // 299: cel.expr.conformance.proto2.TestAllTypes.MapUint64BoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 183, // 300: cel.expr.conformance.proto2.TestAllTypes.MapUint64BytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 301: cel.expr.conformance.proto2.TestAllTypes.MapStringEnumEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 5, // 302: cel.expr.conformance.proto2.TestAllTypes.MapStringMessageEntry.value:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedMessage 171, // 303: cel.expr.conformance.proto2.TestAllTypes.MapStringDurationEntry.value:type_name -> google.protobuf.Duration 172, // 304: cel.expr.conformance.proto2.TestAllTypes.MapStringTimestampEntry.value:type_name -> google.protobuf.Timestamp 185, // 305: cel.expr.conformance.proto2.TestAllTypes.MapStringNullValueEntry.value:type_name -> google.protobuf.NullValue 170, // 306: cel.expr.conformance.proto2.TestAllTypes.MapStringAnyEntry.value:type_name -> google.protobuf.Any 173, // 307: cel.expr.conformance.proto2.TestAllTypes.MapStringStructEntry.value:type_name -> google.protobuf.Struct 174, // 308: cel.expr.conformance.proto2.TestAllTypes.MapStringValueEntry.value:type_name -> google.protobuf.Value 184, // 309: cel.expr.conformance.proto2.TestAllTypes.MapStringListValueEntry.value:type_name -> google.protobuf.ListValue 175, // 310: cel.expr.conformance.proto2.TestAllTypes.MapStringInt64WrapperEntry.value:type_name -> google.protobuf.Int64Value 176, // 311: cel.expr.conformance.proto2.TestAllTypes.MapStringInt32WrapperEntry.value:type_name -> google.protobuf.Int32Value 177, // 312: cel.expr.conformance.proto2.TestAllTypes.MapStringDoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 178, // 313: cel.expr.conformance.proto2.TestAllTypes.MapStringFloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 179, // 314: cel.expr.conformance.proto2.TestAllTypes.MapStringUint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 180, // 315: cel.expr.conformance.proto2.TestAllTypes.MapStringUint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 181, // 316: cel.expr.conformance.proto2.TestAllTypes.MapStringStringWrapperEntry.value:type_name -> google.protobuf.StringValue 182, // 317: cel.expr.conformance.proto2.TestAllTypes.MapStringBoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 183, // 318: cel.expr.conformance.proto2.TestAllTypes.MapStringBytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 319, // [319:319] is the sub-list for method output_type 319, // [319:319] is the sub-list for method input_type 319, // [319:319] is the sub-list for extension type_name 319, // [319:319] is the sub-list for extension extendee 0, // [0:319] is the sub-list for field type_name } func init() { file_cel_expr_conformance_proto2_test_all_types_proto_init() } func file_cel_expr_conformance_proto2_test_all_types_proto_init() { if File_cel_expr_conformance_proto2_test_all_types_proto != nil { return } file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes[0].OneofWrappers = []any{ (*TestAllTypes_SingleNestedMessage)(nil), (*TestAllTypes_SingleNestedEnum)(nil), (*TestAllTypes_OneofType)(nil), (*TestAllTypes_OneofMsg)(nil), (*TestAllTypes_OneofBool)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_conformance_proto2_test_all_types_proto_rawDesc, NumEnums: 2, NumMessages: 168, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_conformance_proto2_test_all_types_proto_goTypes, DependencyIndexes: file_cel_expr_conformance_proto2_test_all_types_proto_depIdxs, EnumInfos: file_cel_expr_conformance_proto2_test_all_types_proto_enumTypes, MessageInfos: file_cel_expr_conformance_proto2_test_all_types_proto_msgTypes, }.Build() File_cel_expr_conformance_proto2_test_all_types_proto = out.File file_cel_expr_conformance_proto2_test_all_types_proto_rawDesc = nil file_cel_expr_conformance_proto2_test_all_types_proto_goTypes = nil file_cel_expr_conformance_proto2_test_all_types_proto_depIdxs = nil } cel-spec-0.24.0/conformance/proto2/test_all_types_extensions.pb.go000077500000000000000000000476061500667630300252760ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.3 // protoc v5.27.1 // source: cel/expr/conformance/proto2/test_all_types_extensions.proto package proto2 import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type Proto2ExtensionScopedMessage struct { state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Proto2ExtensionScopedMessage) Reset() { *x = Proto2ExtensionScopedMessage{} mi := &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Proto2ExtensionScopedMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*Proto2ExtensionScopedMessage) ProtoMessage() {} func (x *Proto2ExtensionScopedMessage) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Proto2ExtensionScopedMessage.ProtoReflect.Descriptor instead. func (*Proto2ExtensionScopedMessage) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDescGZIP(), []int{0} } var file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes = []protoimpl.ExtensionInfo{ { ExtendedType: (*TestAllTypes)(nil), ExtensionType: (*int32)(nil), Field: 1000, Name: "cel.expr.conformance.proto2.int32_ext", Tag: "varint,1000,opt,name=int32_ext", Filename: "cel/expr/conformance/proto2/test_all_types_extensions.proto", }, { ExtendedType: (*TestAllTypes)(nil), ExtensionType: (*TestAllTypes)(nil), Field: 1001, Name: "cel.expr.conformance.proto2.nested_ext", Tag: "bytes,1001,opt,name=nested_ext", Filename: "cel/expr/conformance/proto2/test_all_types_extensions.proto", }, { ExtendedType: (*TestAllTypes)(nil), ExtensionType: (*TestAllTypes)(nil), Field: 1002, Name: "cel.expr.conformance.proto2.test_all_types_ext", Tag: "bytes,1002,opt,name=test_all_types_ext", Filename: "cel/expr/conformance/proto2/test_all_types_extensions.proto", }, { ExtendedType: (*TestAllTypes)(nil), ExtensionType: (*TestAllTypes_NestedEnum)(nil), Field: 1003, Name: "cel.expr.conformance.proto2.nested_enum_ext", Tag: "varint,1003,opt,name=nested_enum_ext,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum", Filename: "cel/expr/conformance/proto2/test_all_types_extensions.proto", }, { ExtendedType: (*TestAllTypes)(nil), ExtensionType: ([]*TestAllTypes)(nil), Field: 1004, Name: "cel.expr.conformance.proto2.repeated_test_all_types", Tag: "bytes,1004,rep,name=repeated_test_all_types", Filename: "cel/expr/conformance/proto2/test_all_types_extensions.proto", }, { ExtendedType: (*TestAllTypes)(nil), ExtensionType: (*int64)(nil), Field: 1005, Name: "cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext", Tag: "varint,1005,opt,name=int64_ext", Filename: "cel/expr/conformance/proto2/test_all_types_extensions.proto", }, { ExtendedType: (*TestAllTypes)(nil), ExtensionType: (*TestAllTypes)(nil), Field: 1006, Name: "cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext", Tag: "bytes,1006,opt,name=message_scoped_nested_ext", Filename: "cel/expr/conformance/proto2/test_all_types_extensions.proto", }, { ExtendedType: (*TestAllTypes)(nil), ExtensionType: (*TestAllTypes_NestedEnum)(nil), Field: 1007, Name: "cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext", Tag: "varint,1007,opt,name=nested_enum_ext,enum=cel.expr.conformance.proto2.TestAllTypes_NestedEnum", Filename: "cel/expr/conformance/proto2/test_all_types_extensions.proto", }, { ExtendedType: (*TestAllTypes)(nil), ExtensionType: ([]*TestAllTypes)(nil), Field: 1008, Name: "cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types", Tag: "bytes,1008,rep,name=message_scoped_repeated_test_all_types", Filename: "cel/expr/conformance/proto2/test_all_types_extensions.proto", }, } // Extension fields to TestAllTypes. var ( // optional int32 int32_ext = 1000; E_Int32Ext = &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes[0] // optional cel.expr.conformance.proto2.TestAllTypes nested_ext = 1001; E_NestedExt = &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes[1] // optional cel.expr.conformance.proto2.TestAllTypes test_all_types_ext = 1002; E_TestAllTypesExt = &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes[2] // optional cel.expr.conformance.proto2.TestAllTypes.NestedEnum nested_enum_ext = 1003; E_NestedEnumExt = &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes[3] // repeated cel.expr.conformance.proto2.TestAllTypes repeated_test_all_types = 1004; E_RepeatedTestAllTypes = &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes[4] // optional int64 int64_ext = 1005; E_Proto2ExtensionScopedMessage_Int64Ext = &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes[5] // optional cel.expr.conformance.proto2.TestAllTypes message_scoped_nested_ext = 1006; E_Proto2ExtensionScopedMessage_MessageScopedNestedExt = &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes[6] // optional cel.expr.conformance.proto2.TestAllTypes.NestedEnum nested_enum_ext = 1007; E_Proto2ExtensionScopedMessage_NestedEnumExt = &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes[7] // repeated cel.expr.conformance.proto2.TestAllTypes message_scoped_repeated_test_all_types = 1008; E_Proto2ExtensionScopedMessage_MessageScopedRepeatedTestAllTypes = &file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes[8] ) var File_cel_expr_conformance_proto2_test_all_types_extensions_proto protoreflect.FileDescriptor var file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDesc = []byte{ 0x0a, 0x3b, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1b, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x1a, 0x30, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb0, 0x04, 0x0a, 0x1c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x32, 0x47, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x78, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0xed, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x78, 0x74, 0x32, 0x90, 0x01, 0x0a, 0x19, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0xee, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x16, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x32, 0x88, 0x01, 0x0a, 0x0f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0xef, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x78, 0x74, 0x32, 0xa8, 0x01, 0x0a, 0x26, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0xf0, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x21, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x63, 0x6f, 0x70, 0x65, 0x64, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x3a, 0x47, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x78, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0xe8, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x78, 0x74, 0x3a, 0x74, 0x0a, 0x0a, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x78, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0xe9, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x09, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x78, 0x74, 0x3a, 0x82, 0x01, 0x0a, 0x12, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x5f, 0x65, 0x78, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0xea, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x0f, 0x74, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x78, 0x74, 0x3a, 0x88, 0x01, 0x0a, 0x0f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x65, 0x78, 0x74, 0x12, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0xeb, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0d, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x78, 0x74, 0x3a, 0x8c, 0x01, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x18, 0xec, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x42, 0x5f, 0x0a, 0x1f, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0x42, 0x16, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x01, 0x5a, 0x1f, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x32, 0xf8, 0x01, 0x01, } var ( file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDescOnce sync.Once file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDescData = file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDesc ) func file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDescGZIP() []byte { file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDescOnce.Do(func() { file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDescData) }) return file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDescData } var file_cel_expr_conformance_proto2_test_all_types_extensions_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_cel_expr_conformance_proto2_test_all_types_extensions_proto_goTypes = []any{ (*Proto2ExtensionScopedMessage)(nil), // 0: cel.expr.conformance.proto2.Proto2ExtensionScopedMessage (*TestAllTypes)(nil), // 1: cel.expr.conformance.proto2.TestAllTypes (TestAllTypes_NestedEnum)(0), // 2: cel.expr.conformance.proto2.TestAllTypes.NestedEnum } var file_cel_expr_conformance_proto2_test_all_types_extensions_proto_depIdxs = []int32{ 1, // 0: cel.expr.conformance.proto2.int32_ext:extendee -> cel.expr.conformance.proto2.TestAllTypes 1, // 1: cel.expr.conformance.proto2.nested_ext:extendee -> cel.expr.conformance.proto2.TestAllTypes 1, // 2: cel.expr.conformance.proto2.test_all_types_ext:extendee -> cel.expr.conformance.proto2.TestAllTypes 1, // 3: cel.expr.conformance.proto2.nested_enum_ext:extendee -> cel.expr.conformance.proto2.TestAllTypes 1, // 4: cel.expr.conformance.proto2.repeated_test_all_types:extendee -> cel.expr.conformance.proto2.TestAllTypes 1, // 5: cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext:extendee -> cel.expr.conformance.proto2.TestAllTypes 1, // 6: cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext:extendee -> cel.expr.conformance.proto2.TestAllTypes 1, // 7: cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext:extendee -> cel.expr.conformance.proto2.TestAllTypes 1, // 8: cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types:extendee -> cel.expr.conformance.proto2.TestAllTypes 1, // 9: cel.expr.conformance.proto2.nested_ext:type_name -> cel.expr.conformance.proto2.TestAllTypes 1, // 10: cel.expr.conformance.proto2.test_all_types_ext:type_name -> cel.expr.conformance.proto2.TestAllTypes 2, // 11: cel.expr.conformance.proto2.nested_enum_ext:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 1, // 12: cel.expr.conformance.proto2.repeated_test_all_types:type_name -> cel.expr.conformance.proto2.TestAllTypes 1, // 13: cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext:type_name -> cel.expr.conformance.proto2.TestAllTypes 2, // 14: cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext:type_name -> cel.expr.conformance.proto2.TestAllTypes.NestedEnum 1, // 15: cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types:type_name -> cel.expr.conformance.proto2.TestAllTypes 16, // [16:16] is the sub-list for method output_type 16, // [16:16] is the sub-list for method input_type 9, // [9:16] is the sub-list for extension type_name 0, // [0:9] is the sub-list for extension extendee 0, // [0:0] is the sub-list for field type_name } func init() { file_cel_expr_conformance_proto2_test_all_types_extensions_proto_init() } func file_cel_expr_conformance_proto2_test_all_types_extensions_proto_init() { if File_cel_expr_conformance_proto2_test_all_types_extensions_proto != nil { return } file_cel_expr_conformance_proto2_test_all_types_proto_init() type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDesc, NumEnums: 0, NumMessages: 1, NumExtensions: 9, NumServices: 0, }, GoTypes: file_cel_expr_conformance_proto2_test_all_types_extensions_proto_goTypes, DependencyIndexes: file_cel_expr_conformance_proto2_test_all_types_extensions_proto_depIdxs, MessageInfos: file_cel_expr_conformance_proto2_test_all_types_extensions_proto_msgTypes, ExtensionInfos: file_cel_expr_conformance_proto2_test_all_types_extensions_proto_extTypes, }.Build() File_cel_expr_conformance_proto2_test_all_types_extensions_proto = out.File file_cel_expr_conformance_proto2_test_all_types_extensions_proto_rawDesc = nil file_cel_expr_conformance_proto2_test_all_types_extensions_proto_goTypes = nil file_cel_expr_conformance_proto2_test_all_types_extensions_proto_depIdxs = nil } cel-spec-0.24.0/conformance/proto3/000077500000000000000000000000001500667630300170165ustar00rootroot00000000000000cel-spec-0.24.0/conformance/proto3/BUILD.bazel000077500000000000000000000026611500667630300207040ustar00rootroot00000000000000# Copyright 2024 Google LLC # # 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 # # https://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. load("@io_bazel_rules_go//go:def.bzl", "go_library") package( default_visibility = ["//visibility:public"], licenses = ["notice"], # Apache 2.0 ) go_library( name = "go_default_library", srcs = [ "test_all_types.pb.go", ], importpath = "cel.dev/expr/conformance/proto3", deps = [ "@org_golang_google_protobuf//reflect/protoreflect", "@org_golang_google_protobuf//runtime/protoimpl", "@org_golang_google_protobuf//types/known/anypb", "@org_golang_google_protobuf//types/known/durationpb", "@org_golang_google_protobuf//types/known/emptypb", "@org_golang_google_protobuf//types/known/fieldmaskpb", "@org_golang_google_protobuf//types/known/structpb", "@org_golang_google_protobuf//types/known/timestamppb", "@org_golang_google_protobuf//types/known/wrapperspb", ], ) cel-spec-0.24.0/conformance/proto3/test_all_types.pb.go000077500000000000000000014120051500667630300230060ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.3 // protoc v5.27.1 // source: cel/expr/conformance/proto3/test_all_types.proto package proto3 import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" durationpb "google.golang.org/protobuf/types/known/durationpb" emptypb "google.golang.org/protobuf/types/known/emptypb" fieldmaskpb "google.golang.org/protobuf/types/known/fieldmaskpb" structpb "google.golang.org/protobuf/types/known/structpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" wrapperspb "google.golang.org/protobuf/types/known/wrapperspb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type GlobalEnum int32 const ( GlobalEnum_GOO GlobalEnum = 0 GlobalEnum_GAR GlobalEnum = 1 GlobalEnum_GAZ GlobalEnum = 2 ) // Enum value maps for GlobalEnum. var ( GlobalEnum_name = map[int32]string{ 0: "GOO", 1: "GAR", 2: "GAZ", } GlobalEnum_value = map[string]int32{ "GOO": 0, "GAR": 1, "GAZ": 2, } ) func (x GlobalEnum) Enum() *GlobalEnum { p := new(GlobalEnum) *p = x return p } func (x GlobalEnum) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (GlobalEnum) Descriptor() protoreflect.EnumDescriptor { return file_cel_expr_conformance_proto3_test_all_types_proto_enumTypes[0].Descriptor() } func (GlobalEnum) Type() protoreflect.EnumType { return &file_cel_expr_conformance_proto3_test_all_types_proto_enumTypes[0] } func (x GlobalEnum) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use GlobalEnum.Descriptor instead. func (GlobalEnum) EnumDescriptor() ([]byte, []int) { return file_cel_expr_conformance_proto3_test_all_types_proto_rawDescGZIP(), []int{0} } type TestAllTypes_NestedEnum int32 const ( TestAllTypes_FOO TestAllTypes_NestedEnum = 0 TestAllTypes_BAR TestAllTypes_NestedEnum = 1 TestAllTypes_BAZ TestAllTypes_NestedEnum = 2 ) // Enum value maps for TestAllTypes_NestedEnum. var ( TestAllTypes_NestedEnum_name = map[int32]string{ 0: "FOO", 1: "BAR", 2: "BAZ", } TestAllTypes_NestedEnum_value = map[string]int32{ "FOO": 0, "BAR": 1, "BAZ": 2, } ) func (x TestAllTypes_NestedEnum) Enum() *TestAllTypes_NestedEnum { p := new(TestAllTypes_NestedEnum) *p = x return p } func (x TestAllTypes_NestedEnum) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (TestAllTypes_NestedEnum) Descriptor() protoreflect.EnumDescriptor { return file_cel_expr_conformance_proto3_test_all_types_proto_enumTypes[1].Descriptor() } func (TestAllTypes_NestedEnum) Type() protoreflect.EnumType { return &file_cel_expr_conformance_proto3_test_all_types_proto_enumTypes[1] } func (x TestAllTypes_NestedEnum) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use TestAllTypes_NestedEnum.Descriptor instead. func (TestAllTypes_NestedEnum) EnumDescriptor() ([]byte, []int) { return file_cel_expr_conformance_proto3_test_all_types_proto_rawDescGZIP(), []int{0, 0} } type TestAllTypes struct { state protoimpl.MessageState `protogen:"open.v1"` SingleInt32 int32 `protobuf:"varint,1,opt,name=single_int32,json=singleInt32,proto3" json:"single_int32,omitempty"` SingleInt64 int64 `protobuf:"varint,2,opt,name=single_int64,json=singleInt64,proto3" json:"single_int64,omitempty"` SingleUint32 uint32 `protobuf:"varint,3,opt,name=single_uint32,json=singleUint32,proto3" json:"single_uint32,omitempty"` SingleUint64 uint64 `protobuf:"varint,4,opt,name=single_uint64,json=singleUint64,proto3" json:"single_uint64,omitempty"` SingleSint32 int32 `protobuf:"zigzag32,5,opt,name=single_sint32,json=singleSint32,proto3" json:"single_sint32,omitempty"` SingleSint64 int64 `protobuf:"zigzag64,6,opt,name=single_sint64,json=singleSint64,proto3" json:"single_sint64,omitempty"` SingleFixed32 uint32 `protobuf:"fixed32,7,opt,name=single_fixed32,json=singleFixed32,proto3" json:"single_fixed32,omitempty"` SingleFixed64 uint64 `protobuf:"fixed64,8,opt,name=single_fixed64,json=singleFixed64,proto3" json:"single_fixed64,omitempty"` SingleSfixed32 int32 `protobuf:"fixed32,9,opt,name=single_sfixed32,json=singleSfixed32,proto3" json:"single_sfixed32,omitempty"` SingleSfixed64 int64 `protobuf:"fixed64,10,opt,name=single_sfixed64,json=singleSfixed64,proto3" json:"single_sfixed64,omitempty"` SingleFloat float32 `protobuf:"fixed32,11,opt,name=single_float,json=singleFloat,proto3" json:"single_float,omitempty"` SingleDouble float64 `protobuf:"fixed64,12,opt,name=single_double,json=singleDouble,proto3" json:"single_double,omitempty"` SingleBool bool `protobuf:"varint,13,opt,name=single_bool,json=singleBool,proto3" json:"single_bool,omitempty"` SingleString string `protobuf:"bytes,14,opt,name=single_string,json=singleString,proto3" json:"single_string,omitempty"` SingleBytes []byte `protobuf:"bytes,15,opt,name=single_bytes,json=singleBytes,proto3" json:"single_bytes,omitempty"` OptionalBool *bool `protobuf:"varint,16,opt,name=optional_bool,json=optionalBool,proto3,oneof" json:"optional_bool,omitempty"` OptionalString *bool `protobuf:"varint,17,opt,name=optional_string,json=optionalString,proto3,oneof" json:"optional_string,omitempty"` In bool `protobuf:"varint,18,opt,name=in,proto3" json:"in,omitempty"` SingleAny *anypb.Any `protobuf:"bytes,100,opt,name=single_any,json=singleAny,proto3" json:"single_any,omitempty"` SingleDuration *durationpb.Duration `protobuf:"bytes,101,opt,name=single_duration,json=singleDuration,proto3" json:"single_duration,omitempty"` SingleTimestamp *timestamppb.Timestamp `protobuf:"bytes,102,opt,name=single_timestamp,json=singleTimestamp,proto3" json:"single_timestamp,omitempty"` SingleStruct *structpb.Struct `protobuf:"bytes,103,opt,name=single_struct,json=singleStruct,proto3" json:"single_struct,omitempty"` SingleValue *structpb.Value `protobuf:"bytes,104,opt,name=single_value,json=singleValue,proto3" json:"single_value,omitempty"` SingleInt64Wrapper *wrapperspb.Int64Value `protobuf:"bytes,105,opt,name=single_int64_wrapper,json=singleInt64Wrapper,proto3" json:"single_int64_wrapper,omitempty"` SingleInt32Wrapper *wrapperspb.Int32Value `protobuf:"bytes,106,opt,name=single_int32_wrapper,json=singleInt32Wrapper,proto3" json:"single_int32_wrapper,omitempty"` SingleDoubleWrapper *wrapperspb.DoubleValue `protobuf:"bytes,107,opt,name=single_double_wrapper,json=singleDoubleWrapper,proto3" json:"single_double_wrapper,omitempty"` SingleFloatWrapper *wrapperspb.FloatValue `protobuf:"bytes,108,opt,name=single_float_wrapper,json=singleFloatWrapper,proto3" json:"single_float_wrapper,omitempty"` SingleUint64Wrapper *wrapperspb.UInt64Value `protobuf:"bytes,109,opt,name=single_uint64_wrapper,json=singleUint64Wrapper,proto3" json:"single_uint64_wrapper,omitempty"` SingleUint32Wrapper *wrapperspb.UInt32Value `protobuf:"bytes,110,opt,name=single_uint32_wrapper,json=singleUint32Wrapper,proto3" json:"single_uint32_wrapper,omitempty"` SingleStringWrapper *wrapperspb.StringValue `protobuf:"bytes,111,opt,name=single_string_wrapper,json=singleStringWrapper,proto3" json:"single_string_wrapper,omitempty"` SingleBoolWrapper *wrapperspb.BoolValue `protobuf:"bytes,112,opt,name=single_bool_wrapper,json=singleBoolWrapper,proto3" json:"single_bool_wrapper,omitempty"` SingleBytesWrapper *wrapperspb.BytesValue `protobuf:"bytes,113,opt,name=single_bytes_wrapper,json=singleBytesWrapper,proto3" json:"single_bytes_wrapper,omitempty"` ListValue *structpb.ListValue `protobuf:"bytes,114,opt,name=list_value,json=listValue,proto3" json:"list_value,omitempty"` NullValue structpb.NullValue `protobuf:"varint,115,opt,name=null_value,json=nullValue,proto3,enum=google.protobuf.NullValue" json:"null_value,omitempty"` OptionalNullValue *structpb.NullValue `protobuf:"varint,116,opt,name=optional_null_value,json=optionalNullValue,proto3,enum=google.protobuf.NullValue,oneof" json:"optional_null_value,omitempty"` FieldMask *fieldmaskpb.FieldMask `protobuf:"bytes,117,opt,name=field_mask,json=fieldMask,proto3" json:"field_mask,omitempty"` Empty *emptypb.Empty `protobuf:"bytes,118,opt,name=empty,proto3" json:"empty,omitempty"` // Types that are valid to be assigned to NestedType: // // *TestAllTypes_SingleNestedMessage // *TestAllTypes_SingleNestedEnum NestedType isTestAllTypes_NestedType `protobuf_oneof:"nested_type"` StandaloneMessage *TestAllTypes_NestedMessage `protobuf:"bytes,23,opt,name=standalone_message,json=standaloneMessage,proto3" json:"standalone_message,omitempty"` StandaloneEnum TestAllTypes_NestedEnum `protobuf:"varint,24,opt,name=standalone_enum,json=standaloneEnum,proto3,enum=cel.expr.conformance.proto3.TestAllTypes_NestedEnum" json:"standalone_enum,omitempty"` RepeatedInt32 []int32 `protobuf:"varint,31,rep,packed,name=repeated_int32,json=repeatedInt32,proto3" json:"repeated_int32,omitempty"` RepeatedInt64 []int64 `protobuf:"varint,32,rep,packed,name=repeated_int64,json=repeatedInt64,proto3" json:"repeated_int64,omitempty"` RepeatedUint32 []uint32 `protobuf:"varint,33,rep,packed,name=repeated_uint32,json=repeatedUint32,proto3" json:"repeated_uint32,omitempty"` RepeatedUint64 []uint64 `protobuf:"varint,34,rep,packed,name=repeated_uint64,json=repeatedUint64,proto3" json:"repeated_uint64,omitempty"` RepeatedSint32 []int32 `protobuf:"zigzag32,35,rep,packed,name=repeated_sint32,json=repeatedSint32,proto3" json:"repeated_sint32,omitempty"` RepeatedSint64 []int64 `protobuf:"zigzag64,36,rep,packed,name=repeated_sint64,json=repeatedSint64,proto3" json:"repeated_sint64,omitempty"` RepeatedFixed32 []uint32 `protobuf:"fixed32,37,rep,packed,name=repeated_fixed32,json=repeatedFixed32,proto3" json:"repeated_fixed32,omitempty"` RepeatedFixed64 []uint64 `protobuf:"fixed64,38,rep,packed,name=repeated_fixed64,json=repeatedFixed64,proto3" json:"repeated_fixed64,omitempty"` RepeatedSfixed32 []int32 `protobuf:"fixed32,39,rep,packed,name=repeated_sfixed32,json=repeatedSfixed32,proto3" json:"repeated_sfixed32,omitempty"` RepeatedSfixed64 []int64 `protobuf:"fixed64,40,rep,packed,name=repeated_sfixed64,json=repeatedSfixed64,proto3" json:"repeated_sfixed64,omitempty"` RepeatedFloat []float32 `protobuf:"fixed32,41,rep,packed,name=repeated_float,json=repeatedFloat,proto3" json:"repeated_float,omitempty"` RepeatedDouble []float64 `protobuf:"fixed64,42,rep,packed,name=repeated_double,json=repeatedDouble,proto3" json:"repeated_double,omitempty"` RepeatedBool []bool `protobuf:"varint,43,rep,packed,name=repeated_bool,json=repeatedBool,proto3" json:"repeated_bool,omitempty"` RepeatedString []string `protobuf:"bytes,44,rep,name=repeated_string,json=repeatedString,proto3" json:"repeated_string,omitempty"` RepeatedBytes [][]byte `protobuf:"bytes,45,rep,name=repeated_bytes,json=repeatedBytes,proto3" json:"repeated_bytes,omitempty"` RepeatedNestedMessage []*TestAllTypes_NestedMessage `protobuf:"bytes,51,rep,name=repeated_nested_message,json=repeatedNestedMessage,proto3" json:"repeated_nested_message,omitempty"` RepeatedNestedEnum []TestAllTypes_NestedEnum `protobuf:"varint,52,rep,packed,name=repeated_nested_enum,json=repeatedNestedEnum,proto3,enum=cel.expr.conformance.proto3.TestAllTypes_NestedEnum" json:"repeated_nested_enum,omitempty"` RepeatedStringPiece []string `protobuf:"bytes,53,rep,name=repeated_string_piece,json=repeatedStringPiece,proto3" json:"repeated_string_piece,omitempty"` RepeatedCord []string `protobuf:"bytes,54,rep,name=repeated_cord,json=repeatedCord,proto3" json:"repeated_cord,omitempty"` RepeatedLazyMessage []*TestAllTypes_NestedMessage `protobuf:"bytes,55,rep,name=repeated_lazy_message,json=repeatedLazyMessage,proto3" json:"repeated_lazy_message,omitempty"` RepeatedAny []*anypb.Any `protobuf:"bytes,120,rep,name=repeated_any,json=repeatedAny,proto3" json:"repeated_any,omitempty"` RepeatedDuration []*durationpb.Duration `protobuf:"bytes,121,rep,name=repeated_duration,json=repeatedDuration,proto3" json:"repeated_duration,omitempty"` RepeatedTimestamp []*timestamppb.Timestamp `protobuf:"bytes,122,rep,name=repeated_timestamp,json=repeatedTimestamp,proto3" json:"repeated_timestamp,omitempty"` RepeatedStruct []*structpb.Struct `protobuf:"bytes,123,rep,name=repeated_struct,json=repeatedStruct,proto3" json:"repeated_struct,omitempty"` RepeatedValue []*structpb.Value `protobuf:"bytes,124,rep,name=repeated_value,json=repeatedValue,proto3" json:"repeated_value,omitempty"` RepeatedInt64Wrapper []*wrapperspb.Int64Value `protobuf:"bytes,125,rep,name=repeated_int64_wrapper,json=repeatedInt64Wrapper,proto3" json:"repeated_int64_wrapper,omitempty"` RepeatedInt32Wrapper []*wrapperspb.Int32Value `protobuf:"bytes,126,rep,name=repeated_int32_wrapper,json=repeatedInt32Wrapper,proto3" json:"repeated_int32_wrapper,omitempty"` RepeatedDoubleWrapper []*wrapperspb.DoubleValue `protobuf:"bytes,127,rep,name=repeated_double_wrapper,json=repeatedDoubleWrapper,proto3" json:"repeated_double_wrapper,omitempty"` RepeatedFloatWrapper []*wrapperspb.FloatValue `protobuf:"bytes,128,rep,name=repeated_float_wrapper,json=repeatedFloatWrapper,proto3" json:"repeated_float_wrapper,omitempty"` RepeatedUint64Wrapper []*wrapperspb.UInt64Value `protobuf:"bytes,129,rep,name=repeated_uint64_wrapper,json=repeatedUint64Wrapper,proto3" json:"repeated_uint64_wrapper,omitempty"` RepeatedUint32Wrapper []*wrapperspb.UInt32Value `protobuf:"bytes,130,rep,name=repeated_uint32_wrapper,json=repeatedUint32Wrapper,proto3" json:"repeated_uint32_wrapper,omitempty"` RepeatedStringWrapper []*wrapperspb.StringValue `protobuf:"bytes,131,rep,name=repeated_string_wrapper,json=repeatedStringWrapper,proto3" json:"repeated_string_wrapper,omitempty"` RepeatedBoolWrapper []*wrapperspb.BoolValue `protobuf:"bytes,132,rep,name=repeated_bool_wrapper,json=repeatedBoolWrapper,proto3" json:"repeated_bool_wrapper,omitempty"` RepeatedBytesWrapper []*wrapperspb.BytesValue `protobuf:"bytes,133,rep,name=repeated_bytes_wrapper,json=repeatedBytesWrapper,proto3" json:"repeated_bytes_wrapper,omitempty"` RepeatedListValue []*structpb.ListValue `protobuf:"bytes,134,rep,name=repeated_list_value,json=repeatedListValue,proto3" json:"repeated_list_value,omitempty"` RepeatedNullValue []structpb.NullValue `protobuf:"varint,135,rep,packed,name=repeated_null_value,json=repeatedNullValue,proto3,enum=google.protobuf.NullValue" json:"repeated_null_value,omitempty"` MapInt64NestedType map[int64]*NestedTestAllTypes `protobuf:"bytes,62,rep,name=map_int64_nested_type,json=mapInt64NestedType,proto3" json:"map_int64_nested_type,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolBool map[bool]bool `protobuf:"bytes,63,rep,name=map_bool_bool,json=mapBoolBool,proto3" json:"map_bool_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolString map[bool]string `protobuf:"bytes,64,rep,name=map_bool_string,json=mapBoolString,proto3" json:"map_bool_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolBytes map[bool][]byte `protobuf:"bytes,65,rep,name=map_bool_bytes,json=mapBoolBytes,proto3" json:"map_bool_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolInt32 map[bool]int32 `protobuf:"bytes,66,rep,name=map_bool_int32,json=mapBoolInt32,proto3" json:"map_bool_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolInt64 map[bool]int64 `protobuf:"bytes,67,rep,name=map_bool_int64,json=mapBoolInt64,proto3" json:"map_bool_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolUint32 map[bool]uint32 `protobuf:"bytes,68,rep,name=map_bool_uint32,json=mapBoolUint32,proto3" json:"map_bool_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolUint64 map[bool]uint64 `protobuf:"bytes,69,rep,name=map_bool_uint64,json=mapBoolUint64,proto3" json:"map_bool_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapBoolFloat map[bool]float32 `protobuf:"bytes,70,rep,name=map_bool_float,json=mapBoolFloat,proto3" json:"map_bool_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapBoolDouble map[bool]float64 `protobuf:"bytes,71,rep,name=map_bool_double,json=mapBoolDouble,proto3" json:"map_bool_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapBoolEnum map[bool]TestAllTypes_NestedEnum `protobuf:"bytes,72,rep,name=map_bool_enum,json=mapBoolEnum,proto3" json:"map_bool_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto3.TestAllTypes_NestedEnum"` MapBoolMessage map[bool]*TestAllTypes_NestedMessage `protobuf:"bytes,73,rep,name=map_bool_message,json=mapBoolMessage,proto3" json:"map_bool_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolDuration map[bool]*durationpb.Duration `protobuf:"bytes,228,rep,name=map_bool_duration,json=mapBoolDuration,proto3" json:"map_bool_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolTimestamp map[bool]*timestamppb.Timestamp `protobuf:"bytes,229,rep,name=map_bool_timestamp,json=mapBoolTimestamp,proto3" json:"map_bool_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolNullValue map[bool]structpb.NullValue `protobuf:"bytes,230,rep,name=map_bool_null_value,json=mapBoolNullValue,proto3" json:"map_bool_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapBoolAny map[bool]*anypb.Any `protobuf:"bytes,246,rep,name=map_bool_any,json=mapBoolAny,proto3" json:"map_bool_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolStruct map[bool]*structpb.Struct `protobuf:"bytes,247,rep,name=map_bool_struct,json=mapBoolStruct,proto3" json:"map_bool_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolValue map[bool]*structpb.Value `protobuf:"bytes,248,rep,name=map_bool_value,json=mapBoolValue,proto3" json:"map_bool_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolListValue map[bool]*structpb.ListValue `protobuf:"bytes,249,rep,name=map_bool_list_value,json=mapBoolListValue,proto3" json:"map_bool_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolInt64Wrapper map[bool]*wrapperspb.Int64Value `protobuf:"bytes,250,rep,name=map_bool_int64_wrapper,json=mapBoolInt64Wrapper,proto3" json:"map_bool_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolInt32Wrapper map[bool]*wrapperspb.Int32Value `protobuf:"bytes,251,rep,name=map_bool_int32_wrapper,json=mapBoolInt32Wrapper,proto3" json:"map_bool_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolDoubleWrapper map[bool]*wrapperspb.DoubleValue `protobuf:"bytes,252,rep,name=map_bool_double_wrapper,json=mapBoolDoubleWrapper,proto3" json:"map_bool_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolFloatWrapper map[bool]*wrapperspb.FloatValue `protobuf:"bytes,253,rep,name=map_bool_float_wrapper,json=mapBoolFloatWrapper,proto3" json:"map_bool_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolUint64Wrapper map[bool]*wrapperspb.UInt64Value `protobuf:"bytes,254,rep,name=map_bool_uint64_wrapper,json=mapBoolUint64Wrapper,proto3" json:"map_bool_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolUint32Wrapper map[bool]*wrapperspb.UInt32Value `protobuf:"bytes,255,rep,name=map_bool_uint32_wrapper,json=mapBoolUint32Wrapper,proto3" json:"map_bool_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolStringWrapper map[bool]*wrapperspb.StringValue `protobuf:"bytes,256,rep,name=map_bool_string_wrapper,json=mapBoolStringWrapper,proto3" json:"map_bool_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolBoolWrapper map[bool]*wrapperspb.BoolValue `protobuf:"bytes,257,rep,name=map_bool_bool_wrapper,json=mapBoolBoolWrapper,proto3" json:"map_bool_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapBoolBytesWrapper map[bool]*wrapperspb.BytesValue `protobuf:"bytes,258,rep,name=map_bool_bytes_wrapper,json=mapBoolBytesWrapper,proto3" json:"map_bool_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Bool map[int32]bool `protobuf:"bytes,74,rep,name=map_int32_bool,json=mapInt32Bool,proto3" json:"map_int32_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32String map[int32]string `protobuf:"bytes,75,rep,name=map_int32_string,json=mapInt32String,proto3" json:"map_int32_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Bytes map[int32][]byte `protobuf:"bytes,76,rep,name=map_int32_bytes,json=mapInt32Bytes,proto3" json:"map_int32_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Int32 map[int32]int32 `protobuf:"bytes,77,rep,name=map_int32_int32,json=mapInt32Int32,proto3" json:"map_int32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32Int64 map[int32]int64 `protobuf:"bytes,78,rep,name=map_int32_int64,json=mapInt32Int64,proto3" json:"map_int32_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32Uint32 map[int32]uint32 `protobuf:"bytes,79,rep,name=map_int32_uint32,json=mapInt32Uint32,proto3" json:"map_int32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32Uint64 map[int32]uint64 `protobuf:"bytes,80,rep,name=map_int32_uint64,json=mapInt32Uint64,proto3" json:"map_int32_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt32Float map[int32]float32 `protobuf:"bytes,81,rep,name=map_int32_float,json=mapInt32Float,proto3" json:"map_int32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapInt32Double map[int32]float64 `protobuf:"bytes,82,rep,name=map_int32_double,json=mapInt32Double,proto3" json:"map_int32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapInt32Enum map[int32]TestAllTypes_NestedEnum `protobuf:"bytes,83,rep,name=map_int32_enum,json=mapInt32Enum,proto3" json:"map_int32_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto3.TestAllTypes_NestedEnum"` MapInt32Message map[int32]*TestAllTypes_NestedMessage `protobuf:"bytes,84,rep,name=map_int32_message,json=mapInt32Message,proto3" json:"map_int32_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Duration map[int32]*durationpb.Duration `protobuf:"bytes,231,rep,name=map_int32_duration,json=mapInt32Duration,proto3" json:"map_int32_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Timestamp map[int32]*timestamppb.Timestamp `protobuf:"bytes,232,rep,name=map_int32_timestamp,json=mapInt32Timestamp,proto3" json:"map_int32_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32NullValue map[int32]structpb.NullValue `protobuf:"bytes,233,rep,name=map_int32_null_value,json=mapInt32NullValue,proto3" json:"map_int32_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapInt32Any map[int32]*anypb.Any `protobuf:"bytes,259,rep,name=map_int32_any,json=mapInt32Any,proto3" json:"map_int32_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Struct map[int32]*structpb.Struct `protobuf:"bytes,260,rep,name=map_int32_struct,json=mapInt32Struct,proto3" json:"map_int32_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Value map[int32]*structpb.Value `protobuf:"bytes,261,rep,name=map_int32_value,json=mapInt32Value,proto3" json:"map_int32_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32ListValue map[int32]*structpb.ListValue `protobuf:"bytes,262,rep,name=map_int32_list_value,json=mapInt32ListValue,proto3" json:"map_int32_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Int64Wrapper map[int32]*wrapperspb.Int64Value `protobuf:"bytes,263,rep,name=map_int32_int64_wrapper,json=mapInt32Int64Wrapper,proto3" json:"map_int32_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Int32Wrapper map[int32]*wrapperspb.Int32Value `protobuf:"bytes,264,rep,name=map_int32_int32_wrapper,json=mapInt32Int32Wrapper,proto3" json:"map_int32_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32DoubleWrapper map[int32]*wrapperspb.DoubleValue `protobuf:"bytes,265,rep,name=map_int32_double_wrapper,json=mapInt32DoubleWrapper,proto3" json:"map_int32_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32FloatWrapper map[int32]*wrapperspb.FloatValue `protobuf:"bytes,266,rep,name=map_int32_float_wrapper,json=mapInt32FloatWrapper,proto3" json:"map_int32_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Uint64Wrapper map[int32]*wrapperspb.UInt64Value `protobuf:"bytes,267,rep,name=map_int32_uint64_wrapper,json=mapInt32Uint64Wrapper,proto3" json:"map_int32_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32Uint32Wrapper map[int32]*wrapperspb.UInt32Value `protobuf:"bytes,268,rep,name=map_int32_uint32_wrapper,json=mapInt32Uint32Wrapper,proto3" json:"map_int32_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32StringWrapper map[int32]*wrapperspb.StringValue `protobuf:"bytes,269,rep,name=map_int32_string_wrapper,json=mapInt32StringWrapper,proto3" json:"map_int32_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32BoolWrapper map[int32]*wrapperspb.BoolValue `protobuf:"bytes,270,rep,name=map_int32_bool_wrapper,json=mapInt32BoolWrapper,proto3" json:"map_int32_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt32BytesWrapper map[int32]*wrapperspb.BytesValue `protobuf:"bytes,271,rep,name=map_int32_bytes_wrapper,json=mapInt32BytesWrapper,proto3" json:"map_int32_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Bool map[int64]bool `protobuf:"bytes,85,rep,name=map_int64_bool,json=mapInt64Bool,proto3" json:"map_int64_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64String map[int64]string `protobuf:"bytes,86,rep,name=map_int64_string,json=mapInt64String,proto3" json:"map_int64_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Bytes map[int64][]byte `protobuf:"bytes,87,rep,name=map_int64_bytes,json=mapInt64Bytes,proto3" json:"map_int64_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Int32 map[int64]int32 `protobuf:"bytes,88,rep,name=map_int64_int32,json=mapInt64Int32,proto3" json:"map_int64_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64Int64 map[int64]int64 `protobuf:"bytes,89,rep,name=map_int64_int64,json=mapInt64Int64,proto3" json:"map_int64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64Uint32 map[int64]uint32 `protobuf:"bytes,90,rep,name=map_int64_uint32,json=mapInt64Uint32,proto3" json:"map_int64_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64Uint64 map[int64]uint64 `protobuf:"bytes,91,rep,name=map_int64_uint64,json=mapInt64Uint64,proto3" json:"map_int64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapInt64Float map[int64]float32 `protobuf:"bytes,92,rep,name=map_int64_float,json=mapInt64Float,proto3" json:"map_int64_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapInt64Double map[int64]float64 `protobuf:"bytes,93,rep,name=map_int64_double,json=mapInt64Double,proto3" json:"map_int64_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapInt64Enum map[int64]TestAllTypes_NestedEnum `protobuf:"bytes,94,rep,name=map_int64_enum,json=mapInt64Enum,proto3" json:"map_int64_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto3.TestAllTypes_NestedEnum"` MapInt64Message map[int64]*TestAllTypes_NestedMessage `protobuf:"bytes,95,rep,name=map_int64_message,json=mapInt64Message,proto3" json:"map_int64_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Duration map[int64]*durationpb.Duration `protobuf:"bytes,234,rep,name=map_int64_duration,json=mapInt64Duration,proto3" json:"map_int64_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Timestamp map[int64]*timestamppb.Timestamp `protobuf:"bytes,235,rep,name=map_int64_timestamp,json=mapInt64Timestamp,proto3" json:"map_int64_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64NullValue map[int64]structpb.NullValue `protobuf:"bytes,236,rep,name=map_int64_null_value,json=mapInt64NullValue,proto3" json:"map_int64_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapInt64Any map[int64]*anypb.Any `protobuf:"bytes,272,rep,name=map_int64_any,json=mapInt64Any,proto3" json:"map_int64_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Struct map[int64]*structpb.Struct `protobuf:"bytes,273,rep,name=map_int64_struct,json=mapInt64Struct,proto3" json:"map_int64_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Value map[int64]*structpb.Value `protobuf:"bytes,274,rep,name=map_int64_value,json=mapInt64Value,proto3" json:"map_int64_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64ListValue map[int64]*structpb.ListValue `protobuf:"bytes,275,rep,name=map_int64_list_value,json=mapInt64ListValue,proto3" json:"map_int64_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Int64Wrapper map[int64]*wrapperspb.Int64Value `protobuf:"bytes,276,rep,name=map_int64_int64_wrapper,json=mapInt64Int64Wrapper,proto3" json:"map_int64_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Int32Wrapper map[int64]*wrapperspb.Int32Value `protobuf:"bytes,277,rep,name=map_int64_int32_wrapper,json=mapInt64Int32Wrapper,proto3" json:"map_int64_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64DoubleWrapper map[int64]*wrapperspb.DoubleValue `protobuf:"bytes,278,rep,name=map_int64_double_wrapper,json=mapInt64DoubleWrapper,proto3" json:"map_int64_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64FloatWrapper map[int64]*wrapperspb.FloatValue `protobuf:"bytes,279,rep,name=map_int64_float_wrapper,json=mapInt64FloatWrapper,proto3" json:"map_int64_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Uint64Wrapper map[int64]*wrapperspb.UInt64Value `protobuf:"bytes,280,rep,name=map_int64_uint64_wrapper,json=mapInt64Uint64Wrapper,proto3" json:"map_int64_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64Uint32Wrapper map[int64]*wrapperspb.UInt32Value `protobuf:"bytes,281,rep,name=map_int64_uint32_wrapper,json=mapInt64Uint32Wrapper,proto3" json:"map_int64_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64StringWrapper map[int64]*wrapperspb.StringValue `protobuf:"bytes,282,rep,name=map_int64_string_wrapper,json=mapInt64StringWrapper,proto3" json:"map_int64_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64BoolWrapper map[int64]*wrapperspb.BoolValue `protobuf:"bytes,283,rep,name=map_int64_bool_wrapper,json=mapInt64BoolWrapper,proto3" json:"map_int64_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapInt64BytesWrapper map[int64]*wrapperspb.BytesValue `protobuf:"bytes,284,rep,name=map_int64_bytes_wrapper,json=mapInt64BytesWrapper,proto3" json:"map_int64_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Bool map[uint32]bool `protobuf:"bytes,96,rep,name=map_uint32_bool,json=mapUint32Bool,proto3" json:"map_uint32_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32String map[uint32]string `protobuf:"bytes,97,rep,name=map_uint32_string,json=mapUint32String,proto3" json:"map_uint32_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Bytes map[uint32][]byte `protobuf:"bytes,98,rep,name=map_uint32_bytes,json=mapUint32Bytes,proto3" json:"map_uint32_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Int32 map[uint32]int32 `protobuf:"bytes,99,rep,name=map_uint32_int32,json=mapUint32Int32,proto3" json:"map_uint32_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32Int64 map[uint32]int64 `protobuf:"bytes,200,rep,name=map_uint32_int64,json=mapUint32Int64,proto3" json:"map_uint32_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32Uint32 map[uint32]uint32 `protobuf:"bytes,201,rep,name=map_uint32_uint32,json=mapUint32Uint32,proto3" json:"map_uint32_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32Uint64 map[uint32]uint64 `protobuf:"bytes,202,rep,name=map_uint32_uint64,json=mapUint32Uint64,proto3" json:"map_uint32_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint32Float map[uint32]float32 `protobuf:"bytes,203,rep,name=map_uint32_float,json=mapUint32Float,proto3" json:"map_uint32_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapUint32Double map[uint32]float64 `protobuf:"bytes,204,rep,name=map_uint32_double,json=mapUint32Double,proto3" json:"map_uint32_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapUint32Enum map[uint32]TestAllTypes_NestedEnum `protobuf:"bytes,205,rep,name=map_uint32_enum,json=mapUint32Enum,proto3" json:"map_uint32_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto3.TestAllTypes_NestedEnum"` MapUint32Message map[uint32]*TestAllTypes_NestedMessage `protobuf:"bytes,206,rep,name=map_uint32_message,json=mapUint32Message,proto3" json:"map_uint32_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Duration map[uint32]*durationpb.Duration `protobuf:"bytes,237,rep,name=map_uint32_duration,json=mapUint32Duration,proto3" json:"map_uint32_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Timestamp map[uint32]*timestamppb.Timestamp `protobuf:"bytes,238,rep,name=map_uint32_timestamp,json=mapUint32Timestamp,proto3" json:"map_uint32_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32NullValue map[uint32]structpb.NullValue `protobuf:"bytes,239,rep,name=map_uint32_null_value,json=mapUint32NullValue,proto3" json:"map_uint32_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapUint32Any map[uint32]*anypb.Any `protobuf:"bytes,285,rep,name=map_uint32_any,json=mapUint32Any,proto3" json:"map_uint32_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Struct map[uint32]*structpb.Struct `protobuf:"bytes,286,rep,name=map_uint32_struct,json=mapUint32Struct,proto3" json:"map_uint32_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Value map[uint32]*structpb.Value `protobuf:"bytes,287,rep,name=map_uint32_value,json=mapUint32Value,proto3" json:"map_uint32_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32ListValue map[uint32]*structpb.ListValue `protobuf:"bytes,288,rep,name=map_uint32_list_value,json=mapUint32ListValue,proto3" json:"map_uint32_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Int64Wrapper map[uint32]*wrapperspb.Int64Value `protobuf:"bytes,289,rep,name=map_uint32_int64_wrapper,json=mapUint32Int64Wrapper,proto3" json:"map_uint32_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Int32Wrapper map[uint32]*wrapperspb.Int32Value `protobuf:"bytes,290,rep,name=map_uint32_int32_wrapper,json=mapUint32Int32Wrapper,proto3" json:"map_uint32_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32DoubleWrapper map[uint32]*wrapperspb.DoubleValue `protobuf:"bytes,291,rep,name=map_uint32_double_wrapper,json=mapUint32DoubleWrapper,proto3" json:"map_uint32_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32FloatWrapper map[uint32]*wrapperspb.FloatValue `protobuf:"bytes,292,rep,name=map_uint32_float_wrapper,json=mapUint32FloatWrapper,proto3" json:"map_uint32_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Uint64Wrapper map[uint32]*wrapperspb.UInt64Value `protobuf:"bytes,293,rep,name=map_uint32_uint64_wrapper,json=mapUint32Uint64Wrapper,proto3" json:"map_uint32_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32Uint32Wrapper map[uint32]*wrapperspb.UInt32Value `protobuf:"bytes,294,rep,name=map_uint32_uint32_wrapper,json=mapUint32Uint32Wrapper,proto3" json:"map_uint32_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32StringWrapper map[uint32]*wrapperspb.StringValue `protobuf:"bytes,295,rep,name=map_uint32_string_wrapper,json=mapUint32StringWrapper,proto3" json:"map_uint32_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32BoolWrapper map[uint32]*wrapperspb.BoolValue `protobuf:"bytes,296,rep,name=map_uint32_bool_wrapper,json=mapUint32BoolWrapper,proto3" json:"map_uint32_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint32BytesWrapper map[uint32]*wrapperspb.BytesValue `protobuf:"bytes,297,rep,name=map_uint32_bytes_wrapper,json=mapUint32BytesWrapper,proto3" json:"map_uint32_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Bool map[uint64]bool `protobuf:"bytes,207,rep,name=map_uint64_bool,json=mapUint64Bool,proto3" json:"map_uint64_bool,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64String map[uint64]string `protobuf:"bytes,208,rep,name=map_uint64_string,json=mapUint64String,proto3" json:"map_uint64_string,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Bytes map[uint64][]byte `protobuf:"bytes,209,rep,name=map_uint64_bytes,json=mapUint64Bytes,proto3" json:"map_uint64_bytes,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Int32 map[uint64]int32 `protobuf:"bytes,210,rep,name=map_uint64_int32,json=mapUint64Int32,proto3" json:"map_uint64_int32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64Int64 map[uint64]int64 `protobuf:"bytes,211,rep,name=map_uint64_int64,json=mapUint64Int64,proto3" json:"map_uint64_int64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64Uint32 map[uint64]uint32 `protobuf:"bytes,212,rep,name=map_uint64_uint32,json=mapUint64Uint32,proto3" json:"map_uint64_uint32,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64Uint64 map[uint64]uint64 `protobuf:"bytes,213,rep,name=map_uint64_uint64,json=mapUint64Uint64,proto3" json:"map_uint64_uint64,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapUint64Float map[uint64]float32 `protobuf:"bytes,214,rep,name=map_uint64_float,json=mapUint64Float,proto3" json:"map_uint64_float,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapUint64Double map[uint64]float64 `protobuf:"bytes,215,rep,name=map_uint64_double,json=mapUint64Double,proto3" json:"map_uint64_double,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapUint64Enum map[uint64]TestAllTypes_NestedEnum `protobuf:"bytes,216,rep,name=map_uint64_enum,json=mapUint64Enum,proto3" json:"map_uint64_enum,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto3.TestAllTypes_NestedEnum"` MapUint64Message map[uint64]*TestAllTypes_NestedMessage `protobuf:"bytes,217,rep,name=map_uint64_message,json=mapUint64Message,proto3" json:"map_uint64_message,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Duration map[uint64]*durationpb.Duration `protobuf:"bytes,240,rep,name=map_uint64_duration,json=mapUint64Duration,proto3" json:"map_uint64_duration,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Timestamp map[uint64]*timestamppb.Timestamp `protobuf:"bytes,241,rep,name=map_uint64_timestamp,json=mapUint64Timestamp,proto3" json:"map_uint64_timestamp,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64NullValue map[uint64]structpb.NullValue `protobuf:"bytes,242,rep,name=map_uint64_null_value,json=mapUint64NullValue,proto3" json:"map_uint64_null_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapUint64Any map[uint64]*anypb.Any `protobuf:"bytes,298,rep,name=map_uint64_any,json=mapUint64Any,proto3" json:"map_uint64_any,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Struct map[uint64]*structpb.Struct `protobuf:"bytes,299,rep,name=map_uint64_struct,json=mapUint64Struct,proto3" json:"map_uint64_struct,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Value map[uint64]*structpb.Value `protobuf:"bytes,300,rep,name=map_uint64_value,json=mapUint64Value,proto3" json:"map_uint64_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64ListValue map[uint64]*structpb.ListValue `protobuf:"bytes,301,rep,name=map_uint64_list_value,json=mapUint64ListValue,proto3" json:"map_uint64_list_value,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Int64Wrapper map[uint64]*wrapperspb.Int64Value `protobuf:"bytes,302,rep,name=map_uint64_int64_wrapper,json=mapUint64Int64Wrapper,proto3" json:"map_uint64_int64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Int32Wrapper map[uint64]*wrapperspb.Int32Value `protobuf:"bytes,303,rep,name=map_uint64_int32_wrapper,json=mapUint64Int32Wrapper,proto3" json:"map_uint64_int32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64DoubleWrapper map[uint64]*wrapperspb.DoubleValue `protobuf:"bytes,304,rep,name=map_uint64_double_wrapper,json=mapUint64DoubleWrapper,proto3" json:"map_uint64_double_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64FloatWrapper map[uint64]*wrapperspb.FloatValue `protobuf:"bytes,305,rep,name=map_uint64_float_wrapper,json=mapUint64FloatWrapper,proto3" json:"map_uint64_float_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Uint64Wrapper map[uint64]*wrapperspb.UInt64Value `protobuf:"bytes,306,rep,name=map_uint64_uint64_wrapper,json=mapUint64Uint64Wrapper,proto3" json:"map_uint64_uint64_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64Uint32Wrapper map[uint64]*wrapperspb.UInt32Value `protobuf:"bytes,307,rep,name=map_uint64_uint32_wrapper,json=mapUint64Uint32Wrapper,proto3" json:"map_uint64_uint32_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64StringWrapper map[uint64]*wrapperspb.StringValue `protobuf:"bytes,308,rep,name=map_uint64_string_wrapper,json=mapUint64StringWrapper,proto3" json:"map_uint64_string_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64BoolWrapper map[uint64]*wrapperspb.BoolValue `protobuf:"bytes,309,rep,name=map_uint64_bool_wrapper,json=mapUint64BoolWrapper,proto3" json:"map_uint64_bool_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapUint64BytesWrapper map[uint64]*wrapperspb.BytesValue `protobuf:"bytes,310,rep,name=map_uint64_bytes_wrapper,json=mapUint64BytesWrapper,proto3" json:"map_uint64_bytes_wrapper,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringBool map[string]bool `protobuf:"bytes,218,rep,name=map_string_bool,json=mapStringBool,proto3" json:"map_string_bool,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringString map[string]string `protobuf:"bytes,61,rep,name=map_string_string,json=mapStringString,proto3" json:"map_string_string,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringBytes map[string][]byte `protobuf:"bytes,219,rep,name=map_string_bytes,json=mapStringBytes,proto3" json:"map_string_bytes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringInt32 map[string]int32 `protobuf:"bytes,220,rep,name=map_string_int32,json=mapStringInt32,proto3" json:"map_string_int32,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringInt64 map[string]int64 `protobuf:"bytes,221,rep,name=map_string_int64,json=mapStringInt64,proto3" json:"map_string_int64,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringUint32 map[string]uint32 `protobuf:"bytes,222,rep,name=map_string_uint32,json=mapStringUint32,proto3" json:"map_string_uint32,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringUint64 map[string]uint64 `protobuf:"bytes,223,rep,name=map_string_uint64,json=mapStringUint64,proto3" json:"map_string_uint64,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value"` MapStringFloat map[string]float32 `protobuf:"bytes,224,rep,name=map_string_float,json=mapStringFloat,proto3" json:"map_string_float,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed32,2,opt,name=value"` MapStringDouble map[string]float64 `protobuf:"bytes,225,rep,name=map_string_double,json=mapStringDouble,proto3" json:"map_string_double,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"fixed64,2,opt,name=value"` MapStringEnum map[string]TestAllTypes_NestedEnum `protobuf:"bytes,226,rep,name=map_string_enum,json=mapStringEnum,proto3" json:"map_string_enum,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=cel.expr.conformance.proto3.TestAllTypes_NestedEnum"` MapStringMessage map[string]*TestAllTypes_NestedMessage `protobuf:"bytes,227,rep,name=map_string_message,json=mapStringMessage,proto3" json:"map_string_message,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringDuration map[string]*durationpb.Duration `protobuf:"bytes,243,rep,name=map_string_duration,json=mapStringDuration,proto3" json:"map_string_duration,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringTimestamp map[string]*timestamppb.Timestamp `protobuf:"bytes,244,rep,name=map_string_timestamp,json=mapStringTimestamp,proto3" json:"map_string_timestamp,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringNullValue map[string]structpb.NullValue `protobuf:"bytes,245,rep,name=map_string_null_value,json=mapStringNullValue,proto3" json:"map_string_null_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"varint,2,opt,name=value,enum=google.protobuf.NullValue"` MapStringAny map[string]*anypb.Any `protobuf:"bytes,311,rep,name=map_string_any,json=mapStringAny,proto3" json:"map_string_any,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringStruct map[string]*structpb.Struct `protobuf:"bytes,312,rep,name=map_string_struct,json=mapStringStruct,proto3" json:"map_string_struct,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringValue map[string]*structpb.Value `protobuf:"bytes,313,rep,name=map_string_value,json=mapStringValue,proto3" json:"map_string_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringListValue map[string]*structpb.ListValue `protobuf:"bytes,314,rep,name=map_string_list_value,json=mapStringListValue,proto3" json:"map_string_list_value,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringInt64Wrapper map[string]*wrapperspb.Int64Value `protobuf:"bytes,315,rep,name=map_string_int64_wrapper,json=mapStringInt64Wrapper,proto3" json:"map_string_int64_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringInt32Wrapper map[string]*wrapperspb.Int32Value `protobuf:"bytes,316,rep,name=map_string_int32_wrapper,json=mapStringInt32Wrapper,proto3" json:"map_string_int32_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringDoubleWrapper map[string]*wrapperspb.DoubleValue `protobuf:"bytes,317,rep,name=map_string_double_wrapper,json=mapStringDoubleWrapper,proto3" json:"map_string_double_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringFloatWrapper map[string]*wrapperspb.FloatValue `protobuf:"bytes,318,rep,name=map_string_float_wrapper,json=mapStringFloatWrapper,proto3" json:"map_string_float_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringUint64Wrapper map[string]*wrapperspb.UInt64Value `protobuf:"bytes,319,rep,name=map_string_uint64_wrapper,json=mapStringUint64Wrapper,proto3" json:"map_string_uint64_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringUint32Wrapper map[string]*wrapperspb.UInt32Value `protobuf:"bytes,320,rep,name=map_string_uint32_wrapper,json=mapStringUint32Wrapper,proto3" json:"map_string_uint32_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringStringWrapper map[string]*wrapperspb.StringValue `protobuf:"bytes,321,rep,name=map_string_string_wrapper,json=mapStringStringWrapper,proto3" json:"map_string_string_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringBoolWrapper map[string]*wrapperspb.BoolValue `protobuf:"bytes,322,rep,name=map_string_bool_wrapper,json=mapStringBoolWrapper,proto3" json:"map_string_bool_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` MapStringBytesWrapper map[string]*wrapperspb.BytesValue `protobuf:"bytes,323,rep,name=map_string_bytes_wrapper,json=mapStringBytesWrapper,proto3" json:"map_string_bytes_wrapper,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Types that are valid to be assigned to Kind: // // *TestAllTypes_OneofType // *TestAllTypes_OneofMsg // *TestAllTypes_OneofBool Kind isTestAllTypes_Kind `protobuf_oneof:"kind"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TestAllTypes) Reset() { *x = TestAllTypes{} mi := &file_cel_expr_conformance_proto3_test_all_types_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestAllTypes) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestAllTypes) ProtoMessage() {} func (x *TestAllTypes) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_proto3_test_all_types_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestAllTypes.ProtoReflect.Descriptor instead. func (*TestAllTypes) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_proto3_test_all_types_proto_rawDescGZIP(), []int{0} } func (x *TestAllTypes) GetSingleInt32() int32 { if x != nil { return x.SingleInt32 } return 0 } func (x *TestAllTypes) GetSingleInt64() int64 { if x != nil { return x.SingleInt64 } return 0 } func (x *TestAllTypes) GetSingleUint32() uint32 { if x != nil { return x.SingleUint32 } return 0 } func (x *TestAllTypes) GetSingleUint64() uint64 { if x != nil { return x.SingleUint64 } return 0 } func (x *TestAllTypes) GetSingleSint32() int32 { if x != nil { return x.SingleSint32 } return 0 } func (x *TestAllTypes) GetSingleSint64() int64 { if x != nil { return x.SingleSint64 } return 0 } func (x *TestAllTypes) GetSingleFixed32() uint32 { if x != nil { return x.SingleFixed32 } return 0 } func (x *TestAllTypes) GetSingleFixed64() uint64 { if x != nil { return x.SingleFixed64 } return 0 } func (x *TestAllTypes) GetSingleSfixed32() int32 { if x != nil { return x.SingleSfixed32 } return 0 } func (x *TestAllTypes) GetSingleSfixed64() int64 { if x != nil { return x.SingleSfixed64 } return 0 } func (x *TestAllTypes) GetSingleFloat() float32 { if x != nil { return x.SingleFloat } return 0 } func (x *TestAllTypes) GetSingleDouble() float64 { if x != nil { return x.SingleDouble } return 0 } func (x *TestAllTypes) GetSingleBool() bool { if x != nil { return x.SingleBool } return false } func (x *TestAllTypes) GetSingleString() string { if x != nil { return x.SingleString } return "" } func (x *TestAllTypes) GetSingleBytes() []byte { if x != nil { return x.SingleBytes } return nil } func (x *TestAllTypes) GetOptionalBool() bool { if x != nil && x.OptionalBool != nil { return *x.OptionalBool } return false } func (x *TestAllTypes) GetOptionalString() bool { if x != nil && x.OptionalString != nil { return *x.OptionalString } return false } func (x *TestAllTypes) GetIn() bool { if x != nil { return x.In } return false } func (x *TestAllTypes) GetSingleAny() *anypb.Any { if x != nil { return x.SingleAny } return nil } func (x *TestAllTypes) GetSingleDuration() *durationpb.Duration { if x != nil { return x.SingleDuration } return nil } func (x *TestAllTypes) GetSingleTimestamp() *timestamppb.Timestamp { if x != nil { return x.SingleTimestamp } return nil } func (x *TestAllTypes) GetSingleStruct() *structpb.Struct { if x != nil { return x.SingleStruct } return nil } func (x *TestAllTypes) GetSingleValue() *structpb.Value { if x != nil { return x.SingleValue } return nil } func (x *TestAllTypes) GetSingleInt64Wrapper() *wrapperspb.Int64Value { if x != nil { return x.SingleInt64Wrapper } return nil } func (x *TestAllTypes) GetSingleInt32Wrapper() *wrapperspb.Int32Value { if x != nil { return x.SingleInt32Wrapper } return nil } func (x *TestAllTypes) GetSingleDoubleWrapper() *wrapperspb.DoubleValue { if x != nil { return x.SingleDoubleWrapper } return nil } func (x *TestAllTypes) GetSingleFloatWrapper() *wrapperspb.FloatValue { if x != nil { return x.SingleFloatWrapper } return nil } func (x *TestAllTypes) GetSingleUint64Wrapper() *wrapperspb.UInt64Value { if x != nil { return x.SingleUint64Wrapper } return nil } func (x *TestAllTypes) GetSingleUint32Wrapper() *wrapperspb.UInt32Value { if x != nil { return x.SingleUint32Wrapper } return nil } func (x *TestAllTypes) GetSingleStringWrapper() *wrapperspb.StringValue { if x != nil { return x.SingleStringWrapper } return nil } func (x *TestAllTypes) GetSingleBoolWrapper() *wrapperspb.BoolValue { if x != nil { return x.SingleBoolWrapper } return nil } func (x *TestAllTypes) GetSingleBytesWrapper() *wrapperspb.BytesValue { if x != nil { return x.SingleBytesWrapper } return nil } func (x *TestAllTypes) GetListValue() *structpb.ListValue { if x != nil { return x.ListValue } return nil } func (x *TestAllTypes) GetNullValue() structpb.NullValue { if x != nil { return x.NullValue } return structpb.NullValue(0) } func (x *TestAllTypes) GetOptionalNullValue() structpb.NullValue { if x != nil && x.OptionalNullValue != nil { return *x.OptionalNullValue } return structpb.NullValue(0) } func (x *TestAllTypes) GetFieldMask() *fieldmaskpb.FieldMask { if x != nil { return x.FieldMask } return nil } func (x *TestAllTypes) GetEmpty() *emptypb.Empty { if x != nil { return x.Empty } return nil } func (x *TestAllTypes) GetNestedType() isTestAllTypes_NestedType { if x != nil { return x.NestedType } return nil } func (x *TestAllTypes) GetSingleNestedMessage() *TestAllTypes_NestedMessage { if x != nil { if x, ok := x.NestedType.(*TestAllTypes_SingleNestedMessage); ok { return x.SingleNestedMessage } } return nil } func (x *TestAllTypes) GetSingleNestedEnum() TestAllTypes_NestedEnum { if x != nil { if x, ok := x.NestedType.(*TestAllTypes_SingleNestedEnum); ok { return x.SingleNestedEnum } } return TestAllTypes_FOO } func (x *TestAllTypes) GetStandaloneMessage() *TestAllTypes_NestedMessage { if x != nil { return x.StandaloneMessage } return nil } func (x *TestAllTypes) GetStandaloneEnum() TestAllTypes_NestedEnum { if x != nil { return x.StandaloneEnum } return TestAllTypes_FOO } func (x *TestAllTypes) GetRepeatedInt32() []int32 { if x != nil { return x.RepeatedInt32 } return nil } func (x *TestAllTypes) GetRepeatedInt64() []int64 { if x != nil { return x.RepeatedInt64 } return nil } func (x *TestAllTypes) GetRepeatedUint32() []uint32 { if x != nil { return x.RepeatedUint32 } return nil } func (x *TestAllTypes) GetRepeatedUint64() []uint64 { if x != nil { return x.RepeatedUint64 } return nil } func (x *TestAllTypes) GetRepeatedSint32() []int32 { if x != nil { return x.RepeatedSint32 } return nil } func (x *TestAllTypes) GetRepeatedSint64() []int64 { if x != nil { return x.RepeatedSint64 } return nil } func (x *TestAllTypes) GetRepeatedFixed32() []uint32 { if x != nil { return x.RepeatedFixed32 } return nil } func (x *TestAllTypes) GetRepeatedFixed64() []uint64 { if x != nil { return x.RepeatedFixed64 } return nil } func (x *TestAllTypes) GetRepeatedSfixed32() []int32 { if x != nil { return x.RepeatedSfixed32 } return nil } func (x *TestAllTypes) GetRepeatedSfixed64() []int64 { if x != nil { return x.RepeatedSfixed64 } return nil } func (x *TestAllTypes) GetRepeatedFloat() []float32 { if x != nil { return x.RepeatedFloat } return nil } func (x *TestAllTypes) GetRepeatedDouble() []float64 { if x != nil { return x.RepeatedDouble } return nil } func (x *TestAllTypes) GetRepeatedBool() []bool { if x != nil { return x.RepeatedBool } return nil } func (x *TestAllTypes) GetRepeatedString() []string { if x != nil { return x.RepeatedString } return nil } func (x *TestAllTypes) GetRepeatedBytes() [][]byte { if x != nil { return x.RepeatedBytes } return nil } func (x *TestAllTypes) GetRepeatedNestedMessage() []*TestAllTypes_NestedMessage { if x != nil { return x.RepeatedNestedMessage } return nil } func (x *TestAllTypes) GetRepeatedNestedEnum() []TestAllTypes_NestedEnum { if x != nil { return x.RepeatedNestedEnum } return nil } func (x *TestAllTypes) GetRepeatedStringPiece() []string { if x != nil { return x.RepeatedStringPiece } return nil } func (x *TestAllTypes) GetRepeatedCord() []string { if x != nil { return x.RepeatedCord } return nil } func (x *TestAllTypes) GetRepeatedLazyMessage() []*TestAllTypes_NestedMessage { if x != nil { return x.RepeatedLazyMessage } return nil } func (x *TestAllTypes) GetRepeatedAny() []*anypb.Any { if x != nil { return x.RepeatedAny } return nil } func (x *TestAllTypes) GetRepeatedDuration() []*durationpb.Duration { if x != nil { return x.RepeatedDuration } return nil } func (x *TestAllTypes) GetRepeatedTimestamp() []*timestamppb.Timestamp { if x != nil { return x.RepeatedTimestamp } return nil } func (x *TestAllTypes) GetRepeatedStruct() []*structpb.Struct { if x != nil { return x.RepeatedStruct } return nil } func (x *TestAllTypes) GetRepeatedValue() []*structpb.Value { if x != nil { return x.RepeatedValue } return nil } func (x *TestAllTypes) GetRepeatedInt64Wrapper() []*wrapperspb.Int64Value { if x != nil { return x.RepeatedInt64Wrapper } return nil } func (x *TestAllTypes) GetRepeatedInt32Wrapper() []*wrapperspb.Int32Value { if x != nil { return x.RepeatedInt32Wrapper } return nil } func (x *TestAllTypes) GetRepeatedDoubleWrapper() []*wrapperspb.DoubleValue { if x != nil { return x.RepeatedDoubleWrapper } return nil } func (x *TestAllTypes) GetRepeatedFloatWrapper() []*wrapperspb.FloatValue { if x != nil { return x.RepeatedFloatWrapper } return nil } func (x *TestAllTypes) GetRepeatedUint64Wrapper() []*wrapperspb.UInt64Value { if x != nil { return x.RepeatedUint64Wrapper } return nil } func (x *TestAllTypes) GetRepeatedUint32Wrapper() []*wrapperspb.UInt32Value { if x != nil { return x.RepeatedUint32Wrapper } return nil } func (x *TestAllTypes) GetRepeatedStringWrapper() []*wrapperspb.StringValue { if x != nil { return x.RepeatedStringWrapper } return nil } func (x *TestAllTypes) GetRepeatedBoolWrapper() []*wrapperspb.BoolValue { if x != nil { return x.RepeatedBoolWrapper } return nil } func (x *TestAllTypes) GetRepeatedBytesWrapper() []*wrapperspb.BytesValue { if x != nil { return x.RepeatedBytesWrapper } return nil } func (x *TestAllTypes) GetRepeatedListValue() []*structpb.ListValue { if x != nil { return x.RepeatedListValue } return nil } func (x *TestAllTypes) GetRepeatedNullValue() []structpb.NullValue { if x != nil { return x.RepeatedNullValue } return nil } func (x *TestAllTypes) GetMapInt64NestedType() map[int64]*NestedTestAllTypes { if x != nil { return x.MapInt64NestedType } return nil } func (x *TestAllTypes) GetMapBoolBool() map[bool]bool { if x != nil { return x.MapBoolBool } return nil } func (x *TestAllTypes) GetMapBoolString() map[bool]string { if x != nil { return x.MapBoolString } return nil } func (x *TestAllTypes) GetMapBoolBytes() map[bool][]byte { if x != nil { return x.MapBoolBytes } return nil } func (x *TestAllTypes) GetMapBoolInt32() map[bool]int32 { if x != nil { return x.MapBoolInt32 } return nil } func (x *TestAllTypes) GetMapBoolInt64() map[bool]int64 { if x != nil { return x.MapBoolInt64 } return nil } func (x *TestAllTypes) GetMapBoolUint32() map[bool]uint32 { if x != nil { return x.MapBoolUint32 } return nil } func (x *TestAllTypes) GetMapBoolUint64() map[bool]uint64 { if x != nil { return x.MapBoolUint64 } return nil } func (x *TestAllTypes) GetMapBoolFloat() map[bool]float32 { if x != nil { return x.MapBoolFloat } return nil } func (x *TestAllTypes) GetMapBoolDouble() map[bool]float64 { if x != nil { return x.MapBoolDouble } return nil } func (x *TestAllTypes) GetMapBoolEnum() map[bool]TestAllTypes_NestedEnum { if x != nil { return x.MapBoolEnum } return nil } func (x *TestAllTypes) GetMapBoolMessage() map[bool]*TestAllTypes_NestedMessage { if x != nil { return x.MapBoolMessage } return nil } func (x *TestAllTypes) GetMapBoolDuration() map[bool]*durationpb.Duration { if x != nil { return x.MapBoolDuration } return nil } func (x *TestAllTypes) GetMapBoolTimestamp() map[bool]*timestamppb.Timestamp { if x != nil { return x.MapBoolTimestamp } return nil } func (x *TestAllTypes) GetMapBoolNullValue() map[bool]structpb.NullValue { if x != nil { return x.MapBoolNullValue } return nil } func (x *TestAllTypes) GetMapBoolAny() map[bool]*anypb.Any { if x != nil { return x.MapBoolAny } return nil } func (x *TestAllTypes) GetMapBoolStruct() map[bool]*structpb.Struct { if x != nil { return x.MapBoolStruct } return nil } func (x *TestAllTypes) GetMapBoolValue() map[bool]*structpb.Value { if x != nil { return x.MapBoolValue } return nil } func (x *TestAllTypes) GetMapBoolListValue() map[bool]*structpb.ListValue { if x != nil { return x.MapBoolListValue } return nil } func (x *TestAllTypes) GetMapBoolInt64Wrapper() map[bool]*wrapperspb.Int64Value { if x != nil { return x.MapBoolInt64Wrapper } return nil } func (x *TestAllTypes) GetMapBoolInt32Wrapper() map[bool]*wrapperspb.Int32Value { if x != nil { return x.MapBoolInt32Wrapper } return nil } func (x *TestAllTypes) GetMapBoolDoubleWrapper() map[bool]*wrapperspb.DoubleValue { if x != nil { return x.MapBoolDoubleWrapper } return nil } func (x *TestAllTypes) GetMapBoolFloatWrapper() map[bool]*wrapperspb.FloatValue { if x != nil { return x.MapBoolFloatWrapper } return nil } func (x *TestAllTypes) GetMapBoolUint64Wrapper() map[bool]*wrapperspb.UInt64Value { if x != nil { return x.MapBoolUint64Wrapper } return nil } func (x *TestAllTypes) GetMapBoolUint32Wrapper() map[bool]*wrapperspb.UInt32Value { if x != nil { return x.MapBoolUint32Wrapper } return nil } func (x *TestAllTypes) GetMapBoolStringWrapper() map[bool]*wrapperspb.StringValue { if x != nil { return x.MapBoolStringWrapper } return nil } func (x *TestAllTypes) GetMapBoolBoolWrapper() map[bool]*wrapperspb.BoolValue { if x != nil { return x.MapBoolBoolWrapper } return nil } func (x *TestAllTypes) GetMapBoolBytesWrapper() map[bool]*wrapperspb.BytesValue { if x != nil { return x.MapBoolBytesWrapper } return nil } func (x *TestAllTypes) GetMapInt32Bool() map[int32]bool { if x != nil { return x.MapInt32Bool } return nil } func (x *TestAllTypes) GetMapInt32String() map[int32]string { if x != nil { return x.MapInt32String } return nil } func (x *TestAllTypes) GetMapInt32Bytes() map[int32][]byte { if x != nil { return x.MapInt32Bytes } return nil } func (x *TestAllTypes) GetMapInt32Int32() map[int32]int32 { if x != nil { return x.MapInt32Int32 } return nil } func (x *TestAllTypes) GetMapInt32Int64() map[int32]int64 { if x != nil { return x.MapInt32Int64 } return nil } func (x *TestAllTypes) GetMapInt32Uint32() map[int32]uint32 { if x != nil { return x.MapInt32Uint32 } return nil } func (x *TestAllTypes) GetMapInt32Uint64() map[int32]uint64 { if x != nil { return x.MapInt32Uint64 } return nil } func (x *TestAllTypes) GetMapInt32Float() map[int32]float32 { if x != nil { return x.MapInt32Float } return nil } func (x *TestAllTypes) GetMapInt32Double() map[int32]float64 { if x != nil { return x.MapInt32Double } return nil } func (x *TestAllTypes) GetMapInt32Enum() map[int32]TestAllTypes_NestedEnum { if x != nil { return x.MapInt32Enum } return nil } func (x *TestAllTypes) GetMapInt32Message() map[int32]*TestAllTypes_NestedMessage { if x != nil { return x.MapInt32Message } return nil } func (x *TestAllTypes) GetMapInt32Duration() map[int32]*durationpb.Duration { if x != nil { return x.MapInt32Duration } return nil } func (x *TestAllTypes) GetMapInt32Timestamp() map[int32]*timestamppb.Timestamp { if x != nil { return x.MapInt32Timestamp } return nil } func (x *TestAllTypes) GetMapInt32NullValue() map[int32]structpb.NullValue { if x != nil { return x.MapInt32NullValue } return nil } func (x *TestAllTypes) GetMapInt32Any() map[int32]*anypb.Any { if x != nil { return x.MapInt32Any } return nil } func (x *TestAllTypes) GetMapInt32Struct() map[int32]*structpb.Struct { if x != nil { return x.MapInt32Struct } return nil } func (x *TestAllTypes) GetMapInt32Value() map[int32]*structpb.Value { if x != nil { return x.MapInt32Value } return nil } func (x *TestAllTypes) GetMapInt32ListValue() map[int32]*structpb.ListValue { if x != nil { return x.MapInt32ListValue } return nil } func (x *TestAllTypes) GetMapInt32Int64Wrapper() map[int32]*wrapperspb.Int64Value { if x != nil { return x.MapInt32Int64Wrapper } return nil } func (x *TestAllTypes) GetMapInt32Int32Wrapper() map[int32]*wrapperspb.Int32Value { if x != nil { return x.MapInt32Int32Wrapper } return nil } func (x *TestAllTypes) GetMapInt32DoubleWrapper() map[int32]*wrapperspb.DoubleValue { if x != nil { return x.MapInt32DoubleWrapper } return nil } func (x *TestAllTypes) GetMapInt32FloatWrapper() map[int32]*wrapperspb.FloatValue { if x != nil { return x.MapInt32FloatWrapper } return nil } func (x *TestAllTypes) GetMapInt32Uint64Wrapper() map[int32]*wrapperspb.UInt64Value { if x != nil { return x.MapInt32Uint64Wrapper } return nil } func (x *TestAllTypes) GetMapInt32Uint32Wrapper() map[int32]*wrapperspb.UInt32Value { if x != nil { return x.MapInt32Uint32Wrapper } return nil } func (x *TestAllTypes) GetMapInt32StringWrapper() map[int32]*wrapperspb.StringValue { if x != nil { return x.MapInt32StringWrapper } return nil } func (x *TestAllTypes) GetMapInt32BoolWrapper() map[int32]*wrapperspb.BoolValue { if x != nil { return x.MapInt32BoolWrapper } return nil } func (x *TestAllTypes) GetMapInt32BytesWrapper() map[int32]*wrapperspb.BytesValue { if x != nil { return x.MapInt32BytesWrapper } return nil } func (x *TestAllTypes) GetMapInt64Bool() map[int64]bool { if x != nil { return x.MapInt64Bool } return nil } func (x *TestAllTypes) GetMapInt64String() map[int64]string { if x != nil { return x.MapInt64String } return nil } func (x *TestAllTypes) GetMapInt64Bytes() map[int64][]byte { if x != nil { return x.MapInt64Bytes } return nil } func (x *TestAllTypes) GetMapInt64Int32() map[int64]int32 { if x != nil { return x.MapInt64Int32 } return nil } func (x *TestAllTypes) GetMapInt64Int64() map[int64]int64 { if x != nil { return x.MapInt64Int64 } return nil } func (x *TestAllTypes) GetMapInt64Uint32() map[int64]uint32 { if x != nil { return x.MapInt64Uint32 } return nil } func (x *TestAllTypes) GetMapInt64Uint64() map[int64]uint64 { if x != nil { return x.MapInt64Uint64 } return nil } func (x *TestAllTypes) GetMapInt64Float() map[int64]float32 { if x != nil { return x.MapInt64Float } return nil } func (x *TestAllTypes) GetMapInt64Double() map[int64]float64 { if x != nil { return x.MapInt64Double } return nil } func (x *TestAllTypes) GetMapInt64Enum() map[int64]TestAllTypes_NestedEnum { if x != nil { return x.MapInt64Enum } return nil } func (x *TestAllTypes) GetMapInt64Message() map[int64]*TestAllTypes_NestedMessage { if x != nil { return x.MapInt64Message } return nil } func (x *TestAllTypes) GetMapInt64Duration() map[int64]*durationpb.Duration { if x != nil { return x.MapInt64Duration } return nil } func (x *TestAllTypes) GetMapInt64Timestamp() map[int64]*timestamppb.Timestamp { if x != nil { return x.MapInt64Timestamp } return nil } func (x *TestAllTypes) GetMapInt64NullValue() map[int64]structpb.NullValue { if x != nil { return x.MapInt64NullValue } return nil } func (x *TestAllTypes) GetMapInt64Any() map[int64]*anypb.Any { if x != nil { return x.MapInt64Any } return nil } func (x *TestAllTypes) GetMapInt64Struct() map[int64]*structpb.Struct { if x != nil { return x.MapInt64Struct } return nil } func (x *TestAllTypes) GetMapInt64Value() map[int64]*structpb.Value { if x != nil { return x.MapInt64Value } return nil } func (x *TestAllTypes) GetMapInt64ListValue() map[int64]*structpb.ListValue { if x != nil { return x.MapInt64ListValue } return nil } func (x *TestAllTypes) GetMapInt64Int64Wrapper() map[int64]*wrapperspb.Int64Value { if x != nil { return x.MapInt64Int64Wrapper } return nil } func (x *TestAllTypes) GetMapInt64Int32Wrapper() map[int64]*wrapperspb.Int32Value { if x != nil { return x.MapInt64Int32Wrapper } return nil } func (x *TestAllTypes) GetMapInt64DoubleWrapper() map[int64]*wrapperspb.DoubleValue { if x != nil { return x.MapInt64DoubleWrapper } return nil } func (x *TestAllTypes) GetMapInt64FloatWrapper() map[int64]*wrapperspb.FloatValue { if x != nil { return x.MapInt64FloatWrapper } return nil } func (x *TestAllTypes) GetMapInt64Uint64Wrapper() map[int64]*wrapperspb.UInt64Value { if x != nil { return x.MapInt64Uint64Wrapper } return nil } func (x *TestAllTypes) GetMapInt64Uint32Wrapper() map[int64]*wrapperspb.UInt32Value { if x != nil { return x.MapInt64Uint32Wrapper } return nil } func (x *TestAllTypes) GetMapInt64StringWrapper() map[int64]*wrapperspb.StringValue { if x != nil { return x.MapInt64StringWrapper } return nil } func (x *TestAllTypes) GetMapInt64BoolWrapper() map[int64]*wrapperspb.BoolValue { if x != nil { return x.MapInt64BoolWrapper } return nil } func (x *TestAllTypes) GetMapInt64BytesWrapper() map[int64]*wrapperspb.BytesValue { if x != nil { return x.MapInt64BytesWrapper } return nil } func (x *TestAllTypes) GetMapUint32Bool() map[uint32]bool { if x != nil { return x.MapUint32Bool } return nil } func (x *TestAllTypes) GetMapUint32String() map[uint32]string { if x != nil { return x.MapUint32String } return nil } func (x *TestAllTypes) GetMapUint32Bytes() map[uint32][]byte { if x != nil { return x.MapUint32Bytes } return nil } func (x *TestAllTypes) GetMapUint32Int32() map[uint32]int32 { if x != nil { return x.MapUint32Int32 } return nil } func (x *TestAllTypes) GetMapUint32Int64() map[uint32]int64 { if x != nil { return x.MapUint32Int64 } return nil } func (x *TestAllTypes) GetMapUint32Uint32() map[uint32]uint32 { if x != nil { return x.MapUint32Uint32 } return nil } func (x *TestAllTypes) GetMapUint32Uint64() map[uint32]uint64 { if x != nil { return x.MapUint32Uint64 } return nil } func (x *TestAllTypes) GetMapUint32Float() map[uint32]float32 { if x != nil { return x.MapUint32Float } return nil } func (x *TestAllTypes) GetMapUint32Double() map[uint32]float64 { if x != nil { return x.MapUint32Double } return nil } func (x *TestAllTypes) GetMapUint32Enum() map[uint32]TestAllTypes_NestedEnum { if x != nil { return x.MapUint32Enum } return nil } func (x *TestAllTypes) GetMapUint32Message() map[uint32]*TestAllTypes_NestedMessage { if x != nil { return x.MapUint32Message } return nil } func (x *TestAllTypes) GetMapUint32Duration() map[uint32]*durationpb.Duration { if x != nil { return x.MapUint32Duration } return nil } func (x *TestAllTypes) GetMapUint32Timestamp() map[uint32]*timestamppb.Timestamp { if x != nil { return x.MapUint32Timestamp } return nil } func (x *TestAllTypes) GetMapUint32NullValue() map[uint32]structpb.NullValue { if x != nil { return x.MapUint32NullValue } return nil } func (x *TestAllTypes) GetMapUint32Any() map[uint32]*anypb.Any { if x != nil { return x.MapUint32Any } return nil } func (x *TestAllTypes) GetMapUint32Struct() map[uint32]*structpb.Struct { if x != nil { return x.MapUint32Struct } return nil } func (x *TestAllTypes) GetMapUint32Value() map[uint32]*structpb.Value { if x != nil { return x.MapUint32Value } return nil } func (x *TestAllTypes) GetMapUint32ListValue() map[uint32]*structpb.ListValue { if x != nil { return x.MapUint32ListValue } return nil } func (x *TestAllTypes) GetMapUint32Int64Wrapper() map[uint32]*wrapperspb.Int64Value { if x != nil { return x.MapUint32Int64Wrapper } return nil } func (x *TestAllTypes) GetMapUint32Int32Wrapper() map[uint32]*wrapperspb.Int32Value { if x != nil { return x.MapUint32Int32Wrapper } return nil } func (x *TestAllTypes) GetMapUint32DoubleWrapper() map[uint32]*wrapperspb.DoubleValue { if x != nil { return x.MapUint32DoubleWrapper } return nil } func (x *TestAllTypes) GetMapUint32FloatWrapper() map[uint32]*wrapperspb.FloatValue { if x != nil { return x.MapUint32FloatWrapper } return nil } func (x *TestAllTypes) GetMapUint32Uint64Wrapper() map[uint32]*wrapperspb.UInt64Value { if x != nil { return x.MapUint32Uint64Wrapper } return nil } func (x *TestAllTypes) GetMapUint32Uint32Wrapper() map[uint32]*wrapperspb.UInt32Value { if x != nil { return x.MapUint32Uint32Wrapper } return nil } func (x *TestAllTypes) GetMapUint32StringWrapper() map[uint32]*wrapperspb.StringValue { if x != nil { return x.MapUint32StringWrapper } return nil } func (x *TestAllTypes) GetMapUint32BoolWrapper() map[uint32]*wrapperspb.BoolValue { if x != nil { return x.MapUint32BoolWrapper } return nil } func (x *TestAllTypes) GetMapUint32BytesWrapper() map[uint32]*wrapperspb.BytesValue { if x != nil { return x.MapUint32BytesWrapper } return nil } func (x *TestAllTypes) GetMapUint64Bool() map[uint64]bool { if x != nil { return x.MapUint64Bool } return nil } func (x *TestAllTypes) GetMapUint64String() map[uint64]string { if x != nil { return x.MapUint64String } return nil } func (x *TestAllTypes) GetMapUint64Bytes() map[uint64][]byte { if x != nil { return x.MapUint64Bytes } return nil } func (x *TestAllTypes) GetMapUint64Int32() map[uint64]int32 { if x != nil { return x.MapUint64Int32 } return nil } func (x *TestAllTypes) GetMapUint64Int64() map[uint64]int64 { if x != nil { return x.MapUint64Int64 } return nil } func (x *TestAllTypes) GetMapUint64Uint32() map[uint64]uint32 { if x != nil { return x.MapUint64Uint32 } return nil } func (x *TestAllTypes) GetMapUint64Uint64() map[uint64]uint64 { if x != nil { return x.MapUint64Uint64 } return nil } func (x *TestAllTypes) GetMapUint64Float() map[uint64]float32 { if x != nil { return x.MapUint64Float } return nil } func (x *TestAllTypes) GetMapUint64Double() map[uint64]float64 { if x != nil { return x.MapUint64Double } return nil } func (x *TestAllTypes) GetMapUint64Enum() map[uint64]TestAllTypes_NestedEnum { if x != nil { return x.MapUint64Enum } return nil } func (x *TestAllTypes) GetMapUint64Message() map[uint64]*TestAllTypes_NestedMessage { if x != nil { return x.MapUint64Message } return nil } func (x *TestAllTypes) GetMapUint64Duration() map[uint64]*durationpb.Duration { if x != nil { return x.MapUint64Duration } return nil } func (x *TestAllTypes) GetMapUint64Timestamp() map[uint64]*timestamppb.Timestamp { if x != nil { return x.MapUint64Timestamp } return nil } func (x *TestAllTypes) GetMapUint64NullValue() map[uint64]structpb.NullValue { if x != nil { return x.MapUint64NullValue } return nil } func (x *TestAllTypes) GetMapUint64Any() map[uint64]*anypb.Any { if x != nil { return x.MapUint64Any } return nil } func (x *TestAllTypes) GetMapUint64Struct() map[uint64]*structpb.Struct { if x != nil { return x.MapUint64Struct } return nil } func (x *TestAllTypes) GetMapUint64Value() map[uint64]*structpb.Value { if x != nil { return x.MapUint64Value } return nil } func (x *TestAllTypes) GetMapUint64ListValue() map[uint64]*structpb.ListValue { if x != nil { return x.MapUint64ListValue } return nil } func (x *TestAllTypes) GetMapUint64Int64Wrapper() map[uint64]*wrapperspb.Int64Value { if x != nil { return x.MapUint64Int64Wrapper } return nil } func (x *TestAllTypes) GetMapUint64Int32Wrapper() map[uint64]*wrapperspb.Int32Value { if x != nil { return x.MapUint64Int32Wrapper } return nil } func (x *TestAllTypes) GetMapUint64DoubleWrapper() map[uint64]*wrapperspb.DoubleValue { if x != nil { return x.MapUint64DoubleWrapper } return nil } func (x *TestAllTypes) GetMapUint64FloatWrapper() map[uint64]*wrapperspb.FloatValue { if x != nil { return x.MapUint64FloatWrapper } return nil } func (x *TestAllTypes) GetMapUint64Uint64Wrapper() map[uint64]*wrapperspb.UInt64Value { if x != nil { return x.MapUint64Uint64Wrapper } return nil } func (x *TestAllTypes) GetMapUint64Uint32Wrapper() map[uint64]*wrapperspb.UInt32Value { if x != nil { return x.MapUint64Uint32Wrapper } return nil } func (x *TestAllTypes) GetMapUint64StringWrapper() map[uint64]*wrapperspb.StringValue { if x != nil { return x.MapUint64StringWrapper } return nil } func (x *TestAllTypes) GetMapUint64BoolWrapper() map[uint64]*wrapperspb.BoolValue { if x != nil { return x.MapUint64BoolWrapper } return nil } func (x *TestAllTypes) GetMapUint64BytesWrapper() map[uint64]*wrapperspb.BytesValue { if x != nil { return x.MapUint64BytesWrapper } return nil } func (x *TestAllTypes) GetMapStringBool() map[string]bool { if x != nil { return x.MapStringBool } return nil } func (x *TestAllTypes) GetMapStringString() map[string]string { if x != nil { return x.MapStringString } return nil } func (x *TestAllTypes) GetMapStringBytes() map[string][]byte { if x != nil { return x.MapStringBytes } return nil } func (x *TestAllTypes) GetMapStringInt32() map[string]int32 { if x != nil { return x.MapStringInt32 } return nil } func (x *TestAllTypes) GetMapStringInt64() map[string]int64 { if x != nil { return x.MapStringInt64 } return nil } func (x *TestAllTypes) GetMapStringUint32() map[string]uint32 { if x != nil { return x.MapStringUint32 } return nil } func (x *TestAllTypes) GetMapStringUint64() map[string]uint64 { if x != nil { return x.MapStringUint64 } return nil } func (x *TestAllTypes) GetMapStringFloat() map[string]float32 { if x != nil { return x.MapStringFloat } return nil } func (x *TestAllTypes) GetMapStringDouble() map[string]float64 { if x != nil { return x.MapStringDouble } return nil } func (x *TestAllTypes) GetMapStringEnum() map[string]TestAllTypes_NestedEnum { if x != nil { return x.MapStringEnum } return nil } func (x *TestAllTypes) GetMapStringMessage() map[string]*TestAllTypes_NestedMessage { if x != nil { return x.MapStringMessage } return nil } func (x *TestAllTypes) GetMapStringDuration() map[string]*durationpb.Duration { if x != nil { return x.MapStringDuration } return nil } func (x *TestAllTypes) GetMapStringTimestamp() map[string]*timestamppb.Timestamp { if x != nil { return x.MapStringTimestamp } return nil } func (x *TestAllTypes) GetMapStringNullValue() map[string]structpb.NullValue { if x != nil { return x.MapStringNullValue } return nil } func (x *TestAllTypes) GetMapStringAny() map[string]*anypb.Any { if x != nil { return x.MapStringAny } return nil } func (x *TestAllTypes) GetMapStringStruct() map[string]*structpb.Struct { if x != nil { return x.MapStringStruct } return nil } func (x *TestAllTypes) GetMapStringValue() map[string]*structpb.Value { if x != nil { return x.MapStringValue } return nil } func (x *TestAllTypes) GetMapStringListValue() map[string]*structpb.ListValue { if x != nil { return x.MapStringListValue } return nil } func (x *TestAllTypes) GetMapStringInt64Wrapper() map[string]*wrapperspb.Int64Value { if x != nil { return x.MapStringInt64Wrapper } return nil } func (x *TestAllTypes) GetMapStringInt32Wrapper() map[string]*wrapperspb.Int32Value { if x != nil { return x.MapStringInt32Wrapper } return nil } func (x *TestAllTypes) GetMapStringDoubleWrapper() map[string]*wrapperspb.DoubleValue { if x != nil { return x.MapStringDoubleWrapper } return nil } func (x *TestAllTypes) GetMapStringFloatWrapper() map[string]*wrapperspb.FloatValue { if x != nil { return x.MapStringFloatWrapper } return nil } func (x *TestAllTypes) GetMapStringUint64Wrapper() map[string]*wrapperspb.UInt64Value { if x != nil { return x.MapStringUint64Wrapper } return nil } func (x *TestAllTypes) GetMapStringUint32Wrapper() map[string]*wrapperspb.UInt32Value { if x != nil { return x.MapStringUint32Wrapper } return nil } func (x *TestAllTypes) GetMapStringStringWrapper() map[string]*wrapperspb.StringValue { if x != nil { return x.MapStringStringWrapper } return nil } func (x *TestAllTypes) GetMapStringBoolWrapper() map[string]*wrapperspb.BoolValue { if x != nil { return x.MapStringBoolWrapper } return nil } func (x *TestAllTypes) GetMapStringBytesWrapper() map[string]*wrapperspb.BytesValue { if x != nil { return x.MapStringBytesWrapper } return nil } func (x *TestAllTypes) GetKind() isTestAllTypes_Kind { if x != nil { return x.Kind } return nil } func (x *TestAllTypes) GetOneofType() *NestedTestAllTypes { if x != nil { if x, ok := x.Kind.(*TestAllTypes_OneofType); ok { return x.OneofType } } return nil } func (x *TestAllTypes) GetOneofMsg() *TestAllTypes_NestedMessage { if x != nil { if x, ok := x.Kind.(*TestAllTypes_OneofMsg); ok { return x.OneofMsg } } return nil } func (x *TestAllTypes) GetOneofBool() bool { if x != nil { if x, ok := x.Kind.(*TestAllTypes_OneofBool); ok { return x.OneofBool } } return false } type isTestAllTypes_NestedType interface { isTestAllTypes_NestedType() } type TestAllTypes_SingleNestedMessage struct { SingleNestedMessage *TestAllTypes_NestedMessage `protobuf:"bytes,21,opt,name=single_nested_message,json=singleNestedMessage,proto3,oneof"` } type TestAllTypes_SingleNestedEnum struct { SingleNestedEnum TestAllTypes_NestedEnum `protobuf:"varint,22,opt,name=single_nested_enum,json=singleNestedEnum,proto3,enum=cel.expr.conformance.proto3.TestAllTypes_NestedEnum,oneof"` } func (*TestAllTypes_SingleNestedMessage) isTestAllTypes_NestedType() {} func (*TestAllTypes_SingleNestedEnum) isTestAllTypes_NestedType() {} type isTestAllTypes_Kind interface { isTestAllTypes_Kind() } type TestAllTypes_OneofType struct { OneofType *NestedTestAllTypes `protobuf:"bytes,400,opt,name=oneof_type,json=oneofType,proto3,oneof"` } type TestAllTypes_OneofMsg struct { OneofMsg *TestAllTypes_NestedMessage `protobuf:"bytes,401,opt,name=oneof_msg,json=oneofMsg,proto3,oneof"` } type TestAllTypes_OneofBool struct { OneofBool bool `protobuf:"varint,402,opt,name=oneof_bool,json=oneofBool,proto3,oneof"` } func (*TestAllTypes_OneofType) isTestAllTypes_Kind() {} func (*TestAllTypes_OneofMsg) isTestAllTypes_Kind() {} func (*TestAllTypes_OneofBool) isTestAllTypes_Kind() {} type NestedTestAllTypes struct { state protoimpl.MessageState `protogen:"open.v1"` Child *NestedTestAllTypes `protobuf:"bytes,1,opt,name=child,proto3" json:"child,omitempty"` Payload *TestAllTypes `protobuf:"bytes,2,opt,name=payload,proto3" json:"payload,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *NestedTestAllTypes) Reset() { *x = NestedTestAllTypes{} mi := &file_cel_expr_conformance_proto3_test_all_types_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *NestedTestAllTypes) String() string { return protoimpl.X.MessageStringOf(x) } func (*NestedTestAllTypes) ProtoMessage() {} func (x *NestedTestAllTypes) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_proto3_test_all_types_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use NestedTestAllTypes.ProtoReflect.Descriptor instead. func (*NestedTestAllTypes) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_proto3_test_all_types_proto_rawDescGZIP(), []int{1} } func (x *NestedTestAllTypes) GetChild() *NestedTestAllTypes { if x != nil { return x.Child } return nil } func (x *NestedTestAllTypes) GetPayload() *TestAllTypes { if x != nil { return x.Payload } return nil } type TestAllTypes_NestedMessage struct { state protoimpl.MessageState `protogen:"open.v1"` Bb int32 `protobuf:"varint,1,opt,name=bb,proto3" json:"bb,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TestAllTypes_NestedMessage) Reset() { *x = TestAllTypes_NestedMessage{} mi := &file_cel_expr_conformance_proto3_test_all_types_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestAllTypes_NestedMessage) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestAllTypes_NestedMessage) ProtoMessage() {} func (x *TestAllTypes_NestedMessage) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_proto3_test_all_types_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestAllTypes_NestedMessage.ProtoReflect.Descriptor instead. func (*TestAllTypes_NestedMessage) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_proto3_test_all_types_proto_rawDescGZIP(), []int{0, 0} } func (x *TestAllTypes_NestedMessage) GetBb() int32 { if x != nil { return x.Bb } return 0 } var File_cel_expr_conformance_proto3_test_all_types_proto protoreflect.FileDescriptor var file_cel_expr_conformance_proto3_test_all_types_proto_rawDesc = []byte{ 0x0a, 0x30, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1b, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa0, 0xab, 0x02, 0x0a, 0x0c, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x05, 0x20, 0x01, 0x28, 0x11, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x06, 0x20, 0x01, 0x28, 0x12, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x07, 0x52, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x08, 0x20, 0x01, 0x28, 0x06, 0x52, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0f, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x10, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x01, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x88, 0x01, 0x01, 0x12, 0x2c, 0x0a, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x48, 0x03, 0x52, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x88, 0x01, 0x01, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x69, 0x6e, 0x12, 0x33, 0x0a, 0x0a, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x64, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x09, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x6e, 0x79, 0x12, 0x42, 0x0a, 0x0f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x45, 0x0a, 0x10, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x66, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x3c, 0x0a, 0x0d, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x67, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x39, 0x0a, 0x0c, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x68, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0b, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4d, 0x0a, 0x14, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x69, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x14, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x14, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x50, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4a, 0x0a, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x70, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4d, 0x0a, 0x14, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x71, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x72, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x73, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4f, 0x0a, 0x13, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x74, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x04, 0x52, 0x11, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x88, 0x01, 0x01, 0x12, 0x39, 0x0a, 0x0a, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6d, 0x61, 0x73, 0x6b, 0x18, 0x75, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x52, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4d, 0x61, 0x73, 0x6b, 0x12, 0x2c, 0x0a, 0x05, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x18, 0x76, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x05, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x6d, 0x0a, 0x15, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x13, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x64, 0x0a, 0x12, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x48, 0x00, 0x52, 0x10, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x66, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x11, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x5d, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x0e, 0x73, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x6c, 0x6f, 0x6e, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x1f, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x20, 0x20, 0x03, 0x28, 0x03, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x21, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x22, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x23, 0x20, 0x03, 0x28, 0x11, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x24, 0x20, 0x03, 0x28, 0x12, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x25, 0x20, 0x03, 0x28, 0x07, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x29, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x26, 0x20, 0x03, 0x28, 0x06, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x18, 0x27, 0x20, 0x03, 0x28, 0x0f, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x33, 0x32, 0x12, 0x2b, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x18, 0x28, 0x20, 0x03, 0x28, 0x10, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x66, 0x69, 0x78, 0x65, 0x64, 0x36, 0x34, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x29, 0x20, 0x03, 0x28, 0x02, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x2a, 0x20, 0x03, 0x28, 0x01, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x2b, 0x20, 0x03, 0x28, 0x08, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x2c, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x2d, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x6f, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x33, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x66, 0x0a, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x34, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x36, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x69, 0x65, 0x63, 0x65, 0x18, 0x35, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x08, 0x02, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x50, 0x69, 0x65, 0x63, 0x65, 0x12, 0x27, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x72, 0x64, 0x18, 0x36, 0x20, 0x03, 0x28, 0x09, 0x42, 0x02, 0x08, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x72, 0x64, 0x12, 0x6b, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x7a, 0x79, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x37, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x61, 0x7a, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x78, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x0b, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x6e, 0x79, 0x12, 0x46, 0x0a, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x79, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x49, 0x0a, 0x12, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x7a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x40, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x7b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x3d, 0x0a, 0x0e, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x7c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x51, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x7d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x7e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x54, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x7f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x80, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x81, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x82, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x55, 0x0a, 0x17, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x83, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4f, 0x0a, 0x15, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x84, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x16, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x85, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x14, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x86, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x87, 0x01, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x11, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x74, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x3e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x5e, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x3f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x40, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x41, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x42, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x43, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x44, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x45, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x46, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x47, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x5e, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x48, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x49, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe4, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xe5, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x6f, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xe6, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5c, 0x0a, 0x0c, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0xf6, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x41, 0x6e, 0x79, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0xf7, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x62, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xf8, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x6f, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xf9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfa, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfb, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfc, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xfe, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xff, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x80, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x81, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x82, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x4a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x4b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x4c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x4d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x4e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x4f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x50, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x51, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x52, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x53, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6a, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x54, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xe8, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x72, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xe9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5f, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x83, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x84, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x85, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x72, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x86, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x87, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x88, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x89, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8a, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8b, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8c, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8d, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8e, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x8f, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x55, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x56, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x57, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x58, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x59, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x5a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0x5b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0x5c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0x5d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x61, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x5e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6a, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x5f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xea, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xeb, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x72, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xec, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x5f, 0x0a, 0x0d, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x90, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x91, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x92, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x72, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x93, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x94, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x95, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x96, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x97, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x98, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x99, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x9a, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x78, 0x0a, 0x16, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x9b, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x13, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0x9c, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x64, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x60, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x6a, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x61, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x62, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x67, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0x63, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xc8, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xc9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xca, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0xcb, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0xcc, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xcd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xce, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xed, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xee, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xef, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x62, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0x9d, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0x9e, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x9f, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xa0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa1, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa2, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa3, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa4, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa5, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa6, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa7, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa8, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xa9, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0xcf, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0xd0, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xd1, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xd2, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xd3, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xd4, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xd5, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0xd6, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0xd7, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xd8, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xd9, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf0, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xf1, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xf2, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x62, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0xaa, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0xab, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xac, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xad, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xae, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xaf, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb1, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb2, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb3, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb4, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb5, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xb6, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0xda, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x12, 0x6a, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x18, 0x3d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0xdb, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xdc, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xdd, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x18, 0xde, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x18, 0xdf, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x18, 0xe0, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x18, 0xe1, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x12, 0x65, 0x0a, 0x0f, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0xe2, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0d, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x6e, 0x0a, 0x12, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0xe3, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x71, 0x0a, 0x13, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xf3, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x40, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x11, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x14, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0xf4, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xf5, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x62, 0x0a, 0x0e, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x61, 0x6e, 0x79, 0x18, 0xb7, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x79, 0x12, 0x6b, 0x0a, 0x11, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x18, 0xb8, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0f, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x68, 0x0a, 0x10, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xb9, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3d, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x75, 0x0a, 0x15, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0xba, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x12, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbb, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbc, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbd, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbe, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xbf, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x75, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xc0, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, 0x19, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xc1, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x45, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x16, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7b, 0x0a, 0x17, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xc2, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x43, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x14, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x7e, 0x0a, 0x18, 0x6d, 0x61, 0x70, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x77, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x18, 0xc3, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x44, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x15, 0x6d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x12, 0x51, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x90, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x48, 0x01, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x54, 0x79, 0x70, 0x65, 0x12, 0x57, 0x0a, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x6d, 0x73, 0x67, 0x18, 0x91, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x08, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x4d, 0x73, 0x67, 0x12, 0x20, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x18, 0x92, 0x03, 0x20, 0x01, 0x28, 0x08, 0x48, 0x01, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x42, 0x6f, 0x6f, 0x6c, 0x1a, 0x1f, 0x0a, 0x0d, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x62, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x62, 0x62, 0x1a, 0x76, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x45, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3e, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x74, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7a, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5d, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x53, 0x0a, 0x0f, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x57, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x42, 0x6f, 0x6f, 0x6c, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x75, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5a, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x62, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3f, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x75, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5e, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x10, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5a, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x58, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x60, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x66, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x62, 0x0a, 0x18, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x64, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x76, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7c, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x76, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7c, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x41, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x76, 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x45, 0x6e, 0x75, 0x6d, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x34, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x7c, 0x0a, 0x15, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x4d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5f, 0x0a, 0x16, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x55, 0x0a, 0x11, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x41, 0x6e, 0x79, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2a, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x5b, 0x0a, 0x14, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x59, 0x0a, 0x13, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x61, 0x0a, 0x17, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x55, 0x69, 0x6e, 0x74, 0x33, 0x32, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x67, 0x0a, 0x1b, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x32, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x63, 0x0a, 0x19, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x6f, 0x6f, 0x6c, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x30, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x65, 0x0a, 0x1a, 0x4d, 0x61, 0x70, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x79, 0x74, 0x65, 0x73, 0x57, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x42, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x27, 0x0a, 0x0a, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x4f, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x41, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x42, 0x41, 0x5a, 0x10, 0x02, 0x42, 0x0d, 0x0a, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x42, 0x10, 0x0a, 0x0e, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x62, 0x6f, 0x6f, 0x6c, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa0, 0x01, 0x0a, 0x12, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x45, 0x0a, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x4e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x05, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x12, 0x43, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2a, 0x27, 0x0a, 0x0a, 0x47, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x45, 0x6e, 0x75, 0x6d, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x4f, 0x4f, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x41, 0x52, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x41, 0x5a, 0x10, 0x02, 0x42, 0x5a, 0x0a, 0x1f, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x42, 0x11, 0x54, 0x65, 0x73, 0x74, 0x41, 0x6c, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x1f, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_conformance_proto3_test_all_types_proto_rawDescOnce sync.Once file_cel_expr_conformance_proto3_test_all_types_proto_rawDescData = file_cel_expr_conformance_proto3_test_all_types_proto_rawDesc ) func file_cel_expr_conformance_proto3_test_all_types_proto_rawDescGZIP() []byte { file_cel_expr_conformance_proto3_test_all_types_proto_rawDescOnce.Do(func() { file_cel_expr_conformance_proto3_test_all_types_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_conformance_proto3_test_all_types_proto_rawDescData) }) return file_cel_expr_conformance_proto3_test_all_types_proto_rawDescData } var file_cel_expr_conformance_proto3_test_all_types_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_cel_expr_conformance_proto3_test_all_types_proto_msgTypes = make([]protoimpl.MessageInfo, 166) var file_cel_expr_conformance_proto3_test_all_types_proto_goTypes = []any{ (GlobalEnum)(0), // 0: cel.expr.conformance.proto3.GlobalEnum (TestAllTypes_NestedEnum)(0), // 1: cel.expr.conformance.proto3.TestAllTypes.NestedEnum (*TestAllTypes)(nil), // 2: cel.expr.conformance.proto3.TestAllTypes (*NestedTestAllTypes)(nil), // 3: cel.expr.conformance.proto3.NestedTestAllTypes (*TestAllTypes_NestedMessage)(nil), // 4: cel.expr.conformance.proto3.TestAllTypes.NestedMessage nil, // 5: cel.expr.conformance.proto3.TestAllTypes.MapInt64NestedTypeEntry nil, // 6: cel.expr.conformance.proto3.TestAllTypes.MapBoolBoolEntry nil, // 7: cel.expr.conformance.proto3.TestAllTypes.MapBoolStringEntry nil, // 8: cel.expr.conformance.proto3.TestAllTypes.MapBoolBytesEntry nil, // 9: cel.expr.conformance.proto3.TestAllTypes.MapBoolInt32Entry nil, // 10: cel.expr.conformance.proto3.TestAllTypes.MapBoolInt64Entry nil, // 11: cel.expr.conformance.proto3.TestAllTypes.MapBoolUint32Entry nil, // 12: cel.expr.conformance.proto3.TestAllTypes.MapBoolUint64Entry nil, // 13: cel.expr.conformance.proto3.TestAllTypes.MapBoolFloatEntry nil, // 14: cel.expr.conformance.proto3.TestAllTypes.MapBoolDoubleEntry nil, // 15: cel.expr.conformance.proto3.TestAllTypes.MapBoolEnumEntry nil, // 16: cel.expr.conformance.proto3.TestAllTypes.MapBoolMessageEntry nil, // 17: cel.expr.conformance.proto3.TestAllTypes.MapBoolDurationEntry nil, // 18: cel.expr.conformance.proto3.TestAllTypes.MapBoolTimestampEntry nil, // 19: cel.expr.conformance.proto3.TestAllTypes.MapBoolNullValueEntry nil, // 20: cel.expr.conformance.proto3.TestAllTypes.MapBoolAnyEntry nil, // 21: cel.expr.conformance.proto3.TestAllTypes.MapBoolStructEntry nil, // 22: cel.expr.conformance.proto3.TestAllTypes.MapBoolValueEntry nil, // 23: cel.expr.conformance.proto3.TestAllTypes.MapBoolListValueEntry nil, // 24: cel.expr.conformance.proto3.TestAllTypes.MapBoolInt64WrapperEntry nil, // 25: cel.expr.conformance.proto3.TestAllTypes.MapBoolInt32WrapperEntry nil, // 26: cel.expr.conformance.proto3.TestAllTypes.MapBoolDoubleWrapperEntry nil, // 27: cel.expr.conformance.proto3.TestAllTypes.MapBoolFloatWrapperEntry nil, // 28: cel.expr.conformance.proto3.TestAllTypes.MapBoolUint64WrapperEntry nil, // 29: cel.expr.conformance.proto3.TestAllTypes.MapBoolUint32WrapperEntry nil, // 30: cel.expr.conformance.proto3.TestAllTypes.MapBoolStringWrapperEntry nil, // 31: cel.expr.conformance.proto3.TestAllTypes.MapBoolBoolWrapperEntry nil, // 32: cel.expr.conformance.proto3.TestAllTypes.MapBoolBytesWrapperEntry nil, // 33: cel.expr.conformance.proto3.TestAllTypes.MapInt32BoolEntry nil, // 34: cel.expr.conformance.proto3.TestAllTypes.MapInt32StringEntry nil, // 35: cel.expr.conformance.proto3.TestAllTypes.MapInt32BytesEntry nil, // 36: cel.expr.conformance.proto3.TestAllTypes.MapInt32Int32Entry nil, // 37: cel.expr.conformance.proto3.TestAllTypes.MapInt32Int64Entry nil, // 38: cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint32Entry nil, // 39: cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint64Entry nil, // 40: cel.expr.conformance.proto3.TestAllTypes.MapInt32FloatEntry nil, // 41: cel.expr.conformance.proto3.TestAllTypes.MapInt32DoubleEntry nil, // 42: cel.expr.conformance.proto3.TestAllTypes.MapInt32EnumEntry nil, // 43: cel.expr.conformance.proto3.TestAllTypes.MapInt32MessageEntry nil, // 44: cel.expr.conformance.proto3.TestAllTypes.MapInt32DurationEntry nil, // 45: cel.expr.conformance.proto3.TestAllTypes.MapInt32TimestampEntry nil, // 46: cel.expr.conformance.proto3.TestAllTypes.MapInt32NullValueEntry nil, // 47: cel.expr.conformance.proto3.TestAllTypes.MapInt32AnyEntry nil, // 48: cel.expr.conformance.proto3.TestAllTypes.MapInt32StructEntry nil, // 49: cel.expr.conformance.proto3.TestAllTypes.MapInt32ValueEntry nil, // 50: cel.expr.conformance.proto3.TestAllTypes.MapInt32ListValueEntry nil, // 51: cel.expr.conformance.proto3.TestAllTypes.MapInt32Int64WrapperEntry nil, // 52: cel.expr.conformance.proto3.TestAllTypes.MapInt32Int32WrapperEntry nil, // 53: cel.expr.conformance.proto3.TestAllTypes.MapInt32DoubleWrapperEntry nil, // 54: cel.expr.conformance.proto3.TestAllTypes.MapInt32FloatWrapperEntry nil, // 55: cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint64WrapperEntry nil, // 56: cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint32WrapperEntry nil, // 57: cel.expr.conformance.proto3.TestAllTypes.MapInt32StringWrapperEntry nil, // 58: cel.expr.conformance.proto3.TestAllTypes.MapInt32BoolWrapperEntry nil, // 59: cel.expr.conformance.proto3.TestAllTypes.MapInt32BytesWrapperEntry nil, // 60: cel.expr.conformance.proto3.TestAllTypes.MapInt64BoolEntry nil, // 61: cel.expr.conformance.proto3.TestAllTypes.MapInt64StringEntry nil, // 62: cel.expr.conformance.proto3.TestAllTypes.MapInt64BytesEntry nil, // 63: cel.expr.conformance.proto3.TestAllTypes.MapInt64Int32Entry nil, // 64: cel.expr.conformance.proto3.TestAllTypes.MapInt64Int64Entry nil, // 65: cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint32Entry nil, // 66: cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint64Entry nil, // 67: cel.expr.conformance.proto3.TestAllTypes.MapInt64FloatEntry nil, // 68: cel.expr.conformance.proto3.TestAllTypes.MapInt64DoubleEntry nil, // 69: cel.expr.conformance.proto3.TestAllTypes.MapInt64EnumEntry nil, // 70: cel.expr.conformance.proto3.TestAllTypes.MapInt64MessageEntry nil, // 71: cel.expr.conformance.proto3.TestAllTypes.MapInt64DurationEntry nil, // 72: cel.expr.conformance.proto3.TestAllTypes.MapInt64TimestampEntry nil, // 73: cel.expr.conformance.proto3.TestAllTypes.MapInt64NullValueEntry nil, // 74: cel.expr.conformance.proto3.TestAllTypes.MapInt64AnyEntry nil, // 75: cel.expr.conformance.proto3.TestAllTypes.MapInt64StructEntry nil, // 76: cel.expr.conformance.proto3.TestAllTypes.MapInt64ValueEntry nil, // 77: cel.expr.conformance.proto3.TestAllTypes.MapInt64ListValueEntry nil, // 78: cel.expr.conformance.proto3.TestAllTypes.MapInt64Int64WrapperEntry nil, // 79: cel.expr.conformance.proto3.TestAllTypes.MapInt64Int32WrapperEntry nil, // 80: cel.expr.conformance.proto3.TestAllTypes.MapInt64DoubleWrapperEntry nil, // 81: cel.expr.conformance.proto3.TestAllTypes.MapInt64FloatWrapperEntry nil, // 82: cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint64WrapperEntry nil, // 83: cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint32WrapperEntry nil, // 84: cel.expr.conformance.proto3.TestAllTypes.MapInt64StringWrapperEntry nil, // 85: cel.expr.conformance.proto3.TestAllTypes.MapInt64BoolWrapperEntry nil, // 86: cel.expr.conformance.proto3.TestAllTypes.MapInt64BytesWrapperEntry nil, // 87: cel.expr.conformance.proto3.TestAllTypes.MapUint32BoolEntry nil, // 88: cel.expr.conformance.proto3.TestAllTypes.MapUint32StringEntry nil, // 89: cel.expr.conformance.proto3.TestAllTypes.MapUint32BytesEntry nil, // 90: cel.expr.conformance.proto3.TestAllTypes.MapUint32Int32Entry nil, // 91: cel.expr.conformance.proto3.TestAllTypes.MapUint32Int64Entry nil, // 92: cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint32Entry nil, // 93: cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint64Entry nil, // 94: cel.expr.conformance.proto3.TestAllTypes.MapUint32FloatEntry nil, // 95: cel.expr.conformance.proto3.TestAllTypes.MapUint32DoubleEntry nil, // 96: cel.expr.conformance.proto3.TestAllTypes.MapUint32EnumEntry nil, // 97: cel.expr.conformance.proto3.TestAllTypes.MapUint32MessageEntry nil, // 98: cel.expr.conformance.proto3.TestAllTypes.MapUint32DurationEntry nil, // 99: cel.expr.conformance.proto3.TestAllTypes.MapUint32TimestampEntry nil, // 100: cel.expr.conformance.proto3.TestAllTypes.MapUint32NullValueEntry nil, // 101: cel.expr.conformance.proto3.TestAllTypes.MapUint32AnyEntry nil, // 102: cel.expr.conformance.proto3.TestAllTypes.MapUint32StructEntry nil, // 103: cel.expr.conformance.proto3.TestAllTypes.MapUint32ValueEntry nil, // 104: cel.expr.conformance.proto3.TestAllTypes.MapUint32ListValueEntry nil, // 105: cel.expr.conformance.proto3.TestAllTypes.MapUint32Int64WrapperEntry nil, // 106: cel.expr.conformance.proto3.TestAllTypes.MapUint32Int32WrapperEntry nil, // 107: cel.expr.conformance.proto3.TestAllTypes.MapUint32DoubleWrapperEntry nil, // 108: cel.expr.conformance.proto3.TestAllTypes.MapUint32FloatWrapperEntry nil, // 109: cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint64WrapperEntry nil, // 110: cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint32WrapperEntry nil, // 111: cel.expr.conformance.proto3.TestAllTypes.MapUint32StringWrapperEntry nil, // 112: cel.expr.conformance.proto3.TestAllTypes.MapUint32BoolWrapperEntry nil, // 113: cel.expr.conformance.proto3.TestAllTypes.MapUint32BytesWrapperEntry nil, // 114: cel.expr.conformance.proto3.TestAllTypes.MapUint64BoolEntry nil, // 115: cel.expr.conformance.proto3.TestAllTypes.MapUint64StringEntry nil, // 116: cel.expr.conformance.proto3.TestAllTypes.MapUint64BytesEntry nil, // 117: cel.expr.conformance.proto3.TestAllTypes.MapUint64Int32Entry nil, // 118: cel.expr.conformance.proto3.TestAllTypes.MapUint64Int64Entry nil, // 119: cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint32Entry nil, // 120: cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint64Entry nil, // 121: cel.expr.conformance.proto3.TestAllTypes.MapUint64FloatEntry nil, // 122: cel.expr.conformance.proto3.TestAllTypes.MapUint64DoubleEntry nil, // 123: cel.expr.conformance.proto3.TestAllTypes.MapUint64EnumEntry nil, // 124: cel.expr.conformance.proto3.TestAllTypes.MapUint64MessageEntry nil, // 125: cel.expr.conformance.proto3.TestAllTypes.MapUint64DurationEntry nil, // 126: cel.expr.conformance.proto3.TestAllTypes.MapUint64TimestampEntry nil, // 127: cel.expr.conformance.proto3.TestAllTypes.MapUint64NullValueEntry nil, // 128: cel.expr.conformance.proto3.TestAllTypes.MapUint64AnyEntry nil, // 129: cel.expr.conformance.proto3.TestAllTypes.MapUint64StructEntry nil, // 130: cel.expr.conformance.proto3.TestAllTypes.MapUint64ValueEntry nil, // 131: cel.expr.conformance.proto3.TestAllTypes.MapUint64ListValueEntry nil, // 132: cel.expr.conformance.proto3.TestAllTypes.MapUint64Int64WrapperEntry nil, // 133: cel.expr.conformance.proto3.TestAllTypes.MapUint64Int32WrapperEntry nil, // 134: cel.expr.conformance.proto3.TestAllTypes.MapUint64DoubleWrapperEntry nil, // 135: cel.expr.conformance.proto3.TestAllTypes.MapUint64FloatWrapperEntry nil, // 136: cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint64WrapperEntry nil, // 137: cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint32WrapperEntry nil, // 138: cel.expr.conformance.proto3.TestAllTypes.MapUint64StringWrapperEntry nil, // 139: cel.expr.conformance.proto3.TestAllTypes.MapUint64BoolWrapperEntry nil, // 140: cel.expr.conformance.proto3.TestAllTypes.MapUint64BytesWrapperEntry nil, // 141: cel.expr.conformance.proto3.TestAllTypes.MapStringBoolEntry nil, // 142: cel.expr.conformance.proto3.TestAllTypes.MapStringStringEntry nil, // 143: cel.expr.conformance.proto3.TestAllTypes.MapStringBytesEntry nil, // 144: cel.expr.conformance.proto3.TestAllTypes.MapStringInt32Entry nil, // 145: cel.expr.conformance.proto3.TestAllTypes.MapStringInt64Entry nil, // 146: cel.expr.conformance.proto3.TestAllTypes.MapStringUint32Entry nil, // 147: cel.expr.conformance.proto3.TestAllTypes.MapStringUint64Entry nil, // 148: cel.expr.conformance.proto3.TestAllTypes.MapStringFloatEntry nil, // 149: cel.expr.conformance.proto3.TestAllTypes.MapStringDoubleEntry nil, // 150: cel.expr.conformance.proto3.TestAllTypes.MapStringEnumEntry nil, // 151: cel.expr.conformance.proto3.TestAllTypes.MapStringMessageEntry nil, // 152: cel.expr.conformance.proto3.TestAllTypes.MapStringDurationEntry nil, // 153: cel.expr.conformance.proto3.TestAllTypes.MapStringTimestampEntry nil, // 154: cel.expr.conformance.proto3.TestAllTypes.MapStringNullValueEntry nil, // 155: cel.expr.conformance.proto3.TestAllTypes.MapStringAnyEntry nil, // 156: cel.expr.conformance.proto3.TestAllTypes.MapStringStructEntry nil, // 157: cel.expr.conformance.proto3.TestAllTypes.MapStringValueEntry nil, // 158: cel.expr.conformance.proto3.TestAllTypes.MapStringListValueEntry nil, // 159: cel.expr.conformance.proto3.TestAllTypes.MapStringInt64WrapperEntry nil, // 160: cel.expr.conformance.proto3.TestAllTypes.MapStringInt32WrapperEntry nil, // 161: cel.expr.conformance.proto3.TestAllTypes.MapStringDoubleWrapperEntry nil, // 162: cel.expr.conformance.proto3.TestAllTypes.MapStringFloatWrapperEntry nil, // 163: cel.expr.conformance.proto3.TestAllTypes.MapStringUint64WrapperEntry nil, // 164: cel.expr.conformance.proto3.TestAllTypes.MapStringUint32WrapperEntry nil, // 165: cel.expr.conformance.proto3.TestAllTypes.MapStringStringWrapperEntry nil, // 166: cel.expr.conformance.proto3.TestAllTypes.MapStringBoolWrapperEntry nil, // 167: cel.expr.conformance.proto3.TestAllTypes.MapStringBytesWrapperEntry (*anypb.Any)(nil), // 168: google.protobuf.Any (*durationpb.Duration)(nil), // 169: google.protobuf.Duration (*timestamppb.Timestamp)(nil), // 170: google.protobuf.Timestamp (*structpb.Struct)(nil), // 171: google.protobuf.Struct (*structpb.Value)(nil), // 172: google.protobuf.Value (*wrapperspb.Int64Value)(nil), // 173: google.protobuf.Int64Value (*wrapperspb.Int32Value)(nil), // 174: google.protobuf.Int32Value (*wrapperspb.DoubleValue)(nil), // 175: google.protobuf.DoubleValue (*wrapperspb.FloatValue)(nil), // 176: google.protobuf.FloatValue (*wrapperspb.UInt64Value)(nil), // 177: google.protobuf.UInt64Value (*wrapperspb.UInt32Value)(nil), // 178: google.protobuf.UInt32Value (*wrapperspb.StringValue)(nil), // 179: google.protobuf.StringValue (*wrapperspb.BoolValue)(nil), // 180: google.protobuf.BoolValue (*wrapperspb.BytesValue)(nil), // 181: google.protobuf.BytesValue (*structpb.ListValue)(nil), // 182: google.protobuf.ListValue (structpb.NullValue)(0), // 183: google.protobuf.NullValue (*fieldmaskpb.FieldMask)(nil), // 184: google.protobuf.FieldMask (*emptypb.Empty)(nil), // 185: google.protobuf.Empty } var file_cel_expr_conformance_proto3_test_all_types_proto_depIdxs = []int32{ 168, // 0: cel.expr.conformance.proto3.TestAllTypes.single_any:type_name -> google.protobuf.Any 169, // 1: cel.expr.conformance.proto3.TestAllTypes.single_duration:type_name -> google.protobuf.Duration 170, // 2: cel.expr.conformance.proto3.TestAllTypes.single_timestamp:type_name -> google.protobuf.Timestamp 171, // 3: cel.expr.conformance.proto3.TestAllTypes.single_struct:type_name -> google.protobuf.Struct 172, // 4: cel.expr.conformance.proto3.TestAllTypes.single_value:type_name -> google.protobuf.Value 173, // 5: cel.expr.conformance.proto3.TestAllTypes.single_int64_wrapper:type_name -> google.protobuf.Int64Value 174, // 6: cel.expr.conformance.proto3.TestAllTypes.single_int32_wrapper:type_name -> google.protobuf.Int32Value 175, // 7: cel.expr.conformance.proto3.TestAllTypes.single_double_wrapper:type_name -> google.protobuf.DoubleValue 176, // 8: cel.expr.conformance.proto3.TestAllTypes.single_float_wrapper:type_name -> google.protobuf.FloatValue 177, // 9: cel.expr.conformance.proto3.TestAllTypes.single_uint64_wrapper:type_name -> google.protobuf.UInt64Value 178, // 10: cel.expr.conformance.proto3.TestAllTypes.single_uint32_wrapper:type_name -> google.protobuf.UInt32Value 179, // 11: cel.expr.conformance.proto3.TestAllTypes.single_string_wrapper:type_name -> google.protobuf.StringValue 180, // 12: cel.expr.conformance.proto3.TestAllTypes.single_bool_wrapper:type_name -> google.protobuf.BoolValue 181, // 13: cel.expr.conformance.proto3.TestAllTypes.single_bytes_wrapper:type_name -> google.protobuf.BytesValue 182, // 14: cel.expr.conformance.proto3.TestAllTypes.list_value:type_name -> google.protobuf.ListValue 183, // 15: cel.expr.conformance.proto3.TestAllTypes.null_value:type_name -> google.protobuf.NullValue 183, // 16: cel.expr.conformance.proto3.TestAllTypes.optional_null_value:type_name -> google.protobuf.NullValue 184, // 17: cel.expr.conformance.proto3.TestAllTypes.field_mask:type_name -> google.protobuf.FieldMask 185, // 18: cel.expr.conformance.proto3.TestAllTypes.empty:type_name -> google.protobuf.Empty 4, // 19: cel.expr.conformance.proto3.TestAllTypes.single_nested_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 1, // 20: cel.expr.conformance.proto3.TestAllTypes.single_nested_enum:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedEnum 4, // 21: cel.expr.conformance.proto3.TestAllTypes.standalone_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 1, // 22: cel.expr.conformance.proto3.TestAllTypes.standalone_enum:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedEnum 4, // 23: cel.expr.conformance.proto3.TestAllTypes.repeated_nested_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 1, // 24: cel.expr.conformance.proto3.TestAllTypes.repeated_nested_enum:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedEnum 4, // 25: cel.expr.conformance.proto3.TestAllTypes.repeated_lazy_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 168, // 26: cel.expr.conformance.proto3.TestAllTypes.repeated_any:type_name -> google.protobuf.Any 169, // 27: cel.expr.conformance.proto3.TestAllTypes.repeated_duration:type_name -> google.protobuf.Duration 170, // 28: cel.expr.conformance.proto3.TestAllTypes.repeated_timestamp:type_name -> google.protobuf.Timestamp 171, // 29: cel.expr.conformance.proto3.TestAllTypes.repeated_struct:type_name -> google.protobuf.Struct 172, // 30: cel.expr.conformance.proto3.TestAllTypes.repeated_value:type_name -> google.protobuf.Value 173, // 31: cel.expr.conformance.proto3.TestAllTypes.repeated_int64_wrapper:type_name -> google.protobuf.Int64Value 174, // 32: cel.expr.conformance.proto3.TestAllTypes.repeated_int32_wrapper:type_name -> google.protobuf.Int32Value 175, // 33: cel.expr.conformance.proto3.TestAllTypes.repeated_double_wrapper:type_name -> google.protobuf.DoubleValue 176, // 34: cel.expr.conformance.proto3.TestAllTypes.repeated_float_wrapper:type_name -> google.protobuf.FloatValue 177, // 35: cel.expr.conformance.proto3.TestAllTypes.repeated_uint64_wrapper:type_name -> google.protobuf.UInt64Value 178, // 36: cel.expr.conformance.proto3.TestAllTypes.repeated_uint32_wrapper:type_name -> google.protobuf.UInt32Value 179, // 37: cel.expr.conformance.proto3.TestAllTypes.repeated_string_wrapper:type_name -> google.protobuf.StringValue 180, // 38: cel.expr.conformance.proto3.TestAllTypes.repeated_bool_wrapper:type_name -> google.protobuf.BoolValue 181, // 39: cel.expr.conformance.proto3.TestAllTypes.repeated_bytes_wrapper:type_name -> google.protobuf.BytesValue 182, // 40: cel.expr.conformance.proto3.TestAllTypes.repeated_list_value:type_name -> google.protobuf.ListValue 183, // 41: cel.expr.conformance.proto3.TestAllTypes.repeated_null_value:type_name -> google.protobuf.NullValue 5, // 42: cel.expr.conformance.proto3.TestAllTypes.map_int64_nested_type:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64NestedTypeEntry 6, // 43: cel.expr.conformance.proto3.TestAllTypes.map_bool_bool:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolBoolEntry 7, // 44: cel.expr.conformance.proto3.TestAllTypes.map_bool_string:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolStringEntry 8, // 45: cel.expr.conformance.proto3.TestAllTypes.map_bool_bytes:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolBytesEntry 9, // 46: cel.expr.conformance.proto3.TestAllTypes.map_bool_int32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolInt32Entry 10, // 47: cel.expr.conformance.proto3.TestAllTypes.map_bool_int64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolInt64Entry 11, // 48: cel.expr.conformance.proto3.TestAllTypes.map_bool_uint32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolUint32Entry 12, // 49: cel.expr.conformance.proto3.TestAllTypes.map_bool_uint64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolUint64Entry 13, // 50: cel.expr.conformance.proto3.TestAllTypes.map_bool_float:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolFloatEntry 14, // 51: cel.expr.conformance.proto3.TestAllTypes.map_bool_double:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolDoubleEntry 15, // 52: cel.expr.conformance.proto3.TestAllTypes.map_bool_enum:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolEnumEntry 16, // 53: cel.expr.conformance.proto3.TestAllTypes.map_bool_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolMessageEntry 17, // 54: cel.expr.conformance.proto3.TestAllTypes.map_bool_duration:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolDurationEntry 18, // 55: cel.expr.conformance.proto3.TestAllTypes.map_bool_timestamp:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolTimestampEntry 19, // 56: cel.expr.conformance.proto3.TestAllTypes.map_bool_null_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolNullValueEntry 20, // 57: cel.expr.conformance.proto3.TestAllTypes.map_bool_any:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolAnyEntry 21, // 58: cel.expr.conformance.proto3.TestAllTypes.map_bool_struct:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolStructEntry 22, // 59: cel.expr.conformance.proto3.TestAllTypes.map_bool_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolValueEntry 23, // 60: cel.expr.conformance.proto3.TestAllTypes.map_bool_list_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolListValueEntry 24, // 61: cel.expr.conformance.proto3.TestAllTypes.map_bool_int64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolInt64WrapperEntry 25, // 62: cel.expr.conformance.proto3.TestAllTypes.map_bool_int32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolInt32WrapperEntry 26, // 63: cel.expr.conformance.proto3.TestAllTypes.map_bool_double_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolDoubleWrapperEntry 27, // 64: cel.expr.conformance.proto3.TestAllTypes.map_bool_float_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolFloatWrapperEntry 28, // 65: cel.expr.conformance.proto3.TestAllTypes.map_bool_uint64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolUint64WrapperEntry 29, // 66: cel.expr.conformance.proto3.TestAllTypes.map_bool_uint32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolUint32WrapperEntry 30, // 67: cel.expr.conformance.proto3.TestAllTypes.map_bool_string_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolStringWrapperEntry 31, // 68: cel.expr.conformance.proto3.TestAllTypes.map_bool_bool_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolBoolWrapperEntry 32, // 69: cel.expr.conformance.proto3.TestAllTypes.map_bool_bytes_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapBoolBytesWrapperEntry 33, // 70: cel.expr.conformance.proto3.TestAllTypes.map_int32_bool:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32BoolEntry 34, // 71: cel.expr.conformance.proto3.TestAllTypes.map_int32_string:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32StringEntry 35, // 72: cel.expr.conformance.proto3.TestAllTypes.map_int32_bytes:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32BytesEntry 36, // 73: cel.expr.conformance.proto3.TestAllTypes.map_int32_int32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32Int32Entry 37, // 74: cel.expr.conformance.proto3.TestAllTypes.map_int32_int64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32Int64Entry 38, // 75: cel.expr.conformance.proto3.TestAllTypes.map_int32_uint32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint32Entry 39, // 76: cel.expr.conformance.proto3.TestAllTypes.map_int32_uint64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint64Entry 40, // 77: cel.expr.conformance.proto3.TestAllTypes.map_int32_float:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32FloatEntry 41, // 78: cel.expr.conformance.proto3.TestAllTypes.map_int32_double:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32DoubleEntry 42, // 79: cel.expr.conformance.proto3.TestAllTypes.map_int32_enum:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32EnumEntry 43, // 80: cel.expr.conformance.proto3.TestAllTypes.map_int32_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32MessageEntry 44, // 81: cel.expr.conformance.proto3.TestAllTypes.map_int32_duration:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32DurationEntry 45, // 82: cel.expr.conformance.proto3.TestAllTypes.map_int32_timestamp:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32TimestampEntry 46, // 83: cel.expr.conformance.proto3.TestAllTypes.map_int32_null_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32NullValueEntry 47, // 84: cel.expr.conformance.proto3.TestAllTypes.map_int32_any:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32AnyEntry 48, // 85: cel.expr.conformance.proto3.TestAllTypes.map_int32_struct:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32StructEntry 49, // 86: cel.expr.conformance.proto3.TestAllTypes.map_int32_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32ValueEntry 50, // 87: cel.expr.conformance.proto3.TestAllTypes.map_int32_list_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32ListValueEntry 51, // 88: cel.expr.conformance.proto3.TestAllTypes.map_int32_int64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32Int64WrapperEntry 52, // 89: cel.expr.conformance.proto3.TestAllTypes.map_int32_int32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32Int32WrapperEntry 53, // 90: cel.expr.conformance.proto3.TestAllTypes.map_int32_double_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32DoubleWrapperEntry 54, // 91: cel.expr.conformance.proto3.TestAllTypes.map_int32_float_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32FloatWrapperEntry 55, // 92: cel.expr.conformance.proto3.TestAllTypes.map_int32_uint64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint64WrapperEntry 56, // 93: cel.expr.conformance.proto3.TestAllTypes.map_int32_uint32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint32WrapperEntry 57, // 94: cel.expr.conformance.proto3.TestAllTypes.map_int32_string_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32StringWrapperEntry 58, // 95: cel.expr.conformance.proto3.TestAllTypes.map_int32_bool_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32BoolWrapperEntry 59, // 96: cel.expr.conformance.proto3.TestAllTypes.map_int32_bytes_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt32BytesWrapperEntry 60, // 97: cel.expr.conformance.proto3.TestAllTypes.map_int64_bool:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64BoolEntry 61, // 98: cel.expr.conformance.proto3.TestAllTypes.map_int64_string:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64StringEntry 62, // 99: cel.expr.conformance.proto3.TestAllTypes.map_int64_bytes:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64BytesEntry 63, // 100: cel.expr.conformance.proto3.TestAllTypes.map_int64_int32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64Int32Entry 64, // 101: cel.expr.conformance.proto3.TestAllTypes.map_int64_int64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64Int64Entry 65, // 102: cel.expr.conformance.proto3.TestAllTypes.map_int64_uint32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint32Entry 66, // 103: cel.expr.conformance.proto3.TestAllTypes.map_int64_uint64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint64Entry 67, // 104: cel.expr.conformance.proto3.TestAllTypes.map_int64_float:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64FloatEntry 68, // 105: cel.expr.conformance.proto3.TestAllTypes.map_int64_double:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64DoubleEntry 69, // 106: cel.expr.conformance.proto3.TestAllTypes.map_int64_enum:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64EnumEntry 70, // 107: cel.expr.conformance.proto3.TestAllTypes.map_int64_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64MessageEntry 71, // 108: cel.expr.conformance.proto3.TestAllTypes.map_int64_duration:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64DurationEntry 72, // 109: cel.expr.conformance.proto3.TestAllTypes.map_int64_timestamp:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64TimestampEntry 73, // 110: cel.expr.conformance.proto3.TestAllTypes.map_int64_null_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64NullValueEntry 74, // 111: cel.expr.conformance.proto3.TestAllTypes.map_int64_any:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64AnyEntry 75, // 112: cel.expr.conformance.proto3.TestAllTypes.map_int64_struct:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64StructEntry 76, // 113: cel.expr.conformance.proto3.TestAllTypes.map_int64_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64ValueEntry 77, // 114: cel.expr.conformance.proto3.TestAllTypes.map_int64_list_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64ListValueEntry 78, // 115: cel.expr.conformance.proto3.TestAllTypes.map_int64_int64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64Int64WrapperEntry 79, // 116: cel.expr.conformance.proto3.TestAllTypes.map_int64_int32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64Int32WrapperEntry 80, // 117: cel.expr.conformance.proto3.TestAllTypes.map_int64_double_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64DoubleWrapperEntry 81, // 118: cel.expr.conformance.proto3.TestAllTypes.map_int64_float_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64FloatWrapperEntry 82, // 119: cel.expr.conformance.proto3.TestAllTypes.map_int64_uint64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint64WrapperEntry 83, // 120: cel.expr.conformance.proto3.TestAllTypes.map_int64_uint32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint32WrapperEntry 84, // 121: cel.expr.conformance.proto3.TestAllTypes.map_int64_string_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64StringWrapperEntry 85, // 122: cel.expr.conformance.proto3.TestAllTypes.map_int64_bool_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64BoolWrapperEntry 86, // 123: cel.expr.conformance.proto3.TestAllTypes.map_int64_bytes_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapInt64BytesWrapperEntry 87, // 124: cel.expr.conformance.proto3.TestAllTypes.map_uint32_bool:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32BoolEntry 88, // 125: cel.expr.conformance.proto3.TestAllTypes.map_uint32_string:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32StringEntry 89, // 126: cel.expr.conformance.proto3.TestAllTypes.map_uint32_bytes:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32BytesEntry 90, // 127: cel.expr.conformance.proto3.TestAllTypes.map_uint32_int32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32Int32Entry 91, // 128: cel.expr.conformance.proto3.TestAllTypes.map_uint32_int64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32Int64Entry 92, // 129: cel.expr.conformance.proto3.TestAllTypes.map_uint32_uint32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint32Entry 93, // 130: cel.expr.conformance.proto3.TestAllTypes.map_uint32_uint64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint64Entry 94, // 131: cel.expr.conformance.proto3.TestAllTypes.map_uint32_float:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32FloatEntry 95, // 132: cel.expr.conformance.proto3.TestAllTypes.map_uint32_double:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32DoubleEntry 96, // 133: cel.expr.conformance.proto3.TestAllTypes.map_uint32_enum:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32EnumEntry 97, // 134: cel.expr.conformance.proto3.TestAllTypes.map_uint32_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32MessageEntry 98, // 135: cel.expr.conformance.proto3.TestAllTypes.map_uint32_duration:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32DurationEntry 99, // 136: cel.expr.conformance.proto3.TestAllTypes.map_uint32_timestamp:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32TimestampEntry 100, // 137: cel.expr.conformance.proto3.TestAllTypes.map_uint32_null_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32NullValueEntry 101, // 138: cel.expr.conformance.proto3.TestAllTypes.map_uint32_any:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32AnyEntry 102, // 139: cel.expr.conformance.proto3.TestAllTypes.map_uint32_struct:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32StructEntry 103, // 140: cel.expr.conformance.proto3.TestAllTypes.map_uint32_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32ValueEntry 104, // 141: cel.expr.conformance.proto3.TestAllTypes.map_uint32_list_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32ListValueEntry 105, // 142: cel.expr.conformance.proto3.TestAllTypes.map_uint32_int64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32Int64WrapperEntry 106, // 143: cel.expr.conformance.proto3.TestAllTypes.map_uint32_int32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32Int32WrapperEntry 107, // 144: cel.expr.conformance.proto3.TestAllTypes.map_uint32_double_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32DoubleWrapperEntry 108, // 145: cel.expr.conformance.proto3.TestAllTypes.map_uint32_float_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32FloatWrapperEntry 109, // 146: cel.expr.conformance.proto3.TestAllTypes.map_uint32_uint64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint64WrapperEntry 110, // 147: cel.expr.conformance.proto3.TestAllTypes.map_uint32_uint32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint32WrapperEntry 111, // 148: cel.expr.conformance.proto3.TestAllTypes.map_uint32_string_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32StringWrapperEntry 112, // 149: cel.expr.conformance.proto3.TestAllTypes.map_uint32_bool_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32BoolWrapperEntry 113, // 150: cel.expr.conformance.proto3.TestAllTypes.map_uint32_bytes_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint32BytesWrapperEntry 114, // 151: cel.expr.conformance.proto3.TestAllTypes.map_uint64_bool:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64BoolEntry 115, // 152: cel.expr.conformance.proto3.TestAllTypes.map_uint64_string:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64StringEntry 116, // 153: cel.expr.conformance.proto3.TestAllTypes.map_uint64_bytes:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64BytesEntry 117, // 154: cel.expr.conformance.proto3.TestAllTypes.map_uint64_int32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64Int32Entry 118, // 155: cel.expr.conformance.proto3.TestAllTypes.map_uint64_int64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64Int64Entry 119, // 156: cel.expr.conformance.proto3.TestAllTypes.map_uint64_uint32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint32Entry 120, // 157: cel.expr.conformance.proto3.TestAllTypes.map_uint64_uint64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint64Entry 121, // 158: cel.expr.conformance.proto3.TestAllTypes.map_uint64_float:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64FloatEntry 122, // 159: cel.expr.conformance.proto3.TestAllTypes.map_uint64_double:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64DoubleEntry 123, // 160: cel.expr.conformance.proto3.TestAllTypes.map_uint64_enum:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64EnumEntry 124, // 161: cel.expr.conformance.proto3.TestAllTypes.map_uint64_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64MessageEntry 125, // 162: cel.expr.conformance.proto3.TestAllTypes.map_uint64_duration:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64DurationEntry 126, // 163: cel.expr.conformance.proto3.TestAllTypes.map_uint64_timestamp:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64TimestampEntry 127, // 164: cel.expr.conformance.proto3.TestAllTypes.map_uint64_null_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64NullValueEntry 128, // 165: cel.expr.conformance.proto3.TestAllTypes.map_uint64_any:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64AnyEntry 129, // 166: cel.expr.conformance.proto3.TestAllTypes.map_uint64_struct:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64StructEntry 130, // 167: cel.expr.conformance.proto3.TestAllTypes.map_uint64_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64ValueEntry 131, // 168: cel.expr.conformance.proto3.TestAllTypes.map_uint64_list_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64ListValueEntry 132, // 169: cel.expr.conformance.proto3.TestAllTypes.map_uint64_int64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64Int64WrapperEntry 133, // 170: cel.expr.conformance.proto3.TestAllTypes.map_uint64_int32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64Int32WrapperEntry 134, // 171: cel.expr.conformance.proto3.TestAllTypes.map_uint64_double_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64DoubleWrapperEntry 135, // 172: cel.expr.conformance.proto3.TestAllTypes.map_uint64_float_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64FloatWrapperEntry 136, // 173: cel.expr.conformance.proto3.TestAllTypes.map_uint64_uint64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint64WrapperEntry 137, // 174: cel.expr.conformance.proto3.TestAllTypes.map_uint64_uint32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint32WrapperEntry 138, // 175: cel.expr.conformance.proto3.TestAllTypes.map_uint64_string_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64StringWrapperEntry 139, // 176: cel.expr.conformance.proto3.TestAllTypes.map_uint64_bool_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64BoolWrapperEntry 140, // 177: cel.expr.conformance.proto3.TestAllTypes.map_uint64_bytes_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapUint64BytesWrapperEntry 141, // 178: cel.expr.conformance.proto3.TestAllTypes.map_string_bool:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringBoolEntry 142, // 179: cel.expr.conformance.proto3.TestAllTypes.map_string_string:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringStringEntry 143, // 180: cel.expr.conformance.proto3.TestAllTypes.map_string_bytes:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringBytesEntry 144, // 181: cel.expr.conformance.proto3.TestAllTypes.map_string_int32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringInt32Entry 145, // 182: cel.expr.conformance.proto3.TestAllTypes.map_string_int64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringInt64Entry 146, // 183: cel.expr.conformance.proto3.TestAllTypes.map_string_uint32:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringUint32Entry 147, // 184: cel.expr.conformance.proto3.TestAllTypes.map_string_uint64:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringUint64Entry 148, // 185: cel.expr.conformance.proto3.TestAllTypes.map_string_float:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringFloatEntry 149, // 186: cel.expr.conformance.proto3.TestAllTypes.map_string_double:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringDoubleEntry 150, // 187: cel.expr.conformance.proto3.TestAllTypes.map_string_enum:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringEnumEntry 151, // 188: cel.expr.conformance.proto3.TestAllTypes.map_string_message:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringMessageEntry 152, // 189: cel.expr.conformance.proto3.TestAllTypes.map_string_duration:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringDurationEntry 153, // 190: cel.expr.conformance.proto3.TestAllTypes.map_string_timestamp:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringTimestampEntry 154, // 191: cel.expr.conformance.proto3.TestAllTypes.map_string_null_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringNullValueEntry 155, // 192: cel.expr.conformance.proto3.TestAllTypes.map_string_any:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringAnyEntry 156, // 193: cel.expr.conformance.proto3.TestAllTypes.map_string_struct:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringStructEntry 157, // 194: cel.expr.conformance.proto3.TestAllTypes.map_string_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringValueEntry 158, // 195: cel.expr.conformance.proto3.TestAllTypes.map_string_list_value:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringListValueEntry 159, // 196: cel.expr.conformance.proto3.TestAllTypes.map_string_int64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringInt64WrapperEntry 160, // 197: cel.expr.conformance.proto3.TestAllTypes.map_string_int32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringInt32WrapperEntry 161, // 198: cel.expr.conformance.proto3.TestAllTypes.map_string_double_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringDoubleWrapperEntry 162, // 199: cel.expr.conformance.proto3.TestAllTypes.map_string_float_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringFloatWrapperEntry 163, // 200: cel.expr.conformance.proto3.TestAllTypes.map_string_uint64_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringUint64WrapperEntry 164, // 201: cel.expr.conformance.proto3.TestAllTypes.map_string_uint32_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringUint32WrapperEntry 165, // 202: cel.expr.conformance.proto3.TestAllTypes.map_string_string_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringStringWrapperEntry 166, // 203: cel.expr.conformance.proto3.TestAllTypes.map_string_bool_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringBoolWrapperEntry 167, // 204: cel.expr.conformance.proto3.TestAllTypes.map_string_bytes_wrapper:type_name -> cel.expr.conformance.proto3.TestAllTypes.MapStringBytesWrapperEntry 3, // 205: cel.expr.conformance.proto3.TestAllTypes.oneof_type:type_name -> cel.expr.conformance.proto3.NestedTestAllTypes 4, // 206: cel.expr.conformance.proto3.TestAllTypes.oneof_msg:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 3, // 207: cel.expr.conformance.proto3.NestedTestAllTypes.child:type_name -> cel.expr.conformance.proto3.NestedTestAllTypes 2, // 208: cel.expr.conformance.proto3.NestedTestAllTypes.payload:type_name -> cel.expr.conformance.proto3.TestAllTypes 3, // 209: cel.expr.conformance.proto3.TestAllTypes.MapInt64NestedTypeEntry.value:type_name -> cel.expr.conformance.proto3.NestedTestAllTypes 1, // 210: cel.expr.conformance.proto3.TestAllTypes.MapBoolEnumEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedEnum 4, // 211: cel.expr.conformance.proto3.TestAllTypes.MapBoolMessageEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 169, // 212: cel.expr.conformance.proto3.TestAllTypes.MapBoolDurationEntry.value:type_name -> google.protobuf.Duration 170, // 213: cel.expr.conformance.proto3.TestAllTypes.MapBoolTimestampEntry.value:type_name -> google.protobuf.Timestamp 183, // 214: cel.expr.conformance.proto3.TestAllTypes.MapBoolNullValueEntry.value:type_name -> google.protobuf.NullValue 168, // 215: cel.expr.conformance.proto3.TestAllTypes.MapBoolAnyEntry.value:type_name -> google.protobuf.Any 171, // 216: cel.expr.conformance.proto3.TestAllTypes.MapBoolStructEntry.value:type_name -> google.protobuf.Struct 172, // 217: cel.expr.conformance.proto3.TestAllTypes.MapBoolValueEntry.value:type_name -> google.protobuf.Value 182, // 218: cel.expr.conformance.proto3.TestAllTypes.MapBoolListValueEntry.value:type_name -> google.protobuf.ListValue 173, // 219: cel.expr.conformance.proto3.TestAllTypes.MapBoolInt64WrapperEntry.value:type_name -> google.protobuf.Int64Value 174, // 220: cel.expr.conformance.proto3.TestAllTypes.MapBoolInt32WrapperEntry.value:type_name -> google.protobuf.Int32Value 175, // 221: cel.expr.conformance.proto3.TestAllTypes.MapBoolDoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 176, // 222: cel.expr.conformance.proto3.TestAllTypes.MapBoolFloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 177, // 223: cel.expr.conformance.proto3.TestAllTypes.MapBoolUint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 178, // 224: cel.expr.conformance.proto3.TestAllTypes.MapBoolUint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 179, // 225: cel.expr.conformance.proto3.TestAllTypes.MapBoolStringWrapperEntry.value:type_name -> google.protobuf.StringValue 180, // 226: cel.expr.conformance.proto3.TestAllTypes.MapBoolBoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 181, // 227: cel.expr.conformance.proto3.TestAllTypes.MapBoolBytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 228: cel.expr.conformance.proto3.TestAllTypes.MapInt32EnumEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedEnum 4, // 229: cel.expr.conformance.proto3.TestAllTypes.MapInt32MessageEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 169, // 230: cel.expr.conformance.proto3.TestAllTypes.MapInt32DurationEntry.value:type_name -> google.protobuf.Duration 170, // 231: cel.expr.conformance.proto3.TestAllTypes.MapInt32TimestampEntry.value:type_name -> google.protobuf.Timestamp 183, // 232: cel.expr.conformance.proto3.TestAllTypes.MapInt32NullValueEntry.value:type_name -> google.protobuf.NullValue 168, // 233: cel.expr.conformance.proto3.TestAllTypes.MapInt32AnyEntry.value:type_name -> google.protobuf.Any 171, // 234: cel.expr.conformance.proto3.TestAllTypes.MapInt32StructEntry.value:type_name -> google.protobuf.Struct 172, // 235: cel.expr.conformance.proto3.TestAllTypes.MapInt32ValueEntry.value:type_name -> google.protobuf.Value 182, // 236: cel.expr.conformance.proto3.TestAllTypes.MapInt32ListValueEntry.value:type_name -> google.protobuf.ListValue 173, // 237: cel.expr.conformance.proto3.TestAllTypes.MapInt32Int64WrapperEntry.value:type_name -> google.protobuf.Int64Value 174, // 238: cel.expr.conformance.proto3.TestAllTypes.MapInt32Int32WrapperEntry.value:type_name -> google.protobuf.Int32Value 175, // 239: cel.expr.conformance.proto3.TestAllTypes.MapInt32DoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 176, // 240: cel.expr.conformance.proto3.TestAllTypes.MapInt32FloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 177, // 241: cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 178, // 242: cel.expr.conformance.proto3.TestAllTypes.MapInt32Uint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 179, // 243: cel.expr.conformance.proto3.TestAllTypes.MapInt32StringWrapperEntry.value:type_name -> google.protobuf.StringValue 180, // 244: cel.expr.conformance.proto3.TestAllTypes.MapInt32BoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 181, // 245: cel.expr.conformance.proto3.TestAllTypes.MapInt32BytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 246: cel.expr.conformance.proto3.TestAllTypes.MapInt64EnumEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedEnum 4, // 247: cel.expr.conformance.proto3.TestAllTypes.MapInt64MessageEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 169, // 248: cel.expr.conformance.proto3.TestAllTypes.MapInt64DurationEntry.value:type_name -> google.protobuf.Duration 170, // 249: cel.expr.conformance.proto3.TestAllTypes.MapInt64TimestampEntry.value:type_name -> google.protobuf.Timestamp 183, // 250: cel.expr.conformance.proto3.TestAllTypes.MapInt64NullValueEntry.value:type_name -> google.protobuf.NullValue 168, // 251: cel.expr.conformance.proto3.TestAllTypes.MapInt64AnyEntry.value:type_name -> google.protobuf.Any 171, // 252: cel.expr.conformance.proto3.TestAllTypes.MapInt64StructEntry.value:type_name -> google.protobuf.Struct 172, // 253: cel.expr.conformance.proto3.TestAllTypes.MapInt64ValueEntry.value:type_name -> google.protobuf.Value 182, // 254: cel.expr.conformance.proto3.TestAllTypes.MapInt64ListValueEntry.value:type_name -> google.protobuf.ListValue 173, // 255: cel.expr.conformance.proto3.TestAllTypes.MapInt64Int64WrapperEntry.value:type_name -> google.protobuf.Int64Value 174, // 256: cel.expr.conformance.proto3.TestAllTypes.MapInt64Int32WrapperEntry.value:type_name -> google.protobuf.Int32Value 175, // 257: cel.expr.conformance.proto3.TestAllTypes.MapInt64DoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 176, // 258: cel.expr.conformance.proto3.TestAllTypes.MapInt64FloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 177, // 259: cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 178, // 260: cel.expr.conformance.proto3.TestAllTypes.MapInt64Uint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 179, // 261: cel.expr.conformance.proto3.TestAllTypes.MapInt64StringWrapperEntry.value:type_name -> google.protobuf.StringValue 180, // 262: cel.expr.conformance.proto3.TestAllTypes.MapInt64BoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 181, // 263: cel.expr.conformance.proto3.TestAllTypes.MapInt64BytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 264: cel.expr.conformance.proto3.TestAllTypes.MapUint32EnumEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedEnum 4, // 265: cel.expr.conformance.proto3.TestAllTypes.MapUint32MessageEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 169, // 266: cel.expr.conformance.proto3.TestAllTypes.MapUint32DurationEntry.value:type_name -> google.protobuf.Duration 170, // 267: cel.expr.conformance.proto3.TestAllTypes.MapUint32TimestampEntry.value:type_name -> google.protobuf.Timestamp 183, // 268: cel.expr.conformance.proto3.TestAllTypes.MapUint32NullValueEntry.value:type_name -> google.protobuf.NullValue 168, // 269: cel.expr.conformance.proto3.TestAllTypes.MapUint32AnyEntry.value:type_name -> google.protobuf.Any 171, // 270: cel.expr.conformance.proto3.TestAllTypes.MapUint32StructEntry.value:type_name -> google.protobuf.Struct 172, // 271: cel.expr.conformance.proto3.TestAllTypes.MapUint32ValueEntry.value:type_name -> google.protobuf.Value 182, // 272: cel.expr.conformance.proto3.TestAllTypes.MapUint32ListValueEntry.value:type_name -> google.protobuf.ListValue 173, // 273: cel.expr.conformance.proto3.TestAllTypes.MapUint32Int64WrapperEntry.value:type_name -> google.protobuf.Int64Value 174, // 274: cel.expr.conformance.proto3.TestAllTypes.MapUint32Int32WrapperEntry.value:type_name -> google.protobuf.Int32Value 175, // 275: cel.expr.conformance.proto3.TestAllTypes.MapUint32DoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 176, // 276: cel.expr.conformance.proto3.TestAllTypes.MapUint32FloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 177, // 277: cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 178, // 278: cel.expr.conformance.proto3.TestAllTypes.MapUint32Uint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 179, // 279: cel.expr.conformance.proto3.TestAllTypes.MapUint32StringWrapperEntry.value:type_name -> google.protobuf.StringValue 180, // 280: cel.expr.conformance.proto3.TestAllTypes.MapUint32BoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 181, // 281: cel.expr.conformance.proto3.TestAllTypes.MapUint32BytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 282: cel.expr.conformance.proto3.TestAllTypes.MapUint64EnumEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedEnum 4, // 283: cel.expr.conformance.proto3.TestAllTypes.MapUint64MessageEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 169, // 284: cel.expr.conformance.proto3.TestAllTypes.MapUint64DurationEntry.value:type_name -> google.protobuf.Duration 170, // 285: cel.expr.conformance.proto3.TestAllTypes.MapUint64TimestampEntry.value:type_name -> google.protobuf.Timestamp 183, // 286: cel.expr.conformance.proto3.TestAllTypes.MapUint64NullValueEntry.value:type_name -> google.protobuf.NullValue 168, // 287: cel.expr.conformance.proto3.TestAllTypes.MapUint64AnyEntry.value:type_name -> google.protobuf.Any 171, // 288: cel.expr.conformance.proto3.TestAllTypes.MapUint64StructEntry.value:type_name -> google.protobuf.Struct 172, // 289: cel.expr.conformance.proto3.TestAllTypes.MapUint64ValueEntry.value:type_name -> google.protobuf.Value 182, // 290: cel.expr.conformance.proto3.TestAllTypes.MapUint64ListValueEntry.value:type_name -> google.protobuf.ListValue 173, // 291: cel.expr.conformance.proto3.TestAllTypes.MapUint64Int64WrapperEntry.value:type_name -> google.protobuf.Int64Value 174, // 292: cel.expr.conformance.proto3.TestAllTypes.MapUint64Int32WrapperEntry.value:type_name -> google.protobuf.Int32Value 175, // 293: cel.expr.conformance.proto3.TestAllTypes.MapUint64DoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 176, // 294: cel.expr.conformance.proto3.TestAllTypes.MapUint64FloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 177, // 295: cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 178, // 296: cel.expr.conformance.proto3.TestAllTypes.MapUint64Uint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 179, // 297: cel.expr.conformance.proto3.TestAllTypes.MapUint64StringWrapperEntry.value:type_name -> google.protobuf.StringValue 180, // 298: cel.expr.conformance.proto3.TestAllTypes.MapUint64BoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 181, // 299: cel.expr.conformance.proto3.TestAllTypes.MapUint64BytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 1, // 300: cel.expr.conformance.proto3.TestAllTypes.MapStringEnumEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedEnum 4, // 301: cel.expr.conformance.proto3.TestAllTypes.MapStringMessageEntry.value:type_name -> cel.expr.conformance.proto3.TestAllTypes.NestedMessage 169, // 302: cel.expr.conformance.proto3.TestAllTypes.MapStringDurationEntry.value:type_name -> google.protobuf.Duration 170, // 303: cel.expr.conformance.proto3.TestAllTypes.MapStringTimestampEntry.value:type_name -> google.protobuf.Timestamp 183, // 304: cel.expr.conformance.proto3.TestAllTypes.MapStringNullValueEntry.value:type_name -> google.protobuf.NullValue 168, // 305: cel.expr.conformance.proto3.TestAllTypes.MapStringAnyEntry.value:type_name -> google.protobuf.Any 171, // 306: cel.expr.conformance.proto3.TestAllTypes.MapStringStructEntry.value:type_name -> google.protobuf.Struct 172, // 307: cel.expr.conformance.proto3.TestAllTypes.MapStringValueEntry.value:type_name -> google.protobuf.Value 182, // 308: cel.expr.conformance.proto3.TestAllTypes.MapStringListValueEntry.value:type_name -> google.protobuf.ListValue 173, // 309: cel.expr.conformance.proto3.TestAllTypes.MapStringInt64WrapperEntry.value:type_name -> google.protobuf.Int64Value 174, // 310: cel.expr.conformance.proto3.TestAllTypes.MapStringInt32WrapperEntry.value:type_name -> google.protobuf.Int32Value 175, // 311: cel.expr.conformance.proto3.TestAllTypes.MapStringDoubleWrapperEntry.value:type_name -> google.protobuf.DoubleValue 176, // 312: cel.expr.conformance.proto3.TestAllTypes.MapStringFloatWrapperEntry.value:type_name -> google.protobuf.FloatValue 177, // 313: cel.expr.conformance.proto3.TestAllTypes.MapStringUint64WrapperEntry.value:type_name -> google.protobuf.UInt64Value 178, // 314: cel.expr.conformance.proto3.TestAllTypes.MapStringUint32WrapperEntry.value:type_name -> google.protobuf.UInt32Value 179, // 315: cel.expr.conformance.proto3.TestAllTypes.MapStringStringWrapperEntry.value:type_name -> google.protobuf.StringValue 180, // 316: cel.expr.conformance.proto3.TestAllTypes.MapStringBoolWrapperEntry.value:type_name -> google.protobuf.BoolValue 181, // 317: cel.expr.conformance.proto3.TestAllTypes.MapStringBytesWrapperEntry.value:type_name -> google.protobuf.BytesValue 318, // [318:318] is the sub-list for method output_type 318, // [318:318] is the sub-list for method input_type 318, // [318:318] is the sub-list for extension type_name 318, // [318:318] is the sub-list for extension extendee 0, // [0:318] is the sub-list for field type_name } func init() { file_cel_expr_conformance_proto3_test_all_types_proto_init() } func file_cel_expr_conformance_proto3_test_all_types_proto_init() { if File_cel_expr_conformance_proto3_test_all_types_proto != nil { return } file_cel_expr_conformance_proto3_test_all_types_proto_msgTypes[0].OneofWrappers = []any{ (*TestAllTypes_SingleNestedMessage)(nil), (*TestAllTypes_SingleNestedEnum)(nil), (*TestAllTypes_OneofType)(nil), (*TestAllTypes_OneofMsg)(nil), (*TestAllTypes_OneofBool)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_conformance_proto3_test_all_types_proto_rawDesc, NumEnums: 2, NumMessages: 166, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_conformance_proto3_test_all_types_proto_goTypes, DependencyIndexes: file_cel_expr_conformance_proto3_test_all_types_proto_depIdxs, EnumInfos: file_cel_expr_conformance_proto3_test_all_types_proto_enumTypes, MessageInfos: file_cel_expr_conformance_proto3_test_all_types_proto_msgTypes, }.Build() File_cel_expr_conformance_proto3_test_all_types_proto = out.File file_cel_expr_conformance_proto3_test_all_types_proto_rawDesc = nil file_cel_expr_conformance_proto3_test_all_types_proto_goTypes = nil file_cel_expr_conformance_proto3_test_all_types_proto_depIdxs = nil } cel-spec-0.24.0/conformance/test/000077500000000000000000000000001500667630300165475ustar00rootroot00000000000000cel-spec-0.24.0/conformance/test/BUILD.bazel000077500000000000000000000022051500667630300204270ustar00rootroot00000000000000# Copyright 2024 Google LLC # # 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 # # https://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. load("@io_bazel_rules_go//go:def.bzl", "go_library") package( default_visibility = ["//visibility:public"], licenses = ["notice"], # Apache 2.0 ) go_library( name = "go_default_library", srcs = [ "simple.pb.go", "suite.pb.go" ], importpath = "cel.dev/expr/conformance/test", deps = [ "//:expr", "//conformance:go_default_library", "@org_golang_google_protobuf//reflect/protoreflect", "@org_golang_google_protobuf//runtime/protoimpl", "@org_golang_google_protobuf//types/known/anypb", ], ) cel-spec-0.24.0/conformance/test/simple.pb.go000077500000000000000000000672421500667630300210050ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.3 // protoc v5.27.1 // source: cel/expr/conformance/test/simple.proto package test import ( expr "cel.dev/expr" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type SimpleTestFile struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` Section []*SimpleTestSection `protobuf:"bytes,3,rep,name=section,proto3" json:"section,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *SimpleTestFile) Reset() { *x = SimpleTestFile{} mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *SimpleTestFile) String() string { return protoimpl.X.MessageStringOf(x) } func (*SimpleTestFile) ProtoMessage() {} func (x *SimpleTestFile) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SimpleTestFile.ProtoReflect.Descriptor instead. func (*SimpleTestFile) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_simple_proto_rawDescGZIP(), []int{0} } func (x *SimpleTestFile) GetName() string { if x != nil { return x.Name } return "" } func (x *SimpleTestFile) GetDescription() string { if x != nil { return x.Description } return "" } func (x *SimpleTestFile) GetSection() []*SimpleTestSection { if x != nil { return x.Section } return nil } type SimpleTestSection struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` Test []*SimpleTest `protobuf:"bytes,3,rep,name=test,proto3" json:"test,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *SimpleTestSection) Reset() { *x = SimpleTestSection{} mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *SimpleTestSection) String() string { return protoimpl.X.MessageStringOf(x) } func (*SimpleTestSection) ProtoMessage() {} func (x *SimpleTestSection) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SimpleTestSection.ProtoReflect.Descriptor instead. func (*SimpleTestSection) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_simple_proto_rawDescGZIP(), []int{1} } func (x *SimpleTestSection) GetName() string { if x != nil { return x.Name } return "" } func (x *SimpleTestSection) GetDescription() string { if x != nil { return x.Description } return "" } func (x *SimpleTestSection) GetTest() []*SimpleTest { if x != nil { return x.Test } return nil } type SimpleTest struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` Expr string `protobuf:"bytes,3,opt,name=expr,proto3" json:"expr,omitempty"` DisableMacros bool `protobuf:"varint,4,opt,name=disable_macros,json=disableMacros,proto3" json:"disable_macros,omitempty"` DisableCheck bool `protobuf:"varint,5,opt,name=disable_check,json=disableCheck,proto3" json:"disable_check,omitempty"` CheckOnly bool `protobuf:"varint,15,opt,name=check_only,json=checkOnly,proto3" json:"check_only,omitempty"` TypeEnv []*expr.Decl `protobuf:"bytes,6,rep,name=type_env,json=typeEnv,proto3" json:"type_env,omitempty"` Container string `protobuf:"bytes,13,opt,name=container,proto3" json:"container,omitempty"` Locale string `protobuf:"bytes,14,opt,name=locale,proto3" json:"locale,omitempty"` Bindings map[string]*expr.ExprValue `protobuf:"bytes,7,rep,name=bindings,proto3" json:"bindings,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Types that are valid to be assigned to ResultMatcher: // // *SimpleTest_Value // *SimpleTest_TypedResult // *SimpleTest_EvalError // *SimpleTest_AnyEvalErrors // *SimpleTest_Unknown // *SimpleTest_AnyUnknowns ResultMatcher isSimpleTest_ResultMatcher `protobuf_oneof:"result_matcher"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *SimpleTest) Reset() { *x = SimpleTest{} mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *SimpleTest) String() string { return protoimpl.X.MessageStringOf(x) } func (*SimpleTest) ProtoMessage() {} func (x *SimpleTest) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SimpleTest.ProtoReflect.Descriptor instead. func (*SimpleTest) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_simple_proto_rawDescGZIP(), []int{2} } func (x *SimpleTest) GetName() string { if x != nil { return x.Name } return "" } func (x *SimpleTest) GetDescription() string { if x != nil { return x.Description } return "" } func (x *SimpleTest) GetExpr() string { if x != nil { return x.Expr } return "" } func (x *SimpleTest) GetDisableMacros() bool { if x != nil { return x.DisableMacros } return false } func (x *SimpleTest) GetDisableCheck() bool { if x != nil { return x.DisableCheck } return false } func (x *SimpleTest) GetCheckOnly() bool { if x != nil { return x.CheckOnly } return false } func (x *SimpleTest) GetTypeEnv() []*expr.Decl { if x != nil { return x.TypeEnv } return nil } func (x *SimpleTest) GetContainer() string { if x != nil { return x.Container } return "" } func (x *SimpleTest) GetLocale() string { if x != nil { return x.Locale } return "" } func (x *SimpleTest) GetBindings() map[string]*expr.ExprValue { if x != nil { return x.Bindings } return nil } func (x *SimpleTest) GetResultMatcher() isSimpleTest_ResultMatcher { if x != nil { return x.ResultMatcher } return nil } func (x *SimpleTest) GetValue() *expr.Value { if x != nil { if x, ok := x.ResultMatcher.(*SimpleTest_Value); ok { return x.Value } } return nil } func (x *SimpleTest) GetTypedResult() *TypedResult { if x != nil { if x, ok := x.ResultMatcher.(*SimpleTest_TypedResult); ok { return x.TypedResult } } return nil } func (x *SimpleTest) GetEvalError() *expr.ErrorSet { if x != nil { if x, ok := x.ResultMatcher.(*SimpleTest_EvalError); ok { return x.EvalError } } return nil } func (x *SimpleTest) GetAnyEvalErrors() *ErrorSetMatcher { if x != nil { if x, ok := x.ResultMatcher.(*SimpleTest_AnyEvalErrors); ok { return x.AnyEvalErrors } } return nil } func (x *SimpleTest) GetUnknown() *expr.UnknownSet { if x != nil { if x, ok := x.ResultMatcher.(*SimpleTest_Unknown); ok { return x.Unknown } } return nil } func (x *SimpleTest) GetAnyUnknowns() *UnknownSetMatcher { if x != nil { if x, ok := x.ResultMatcher.(*SimpleTest_AnyUnknowns); ok { return x.AnyUnknowns } } return nil } type isSimpleTest_ResultMatcher interface { isSimpleTest_ResultMatcher() } type SimpleTest_Value struct { Value *expr.Value `protobuf:"bytes,8,opt,name=value,proto3,oneof"` } type SimpleTest_TypedResult struct { TypedResult *TypedResult `protobuf:"bytes,16,opt,name=typed_result,json=typedResult,proto3,oneof"` } type SimpleTest_EvalError struct { EvalError *expr.ErrorSet `protobuf:"bytes,9,opt,name=eval_error,json=evalError,proto3,oneof"` } type SimpleTest_AnyEvalErrors struct { AnyEvalErrors *ErrorSetMatcher `protobuf:"bytes,10,opt,name=any_eval_errors,json=anyEvalErrors,proto3,oneof"` } type SimpleTest_Unknown struct { Unknown *expr.UnknownSet `protobuf:"bytes,11,opt,name=unknown,proto3,oneof"` } type SimpleTest_AnyUnknowns struct { AnyUnknowns *UnknownSetMatcher `protobuf:"bytes,12,opt,name=any_unknowns,json=anyUnknowns,proto3,oneof"` } func (*SimpleTest_Value) isSimpleTest_ResultMatcher() {} func (*SimpleTest_TypedResult) isSimpleTest_ResultMatcher() {} func (*SimpleTest_EvalError) isSimpleTest_ResultMatcher() {} func (*SimpleTest_AnyEvalErrors) isSimpleTest_ResultMatcher() {} func (*SimpleTest_Unknown) isSimpleTest_ResultMatcher() {} func (*SimpleTest_AnyUnknowns) isSimpleTest_ResultMatcher() {} type TypedResult struct { state protoimpl.MessageState `protogen:"open.v1"` Result *expr.Value `protobuf:"bytes,1,opt,name=result,proto3" json:"result,omitempty"` DeducedType *expr.Type `protobuf:"bytes,2,opt,name=deduced_type,json=deducedType,proto3" json:"deduced_type,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TypedResult) Reset() { *x = TypedResult{} mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TypedResult) String() string { return protoimpl.X.MessageStringOf(x) } func (*TypedResult) ProtoMessage() {} func (x *TypedResult) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TypedResult.ProtoReflect.Descriptor instead. func (*TypedResult) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_simple_proto_rawDescGZIP(), []int{3} } func (x *TypedResult) GetResult() *expr.Value { if x != nil { return x.Result } return nil } func (x *TypedResult) GetDeducedType() *expr.Type { if x != nil { return x.DeducedType } return nil } type ErrorSetMatcher struct { state protoimpl.MessageState `protogen:"open.v1"` Errors []*expr.ErrorSet `protobuf:"bytes,1,rep,name=errors,proto3" json:"errors,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ErrorSetMatcher) Reset() { *x = ErrorSetMatcher{} mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ErrorSetMatcher) String() string { return protoimpl.X.MessageStringOf(x) } func (*ErrorSetMatcher) ProtoMessage() {} func (x *ErrorSetMatcher) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ErrorSetMatcher.ProtoReflect.Descriptor instead. func (*ErrorSetMatcher) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_simple_proto_rawDescGZIP(), []int{4} } func (x *ErrorSetMatcher) GetErrors() []*expr.ErrorSet { if x != nil { return x.Errors } return nil } type UnknownSetMatcher struct { state protoimpl.MessageState `protogen:"open.v1"` Unknowns []*expr.UnknownSet `protobuf:"bytes,1,rep,name=unknowns,proto3" json:"unknowns,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *UnknownSetMatcher) Reset() { *x = UnknownSetMatcher{} mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *UnknownSetMatcher) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnknownSetMatcher) ProtoMessage() {} func (x *UnknownSetMatcher) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_simple_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UnknownSetMatcher.ProtoReflect.Descriptor instead. func (*UnknownSetMatcher) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_simple_proto_rawDescGZIP(), []int{5} } func (x *UnknownSetMatcher) GetUnknowns() []*expr.UnknownSet { if x != nil { return x.Unknowns } return nil } var File_cel_expr_conformance_test_simple_proto protoreflect.FileDescriptor var file_cel_expr_conformance_test_simple_proto_rawDesc = []byte{ 0x0a, 0x26, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x65, 0x76, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8e, 0x01, 0x0a, 0x0e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x46, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x84, 0x01, 0x0a, 0x11, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, 0x52, 0x04, 0x74, 0x65, 0x73, 0x74, 0x22, 0xdd, 0x06, 0x0a, 0x0a, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x78, 0x70, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x29, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x65, 0x6e, 0x76, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x45, 0x6e, 0x76, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x4f, 0x0a, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x54, 0x65, 0x73, 0x74, 0x2e, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x74, 0x79, 0x70, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x79, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x0a, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x09, 0x65, 0x76, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x0f, 0x61, 0x6e, 0x79, 0x5f, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x61, 0x6e, 0x79, 0x45, 0x76, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x12, 0x51, 0x0a, 0x0c, 0x61, 0x6e, 0x79, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x6e, 0x79, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x73, 0x1a, 0x50, 0x0a, 0x0d, 0x42, 0x69, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x10, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x22, 0x69, 0x0a, 0x0b, 0x54, 0x79, 0x70, 0x65, 0x64, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x27, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x31, 0x0a, 0x0c, 0x64, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x3d, 0x0a, 0x0f, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0x45, 0x0a, 0x11, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x12, 0x30, 0x0a, 0x08, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x74, 0x52, 0x08, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x73, 0x42, 0x50, 0x0a, 0x1d, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x42, 0x0b, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x1d, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x74, 0x65, 0x73, 0x74, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_conformance_test_simple_proto_rawDescOnce sync.Once file_cel_expr_conformance_test_simple_proto_rawDescData = file_cel_expr_conformance_test_simple_proto_rawDesc ) func file_cel_expr_conformance_test_simple_proto_rawDescGZIP() []byte { file_cel_expr_conformance_test_simple_proto_rawDescOnce.Do(func() { file_cel_expr_conformance_test_simple_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_conformance_test_simple_proto_rawDescData) }) return file_cel_expr_conformance_test_simple_proto_rawDescData } var file_cel_expr_conformance_test_simple_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_cel_expr_conformance_test_simple_proto_goTypes = []any{ (*SimpleTestFile)(nil), // 0: cel.expr.conformance.test.SimpleTestFile (*SimpleTestSection)(nil), // 1: cel.expr.conformance.test.SimpleTestSection (*SimpleTest)(nil), // 2: cel.expr.conformance.test.SimpleTest (*TypedResult)(nil), // 3: cel.expr.conformance.test.TypedResult (*ErrorSetMatcher)(nil), // 4: cel.expr.conformance.test.ErrorSetMatcher (*UnknownSetMatcher)(nil), // 5: cel.expr.conformance.test.UnknownSetMatcher nil, // 6: cel.expr.conformance.test.SimpleTest.BindingsEntry (*expr.Decl)(nil), // 7: cel.expr.Decl (*expr.Value)(nil), // 8: cel.expr.Value (*expr.ErrorSet)(nil), // 9: cel.expr.ErrorSet (*expr.UnknownSet)(nil), // 10: cel.expr.UnknownSet (*expr.Type)(nil), // 11: cel.expr.Type (*expr.ExprValue)(nil), // 12: cel.expr.ExprValue } var file_cel_expr_conformance_test_simple_proto_depIdxs = []int32{ 1, // 0: cel.expr.conformance.test.SimpleTestFile.section:type_name -> cel.expr.conformance.test.SimpleTestSection 2, // 1: cel.expr.conformance.test.SimpleTestSection.test:type_name -> cel.expr.conformance.test.SimpleTest 7, // 2: cel.expr.conformance.test.SimpleTest.type_env:type_name -> cel.expr.Decl 6, // 3: cel.expr.conformance.test.SimpleTest.bindings:type_name -> cel.expr.conformance.test.SimpleTest.BindingsEntry 8, // 4: cel.expr.conformance.test.SimpleTest.value:type_name -> cel.expr.Value 3, // 5: cel.expr.conformance.test.SimpleTest.typed_result:type_name -> cel.expr.conformance.test.TypedResult 9, // 6: cel.expr.conformance.test.SimpleTest.eval_error:type_name -> cel.expr.ErrorSet 4, // 7: cel.expr.conformance.test.SimpleTest.any_eval_errors:type_name -> cel.expr.conformance.test.ErrorSetMatcher 10, // 8: cel.expr.conformance.test.SimpleTest.unknown:type_name -> cel.expr.UnknownSet 5, // 9: cel.expr.conformance.test.SimpleTest.any_unknowns:type_name -> cel.expr.conformance.test.UnknownSetMatcher 8, // 10: cel.expr.conformance.test.TypedResult.result:type_name -> cel.expr.Value 11, // 11: cel.expr.conformance.test.TypedResult.deduced_type:type_name -> cel.expr.Type 9, // 12: cel.expr.conformance.test.ErrorSetMatcher.errors:type_name -> cel.expr.ErrorSet 10, // 13: cel.expr.conformance.test.UnknownSetMatcher.unknowns:type_name -> cel.expr.UnknownSet 12, // 14: cel.expr.conformance.test.SimpleTest.BindingsEntry.value:type_name -> cel.expr.ExprValue 15, // [15:15] is the sub-list for method output_type 15, // [15:15] is the sub-list for method input_type 15, // [15:15] is the sub-list for extension type_name 15, // [15:15] is the sub-list for extension extendee 0, // [0:15] is the sub-list for field type_name } func init() { file_cel_expr_conformance_test_simple_proto_init() } func file_cel_expr_conformance_test_simple_proto_init() { if File_cel_expr_conformance_test_simple_proto != nil { return } file_cel_expr_conformance_test_simple_proto_msgTypes[2].OneofWrappers = []any{ (*SimpleTest_Value)(nil), (*SimpleTest_TypedResult)(nil), (*SimpleTest_EvalError)(nil), (*SimpleTest_AnyEvalErrors)(nil), (*SimpleTest_Unknown)(nil), (*SimpleTest_AnyUnknowns)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_conformance_test_simple_proto_rawDesc, NumEnums: 0, NumMessages: 7, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_conformance_test_simple_proto_goTypes, DependencyIndexes: file_cel_expr_conformance_test_simple_proto_depIdxs, MessageInfos: file_cel_expr_conformance_test_simple_proto_msgTypes, }.Build() File_cel_expr_conformance_test_simple_proto = out.File file_cel_expr_conformance_test_simple_proto_rawDesc = nil file_cel_expr_conformance_test_simple_proto_goTypes = nil file_cel_expr_conformance_test_simple_proto_depIdxs = nil } cel-spec-0.24.0/conformance/test/suite.pb.go000077500000000000000000000663421500667630300206450ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.3 // protoc v5.27.1 // source: cel/expr/conformance/test/suite.proto package test import ( expr "cel.dev/expr" conformance "cel.dev/expr/conformance" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type TestSuite struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` Sections []*TestSection `protobuf:"bytes,3,rep,name=sections,proto3" json:"sections,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TestSuite) Reset() { *x = TestSuite{} mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestSuite) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestSuite) ProtoMessage() {} func (x *TestSuite) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestSuite.ProtoReflect.Descriptor instead. func (*TestSuite) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_suite_proto_rawDescGZIP(), []int{0} } func (x *TestSuite) GetName() string { if x != nil { return x.Name } return "" } func (x *TestSuite) GetDescription() string { if x != nil { return x.Description } return "" } func (x *TestSuite) GetSections() []*TestSection { if x != nil { return x.Sections } return nil } type TestSection struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` Tests []*TestCase `protobuf:"bytes,3,rep,name=tests,proto3" json:"tests,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TestSection) Reset() { *x = TestSection{} mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestSection) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestSection) ProtoMessage() {} func (x *TestSection) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestSection.ProtoReflect.Descriptor instead. func (*TestSection) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_suite_proto_rawDescGZIP(), []int{1} } func (x *TestSection) GetName() string { if x != nil { return x.Name } return "" } func (x *TestSection) GetDescription() string { if x != nil { return x.Description } return "" } func (x *TestSection) GetTests() []*TestCase { if x != nil { return x.Tests } return nil } type TestCase struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` Description string `protobuf:"bytes,2,opt,name=description,proto3" json:"description,omitempty"` Expr string `protobuf:"bytes,3,opt,name=expr,proto3" json:"expr,omitempty"` Env *conformance.Environment `protobuf:"bytes,4,opt,name=env,proto3" json:"env,omitempty"` Input map[string]*InputValue `protobuf:"bytes,5,rep,name=input,proto3" json:"input,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` InputContext *InputContext `protobuf:"bytes,6,opt,name=input_context,json=inputContext,proto3" json:"input_context,omitempty"` Output *TestOutput `protobuf:"bytes,7,opt,name=output,proto3" json:"output,omitempty"` DeducedType *expr.Type `protobuf:"bytes,8,opt,name=deduced_type,json=deducedType,proto3" json:"deduced_type,omitempty"` DisableCheck bool `protobuf:"varint,9,opt,name=disable_check,json=disableCheck,proto3" json:"disable_check,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TestCase) Reset() { *x = TestCase{} mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestCase) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestCase) ProtoMessage() {} func (x *TestCase) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestCase.ProtoReflect.Descriptor instead. func (*TestCase) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_suite_proto_rawDescGZIP(), []int{2} } func (x *TestCase) GetName() string { if x != nil { return x.Name } return "" } func (x *TestCase) GetDescription() string { if x != nil { return x.Description } return "" } func (x *TestCase) GetExpr() string { if x != nil { return x.Expr } return "" } func (x *TestCase) GetEnv() *conformance.Environment { if x != nil { return x.Env } return nil } func (x *TestCase) GetInput() map[string]*InputValue { if x != nil { return x.Input } return nil } func (x *TestCase) GetInputContext() *InputContext { if x != nil { return x.InputContext } return nil } func (x *TestCase) GetOutput() *TestOutput { if x != nil { return x.Output } return nil } func (x *TestCase) GetDeducedType() *expr.Type { if x != nil { return x.DeducedType } return nil } func (x *TestCase) GetDisableCheck() bool { if x != nil { return x.DisableCheck } return false } type InputContext struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to InputContextKind: // // *InputContext_ContextMessage // *InputContext_ContextExpr InputContextKind isInputContext_InputContextKind `protobuf_oneof:"input_context_kind"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *InputContext) Reset() { *x = InputContext{} mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *InputContext) String() string { return protoimpl.X.MessageStringOf(x) } func (*InputContext) ProtoMessage() {} func (x *InputContext) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use InputContext.ProtoReflect.Descriptor instead. func (*InputContext) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_suite_proto_rawDescGZIP(), []int{3} } func (x *InputContext) GetInputContextKind() isInputContext_InputContextKind { if x != nil { return x.InputContextKind } return nil } func (x *InputContext) GetContextMessage() *anypb.Any { if x != nil { if x, ok := x.InputContextKind.(*InputContext_ContextMessage); ok { return x.ContextMessage } } return nil } func (x *InputContext) GetContextExpr() string { if x != nil { if x, ok := x.InputContextKind.(*InputContext_ContextExpr); ok { return x.ContextExpr } } return "" } type isInputContext_InputContextKind interface { isInputContext_InputContextKind() } type InputContext_ContextMessage struct { ContextMessage *anypb.Any `protobuf:"bytes,1,opt,name=context_message,json=contextMessage,proto3,oneof"` } type InputContext_ContextExpr struct { ContextExpr string `protobuf:"bytes,2,opt,name=context_expr,json=contextExpr,proto3,oneof"` } func (*InputContext_ContextMessage) isInputContext_InputContextKind() {} func (*InputContext_ContextExpr) isInputContext_InputContextKind() {} type InputValue struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Kind: // // *InputValue_Value // *InputValue_Expr Kind isInputValue_Kind `protobuf_oneof:"kind"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *InputValue) Reset() { *x = InputValue{} mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *InputValue) String() string { return protoimpl.X.MessageStringOf(x) } func (*InputValue) ProtoMessage() {} func (x *InputValue) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use InputValue.ProtoReflect.Descriptor instead. func (*InputValue) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_suite_proto_rawDescGZIP(), []int{4} } func (x *InputValue) GetKind() isInputValue_Kind { if x != nil { return x.Kind } return nil } func (x *InputValue) GetValue() *expr.Value { if x != nil { if x, ok := x.Kind.(*InputValue_Value); ok { return x.Value } } return nil } func (x *InputValue) GetExpr() string { if x != nil { if x, ok := x.Kind.(*InputValue_Expr); ok { return x.Expr } } return "" } type isInputValue_Kind interface { isInputValue_Kind() } type InputValue_Value struct { Value *expr.Value `protobuf:"bytes,1,opt,name=value,proto3,oneof"` } type InputValue_Expr struct { Expr string `protobuf:"bytes,2,opt,name=expr,proto3,oneof"` } func (*InputValue_Value) isInputValue_Kind() {} func (*InputValue_Expr) isInputValue_Kind() {} type TestOutput struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to ResultKind: // // *TestOutput_ResultValue // *TestOutput_ResultExpr // *TestOutput_EvalError // *TestOutput_Unknown ResultKind isTestOutput_ResultKind `protobuf_oneof:"result_kind"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TestOutput) Reset() { *x = TestOutput{} mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TestOutput) String() string { return protoimpl.X.MessageStringOf(x) } func (*TestOutput) ProtoMessage() {} func (x *TestOutput) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_conformance_test_suite_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TestOutput.ProtoReflect.Descriptor instead. func (*TestOutput) Descriptor() ([]byte, []int) { return file_cel_expr_conformance_test_suite_proto_rawDescGZIP(), []int{5} } func (x *TestOutput) GetResultKind() isTestOutput_ResultKind { if x != nil { return x.ResultKind } return nil } func (x *TestOutput) GetResultValue() *expr.Value { if x != nil { if x, ok := x.ResultKind.(*TestOutput_ResultValue); ok { return x.ResultValue } } return nil } func (x *TestOutput) GetResultExpr() string { if x != nil { if x, ok := x.ResultKind.(*TestOutput_ResultExpr); ok { return x.ResultExpr } } return "" } func (x *TestOutput) GetEvalError() *expr.ErrorSet { if x != nil { if x, ok := x.ResultKind.(*TestOutput_EvalError); ok { return x.EvalError } } return nil } func (x *TestOutput) GetUnknown() *expr.UnknownSet { if x != nil { if x, ok := x.ResultKind.(*TestOutput_Unknown); ok { return x.Unknown } } return nil } type isTestOutput_ResultKind interface { isTestOutput_ResultKind() } type TestOutput_ResultValue struct { ResultValue *expr.Value `protobuf:"bytes,8,opt,name=result_value,json=resultValue,proto3,oneof"` } type TestOutput_ResultExpr struct { ResultExpr string `protobuf:"bytes,9,opt,name=result_expr,json=resultExpr,proto3,oneof"` } type TestOutput_EvalError struct { EvalError *expr.ErrorSet `protobuf:"bytes,10,opt,name=eval_error,json=evalError,proto3,oneof"` } type TestOutput_Unknown struct { Unknown *expr.UnknownSet `protobuf:"bytes,11,opt,name=unknown,proto3,oneof"` } func (*TestOutput_ResultValue) isTestOutput_ResultKind() {} func (*TestOutput_ResultExpr) isTestOutput_ResultKind() {} func (*TestOutput_EvalError) isTestOutput_ResultKind() {} func (*TestOutput_Unknown) isTestOutput_ResultKind() {} var File_cel_expr_conformance_test_suite_proto protoreflect.FileDescriptor var file_cel_expr_conformance_test_suite_proto_rawDesc = []byte{ 0x0a, 0x25, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x74, 0x65, 0x73, 0x74, 0x2f, 0x73, 0x75, 0x69, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x19, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x65, 0x76, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x25, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x65, 0x6e, 0x76, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x85, 0x01, 0x0a, 0x09, 0x54, 0x65, 0x73, 0x74, 0x53, 0x75, 0x69, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x42, 0x0a, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x73, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x7e, 0x0a, 0x0b, 0x54, 0x65, 0x73, 0x74, 0x53, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x39, 0x0a, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x52, 0x05, 0x74, 0x65, 0x73, 0x74, 0x73, 0x22, 0x95, 0x04, 0x0a, 0x08, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x78, 0x70, 0x72, 0x12, 0x33, 0x0a, 0x03, 0x65, 0x6e, 0x76, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x03, 0x65, 0x6e, 0x76, 0x12, 0x44, 0x0a, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x43, 0x61, 0x73, 0x65, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x12, 0x4c, 0x0a, 0x0d, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x0c, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3d, 0x0a, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x54, 0x65, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x52, 0x06, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x31, 0x0a, 0x0c, 0x64, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x64, 0x75, 0x63, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x1a, 0x5f, 0x0a, 0x0a, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x3b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x2e, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x8a, 0x01, 0x0a, 0x0c, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3f, 0x0a, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x45, 0x78, 0x70, 0x72, 0x42, 0x14, 0x0a, 0x12, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x53, 0x0a, 0x0a, 0x49, 0x6e, 0x70, 0x75, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x14, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x04, 0x65, 0x78, 0x70, 0x72, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xdb, 0x01, 0x0a, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x4f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x12, 0x34, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, 0x78, 0x70, 0x72, 0x12, 0x33, 0x0a, 0x0a, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x09, 0x65, 0x76, 0x61, 0x6c, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x30, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x0d, 0x0a, 0x0b, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x42, 0x4f, 0x0a, 0x1d, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2e, 0x74, 0x65, 0x73, 0x74, 0x42, 0x0a, 0x53, 0x75, 0x69, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x1d, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x2f, 0x74, 0x65, 0x73, 0x74, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_conformance_test_suite_proto_rawDescOnce sync.Once file_cel_expr_conformance_test_suite_proto_rawDescData = file_cel_expr_conformance_test_suite_proto_rawDesc ) func file_cel_expr_conformance_test_suite_proto_rawDescGZIP() []byte { file_cel_expr_conformance_test_suite_proto_rawDescOnce.Do(func() { file_cel_expr_conformance_test_suite_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_conformance_test_suite_proto_rawDescData) }) return file_cel_expr_conformance_test_suite_proto_rawDescData } var file_cel_expr_conformance_test_suite_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_cel_expr_conformance_test_suite_proto_goTypes = []any{ (*TestSuite)(nil), // 0: cel.expr.conformance.test.TestSuite (*TestSection)(nil), // 1: cel.expr.conformance.test.TestSection (*TestCase)(nil), // 2: cel.expr.conformance.test.TestCase (*InputContext)(nil), // 3: cel.expr.conformance.test.InputContext (*InputValue)(nil), // 4: cel.expr.conformance.test.InputValue (*TestOutput)(nil), // 5: cel.expr.conformance.test.TestOutput nil, // 6: cel.expr.conformance.test.TestCase.InputEntry (*conformance.Environment)(nil), // 7: cel.expr.conformance.Environment (*expr.Type)(nil), // 8: cel.expr.Type (*anypb.Any)(nil), // 9: google.protobuf.Any (*expr.Value)(nil), // 10: cel.expr.Value (*expr.ErrorSet)(nil), // 11: cel.expr.ErrorSet (*expr.UnknownSet)(nil), // 12: cel.expr.UnknownSet } var file_cel_expr_conformance_test_suite_proto_depIdxs = []int32{ 1, // 0: cel.expr.conformance.test.TestSuite.sections:type_name -> cel.expr.conformance.test.TestSection 2, // 1: cel.expr.conformance.test.TestSection.tests:type_name -> cel.expr.conformance.test.TestCase 7, // 2: cel.expr.conformance.test.TestCase.env:type_name -> cel.expr.conformance.Environment 6, // 3: cel.expr.conformance.test.TestCase.input:type_name -> cel.expr.conformance.test.TestCase.InputEntry 3, // 4: cel.expr.conformance.test.TestCase.input_context:type_name -> cel.expr.conformance.test.InputContext 5, // 5: cel.expr.conformance.test.TestCase.output:type_name -> cel.expr.conformance.test.TestOutput 8, // 6: cel.expr.conformance.test.TestCase.deduced_type:type_name -> cel.expr.Type 9, // 7: cel.expr.conformance.test.InputContext.context_message:type_name -> google.protobuf.Any 10, // 8: cel.expr.conformance.test.InputValue.value:type_name -> cel.expr.Value 10, // 9: cel.expr.conformance.test.TestOutput.result_value:type_name -> cel.expr.Value 11, // 10: cel.expr.conformance.test.TestOutput.eval_error:type_name -> cel.expr.ErrorSet 12, // 11: cel.expr.conformance.test.TestOutput.unknown:type_name -> cel.expr.UnknownSet 4, // 12: cel.expr.conformance.test.TestCase.InputEntry.value:type_name -> cel.expr.conformance.test.InputValue 13, // [13:13] is the sub-list for method output_type 13, // [13:13] is the sub-list for method input_type 13, // [13:13] is the sub-list for extension type_name 13, // [13:13] is the sub-list for extension extendee 0, // [0:13] is the sub-list for field type_name } func init() { file_cel_expr_conformance_test_suite_proto_init() } func file_cel_expr_conformance_test_suite_proto_init() { if File_cel_expr_conformance_test_suite_proto != nil { return } file_cel_expr_conformance_test_suite_proto_msgTypes[3].OneofWrappers = []any{ (*InputContext_ContextMessage)(nil), (*InputContext_ContextExpr)(nil), } file_cel_expr_conformance_test_suite_proto_msgTypes[4].OneofWrappers = []any{ (*InputValue_Value)(nil), (*InputValue_Expr)(nil), } file_cel_expr_conformance_test_suite_proto_msgTypes[5].OneofWrappers = []any{ (*TestOutput_ResultValue)(nil), (*TestOutput_ResultExpr)(nil), (*TestOutput_EvalError)(nil), (*TestOutput_Unknown)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_conformance_test_suite_proto_rawDesc, NumEnums: 0, NumMessages: 7, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_conformance_test_suite_proto_goTypes, DependencyIndexes: file_cel_expr_conformance_test_suite_proto_depIdxs, MessageInfos: file_cel_expr_conformance_test_suite_proto_msgTypes, }.Build() File_cel_expr_conformance_test_suite_proto = out.File file_cel_expr_conformance_test_suite_proto_rawDesc = nil file_cel_expr_conformance_test_suite_proto_goTypes = nil file_cel_expr_conformance_test_suite_proto_depIdxs = nil } cel-spec-0.24.0/doc/000077500000000000000000000000001500667630300140435ustar00rootroot00000000000000cel-spec-0.24.0/doc/extensions/000077500000000000000000000000001500667630300162425ustar00rootroot00000000000000cel-spec-0.24.0/doc/extensions/strings.md000066400000000000000000000126651500667630300202670ustar00rootroot00000000000000 # Strings ## string.format(list) -> string ### Format `%[.precision]conversion` ### Precision Optional. In the form of a period `.` followed by a required positive decimal digit sequence. The default precision is `6`. Not all conversions support precision. ### Conversion | Character | Precision | Description | | --- | --- | --- | | `s` | N |
boolThe value is foramtted as true or false.
intThe value is formatted in base 10 with a preceding - if the value is negative. No insignificant 0s must be included.
uintThe value is formatted in base 10. No insignificant 0s must be included.
doubleThe value is formatted in base 10. No insignificant 0s must be included. If there are no significant digits after the . then it must be excluded.
bytesThe value is formatted as if `string(value)` was performed and any invalid UTF-8 sequences are replaced with \ufffd. Multiple adjacent invalid UTF-8 sequences must be replaced with a single \ufffd.
stringThe value is included as is.
durationThe value is formatted as decimal seconds as if the value was converted to double and then formatted as %ds.
timestampThe value is formatted according to RFC 3339 and is always in UTC.
null_typeThe value is formatted as null.
typeThe value is formatted as a string.
listThe value is formatted as if each element was formatted as "%s".format([element]), joined together with , and enclosed with [ and ].
mapThe value is formatted as if each entry was formatted as "%s: %s".format([key, value]), sorted by the formatted keys in ascending order, joined together with , , and enclosed with { and }.
| | `d` | N |
intThe value is formatted in base 10 with a preceding - if the value is negative. No insignificant 0s must be included.
uintThe value is formatted in base 10. No insignificant 0s must be included.
doubleThe value is formatted in base 10. No insignificant 0s must be included. If there are no significant digits after the . then it must be excluded.
| | `f` | Y | `int` `uint` `double`: The value is converted to the style `[-]dddddd.dddddd` where there is at least one digit before the decimal and exactly `precision` digits after the decimal. If `precision` is 0, then the decimal is excluded. | | `e` | Y | `int` `uint` `double`: The value is converted to the style `[-]d.dddddde±dd` where there is one digit before the decimal and `precision` digits after the decimal followed by `e`, then the plus or minus, and then two digits. | | `x` `X` | N | Values are formatted in base 16. For `x` lowercase letters are used. For `X` uppercase letters are used.
int uintThe value is formatted in base 16 with no insignificant digits. If the value was negative - is prepended.
stringThe value is formatted as if `bytes(value)` was used to convert the string to bytes and then each byte is formatted in base 16 with exactly 2 digits.
bytesThe value is formatted as if each byte is formatted in base 16 with exactly 2 digits.
| | `o` | N | `int` `uint`: The value is converted to base 8 with no insignificant digits. If the value was negative `-` is prepended. | | `b` | N | `int` `uint` `bool`: The value is converted to base 2 with no insignificant digits. If the value was negative `-` is prepended. | > In all cases where `double` is accepted: if the value is NaN the result is `NaN`, if the value is infinity the result is `[-]Infinity`. ### Examples ``` "%s".format(["foo"]) // foo "%s".format([b"foo"]) // foo "%d".format([1]) // 1 "%d".format([1u]) // 1 "%d".format([3.14]) // 3.14 "%f".format([1]) // 1.000000 "%f".format([1u]) // 1.000000 "%f".format([3.14]) // 3.140000 "%.1f".format([3.14]) // 3.1 "%e".format([1]) // 1.000000e+00 "%e".format([1u]) // 1.000000e+00 "%e".format([3.14]) // 3.140000e+00 "%.1e".format([3.14]) // 3.1e+00 "%.1e".format([-3.14]) // -3.1e+00 ``` cel-spec-0.24.0/doc/intro.md000066400000000000000000000100601500667630300155150ustar00rootroot00000000000000# Introduction The Common Expression Language (CEL) is a simple expression language built on top of [protocol buffer][1] types. This page discusses basic usage. See [Language Definition](langdef.md) for the reference. Suppose a type defined as follows (using protocol buffer syntax): ```proto package google.account; import "google/protobuf/struct.proto"; message Account { oneof { string user_id = 1; int64 gaia_id = 2; } string display_name = 3; string phone_number = 4; repeated string emails = 5; google.protobuf.Struct properties = 6; ... } ``` CEL allows for simple computations to be defined on types like this one. For example, given an instance of the `Account` type assigned to the variable `account`: ```proto has(account.user_id) || has(account.gaia_id) // true if either one is set size(account.emails) > 0 // true if emails is non-empty matches(account.phone_number, "[0-9-]+") // true if number matches regexp ``` CEL expressions support most operators and functions one would expect when working with protocol buffers: boolean operators, relations, arithmetics on numbers, string and byte string operations, and operations to deal with lists and maps. The full reference of standard operations is described in the [language definition](langdef.md#standard). Note that applications of CEL may add more functions and also allow users to define their own. CEL also supports construction of list, map, and protocol buffer objects. The following expressions evaluate to true: ```proto Account{user_id: 'Pokemon'}.user_id == 'Pokemon' [true,false,true][1] == false {'blue': 0x000080, 'red': 0xFF0000}['red'] == 0xFF0000 ``` CEL expressions are usually type checked, though the language is designed such that type checking is optional. Moreover, the language can deal with dynamically typed features of the most recent protocol buffer standard, [proto3][2], like `google.protobuf.Struct`. Consider the field `account.properties` which has type `Struct`. This type represents an untyped Object and is similar to JSON's notion of an Object. Many APIs use this type for representing user defined data which doesn't have a matching protocol buffer type. Within CEL, these objects support the same accesses and functions as protocol buffer types: ```proto has(account.properties.id) && size(account.properties.id) > 0 ``` When the expression `account.properties` is evaluated, CEL will automatically convert the underlying `Struct` representation into a `map`, on which the `has` function can be called. And if a `Value` is accessed, it will be automatically converted into one of the variants as expressed by its oneof-definitions. In the example, if `id` is defined in the struct, and its `Value` represents a string, the function `size` on strings will be called. If, in turn, `Value` represents a list, the function `size` on lists is called. If one views CEL coming from dynamic languages, it's natural to think of the `size` function as taking any value and determining what to do with it based on the runtime type (which may include throwing an error because the type cannot be processed). Coming from statically typed languages, it's natural to think of `size` as an overloaded function which, if resolution is not possible at compile time, will be deferred to runtime. Type dependent behavior can also be expressed, since types are first-class citizens of CEL: ```proto has(account.properties.id) && (type(account.properties.id) == string || type(account.properties.id) == list) ``` CEL's default type checker deals with a mixture of dynamic and static typing; the resulting type system is commonly also called *gradual typing*. Simply spoken, the type checker tries to figure out as much as it can, and defers undecidable decisions to the runtime. However, a CEL expression which does not make use of any of the dynamic features based on `Struct` et.al can be always fully type checked at compile time. [1]: https://en.wikipedia.org/wiki/Protocol_Buffers [2]: https://developers.google.com/protocol-buffers/docs/proto3 cel-spec-0.24.0/doc/langdef.md000066400000000000000000002411211500667630300157660ustar00rootroot00000000000000# Language Definition This page constitutes the reference for CEL. For a gentle introduction, see [Intro](intro.md). ## Contents - [Overview](#overview) - [Syntax](#syntax) - [Name Resolution](#name-resolution) - [Values](#values) - [Numeric Values](#numeric-values) - [String and Bytes Values](#string-and-bytes-values) - [Aggregate Values](#aggregate-values) - [Booleans and Null](#booleans-and-null) - [Type Values](#type-values) - [Abstract Types](#abstract-types) - [Protocol Buffer Data Conversion](#protocol-buffer-data-conversion) - [Dynamic Values](#dynamic-values) - [JSON Data Conversion](#json-data-conversion) - [Gradual Type Checking](#gradual-type-checking) - [Evaluation](#evaluation) - [Evaluation Environment](#evaluation-environment) - [Runtime Errors](#runtime-errors) - [Logical Operators](#logical-operators) - [Macros](#macros) - [Field Selection](#field-selection) - [Performance](#performance) - [Abstract Sizes](#abstract-sizes) - [Time Complexity](#time-complexity) - [Space Complexity](#space-complexity) - [Macro Performance](#macro-performance) - [Performance Limits](#performance-limits) - [Functions](#functions) - [Extension Functions](#extension-functions) - [Receiver Call Style](#receiver-call-style) - [Standard Definitions](#standard-definitions) - [Equality](#equality) - [Ordering](#ordering) - [Overflow](#overflow) - [Timezones](#timezones) - [Regular Expressions](#regular-expressions) - [Standard Environment](#standard-environment) - [Appendix 1: Legacy Behavior](#appendix-1-legacy-behavior) - [Enums as Ints](#enums-as-ints) ## Overview In the taxonomy of programming languages, CEL is: * **memory-safe:** programs cannot access unrelated memory, such as out-of-bounds array indexes or use-after-free pointer dereferences; * **side-effect-free:** a CEL program only computes an output from its inputs; * **terminating:** CEL programs cannot loop forever; * **strongly-typed:** values have a well-defined type, and operators and functions check that their arguments have the expected types; * **dynamically-typed:** types are associated with values, not with variables or expressions, and type safety is enforced at runtime; * **gradually-typed:** an optional type-checking phase before runtime can detect and reject some programs which would violate type constraints. ## Syntax The grammar of CEL is defined below, using `|` for alternatives, `[]` for optional, `{}` for repeated, and `()` for grouping. ```grammar Expr = ConditionalOr ["?" ConditionalOr ":" Expr] ; ConditionalOr = [ConditionalOr "||"] ConditionalAnd ; ConditionalAnd = [ConditionalAnd "&&"] Relation ; Relation = [Relation Relop] Addition ; Relop = "<" | "<=" | ">=" | ">" | "==" | "!=" | "in" ; Addition = [Addition ("+" | "-")] Multiplication ; Multiplication = [Multiplication ("*" | "/" | "%")] Unary ; Unary = Member | "!" {"!"} Member | "-" {"-"} Member ; Member = Primary | Member "." SELECTOR ["(" [ExprList] ")"] | Member "[" Expr "]" ; Primary = ["."] IDENT ["(" [ExprList] ")"] | "(" Expr ")" | "[" [ExprList] [","] "]" | "{" [MapInits] [","] "}" | ["."] SELECTOR { "." SELECTOR } "{" [FieldInits] [","] "}" | LITERAL ; ExprList = Expr {"," Expr} ; FieldInits = SELECTOR ":" Expr {"," SELECTOR ":" Expr} ; MapInits = Expr ":" Expr {"," Expr ":" Expr} ; ``` Implementations are required to support at least: * 24-32 repetitions of repeating rules, i.e.: * 32 terms separated by `||` in a row; * 32 terms separated by `&&` in a row; * 32 function call arguments; * list literals with 32 elements; * map or message literals with 32 fields; * 24 consecutive ternary conditionals `?:`; * 24 binary arithmetic operators of the same precedence in a row; * 24 relations in a row. * 12 repetitions of recursive rules, i.e: * 12 nested function calls; * 12 selection (`.`) operators in a row; * 12 indexing (`[_]`) operators in a row; * 12 nested list, map, or message literals. This grammar corresponds to the following operator precedence and associativity: Precedence | Operator | Description | Associativity ---------- | --------------- | ------------------------------ | ------------- 1 | () | Function call | Left-to-right   | . | Qualified name or field access |   | [] | Indexing |   | {} | Field initialization | 2 | - (unary) | Negation | Right-to-left   | ! | Logical NOT | 3 | * | Multiplication | Left-to-right   | / | Division |   | % | Remainder | 4 | + | Addition |   | - (binary) | Subtraction | 5 | == != < > <= >= | Relations |   | in | Inclusion test | 6 | && | Logical AND | 7 | \|\| | Logical OR | 8 | ?: | Conditional | Right-to-left The lexis is defined below. As is typical, the `WHITESPACE` and `COMMENT` productions are only used to recognize separate lexical elements and are ignored by the grammar. Please note, that in the lexer `[]` denotes a character range, `*` represents zero or more, `+` represents one or more, and `?` denotes zero or one occurrence. ``` IDENT ::= SELECTOR - RESERVED SELECTOR ::= [_a-zA-Z][_a-zA-Z0-9]* - KEYWORD LITERAL ::= INT_LIT | UINT_LIT | FLOAT_LIT | STRING_LIT | BYTES_LIT | BOOL_LIT | NULL_LIT INT_LIT ::= -? DIGIT+ | -? 0x HEXDIGIT+ UINT_LIT ::= INT_LIT [uU] FLOAT_LIT ::= -? DIGIT* . DIGIT+ EXPONENT? | -? DIGIT+ EXPONENT DIGIT ::= [0-9] HEXDIGIT ::= [0-9abcdefABCDEF] EXPONENT ::= [eE] [+-]? DIGIT+ STRING_LIT ::= [rR]? ( " ~( " | \r | \n )* " | ' ~( ' | \r | \n )* ' | """ ~"""* """ | ''' ~'''* ''' ) BYTES_LIT ::= [bB] STRING_LIT ESCAPE ::= \ [abfnrtv\?"'`] | \ [xX] HEXDIGIT HEXDIGIT | \ u HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT | \ U HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT HEXDIGIT | \ [0-3] [0-7] [0-7] BOOL_LIT ::= "true" | "false" NULL_LIT ::= "null" KEYWORD ::= BOOL_LIT | NULL_LIT | "in" RESERVED ::= "as" | "break" | "const" | "continue" | "else" | "for" | "function" | "if" | "import" | "let" | "loop" | "package" | "namespace" | "return" | "var" | "void" | "while" WHITESPACE ::= [\t\n\f\r ]+ COMMENT ::= '//' ~\n* \n ``` For the sake of a readable representation, the escape sequences (`ESCAPE`) are kept implicit in string tokens. This means that strings without the `r` or `R` (raw) prefix process `ESCAPE` sequences, while in strings with the raw prefix they stay uninterpreted. See documentation of string literals below. The following language keywords are reserved and cannot be used as identifiers, function names, selectors, struct name segments, or field names: false in null true The following tokens are reserved to allow easier embedding of CEL into a host language and cannot be used as identifiers or function names[^function-names]: as break const continue else for function if import let loop package namespace return var void while In general it is a bad idea for those defining contexts or extensions to use identifiers that are reserved words in programming languages which might embed CEL. [^function-names]: Except for receiver-call-style functions, e.g. `a.package()`, which is permitted. ### Name Resolution A CEL expression is parsed in the scope of a specific protocol buffer package or message, which controls the interpretation of names. The scope is set by the application context of an expression. A CEL expression can contain simple names as in `a` or qualified names as in `a.b`. The meaning of such expressions is a combination of one or more of: * Variables and Functions: some simple names refer to variables in the execution context, standard functions, or other name bindings provided by the CEL application. * Field selection: appending a period and identifier to an expression could indicate that we're accessing a field within a protocol buffer or map. * Protocol buffer package names: a simple or qualified name could represent an absolute or relative name in the protocol buffer package namespace. Package names must be followed by a message type, or enum constant. * Protocol buffer message types and enum constants: following an optional protocol buffer package name, a simple or qualified name could refer to a message type or an enum constant in the package's namespace. Resolution works as follows. If `a.b` is a name to be resolved in the context of a protobuf declaration with scope `A.B`, then resolution is attempted, in order, as `A.B.a.b`, `A.a.b`, and finally `a.b`. To override this behavior, one can use `.a.b`; this name will only be attempted to be resolved in the root scope, i.e. as `a.b`. If name qualification is mixed with field selection, the longest prefix of the name which resolves in the current lexical scope is used. For example, if `a.b.c` resolves to a message declaration, and `a.b` does so as well with `c` a possible field selection, then `a.b.c` takes priority over the interpretation `(a.b).c`. ## Values Values in CEL represent any of the following: Type | Description ------------- | --------------------------------------------------------------- `int` | 64-bit signed integers `uint` | 64-bit unsigned integers `double` | 64-bit IEEE floating-point numbers `bool` | Booleans (`true` or `false`) `string` | Strings of Unicode code points `bytes` | Byte sequences `list` | Lists of values `map` | Associative arrays with `int`, `uint`, `bool`, or `string` keys `null_type` | The value `null` message names | Protocol buffer messages `type` | Values representing the types in the first column ### Numeric Values CEL supports only 64-bit integers and 64-bit IEEE double-precision floating-point. We only support positive, decimal integer literals; negative integers are produced by the unary negation operator. Note that the integer 7 as an `int` is a different value than 7 as a `uint`, which would be written `7u`. Double-precision floating-point is also supported, and the integer 7 would be written `7.0`, `7e0`, `.700e1`, or any equivalent representation using a decimal point or exponent. Note that currently there are no automatic arithmetic conversions for the numeric types (`int`, `uint`, and `double`). The arithmetic operators typically contain overloads for arguments of the same numeric type, but not for mixed-type arguments. Therefore an expression like `1 + 1u` is going to fail to dispatch. To perform mixed-type arithmetic, use explicit conversion functions such as `uint(1) + 1u`. Such explicit conversions will maintain their meaning even if arithmetic conversions are added in the future. CEL provides no way to control the finer points of floating-point arithmetic, such as expression evaluation, rounding mode, or exception handling. However, any two not-a-number values will compare equal even if their underlying properties are different. ### String and Bytes Values Strings are valid sequences of Unicode code points. Bytes are arbitrary sequences of octets (eight-bit data). Quoted string literals are delimited by either single- or double-quote characters, where the closing delimiter must match the opening one, and can contain any unescaped character except the delimiter or newlines (either CR or LF). Triple-quoted string literals are delimited by three single-quotes or three double-quotes, and may contain any unescaped characters except for the delimiter sequence. Again, the closing delimiter must match the opening one. Triple-quoted strings may contain newlines. Both sorts of strings can include escape sequences, described below. If preceded by an `r` or `R` character, the string is a _raw_ string and does not interpret escape sequences. Raw strings are useful for expressing strings which themselves must use escape sequences, such as regular expressions or program text. Bytes literals are represented by string literals preceded by a `b` or `B` character. The bytes literal is the sequence of bytes given by the UTF-8 representation of the string literal. In addition, the octal escape sequence are interpreted as octet values rather than as Unicode code points. Both raw and multiline string literals can be used for byte literals. Escape sequences are a backslash (`` \ ``) followed by one of the following: * A punctuation mark representing itself: * `` \ ``: backslash * `?`: question mark * `"`: double quote * `'`: single quote * `` ` ``: backtick * A code for whitespace: * `a`: bell * `b`: backspace * `f`: form feed * `n`: line feed * `r`: carriage return * `t`: horizontal tab * `v`: vertical tab * A `u` followed by four hexadecimal characters, encoding a Unicode code point in the [BMP](https://www.unicode.org/roadmaps/bmp/). * A `U` followed by eight hexadecimal characters, encoding a Unicode code point (in any plane). Valid only for string literals. * A `x` or `X` followed by two hexadecimal characters. For strings, it denotes a Unicode code point. For bytes, it represents an octet value. * Three octal digits, in the range `000` to `377`. For strings, it denotes a Unicode code point. For bytes, it represents an octet value. All hexadecimal digits in escape sequences are case-insensitive. Examples: CEL Literal | Meaning ------------- | --------------------------------------------------- `""` | Empty string `'""'` | String of two double-quote characters `'''x''x'''` | String of four characters "`x''x`" `"\""` | String of one double-quote character `"\\"` | String of one backslash character `r"\\"` | String of two backslash characters `b"abc"` | Byte sequence of 97, 98, 99 `b"ÿ"` | Sequence of bytes 195 and 191 (UTF-8 of ÿ) `b"\303\277"` | Also sequence of bytes 195 and 191 `"\303\277"` | String of "ÿ" (code points 195, 191) `"\377"` | String of "ÿ" (code point 255) `b"\377"` | Sequence of byte 255 (*not* UTF-8 of ÿ) `"\xFF"` | String of "ÿ" (code point 255) `b"\xff"` | Sequence of byte 255 (*not* UTF-8 of ÿ) The following constructions are syntactically invalid and will result in a parse error: * A backslash (`` \ ``) outside of a valid escape sequence, e.g. `\s`. * An invalid Unicode code point, e.g. `\u2FE0`. * A UTF-16 surrogate code point, even if in a valid UTF-16 surrogate pair, e.g. `\uD83D\uDE03` or `\UD83DDE03`. While strings must be sequences of valid Unicode code points, no Unicode normalization is attempted on strings, as there are several normal forms, they can be expensive to convert, and we don't know which is desired. If Unicode normalization is desired, it should be performed outside of CEL, or done as a custom extension function. Likewise, no advanced collation is attempted on strings, as this depends on the normalization and can be locale-dependent. Strings are simply treated as sequences of code points and are ordered with lexicographic ordering based on the numeric value of the code points. ### Aggregate Values Lists are ordered sequences of values. Maps are a set of key values, and a mapping from these keys to arbitrary values. Key values must be an allowed key type: `int`, `uint`, `bool`, or `string`. Thus maps are the union of what's allowed in protocol buffer maps and JSON objects. Note that the type checker uses a finer-grained notion of list and map types. Lists are `list(A)` for the homogeneous type `A` of list elements. Maps are `map(K, V)` for maps with keys of type `K` and values of type `V`. The type `dyn` is used for heterogeneous values See [Gradual Type Checking](#gradual-type-checking). But these constraints are only enforced within the type checker; at runtime, lists and maps can have heterogeneous types. Any protocol buffer message is a CEL value, and each message type is its own CEL type, represented as its fully-qualified name. A list can be denoted by the expression `[e1, e2, ..., eN]`, a map by `{ek1: ev1, ek2: ev2, ..., ekN: evN}`, and a message by `M{f1: e1, f2: e2, ..., fN: eN}`, where `M` must be a simple or qualified name which resolves to a message type (see [Name Resolution](#name-resolution)). For a map, the entry keys are sub-expressions that must evaluate to values of an allowed type (`int`, `uint`, `bool`, or `string`). For a message, the field names are identifiers. It is an error to have duplicate keys or field names. The empty list, map, and message are `[]`, `{}`, and `M{}`, respectively. See [Field Selection](#field-selection) for accessing elements of lists, maps, and messages. ### Booleans and Null CEL has `true` and `false` as the literals for the `bool` type, with the usual meanings. The null value is written `null`. It is used in conversion to and from protocol buffer and JSON data, but otherwise has no built-in meaning in CEL. In particular, null has its own type (`null_type`) and is not necessarily allowed where a value of some other type is expected. ### Type Values Every value in CEL has a runtime type which is itself a value. The standard function `type(x)` returns the type of expression `x`. As types are values, those values (`int`, `string`, etc.) also have a type: the type `type`, which is an expression by itself which in turn also has type `type`. So * `type(1)` evaluates to `int` * `type("a")` evaluates to `string` * `type(1) == string` evaluates to `false` * `type(type(1)) == type(string)` evaluates to `true` ### Abstract Types A CEL implementation can add new types to the language. These types will be given names in the same namespace as the other types, but will have no special support in the language syntax. The only way to construct or use values of these abstract types is through functions which the implementor must also provide. Commonly, an abstract type will have a representation as a protocol buffer, so that it can be stored or transmitted across a network. In this case, the abstract type will be given the same name as the protocol buffer, which will prevent CEL programs from being able to use that particular protocol buffer message type; they will not be able to construct values of that type by message expressions nor access the message fields. The abstract type remains abstract. By default, CEL uses `google.protobuf.Timestamp` and `google.protobuf.Duration` as abstract types. The standard functions provide ways to construct and manipulate these values, but CEL programs cannot construct them with message expressions or access their message fields. ### Protocol Buffer Data Conversion Protocol buffers have a richer range of types than CEL, so Protocol buffer data is converted to CEL data when read from a message field, and CEL data is converted in the other direction when initializing a field. In general, protocol buffer data can be converted to CEL without error, but range errors are possible in the other direction. Protocol Buffer Field Type | CEL Type ------------------------------------------------ | -------- int32, int64, sint32, sint64, sfixed32, sfixed64 | `int` uint32, uint64, fixed32, fixed64 | `uint` float, double | `double` bool, string, bytes | same enum E | `int` repeated | `list` map | `map` oneof | options expanded individually, at most one is set message M | M, except for conversions below Signed integers, unsigned integers, and floating point numbers are converted to the singular CEL type of the same sort. The CEL type is capable of expressing the full range of protocol buffer values. When converting from CEL to protocol buffers, an out-of-range CEL value results in an error. Boolean, string, and bytes types have identical ranges and are converted without error. Protocol buffer enum values are converted to the corresponding `int` value. Protocol buffer enum fields can accept any signed 32-bit number, values outside that range will raise an error. Repeated fields are converted to CEL lists of converted values, preserving the order. In the other direction, the CEL list elements must be of the right type and value to be converted to the corresponding protocol buffer type. Similarly, protocol buffer maps are converted to CEL maps, and CEL map keys and values must have the right type and value to be converted in the other direction. Oneof fields are represented by the translation of each of their options as a separate field, but at most one of these fields will be "set", as detected by the `has()` macro. See [Macros](#macros). Since protocol buffer messages are first-class CEL values, message-valued fields are used without conversion. Every protocol buffer field has a default value, and there is no semantic difference between a field set to this default value, and an unset field. For message fields, their default value is just the unset state, and an unset message field is distinct from one set to an empty (i.e. all-unset) message. The `has()` macro (see [Macros](#macros)) tells whether a message field is set (i.e. not unset, hence not set to the default value). If an unset field is nevertheless selected, it evaluates to its default value, or if it is a message field, it evaluates to an empty (i.e. all-unset) message. This allows expressions to use iterative field selection to examine the state of fields in deeply nested messages without needing to test whether every intermediate field is set. (See exception for wrapper types, below.) ### Dynamic Values CEL automatically converts certain protocol buffer messages in the `google.protobuf` package to other types. google.protobuf message | CEL Conversion ----------------------- | -------------- `Any` | dynamically converted to the contained message type, or error `ListValue` | list of `Value` messages `Struct` | map (with string keys, `Value` values) `Value` | dynamically converted to the contained type (null, double, string, bool, `Struct`, or `ListValue`) wrapper types | converted as eponymous field type The wrapper types are `BoolValue`, `BytesValue`, `DoubleValue`, `FloatValue`, `Int32Value`, `Int64Value`, `NullValue`, `StringValue`, `Uint32Value`, and `Uint64Value`. Values of these wrapper types are converted to the obvious type. Additionally, field selection of an unset message field of wrapper type will evaluate to `null`, instead of the default message. This is an exception to the usual evaluation of unset message fields. Note that this implies some cascading conversions. An `Any` message might be converted to a `Struct`, one of whose `Value`-typed values might be converted to a `ListValue` of more values, and so on. Also, note that all of these conversions are dynamic at runtime, so CEL's static type analysis cannot avoid the possibility of type-related errors in expressions using these dynamic values. ## JSON Data Conversion CEL can also work with JSON data. Since there is a natural correspondence of most CEL data with protocol buffer data, and protocol buffers have a [defined mapping](https://developers.google.com/protocol-buffers/docs/proto3#json) to JSON, this creates a natural mapping of CEL to JSON. This creates an exact bidirectional mapping between JSON types and a subset of CEL data: JSON Type | CEL Type --------- | ----------------------------------------------- `null` | `null` Boolean | `bool` Number | `double` (except infinities or NaN) String | `string` Array | `list` of bi-convertible elements Object | `map` (with string keys, bi-convertible values) We define JSON mappings for much of the remainder of CEL data, but note that this data will not map back in to CEL as the same value: CEL Data | JSON Data ------------------------------------------------------ | --------- `int` | Number if in interoperable range, otherwise decimal String. `uint` | Number if in interoperable range, otherwise decimal String. double infinity | String `"Infinity"` or `"-Infinity"` double NaN | String "NaN" `bytes` | String of base64-encoded bytes message | JSON conversion of protobuf message. `list` of convertible elements | JSON Array of converted values `list` with a non-convertible element | none `map` with string keys and convertible values | JSON Object with converted values `map` with a non-string key or a non-convertible value | none `type` | none The "interoperable" range of integer values is `-(2^53-1)` to `2^53 - 1`. ## Gradual Type Checking CEL is a dynamically-typed language, meaning that the types of the values of the variables and expressions might not be known until runtime. However, CEL has an optional type-checking phase that takes the types declared for all functions and variables and tries to deduce the type of the expression and of all its sub-expressions. This is not always possible, due to the dynamic expansion of certain messages like `Struct`, `Value`, and `Any` (see [Dynamic Values](#dynamic-values)). However, if a CEL program does not use dynamically-expanded messages, it can be statically type-checked. The type checker uses a richer type system than the types of the dynamic values: lists have a type parameter for the type of the elements, and maps have two parameters for the types of keys and values, respectively. These richer types preserve the stronger type guarantees that protocol buffer messages have. We can infer stronger types from the standard functions, such as accessing list elements or map fields. However, the `type()` function and dynamic dispatch to particular function overloads only use the coarser types of the dynamic values. The type checker also introduces the `dyn` type, which is the union of all other types. Therefore the type checker could accept a list of heterogeneous values as `dyn([1, 3.14, "foo"])`, which is given the type `list(dyn)`. The standard function `dyn` has no effect at runtime, but signals to the type checker that its argument should be considered of type `dyn`, `list(dyn)`, or a `dyn`-valued map. A CEL type checker attempts to identify possible runtime errors (see [Runtime Errors](#runtime-errors)), particularly `no_matching_overload` and `no_such_field`, ahead of runtime. It also serves to optimize execution speed by narrowing down the number of possible matching overloads for a function call, and by allowing for a more efficient (unboxed) runtime representation of values. By construction, a CEL expression that does not use the dynamic features coming from `Struct`, `Value`, or `Any`, can be fully statically type-checked and all overloads can be resolved ahead of runtime. If a CEL expression uses a mixture of dynamic and static features, a type checker will still attempt to derive as much information as possible and delegate undecidable type decisions to runtime. The type checker is an optional phase of evaluation. Running the type checker does not affect the result of evaluation, it can only reject expressions as ill-typed in a given typing context. ## Evaluation For a given evaluation environment, a CEL expression will deterministically evaluate to either a value or an error. Here are how different expressions are evaluated: * **Literals:** the various kinds of literals (numbers, booleans, strings, bytes, and `null`) evaluate to the values they represent. * **Variables:** variables are looked up in the binding environment. An unbound variable evaluates to an error. * **List, Map, and Message expressions:** each sub-expression is evaluated and if any sub-expression results in an error, this expression results in an error. Otherwise, it results in the list, map, or message of the sub-expression results, or an error if one of the values is of the wrong type. * **Field selection:** see [Field Selection](#field-selection). * **Macros:** see [Macros](#macros). * **Logical operators:** see [Logical Operators](#logical-operators). * **Other operators:** operators are translated into specially-named functions and the sub-expressions become their arguments, for instance `e1 + e2` becomes `_+_(e1, e2)`, which is then evaluated as a normal function. * **Normal functions:** all argument sub-expressions are evaluated and if any results in an error, then this expression results in an error. Otherwise, the function is identified by its name and dispatched to a particular overload based on the types of the sub-expression values. See [Functions](#functions). Because CEL is free of side effects, the order of evaluation among sub-expressions is not guaranteed. If multiple sub-expressions would evaluate to errors causing the enclosing expression to evaluate to an error, it will propagate one or more of the sub-expression errors, but it is not specified which ones. ### Evaluation Environment A CEL expression is parsed and evaluated in the scope of a particular protocol buffer package, which controls name resolution as described above, and a binding context, which binds identifiers to values, errors, and functions. A given identifier has different meanings as a function name or as a variable, depending on the use. For instance in the expression `size(requests) > size`, the first `size` is a function, and the second is a variable. The CEL implementation provides mechanisms for adding bindings of variable names to either values or errors. The implementation will also provide function bindings for at least all the standard functions listed below. Where feasible, CEL implementations ensure that a value bound to a variable name or returned by a custom function conforms to the CEL type declared for that value or, for dynamic typed values, _a_ CEL type. Where implementations allow nonconforming values, (e.g. strings with invalid Unicode code points) to be provided to a CEL program, conformance must be enforced by the application embedding the CEL program in order to ensure type safety is maintained. Some implementations might make use of a _context proto_, where a single protocol buffer message represents all variable bindings: each field in the message is a binding of the field name to the field value. This provides a convenient encapsulation of the binding environment. The evaluation environment can also specify the expected type of the result. If the expected type is one of the protocol buffer wrapper messages, then CEL will attempt to convert the result to the wrapper message, or will raise an error if the conversion fails. ### Runtime Errors In general, when a runtime error is produced, expression evaluation is terminated; exceptions to this rule are discussed in [Logical Operators](#logical-operators) and [Macros](#macros). CEL provides the following built-in runtime errors: * `no_matching_overload`: this function has no overload for the types of the arguments. * `no_such_field`: a map or message does not contain the desired field. There is no in-language representation of errors, no generic way to raise them, and no way to catch or bypass errors, except for the short-circuiting behavior of the logical operators, and macros. ### Logical Operators In the conditional operator `e ? e1 : e2`, evaluates to `e1` if `e` evaluates to `true`, and `e2` if `e` evaluates to `false`. The untaken branch is presumed to not be executed, though that is an implementation detail. In the boolean operators `&&` and `||`: if any of their operands uniquely determines the result (`false` for `&&` and `true` for `||`) the other operand may or may not be evaluated, and if that evaluation produces a runtime error, it will be ignored. This makes those operators commutative (in contrast to traditional boolean short-circuit operators). The rationale for this behavior is to allow the boolean operators to be mapped to indexed queries, and align better with SQL semantics. To get traditional left-to-right short-circuiting evaluation of logical operators, as in C or other languages (also called "McCarthy Evaluation"), the expression `e1 && e2` can be rewritten `e1 ? e2 : false`. Similarly, `e1 || e2` can be rewritten `e1 ? true : e2`. ### Macros CEL supports a small set of predefined macros. Macro invocations have the same syntax as function calls, but follow different type checking rules and runtime semantics than regular functions. An application of CEL opts-in to which macros to support, selecting from the predefined set of macros. The currently available macros are: * `has(e.f)`: tests whether a field is available. See "Field Selection" below. * `e.all(x, p)`: tests whether a predicate holds for all elements of a list `e` or keys of a map `e`. Here `x` is a simple identifier to be used in `p` which binds to the element or key. The `all()` macro combines per-element predicate results with the "and" (`&&`) operator, so if any predicate evaluates to `false`, the macro evaluates to `false`, ignoring any errors from other predicates. * `e.exists(x, p)`: like the `all()` macro, but combines the predicate results with the "or" (`||`) operator, so if any predicate evaluates to `true`, the macro evaluates to `true`, ignoring any errors from other predicates. * `e.exists_one(x, p)`: like the `exists()` macro, but evaluates to `true` only if the predicate of exactly one element/key evaluates to `true`, and the rest to `false`. Any other combination of boolean results evaluates to `false`, and any predicate error causes the macro to raise an error. * `e.map(x, t)`: * transforms a list `e` by taking each element `x` to the function given by the expression `t`, which can use the variable `x`. For instance, `[1, 2, 3].map(n, n * n)` evaluates to `[1, 4, 9]`. Any evaluation error for any element causes the macro to raise an error. * transforms a map `e` by taking each key in the map `x` to the function given by the expression `t`, which can use the variable `x`. For instance, `{'one': 1, 'two': 2}.map(k, k)` evaluates to `['one', 'two']`. Any evaluation error for any element causes the macro to raise an error. * `e.map(x, p, t)`: Same as the two-arg map but with a conditional `p` filter before the value is transformed. * `e.filter(x, p)`: * for a list `e`, returns the sublist of all elements `x` which evaluate to `true` in the predicate expression `p` (which can use variable `x`). For instance, `[1, 2, 3].filter(i, i % 2 > 0)` evaluates to `[1, 3]`. If no elements evaluate to `true`, the result is an empty list. Any evaluation error for any element causes the macro to raise an error. * for a map `e`, returns the list of all map keys `x` which evaluate to `true` in the predicate expression `p` (which can use variable `x`). For instance, `{'one': 1, 'two': 2}.filter(k, k == 'one')` evaluates to `['one']`. If no elements evaluate to `true`, the result is an empty list. Any evaluation error for any element causes the macro to raise an error. ### Field Selection A field selection expression, `e.f`, can be applied both to messages and to maps. For maps, selection is interpreted as the field being a string key. The semantics depends on the type of the result of evaluating expression `e`: 1. If `e` evaluates to a message and `f` is not declared in this message, the runtime error `no_such_field` is raised. 2. If `e` evaluates to a message and `f` is declared, but the field is not set, the default value of the field's type will be produced. Note that this is `null` for messages or the according primitive default value as determined by proto2 or proto3 semantics. 3. If `e` evaluates to a map, then `e.f` is equivalent to `e['f']` (where `f` is still being used as a meta-variable, e.g. the expression `x.foo` is equivalent to the expression `x['foo']` when `x` evaluates to a map). 4. In all other cases, `e.f` evaluates to an error. To test for the presence of a field, the boolean-valued macro `has(e.f)` can be used. 1. If `e` evaluates to a map, then `has(e.f)` indicates whether the string `f` is a key in the map (note that `f` must syntactically be an identifier). 2. If `e` evaluates to a message and `f` is not a declared field for the message, `has(e.f)` raises a `no_such_field` error. 3. If `e` evaluates to a protocol buffers version 2 message and `f` is a defined field: - If `f` is a repeated field or map field, `has(e.f)` indicates whether the field is non-empty. - If `f` is a singular or oneof field, `has(e.f)` indicates whether the field is set. 4. If `e` evaluates to a protocol buffers version 3 message and `f` is a defined field: - If `f` is a repeated field or map field, `has(e.f)` indicates whether the field is non-empty. - If `f` is a oneof or singular message field, `has(e.f)` indicates whether the field is set. - If `f` is some other singular field, `has(e.f)` indicates whether the field's value is its default value (zero for numeric fields, `false` for booleans, empty for strings and bytes). 5. In all other cases, `has(e.f)` evaluates to an error. ## Performance Since one of the main applications for CEL is for execution of untrusted expressions with reliable containment, the time and space cost of evaluation is an essential part of the specification of the language. But we also want to give considerable freedom in how to implement the language. To balance these concerns, we specify only the time and space computational complexity of language constructs and standard functions (see [Functions](#functions)). CEL applications are responsible for noting the computational complexity of any extension functions they provide. ### Abstract Sizes Space and time complexity will be measured in terms of an abstract size measurement of CEL expressions and values. The size of a CEL value depends on its type: * *string*: The size is its length, i.e. the number of code points, plus a constant. * *bytes*: The size is its length, i.e. the number of bytes, plus a constant. * *list*: The size is the sum of sizes of its entries, plus a constant. * *map*: The size is the sum of the key size plus the value size for all of its entries, plus a constant. * *message*: The size is the sum of the size of all fields, plus a constant. * All other values have constant size. The size of a CEL program is: * *string literal*: The size of the resulting value. * *bytes literal*: The size of the resulting value. * Grammatical aggregates are the sum of the size of their components. * Grammatical primitives other than above have constant size. Thus, the size of a CEL program is bounded by either the length of the source text string or the bytes of the proto-encoded AST. The inputs to a CEL expression are the _bindings_ given to the evaluator and the _literals_ within the expression itself. ### Time Complexity Unless otherwise noted, the time complexity of an expression is the sum of the time complexity of its sub-expressions, plus the sum of the sizes of the sub-expression values, plus a constant. For instance, an expression `x` has constant time complexity since it has no sub-expressions. An expression `x != y` takes time proportional to the sum of sizes of the bindings of `x` and `y`, plus a constant. Some functions cost less than this: * The conditional expression `_?_:_`, only evaluates one of the alternative sub-expressions. * For the `size()` function on lists and maps, the time is proportional to the length of its input, not its total size (plus the time of the sub-expression). * The index operator on lists takes constant time (plus the time of the sub-expressions). * The select operator on messages takes constant time (plus the time of the sub-expression). Some functions take more time than this. The following functions take time proportional to the _product_ of their input sizes (plus the time of the sub-expressions): * The index operator on maps. * The select operator on maps. * The in operator. * The `contains`, `startsWith`, `endsWith`, and `matches` functions on strings. See below for the time cost of macros. Implementations are free to provide a more performant implementation. For instance, a hashing implementation of maps would make indexing/selection faster, but we do not require such sophistication from all implementations. ### Space Complexity Unless otherwise noted, the space complexity of an expression is the sum of the space complexity of its sub-expressions, plus a constant. The exceptions are: * *Literals*: Message, map, and list literals allocate new space for their output. * *Concatenation*: The `_+_` operator on lists and strings allocate new space for their output. See below for the space cost of macros. We'll assume that bytes-to-string and string-to-bytes conversions do not need to allocate new space. ### Macro Performance Macros can take considerably more time and space than other constructs, and can lead to exponential behavior when nested or chained. For instance, ``` [0,1].all(x, [0,1].all(x, ... [0,1].all(x, 1/0)...)) ``` takes exponential (in the size of the expression) time to evaluate, while ``` ["foo","bar"].map(x, [x+x,x+x]).map(x, [x+x,x+x])...map(x, [x+x,x+x]) ``` is exponential in both time and space. The time and space cost of macros is the cost of the range sub-expression `e`, plus the following: * `has(e.f)`: Space is constant. * If `e` is a map, time is linear in size of `e`. * If `e` is a message, time is constant. * `e.all(x, p)`, `e.exists(x, p)`, and `e.exists_one(x, p)` * Time is the sum of the time of `p` for each element of `e`. * Space is constant. * `e.map(x, t)` * Time is the sum of time of `t` for each element of `e`. * Space is the sum of space of `t` for each element of `e`, plus a constant. * `e.filter(x, t)` * Time is the sum of time of `t` for each element of `e`. * Space is the space of `e`. ### Performance Limits Putting this all together, we can make the following statements about the cost of evaluation. Let `P` be the non-literal size of the expression, `L` be the size of the literals, `B` be the size of the bindings, and `I=B+L` be the total size of the inputs. * The macros other than `has()` are the only avenue for exponential behavior. This can be curtailed by the implementation allowing applications to set limits on the recursion or chaining of macros, or disable them entirely. * The concatenation operator `_+_` is the only operator that dramatically increases the space complexity, with the program `x + x + ... + x` taking time and space `O(B * P^2)`. * The string-detection functions (`contains()` and friends) yield a boolean result, thus cannot be nested to drive exponential or even higher polynomial cost. We can bound the time cost by `O(B^2 * P)`, with a limiting case being `x.contains(y) || x.contains(y) || ...`. * The map indexing operators yield a smaller result than their input, and thus are also limited in their ability to increase the cost. A particularly bad case would be an expensive selection that returns a subcomponent that contains the majority of the size of the aggregate, resulting in a time cost of `O(P * I)`, and see below. * Eliminating all of the above and using only default-cost functions, plus aggregate literals, time and space are limited `O(P * I)`. A limiting time example is `size(x) + size(x) + ...`. A limiting time and space example is `[x, x, ..., x]`. Note that custom function will alter this analysis if they are more expensive than the default costs. ## Functions CEL functions have no observable side effects (there may be side effects like logging or such which are not observable from CEL). The default argument evaluation strategy for functions is strict, with exceptions from this rule discussed in [Logical Operators](#logical-operators) and [Macros](#macros). Functions are specified by a set of overloads. Each overload defines the number and type of arguments and the type of the result, as well as an opaque computation. Argument and result types can use type variables to express overloads which work on lists and maps. At runtime, a matching overload is selected and the according computation invoked. If no overload matches, the runtime error `no_matching_overload` is raised (see also [Runtime Errors](#errors)). For example, the standard function `size` is specified by the following overloads:
size (string) -> int string length
(bytes) -> int bytes length
(list(A)) -> int list size
(map(A, B)) -> int map size
Overloads must have non-overlapping argument types, after erasure of all type variables (similar as type erasure in Java). Thus an implementation can implement overload resolution by simply mapping all argument types to a strong hash. Operator sub-expressions are treated as calls to specially-named built-in functions. For instance, the expression `e1 + e2` is dispatched to the function `_+_` with arguments `e1` and `e2`. Note that since `_+_` is not an identifier, there would be no way to write this as a normal function call. See [Standard Definitions](#standard-definitions) for the list of all predefined functions and operators. ### Extension Functions It is possible to add extension functions to CEL, which then behave consistently with standard functions. The mechanism for doing this is implementation dependent and usually highly curated. For example, an application domain of CEL can add a new overload to the `size` function above, provided this overload's argument types do not overlap with any existing overload. For methodological reasons, CEL does not allow overloading operators. Like standard functions, extension functions must be free from observable side effects in order to prevent expressions from having undefined results, since CEL does not guarantee evaluation order of sub-expressions. ### Receiver Call Style A function overload can be declared to use receiver call-style, so it must be called as `e1.f(e2)` instead of `f(e1, e2)`. Overloads with different call styles are non-overlapping per definition, regardless of their types. ## Standard Definitions All predefined operators, functions and constants are listed in the table below. For each symbol, the available overloads are listed. Operator symbols use a notation like `_+_` where `_` is a placeholder for an argument. ### Equality Equality (`_==_`) and inequality (`_!=_`) are defined for all types. Inequality is the logical negation of equality, i.e. `e1 != e2` is the same as `!(e1 == e2)` for all expressions `e1` and `e2`. Type-checking asserts that arguments to equality operators must be the same type. If the argument types differ, the type-checker will raise an error. However, if at least one argument is dynamically typed, the type-checker considers all arguments dynamic and defers type-agreement checks to the interpreter. The type-checker uses homogeneous equality to surface potential logical errors during static analysis, but the runtime uses heterogeneous equality with a definition of [numeric equality](#Numbers) which treats all numeric types as though they exist on a continuous number line. Semantically, equality would be expressed within in CEL as follows: ```cel type(x) in [double, int, uint] && type(y) in [double, int, uint] ? numericEquals(x, y) : type(x) == type(y) ? x == y : false ``` CEL's support for boxed primitives relies on heterogeneous equality to ensure that comparisons to `null` evaluate to `true` or `false` rather than error. This behavior is also useful for evaluating JSON data where all numbers may be provided as `double` or, depending on the underlying JSON implementation, possibly `int`. This potential discrepancy between how runtimes handle dynamic data is further motivation for supporting separate behaviors at type-check and interpretation. #### Numbers The numeric types of `int`, `uint`, and `double` are compared as though they exist on a continuous number line where two numbers `x` and `y` are equal if `!(x < y || x > y)`. Since it is possible to compare numeric types without type conversion, CEL uses this definition for `numericEquals` to support comparison across numeric types. This property of cross-type numeric equality is essential for supporting JSON in a way which mostly closely matches user expectations. The following expressions are equivalent as the type-checker cannot infer the type of the `json.number` in the expression since it is considered `dyn` typed: Index into a map: ``` {1: 'hello', 2: 'world'}[json.number] {1: 'hello', 2: 'world'}[int(json.number)] ``` Set membership test of a json number in a list of integers: ``` json.number in [1, 2, 3] int(json.number) in [1, 2, 3] ``` The `double` type follows the IEEE 754 standard. Not-a-number (`NaN`) values compare as unequal, e.g. `NaN == NaN // false` and `NaN != NaN // true`. #### Lists and Maps Two `list` values equal if their entries at each ordinal are equal. For lists `a` and `b` with length `N`, `a == b` is equivalent to: ``` a[0] == b[0] && a[1] == b[1] && ... && a[N-1] == b[N-1] ``` Two `map` values are equal if their entries are the same. For maps `a` and `b` with keyset `k1, k2, ..., kN`, `a == b` equality is equivalent to: ``` a[k1] == b[k1] && a[k2] == b[k2] && ... && a[kN] == b[kN] ``` In short, when `list` lengths / `map` key sets are the same, and all element comparisons are `true`, the result is `true`. #### Protocol Buffers CEL uses the C++ [`MessageDifferencer::Equals`](https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.util.message_differencer#MessageDifferencer.Equals.details) semantics for comparing Protocol Buffer messages across all runtimes. For two messages to be equal: - Both messages must share the same type name and `Descriptor` instance; - Both messages must have the same set fields; - All primitive typed fields compare equal by value, e.g. `string`, `int64`; - All elements of `repeated` fields compare in-order as `true`; - All entries of `map` fields compare order-independently as `true`; - All fields of `message` and `group` typed fields compare true, with the comparison being performed as if by recursion. - All unknown fields compare `true` using byte equality. In addition to the publicly documented behaviors for C++ protobuf equality, there are some implementation behaviors which are important to mention: - The `double` type follows the IEEE 754 standard where not-a-number (`NaN`) values compare as unequal, e.g. `NaN == NaN // false` and `NaN != NaN // true`. - All `google.protobuf.Any` typed fields are unpacked before comparison, unless the `type_url` cannot be resolved, in which case the comparison falls back to byte equality. Protocol buffer equality semantics in C++ are generally consistent with CEL's definition of heterogeneous equality. Note, Java and Go proto equality implementations do not follow IEEE 754 for `NaN` values and do not unpack `google.protobuf.Any` values before comparison. These comparison differences can result in false negatives or false positives; consequently, CEL provides a uniform definition across runtimes to ensure consistent evaluation across runtimes. There is one edge case where CEL and protobuf equality will produce different results; however, this edge case is sufficiently unlikely that the difference is acceptable: ``` // Protocol buffer definition message Msg { repeated google.protobuf.Any values; } // CEL - Produces `false` according to protobuf equality since the types of // Int32Value and FloatValue are not equal. Msg{values: [google.protobuf.Int32Value{value: 1}]} == Msg{values: [google.protobuf.FloatValue{value: 1.0}]} // CEL - Produces `true` according to CEL equality with well-known // protobuf type unwrapping of the list elements within `values` // where the list values are unwrapped to CEL numbers and compared // using `numericEquals`. Msg{values: [google.protobuf.Int32Value{value: 1}]}.values == Msg{values: [google.protobuf.FloatValue{value: 1.0}]}.values ``` ### Ordering Ordering operators are defined for `int`, `uint`, `double`, `string`, `bytes`, `bool`, as well as `timestamp` and `duration`. Runtime ordering is also supported across `int`, `uint`, and `double` for consistency with the runtime equality definition for numeric types. Strings and bytes obey lexicographic ordering of the byte values. Because strings are encoded in UTF-8, strings consequently also obey lexicographic ordering of their Unicode code points. The ordering operators obey the usual algebraic properties, i.e. `e1 <= e2` gives the same result as `!(e1 > e2)` as well as `(e1 < e2) || (e1 == e2)`. ### Overflow Arithmetic operations raise an error when the results exceed the range of the integer type (int, uint) or the timestamp or duration type. An error is also raised for conversions which exceed the range of the target type. There are a few additional considerations to keep in mind with respect to how and when certain types will overflow: * Duration values are limited to a single int64 value, or roughly +-290 years. * Timestamp values are limited to the range of values which can be serialized as a string: ["0001-01-01T00:00:00Z", "9999-12-31T23:59:59.999999999Z"]. * Double to int conversions are limited to (minInt, maxInt) non-inclusive. Note, that whether the minimum or maximum integer value will roundtrip successfully int -> double -> int can be compiler dependent which is the motivation for the conservative round-tripping behavior. ### Timezones Timezones are expressed in the following grammar: ```grammar TimeZone = "UTC" | LongTZ | FixedTZ ; LongTZ = ? list available at https://www.joda.org/joda-time/timezones.html ? ; FixedTZ = ( "+" | "-" ) Digit Digit ":" Digit Digit ; Digit = "0" | "1" | ... | "9" ; ``` Fixed timezones are explicit hour and minute offsets from UTC. Long timezone names are like `Europe/Paris`, `CET`, or `US/Central`. ### Regular Expressions Regular expressions follow the [RE2 syntax](https://github.com/google/re2/wiki/Syntax). Regular expression matches succeed if they match a substring of the argument. Use explicit anchors (`^` and `$`) in the pattern to force full-string matching, if desired. ### Standard Environment #### Presence and Comprehension Macros **has(message.field)** \- Checks if a field exists within a message. This macro supports proto2, proto3, and map key accesses. Only map accesses using the select notation are supported. **Signatures** * `has(message.field) -> bool` **Examples** ``` // `true` if the 'address' field exists in the 'user' message has(user.address) // `true` if map 'm' has a key named 'key_name' defined. The value may be null // as null does not connote absence in CEL. has(m.key_name) // `false` if the 'items' field is not set in the 'order' message has(order.items) // `false` if the 'user_id' key is not present in the 'sessions' map has(sessions.user_id) ``` **all \-** Tests whether all elements in the input list or all keys in a map satisfy the given predicate. The all macro behaves in a manner consistent with the Logical AND operator including in how it absorbs errors and short-circuits. **Signatures** * `list(A).all(A, predicate(A) -> bool) -> bool` * `map(A, B).all(A, predicate(A) -> bool) -> bool` **Examples** ``` [1, 2, 3].all(x, x > 0) // true [1, 2, 0].all(x, x > 0) // false ['apple', 'banana', 'cherry'].all(fruit, fruit.size() > 3) // true [3.14, 2.71, 1.61].all(num, num < 3.0) // false {'a': 1, 'b': 2, 'c': 3}.all(key, key != 'b') // false ``` **exists** \- Tests whether any value in the list or any key in the map satisfies the predicate expression. The exists macro behaves in a manner consistent with the Logical OR operator including in how it absorbs errors and short-circuits. **Signatures** * `list(A).exists(A, predicate(A) -> bool) -> bool` * `map(A,B).exists(A, predicate(A) -> bool) -> bool` **Examples** ``` [1, 2, 3].exists(i, i % 2 != 0) // true [].exists(i, i > 0) // false [0, -1, 5].exists(num, num < 0) // true {'x': 'foo', 'y': 'bar'}.exists(key, key.startsWith('z')) // false ``` **exists\_one** \- Tests whether exactly one list element or map key satisfies the predicate expression. This macro does not short-circuit in order to remain consistent with logical operators being the only operators which can absorb errors within CEL. **Signatures** * `list(A).exists_one(A, predicate(A)) -> bool` * `map(A,B).exists_one(A, predicate(A)) -> bool` **Examples** ``` [1, 2, 2].exists_one(i, i < 2) // true {'a': 'hello', 'aa': 'hellohello'}.exists_one(k, k.startsWith('a')) // false [1, 2, 3, 4].exists_one(num, num % 2 == 0) // false ``` **filter** \- Returns a list containing only the elements from the input list that satisfy the given predicate **Signatures** * `list(A).filter(A, function(A) -> bool) -> list(A)` * `map(A, B).filter(A, function(A) -> bool) -> list(A)` **Examples** ``` [1, 2, 3].filter(x, x > 1) // [2, 3] ['cat', 'dog', 'bird', 'fish'].filter(pet, pet.size() == 3) // ['cat', 'dog'] [{'a': 10, 'b': 5, 'c': 20}].map(m, m.filter(key, m[key] > 10)) // [['c']] ``` **map** \- Returns a list where each element is the result of applying the transform expression to the corresponding input list element or input map key. There are two forms of the map macro: * The three argument form transforms all elements. * The four argument form transforms only elements which satisfy the predicate. The four argument form of the macro exists to simplify combined filter / map operations. **Signatures** * `list(A).map(A, function(A) -> T) -> list(T)` * `list(A).map(A, function(A) -> bool, function(A) -> T) -> list(T)` * `map(A, B).map(A, function(A) -> T) -> list(T)` * `map(A, B).map(A, function(A) -> bool, function(A) -> T) -> list(T)` **Examples** ``` [1, 2, 3].map(x, x * 2) // [2, 4, 6] [5, 10, 15].map(x, x / 5) // [1, 2, 3] ['apple', 'banana'].map(fruit, fruit.upperAscii()) // ['APPLE', 'BANANA'] [1, 2, 3, 4].map(num, num % 2 == 0, num * 2) // [4, 8] ``` #### Logical Operators **Logical NOT (\!)** \- Takes a boolean value as input and returns the opposite boolean value. **Signatures:** * `!bool -> bool` **Examples:** ``` !true // false !false // true !error // error ``` **Logical OR (||)** \- Compute the logical OR of two or more values. Errors and unknown values are considered valid inputs to this operator and will not halt evaluation. **Signatures:** * `bool || bool -> bool` **Examples:** ``` true || false // true false || false // false error || true // true error || false // error ``` **Logical AND (&&)** \- Compute the logical AND of two or more values. Errors and unknown values are considered valid inputs to this operator and will not halt evaluation. **Signatures:** * `bool && bool -> bool` **Examples:** ``` true && true // true true && false // false error && true // error error && false // false ``` **Conditional Operator (? : )** \- The conditional or ternary operator which evaluates the test condition and only one of the remaining sub-expressions **Signatures:** * `bool ? A : A -> A` **Examples:** ``` true ? 1 : 2 // 1 false ? "a" : "b" // "b" true ? error : value // error false ? error : value // value (2 < 5) ? 'yes' : 'no' // 'yes' ('hello'.size() > 10) ? 1 / 0 : 42 // 42 ``` **Note:** * `error` is a special value in CEL that represents an error condition. Operations involving `error` typically propagate the error. * This documentation provides examples for a few CEL operators. The complete CEL specification includes many more operators and functions. #### Arithmetic Operators **Negation (-)** \- Negate a numeric value. **Signatures:** * `-int -> int` * `-double -> double` **Examples:** ``` -(5) // -5 -(3.14) // -3.14 ``` **Addition (+)** \- Adds two numeric values or concatenates two strings, bytes, or lists. **Signatures:** * Numeric addition * `int + int -> int` * `uint + uint -> uint` * `double + double -> double` * Time and duration addition * `google.protobuf.Timestamp + google.protobuf.Duration -> google.protobuf.Timestamp` * `google.protobuf.Duration + google.protobuf.Timestamp -> google.protobuf.Timestamp` * `google.protobuf.Duration + google.protobuf.Duration -> google.protobuf.Duration` * Concatenation * `string + string -> string` * `bytes + bytes -> bytes` * `list(A) + list(A) -> list(A)` **Examples:** ``` 1 + 2 // 3 3.14 + 1.59 // 4.73 "Hello, " + "world!" // "Hello, world!" [1] + [2, 3] // [1, 2, 3] duration('1m') + duration('1s') // duration('1m1s') timestamp('2023-01-01T00:00:00Z') + duration('24h') // timestamp('2023-01-02T00:00:00Z') ``` **Subtraction (-)** \- Subtracts two numeric values or calculates the duration between two timestamps. **Signatures:** * Numeric subtraction * `int - int -> int` * `uint - uint -> uint` * `double - double -> double` * Time and duration subtraction * `google.protobuf.Timestamp - google.protobuf.Timestamp -> google.protobuf.Duration` * `google.protobuf.Timestamp - google.protobuf.Duration -> google.protobuf.Timestamp` * `google.protobuf.Duration - google.protobuf.Duration -> google.protobuf.Duration` **Examples:** ``` 5 - 3 // 2 10.5 - 2.0 // 8.5 duration('1m') - duration('1s') // duration('59s') timestamp('2023-01-10T12:00:00Z') - timestamp('2023-01-10T00:00:00Z') // duration('12h') ``` **Division (/)** \- Divides two numeric values. **Signatures:** * `int / int -> int` * `uint / uint -> uint` * `double / double -> double` **Examples:** ``` 10 / 2 // 5 7.0 / 2.0 // 3.5 ``` **Modulus (%)** \- Compute the modulus of one integer into another. **Signatures:** * `int % int -> int` * `uint % uint -> uint` **Examples:** ``` 3 % 2 // 1 6u % 3u // 0u ``` **Multiply (*)** \- Multiply two numbers. If the operation exceeds the possible value which can be represented by the type, the result will be an overflow error. **Signatures:** * `double * double -> double` * `int * int -> int` * `uint * uint -> uint` **Examples:** ``` 3.5 * 40.0 // 140.0 -2 * 6 // 12 13u * 3u // 39u ``` #### Comparison Operators Comparisons require strict type equality at type-check time. If types do not agree, then type-conversion is required in order to be explicit about the intention and inherent risks of comparing across types. The one exception to this rule is numeric comparisons at runtime. Since CEL supports JSON in addition to Protocol Buffers, it must handle cases where the user intent was to compare an integer value to a JSON value within the int53 range. For this reason, numeric comparisons across type are supported at runtime as all numeric representations may be considered to exist along a shared number line independent of their representation in memory. **Equality (==)** \- Compares two values of the same type and returns `true` if they are equal, and `false` otherwise **Signatures:** * `A == A -> bool` (where A can be any comparable type) **Examples:** ``` 1 == 1 // true "hello" == "world" // false bytes('hello') == b'hello' // true duration('1h') == duration('60m') // true dyn(3.0) == 3 // true ``` **Inequality (\!=)** \- Takes two values of the same type and returns `true` if they are not equal, and `false` otherwise. **Signatures:** * `A != A -> bool` (where A can be any comparable type) **Examples:** ``` 1 != 2     // true "a" != "a" // false 3.0 != 3.1 // true ``` **Less Than or Equal To (\<=)** \- Compare two values and return `true` if the first value is less than or equal to the second value. **Signatures:** * `bool <= bool -> bool` * `int <= int -> bool` * `uint <= uint -> bool` * `double <= double -> bool` * `string <= string -> bool` * `bytes <= bytes -> bool` * `google.protobuf.Timestamp <= google.protobuf.Timestamp -> bool` * `google.protobuf.Duration <= google.protobuf.Duration -> bool` **Examples:** ``` 2 <= 3 // true 'a' <= 'b' // true timestamp('2023-08-25T12:00:00Z') <= timestamp('2023-08-26T12:00:00Z') // true ``` **Less Than (\<)** \- Compare two values and return `true` if the first value is less than the second. **Signatures:** * `bool < bool -> bool` * `int < int -> bool` * `uint < uint -> bool` * `double < double -> bool` * `string < string -> bool` * `bytes < bytes -> bool` * `google.protobuf.Timestamp < google.protobuf.Timestamp -> bool` * `google.protobuf.Duration < google.protobuf.Duration -> bool` **Examples:** ``` 2 < 3 // true 'a' < 'b' // true duration('2h') < duration('3h') // true -1 < dyn(1u) // true ``` **Greater Than or Equal To (\>=)** \- Compare two values and return `true` if the first value is greater than or equal to the second. **Signatures:** * `bool >= bool -> bool` * `int >= int -> bool` * `uint >= uint -> bool` * `double >= double -> bool` * `string >= string -> bool` * `bytes >= bytes -> bool` * `google.protobuf.Timestamp >= google.protobuf.Timestamp -> bool` * `google.protobuf.Duration >= google.protobuf.Duration -> bool` **Examples:** ``` 3 >= 2 // true 'b' >= 'a' // true duration('2h') + duration('1h1m') >= duration('3h') // true 1 >= dyn(18446744073709551615u) // false ``` **Greater Than (\>)** \- Compares two values and return `true` if the first value is greater than the second value **Signatures:** * `bool > bool -> bool` * `int > int -> bool` * `uint > uint -> bool` * `double > double -> bool` * `string > string -> bool` * `bytes > bytes -> bool` * `google.protobuf.Timestamp > google.protobuf.Timestamp -> bool` * `google.protobuf.Duration > google.protobuf.Duration -> bool` **Examples:** ``` 3 > 2 // true 'b' > 'a' // true 5u > 3u // true ``` #### List Operators **List Indexing (\[\])** \- list indexing. Constant time cost **Signatures:** * `list(A)[int] -> A` **Examples:** ``` [1, 2, 3][1] // 2 ``` **List Membership (in)** \- Checks if a value is present in a list. Time cost is proportional to the product of the size of both arguments. **Signatures:** * `A in list(A) -> bool` **Examples:** ``` 2 in [1, 2, 3] // true "a" in ["b", "c"] // false ``` **size** \- Determine the number of elements in the list. **Signatures:** * `list.size() -> int` * `size(list) -> int` **Examples:** ``` ['hello', 'world'].size() // 2 size(['first', 'second', 'third']) // 3 ``` #### Map Operators **Map Indexing (\[\])** \- map indexing. Expected time complexity is O(1). Some implementations may not guarantee O(1) lookup times, please check with the CEL implementation to verify. In the worst case for string keys, the lookup cost could be proportional to the size of the map keys times the size of the index string. **Signatures:** * `map(A, B)[A] -> B` **Examples:** ``` {'key1': 'value1', 'key2': 'value2'}['key1'] // 'value1' {'name': 'Bob', 'age': 42}['age'] // 42 ``` **Map Key Membership (in)** \- Checks if a key exists in a map. Expected time complexity is O(1). Some implementations may not guarantee O(1) lookup times, please check with the CEL implementation to verify. In the worst case for string keys, the lookup cost could be proportional to the size of the map keys times the size of the index string. **Signatures:** * `A in map(A, B) -> bool` **Examples:** ``` 'key1' in {'key1': 'value1', 'key2': 'value2'} // true 3 in {1: "one", 2: "two"} // false ``` **size** \- Determine the number of entries in the map. **Signatures:** * `map.size() -> int` * `size(map) -> int` **Examples:** ``` {'hello': 'world'}.size() // 1 size({1: true, 2: false}) // 2 ``` #### Bytes Functions **size** \- Determine the number of bytes in the sequence. **Signatures:** * `bytes.size() -> int` * `size(bytes) -> int` **Examples:** ``` b'hello'.size() // 5 size(b'world!') // 6 size(b'\xF0\x9F\xA4\xAA') // 4 ``` #### String Functions **contains** \- Tests whether the string operand contains the substring. Time complexity is proportional to the product of the sizes of the arguments. **Signatures:** * `string.contains(string) -> bool` **Examples:** ``` "hello world".contains("world") // true "foobar".contains("baz") // false ``` **endsWith** \- Tests whether the string operand ends with the specified suffix. Average time complexity is linear with respect to the size of the suffix string. Worst-case time complexity is proportional to the product of the sizes of the arguments. **Signatures:** * `string.endsWith(string) -> bool` **Examples:** ``` "hello world".endsWith("world") // true "foobar".endsWith("bar") // true ``` **matches** \- Tests whether a string matches a given RE2 regular expression. Time complexity is proportional to the product of the sizes of the arguments as guaranteed by the [RE2 design](https://github.com/google/re2/wiki/WhyRE2). **Signatures:** * `matches(string, string) -> bool` * `string.matches(string) -> bool` **Examples:** ``` matches("foobar", "foo.*") // true "foobar".matches("foo.*") // true ``` **startsWith** \- Tests whether the string operand starts with the specified prefix. Average time complexity is linear with respect to the size of the prefix. Worst-case time complexity is proportional to the product of the sizes of the arguments. **Signatures:** * `string.startsWith(string) -> bool` **Examples:** ``` "hello world".startsWith("hello") // true "foobar".startsWith("foo") // true ``` **size** \- Determine the length of the string in terms of the number of Unicode codepoints **Signatures:** * `string.size() -> int` * `size(string) -> int` **Examples:** ``` "hello".size() // 5 size("world!") // 6 "fiance\u0301".size() // 7 size(string(b'\xF0\x9F\xA4\xAA')) // 1 ``` #### Date/Time Functions All timestamp functions which take accept a timezone argument can use any of the supported [Joda Timezones](https://www.joda.org/joda-time/timezones.html) either using the numeric format or the geographic region. **getDate** \- Get the day of the month from a timestamp (one-based indexing). **Signatures:** * `google.protobuf.Timestamp.getDate() -> int` (in UTC) * `google.protobuf.Timestamp.getDate(string) -> int` (with timezone) **Examples:** ``` timestamp("2023-12-25T00:00:00Z").getDate() // 25 timestamp("2023-12-25T00:00:00Z").getDate("America/Los_Angeles") // 24 ``` **getDayOfMonth** \- Get the day of the month from a timestamp (zero-based indexing). **Signatures:** * `google.protobuf.Timestamp.getDayOfMonth() -> int` (in UTC) * `google.protobuf.Timestamp.getDayOfMonth(string) -> int` (with timezone) **Examples:** ``` timestamp("2023-12-25T00:00:00Z").getDayOfMonth() // 24 timestamp("2023-12-25T00:00:00Z").getDayOfMonth("America/Los_Angeles") // 23 ``` **getDayOfWeek** \- Get the day of the week from a timestamp (zero-based, zero for Sunday). **Signatures:** * `google.protobuf.Timestamp.getDayOfWeek() -> int` (in UTC) * `google.protobuf.Timestamp.getDayOfWeek(string) -> int` (with timezone) **Examples:** ``` timestamp("2023-12-25T12:00:00Z").getDayOfWeek() // 1 (Monday) ``` **getDayOfYear** \- Get the day of the year from a timestamp (zero-based indexing). **Signatures:** * `google.protobuf.Timestamp.getDayOfYear() -> int` (in UTC) * `google.protobuf.Timestamp.getDayOfYear(string) -> int` (with timezone) **Examples:** ``` timestamp("2023-12-25T12:00:00Z").getDayOfYear() // 358 ``` **getFullYear** \- Get the year from a timestamp. **Signatures:** * `google.protobuf.Timestamp.getFullYear() -> int` (in UTC) * `google.protobuf.Timestamp.getFullYear(string) -> int` (with timezone) **Examples:** ``` timestamp("2023-12-25T12:00:00Z").getFullYear() // 2023 ``` **getHours** \- Get the hour from a timestamp or convert the duration to hours **Signatures:** * `google.protobuf.Timestamp.getHours() -> int` (in UTC) * `google.protobuf.Timestamp.getHours(string) -> int` (with timezone) * `google.protobuf.Duration.getHours() -> int` convert the duration to hours **Examples:** ``` timestamp("2023-12-25T12:00:00Z").getHours() // 12 duration("3h").getHours() // 3 ``` **getMilliseconds** \- Get the milliseconds from a timestamp or the milliseconds portion of the duration **Signatures:** * `google.protobuf.Timestamp.getMilliseconds() -> int` obtain the milliseconds component of the timestamp in UTC. * `google.protobuf.Timestamp.getMilliseconds(string) -> int` obtain the milliseconds component with a timezone. * `google.protobuf.Duration.getMilliseconds() -> int` obtain the milliseconds portion of the duration value. Other time unit functions convert the duration to that format; however, this method does not. **Examples:** ``` timestamp("2023-12-25T12:00:00.500Z").getMilliseconds() // 500 duration("1.234s").getMilliseconds() // 234 ``` **getMinutes** \- Get the minutes from a timestamp or convert a duration to minutes **Signatures:** * `google.protobuf.Timestamp.getMinutes() -> int` get the minutes component of a timestamp in UTC. * `google.protobuf.Timestamp.getMinutes(string) -> int` get the minutes component of a timestamp within a given timezone. * `google.protobuf.Duration.getMinutes() -> int` convert the duration to minutes. **Examples:** ``` timestamp("2023-12-25T12:30:00Z").getMinutes() // 30 duration("1h30m").getMinutes() // 90 ``` **getMonth** \- Get the month from a timestamp (zero-based, 0 for January). **Signatures:** * `google.protobuf.Timestamp.getMonth() -> int` (in UTC) * `google.protobuf.Timestamp.getMonth(string) -> int` (with timezone) **Examples:** ``` timestamp("2023-12-25T12:00:00Z").getMonth() // 11 (December) ``` **getSeconds** \- Get the seconds from a timestamp or convert the duration to seconds **Signatures:** * `google.protobuf.Timestamp.getSeconds() -> int` get the seconds component of the timestamp in UTC. * `google.protobuf.Timestamp.getSeconds(string) -> int` get the seconds component of the timestamp with a provided timezone. * `google.protobuf.Duration.getSeconds() -> int` convert the duration to seconds. **Examples:** ``` timestamp("2023-12-25T12:30:30Z").getSeconds() // 30 duration("1m30s").getSeconds() // 90 ``` #### Types and Conversions **bool** `type(bool)` \- Type denotation **Signatures:** * `bool(bool) -> bool` (identity) * `bool(string) -> bool` (type conversion) **Examples:** ``` bool(true) // true bool("true") // true bool("FALSE") // false ``` **bytes** `type(bytes)` \- Type denotation **Signatures:** * `bytes(bytes) -> bytes` (identity) * `bytes(string) -> bytes` (type conversion) **Examples:** ``` bytes("hello") // b'hello' bytes("🤪") // b'\xF0\x9F\xA4\xAA' ``` **double** `type(double)` \- Type denotation **Signatures:** * `double(double) -> double` (identity) * `double(int) -> double` (type conversion) * `double(uint) -> double` (type conversion) * `double(string) -> double` (type conversion) **Examples:** ``` double(3.14) // 3.14 double(10) // 10.0 double("3.14") // 3.14 (if successful, otherwise an error) ``` **duration** Type conversion for duration values. Note, duration strings should support the following suffixes: * "h" (hour) * "m" (minute) * "s" (second) * "ms" (millisecond) * "us" (microsecond) * "ns" (nanosecond) Duration strings may be zero (`"0"`), negative (`-1h`), fractional (`-23.4s`), and/or compound (`1h34us`). Durations greater than the hour granularity, such as days or weeks, are not supported as this would necessitate an understanding of the locale of the execution context to account for leap seconds and leap years. **Signatures:** * `duration(google.protobuf.Duration) -> google.protobuf.Duration` * `duration(string) -> google.protobuf.Duration` **Examples:** ``` duration("1h30m") // google.protobuf.Duration representing 1 hour and 30 minutes duration("0") // zero duration value duration("-1.5h") // minus 90 minutes ``` **dyn** `type(dyn)` \- Type denotation The `dyn` types does not exist at runtime, but provides a hint to the type-checker to disable strong type agreement checks. **Signatures:** * `dyn(A) -> dyn` (type conversion) (where A is any type) **Examples:** ``` dyn(123) // integer 123 marked `dyn` during type-checking dyn("hello") // string "hello" marked `dyn` during type-checking ``` **int** `type(int)` \- Type denotation **Signatures:** * `int(int) -> int` (identity) * `int(uint) -> int` (type conversion) * `int(double) -> int` (type conversion, rounds toward zero, errors if out of range) * `int(string) -> int` (type conversion) * `int(enum E) -> int` (type conversion) * `int(google.protobuf.Timestamp) -> int` converts to seconds since Unix epoch **Examples:** ``` int(123) // 123 int(3.14) // 3 int("123") // 123 (if successful, otherwise an error) ``` **list** `type(list(dyn))` \- Type denotation **map** `type(map(dyn, dyn))` \- Type denotation **null\_type** `type(null)` \- Type denotation **string** `type(string)` \- Type denotation **Signatures:** * `string(string) -> string` (identity) * `string(bool) -> string` converts `true` to `"true"` and `false` to `"false"` * `string(int) -> string` converts integer values to base 10 representation * `string(uint) -> string` converts unsigned integer values to base 10 representation * `string(double) -> string` converts a double to a string * `string(bytes) -> string` converts a byte sequence to a UTF-8 string, errors for invalid code points * `string(timestamp) -> string` converts a timestamp value to [RFC3339](https://datatracker.ietf.org/doc/html/rfc3339) format * `string(duration) -> string` converts a duration value to seconds and fractional seconds with an 's' suffix **Examples:** ``` string(123) // "123" string(123u) // "123u" string(3.14) // "3.14" string(b'hello') // "hello" string(b'\xf0\x9f\xa4\xaa') // "🤪" string(duration('1m1ms')) // "60.001s" ``` **timestamp** **Signatures:** * `timestamp(google.protobuf.Timestamp) -> google.protobuf.Timestamp` (identity) * `timestamp(string) -> google.protobuf.Timestamp` (type conversion, according to RFC3339) **Examples:** ``` // google.protobuf.Timestamp representing August 26, 2023 at 12:39 PM PDT timestamp("2023-08-26T12:39:00-07:00") ``` **type** `type` \- Type denotation **Signatures:** * `type(A) -> type` (returns the type of the value, where A is any type) **Examples:** ``` type(123) // int type("hello") // string ``` **uint** `type(uint)` \- Type denotation **Signatures:** * `uint(uint) -> uint` (identity) * `uint(int) -> uint` (type conversion) * `uint(double) -> uint` (type conversion, rounds toward zero, errors if out of range) * `uint(string) -> uint` (type conversion) **Examples:** ``` uint(123) // 123u uint(3.14) // 3u uint("123") // 123u (if successful, otherwise an error) ``` ## Appendix 1: Legacy Behavior ### Homogeneous Equality Prior to cel-spec v0.7.0, CEL runtimes only supported homogeneous equality to be consistent with the homogeneous equality defined by the type-checker. The original runtime definition for equality is as follows: ``` Equality and inequality are homogeneous; comparing values of different runtime types results in a runtime error. Thus `2 == 3` is `false`, but `2 == 2.0` is an error. For `double`, all not-a-number (`NaN`) values compare equal. This is different than the usual semantics of floating-point numbers, but it is more consistent with the usual expectations of reflexivity, and is more compatible with the usual notions of equality on protocol buffers. ``` cel-spec-0.24.0/eval.pb.go000077500000000000000000000366731500667630300151760ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.3 // protoc v5.27.1 // source: cel/expr/eval.proto package expr import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type EvalState struct { state protoimpl.MessageState `protogen:"open.v1"` Values []*ExprValue `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` Results []*EvalState_Result `protobuf:"bytes,3,rep,name=results,proto3" json:"results,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *EvalState) Reset() { *x = EvalState{} mi := &file_cel_expr_eval_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *EvalState) String() string { return protoimpl.X.MessageStringOf(x) } func (*EvalState) ProtoMessage() {} func (x *EvalState) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_eval_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EvalState.ProtoReflect.Descriptor instead. func (*EvalState) Descriptor() ([]byte, []int) { return file_cel_expr_eval_proto_rawDescGZIP(), []int{0} } func (x *EvalState) GetValues() []*ExprValue { if x != nil { return x.Values } return nil } func (x *EvalState) GetResults() []*EvalState_Result { if x != nil { return x.Results } return nil } type ExprValue struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Kind: // // *ExprValue_Value // *ExprValue_Error // *ExprValue_Unknown Kind isExprValue_Kind `protobuf_oneof:"kind"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ExprValue) Reset() { *x = ExprValue{} mi := &file_cel_expr_eval_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ExprValue) String() string { return protoimpl.X.MessageStringOf(x) } func (*ExprValue) ProtoMessage() {} func (x *ExprValue) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_eval_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ExprValue.ProtoReflect.Descriptor instead. func (*ExprValue) Descriptor() ([]byte, []int) { return file_cel_expr_eval_proto_rawDescGZIP(), []int{1} } func (x *ExprValue) GetKind() isExprValue_Kind { if x != nil { return x.Kind } return nil } func (x *ExprValue) GetValue() *Value { if x != nil { if x, ok := x.Kind.(*ExprValue_Value); ok { return x.Value } } return nil } func (x *ExprValue) GetError() *ErrorSet { if x != nil { if x, ok := x.Kind.(*ExprValue_Error); ok { return x.Error } } return nil } func (x *ExprValue) GetUnknown() *UnknownSet { if x != nil { if x, ok := x.Kind.(*ExprValue_Unknown); ok { return x.Unknown } } return nil } type isExprValue_Kind interface { isExprValue_Kind() } type ExprValue_Value struct { Value *Value `protobuf:"bytes,1,opt,name=value,proto3,oneof"` } type ExprValue_Error struct { Error *ErrorSet `protobuf:"bytes,2,opt,name=error,proto3,oneof"` } type ExprValue_Unknown struct { Unknown *UnknownSet `protobuf:"bytes,3,opt,name=unknown,proto3,oneof"` } func (*ExprValue_Value) isExprValue_Kind() {} func (*ExprValue_Error) isExprValue_Kind() {} func (*ExprValue_Unknown) isExprValue_Kind() {} type ErrorSet struct { state protoimpl.MessageState `protogen:"open.v1"` Errors []*Status `protobuf:"bytes,1,rep,name=errors,proto3" json:"errors,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ErrorSet) Reset() { *x = ErrorSet{} mi := &file_cel_expr_eval_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ErrorSet) String() string { return protoimpl.X.MessageStringOf(x) } func (*ErrorSet) ProtoMessage() {} func (x *ErrorSet) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_eval_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ErrorSet.ProtoReflect.Descriptor instead. func (*ErrorSet) Descriptor() ([]byte, []int) { return file_cel_expr_eval_proto_rawDescGZIP(), []int{2} } func (x *ErrorSet) GetErrors() []*Status { if x != nil { return x.Errors } return nil } type Status struct { state protoimpl.MessageState `protogen:"open.v1"` Code int32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` Message string `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` Details []*anypb.Any `protobuf:"bytes,3,rep,name=details,proto3" json:"details,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Status) Reset() { *x = Status{} mi := &file_cel_expr_eval_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *Status) String() string { return protoimpl.X.MessageStringOf(x) } func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_eval_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { return file_cel_expr_eval_proto_rawDescGZIP(), []int{3} } func (x *Status) GetCode() int32 { if x != nil { return x.Code } return 0 } func (x *Status) GetMessage() string { if x != nil { return x.Message } return "" } func (x *Status) GetDetails() []*anypb.Any { if x != nil { return x.Details } return nil } type UnknownSet struct { state protoimpl.MessageState `protogen:"open.v1"` Exprs []int64 `protobuf:"varint,1,rep,packed,name=exprs,proto3" json:"exprs,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *UnknownSet) Reset() { *x = UnknownSet{} mi := &file_cel_expr_eval_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *UnknownSet) String() string { return protoimpl.X.MessageStringOf(x) } func (*UnknownSet) ProtoMessage() {} func (x *UnknownSet) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_eval_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use UnknownSet.ProtoReflect.Descriptor instead. func (*UnknownSet) Descriptor() ([]byte, []int) { return file_cel_expr_eval_proto_rawDescGZIP(), []int{4} } func (x *UnknownSet) GetExprs() []int64 { if x != nil { return x.Exprs } return nil } type EvalState_Result struct { state protoimpl.MessageState `protogen:"open.v1"` Expr int64 `protobuf:"varint,1,opt,name=expr,proto3" json:"expr,omitempty"` Value int64 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *EvalState_Result) Reset() { *x = EvalState_Result{} mi := &file_cel_expr_eval_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *EvalState_Result) String() string { return protoimpl.X.MessageStringOf(x) } func (*EvalState_Result) ProtoMessage() {} func (x *EvalState_Result) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_eval_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EvalState_Result.ProtoReflect.Descriptor instead. func (*EvalState_Result) Descriptor() ([]byte, []int) { return file_cel_expr_eval_proto_rawDescGZIP(), []int{0, 0} } func (x *EvalState_Result) GetExpr() int64 { if x != nil { return x.Expr } return 0 } func (x *EvalState_Result) GetValue() int64 { if x != nil { return x.Value } return 0 } var File_cel_expr_eval_proto protoreflect.FileDescriptor var file_cel_expr_eval_proto_rawDesc = []byte{ 0x0a, 0x13, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x65, 0x76, 0x61, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x14, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x01, 0x0a, 0x09, 0x45, 0x76, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x76, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x73, 0x1a, 0x32, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x65, 0x78, 0x70, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x09, 0x45, 0x78, 0x70, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x30, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x74, 0x48, 0x00, 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x34, 0x0a, 0x08, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x12, 0x28, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x22, 0x66, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x22, 0x22, 0x0a, 0x0a, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x53, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x78, 0x70, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x03, 0x52, 0x05, 0x65, 0x78, 0x70, 0x72, 0x73, 0x42, 0x2c, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x42, 0x09, 0x45, 0x76, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0c, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_eval_proto_rawDescOnce sync.Once file_cel_expr_eval_proto_rawDescData = file_cel_expr_eval_proto_rawDesc ) func file_cel_expr_eval_proto_rawDescGZIP() []byte { file_cel_expr_eval_proto_rawDescOnce.Do(func() { file_cel_expr_eval_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_eval_proto_rawDescData) }) return file_cel_expr_eval_proto_rawDescData } var file_cel_expr_eval_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_cel_expr_eval_proto_goTypes = []any{ (*EvalState)(nil), // 0: cel.expr.EvalState (*ExprValue)(nil), // 1: cel.expr.ExprValue (*ErrorSet)(nil), // 2: cel.expr.ErrorSet (*Status)(nil), // 3: cel.expr.Status (*UnknownSet)(nil), // 4: cel.expr.UnknownSet (*EvalState_Result)(nil), // 5: cel.expr.EvalState.Result (*Value)(nil), // 6: cel.expr.Value (*anypb.Any)(nil), // 7: google.protobuf.Any } var file_cel_expr_eval_proto_depIdxs = []int32{ 1, // 0: cel.expr.EvalState.values:type_name -> cel.expr.ExprValue 5, // 1: cel.expr.EvalState.results:type_name -> cel.expr.EvalState.Result 6, // 2: cel.expr.ExprValue.value:type_name -> cel.expr.Value 2, // 3: cel.expr.ExprValue.error:type_name -> cel.expr.ErrorSet 4, // 4: cel.expr.ExprValue.unknown:type_name -> cel.expr.UnknownSet 3, // 5: cel.expr.ErrorSet.errors:type_name -> cel.expr.Status 7, // 6: cel.expr.Status.details:type_name -> google.protobuf.Any 7, // [7:7] is the sub-list for method output_type 7, // [7:7] is the sub-list for method input_type 7, // [7:7] is the sub-list for extension type_name 7, // [7:7] is the sub-list for extension extendee 0, // [0:7] is the sub-list for field type_name } func init() { file_cel_expr_eval_proto_init() } func file_cel_expr_eval_proto_init() { if File_cel_expr_eval_proto != nil { return } file_cel_expr_value_proto_init() file_cel_expr_eval_proto_msgTypes[1].OneofWrappers = []any{ (*ExprValue_Value)(nil), (*ExprValue_Error)(nil), (*ExprValue_Unknown)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_eval_proto_rawDesc, NumEnums: 0, NumMessages: 6, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_eval_proto_goTypes, DependencyIndexes: file_cel_expr_eval_proto_depIdxs, MessageInfos: file_cel_expr_eval_proto_msgTypes, }.Build() File_cel_expr_eval_proto = out.File file_cel_expr_eval_proto_rawDesc = nil file_cel_expr_eval_proto_goTypes = nil file_cel_expr_eval_proto_depIdxs = nil } cel-spec-0.24.0/explain.pb.go000077500000000000000000000171601500667630300156750ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 // protoc v3.21.5 // source: cel/expr/explain.proto package expr import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // Deprecated: Do not use. type Explain struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Values []*Value `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` ExprSteps []*Explain_ExprStep `protobuf:"bytes,2,rep,name=expr_steps,json=exprSteps,proto3" json:"expr_steps,omitempty"` } func (x *Explain) Reset() { *x = Explain{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_explain_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Explain) String() string { return protoimpl.X.MessageStringOf(x) } func (*Explain) ProtoMessage() {} func (x *Explain) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_explain_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Explain.ProtoReflect.Descriptor instead. func (*Explain) Descriptor() ([]byte, []int) { return file_cel_expr_explain_proto_rawDescGZIP(), []int{0} } func (x *Explain) GetValues() []*Value { if x != nil { return x.Values } return nil } func (x *Explain) GetExprSteps() []*Explain_ExprStep { if x != nil { return x.ExprSteps } return nil } type Explain_ExprStep struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` ValueIndex int32 `protobuf:"varint,2,opt,name=value_index,json=valueIndex,proto3" json:"value_index,omitempty"` } func (x *Explain_ExprStep) Reset() { *x = Explain_ExprStep{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_explain_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Explain_ExprStep) String() string { return protoimpl.X.MessageStringOf(x) } func (*Explain_ExprStep) ProtoMessage() {} func (x *Explain_ExprStep) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_explain_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Explain_ExprStep.ProtoReflect.Descriptor instead. func (*Explain_ExprStep) Descriptor() ([]byte, []int) { return file_cel_expr_explain_proto_rawDescGZIP(), []int{0, 0} } func (x *Explain_ExprStep) GetId() int64 { if x != nil { return x.Id } return 0 } func (x *Explain_ExprStep) GetValueIndex() int32 { if x != nil { return x.ValueIndex } return 0 } var File_cel_expr_explain_proto protoreflect.FileDescriptor var file_cel_expr_explain_proto_rawDesc = []byte{ 0x0a, 0x16, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x65, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x1a, 0x14, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x01, 0x0a, 0x07, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x12, 0x27, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x72, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x53, 0x74, 0x65, 0x70, 0x52, 0x09, 0x65, 0x78, 0x70, 0x72, 0x53, 0x74, 0x65, 0x70, 0x73, 0x1a, 0x3b, 0x0a, 0x08, 0x45, 0x78, 0x70, 0x72, 0x53, 0x74, 0x65, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x02, 0x18, 0x01, 0x42, 0x2f, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x42, 0x0c, 0x45, 0x78, 0x70, 0x6c, 0x61, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0c, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_explain_proto_rawDescOnce sync.Once file_cel_expr_explain_proto_rawDescData = file_cel_expr_explain_proto_rawDesc ) func file_cel_expr_explain_proto_rawDescGZIP() []byte { file_cel_expr_explain_proto_rawDescOnce.Do(func() { file_cel_expr_explain_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_explain_proto_rawDescData) }) return file_cel_expr_explain_proto_rawDescData } var file_cel_expr_explain_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_cel_expr_explain_proto_goTypes = []interface{}{ (*Explain)(nil), // 0: cel.expr.Explain (*Explain_ExprStep)(nil), // 1: cel.expr.Explain.ExprStep (*Value)(nil), // 2: cel.expr.Value } var file_cel_expr_explain_proto_depIdxs = []int32{ 2, // 0: cel.expr.Explain.values:type_name -> cel.expr.Value 1, // 1: cel.expr.Explain.expr_steps:type_name -> cel.expr.Explain.ExprStep 2, // [2:2] is the sub-list for method output_type 2, // [2:2] is the sub-list for method input_type 2, // [2:2] is the sub-list for extension type_name 2, // [2:2] is the sub-list for extension extendee 0, // [0:2] is the sub-list for field type_name } func init() { file_cel_expr_explain_proto_init() } func file_cel_expr_explain_proto_init() { if File_cel_expr_explain_proto != nil { return } file_cel_expr_value_proto_init() if !protoimpl.UnsafeEnabled { file_cel_expr_explain_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Explain); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_explain_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Explain_ExprStep); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_explain_proto_rawDesc, NumEnums: 0, NumMessages: 2, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_explain_proto_goTypes, DependencyIndexes: file_cel_expr_explain_proto_depIdxs, MessageInfos: file_cel_expr_explain_proto_msgTypes, }.Build() File_cel_expr_explain_proto = out.File file_cel_expr_explain_proto_rawDesc = nil file_cel_expr_explain_proto_goTypes = nil file_cel_expr_explain_proto_depIdxs = nil } cel-spec-0.24.0/go.mod000066400000000000000000000003471500667630300144100ustar00rootroot00000000000000module cel.dev/expr go 1.22.0 toolchain go1.23.0 require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7 google.golang.org/protobuf v1.34.2 ) require github.com/google/go-cmp v0.6.0 // indirect cel-spec-0.24.0/go.sum000066400000000000000000000011251500667630300144300ustar00rootroot00000000000000github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7 h1:2035KHhUv+EpyB+hWgJnaWKJOdX1E95w2S8Rr4uWKTs= google.golang.org/genproto/googleapis/rpc v0.0.0-20240826202546-f6391c0de4c7/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= cel-spec-0.24.0/proto/000077500000000000000000000000001500667630300144415ustar00rootroot00000000000000cel-spec-0.24.0/proto/buf.yaml000066400000000000000000000004221500667630300160770ustar00rootroot00000000000000version: v1 deps: - buf.build/googleapis/googleapis build: excludes: [test, dev] lint: ignore: - cel/expr/conformance/proto2/test_all_types.proto - cel/expr/conformance/proto3/test_all_types.proto except: - PACKAGE_VERSION_SUFFIX - ENUM_VALUE_PREFIX cel-spec-0.24.0/proto/cel/000077500000000000000000000000001500667630300152045ustar00rootroot00000000000000cel-spec-0.24.0/proto/cel/expr/000077500000000000000000000000001500667630300161625ustar00rootroot00000000000000cel-spec-0.24.0/proto/cel/expr/BUILD.bazel000066400000000000000000000153171500667630300200470ustar00rootroot00000000000000package(default_visibility = ["//visibility:public"]) ############################################################################## # Common ############################################################################## load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library") proto_library( name = "expr_proto", srcs = [ "checked.proto", "eval.proto", "explain.proto", "syntax.proto", "value.proto", ], strip_import_prefix = "/proto", deps = [ "@com_google_googleapis//google/rpc:status_proto", "@com_google_protobuf//:any_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", "@com_google_protobuf//:struct_proto", "@com_google_protobuf//:timestamp_proto", ], ) proto_library( name = "syntax_proto", srcs = [ "syntax.proto", ], strip_import_prefix = "/proto", deps = [ "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:struct_proto", "@com_google_protobuf//:timestamp_proto", ], ) proto_library( name = "checked_proto", srcs = [ "checked.proto", ], strip_import_prefix = "/proto", deps = [ ":syntax_proto", "@com_google_protobuf//:empty_proto", "@com_google_protobuf//:struct_proto", ], ) proto_library( name = "value_proto", srcs = [ "value.proto", ], strip_import_prefix = "/proto", deps = [ "@com_google_protobuf//:any_proto", "@com_google_protobuf//:struct_proto", ], ) proto_library( name = "eval_proto", srcs = [ "eval.proto", ], strip_import_prefix = "/proto", deps = [ ":value_proto", "@com_google_protobuf//:any_proto", ], ) proto_library( name = "explain_proto", srcs = [ "explain.proto", ], deprecation = "Use EvalState instead.", strip_import_prefix = "/proto", deps = [ ":value_proto", ], ) ############################################################################## # Java ############################################################################## load("@com_google_protobuf//bazel:java_proto_library.bzl", "java_proto_library") load("@com_google_protobuf//bazel:java_lite_proto_library.bzl", "java_lite_proto_library") java_proto_library( name = "expr_java_proto", deps = [":expr_proto"], ) java_lite_proto_library( name = "expr_java_proto_lite", deps = [":expr_proto"], ) java_proto_library( name = "syntax_java_proto", deps = [":syntax_proto"], ) java_lite_proto_library( name = "syntax_java_proto_lite", deps = [":syntax_proto"], ) java_proto_library( name = "checked_java_proto", deps = [":checked_proto"], ) java_lite_proto_library( name = "checked_java_proto_lite", deps = [":checked_proto"], ) java_proto_library( name = "value_java_proto", deps = [":value_proto"], ) java_lite_proto_library( name = "value_java_proto_lite", deps = [":value_proto"], ) java_proto_library( name = "eval_java_proto", deps = [":eval_proto"], ) java_lite_proto_library( name = "eval_java_proto_lite", deps = [":eval_proto"], ) java_proto_library( name = "explain_java_proto", deprecation = "Use EvalState instead.", deps = [":explain_proto"], ) ############################################################################### ## Go ############################################################################### load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") go_proto_library( name = "expr_go_proto", importpath = "cel.dev/expr", protos = [":expr_proto"], deps = [ "@org_golang_google_genproto_googleapis_rpc//status:go_default_library", ], ) go_proto_library( name = "syntax_go_proto", importpath = "cel.dev/expr", protos = [":syntax_proto"], ) go_proto_library( name = "checked_go_proto", embed = [":syntax_go_proto"], importpath = "cel.dev/expr", protos = [":checked_proto"], ) go_proto_library( name = "value_go_proto", importpath = "cel.dev/expr", protos = [":value_proto"], ) go_proto_library( name = "eval_go_proto", embed = [":value_go_proto"], importpath = "cel.dev/expr", protos = [":eval_proto"], deps = [ "@org_golang_google_genproto_googleapis_rpc//status:go_default_library", ], ) go_proto_library( name = "explain_go_proto", deprecation = "Use EvalState instead.", embed = [":value_go_proto"], importpath = "cel.dev/expr", protos = [":explain_proto"], ) ############################################################################### ## C++ ############################################################################### # Note: cc_proto_library cannot generate a target for expr_proto due to the subtargets # defined below load("@com_google_protobuf//bazel:cc_proto_library.bzl", "cc_proto_library") cc_proto_library( name = "syntax_cc_proto", deps = [":syntax_proto"], ) cc_proto_library( name = "checked_cc_proto", deps = [":checked_proto"], ) cc_proto_library( name = "value_cc_proto", deps = [":value_proto"], ) cc_proto_library( name = "eval_cc_proto", deps = [":eval_proto"], ) cc_proto_library( name = "explain_cc_proto", deprecation = "Use EvalState instead.", deps = [":explain_proto"], ) ############################################################################### ## upb ############################################################################### load("@com_google_protobuf//bazel:upb_c_proto_library.bzl", "upb_c_proto_library") upb_c_proto_library( name = "syntax_upb_proto", deps = [":syntax_proto"], ) upb_c_proto_library( name = "checked_upb_proto", deps = [":checked_proto"], ) upb_c_proto_library( name = "value_upb_proto", deps = [":value_proto"], ) upb_c_proto_library( name = "eval_upb_proto", deps = [":eval_proto"], ) upb_c_proto_library( name = "explain_upb_proto", deprecation = "Use EvalState instead.", deps = [":explain_proto"], ) ############################################################################### ## Python ############################################################################### load("@com_google_protobuf//bazel:py_proto_library.bzl", "py_proto_library") py_proto_library( name = "syntax_py_pb2", deps = [":syntax_proto"], ) py_proto_library( name = "checked_py_pb2", deps = [":checked_proto"], ) py_proto_library( name = "value_py_pb2", deps = [":value_proto"], ) py_proto_library( name = "eval_py_pb2", deps = [":eval_proto"], ) py_proto_library( name = "explain_py_pb2", deprecation = "Use EvalState instead.", deps = [":explain_proto"], ) cel-spec-0.24.0/proto/cel/expr/checked.proto000066400000000000000000000330511500667630300206370ustar00rootroot00000000000000// Copyright 2023 Google LLC // // 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. syntax = "proto3"; package cel.expr; import "cel/expr/syntax.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/struct.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr"; option java_multiple_files = true; option java_outer_classname = "DeclProto"; option java_package = "dev.cel.expr"; // Protos for representing CEL declarations and typed checked expressions. // A CEL expression which has been successfully type checked. message CheckedExpr { // A map from expression ids to resolved references. // // The following entries are in this table: // // - An Ident or Select expression is represented here if it resolves to a // declaration. For instance, if `a.b.c` is represented by // `select(select(id(a), b), c)`, and `a.b` resolves to a declaration, // while `c` is a field selection, then the reference is attached to the // nested select expression (but not to the id or or the outer select). // In turn, if `a` resolves to a declaration and `b.c` are field selections, // the reference is attached to the ident expression. // - Every Call expression has an entry here, identifying the function being // called. // - Every CreateStruct expression for a message has an entry, identifying // the message. map reference_map = 2; // A map from expression ids to types. // // Every expression node which has a type different than DYN has a mapping // here. If an expression has type DYN, it is omitted from this map to save // space. map type_map = 3; // The source info derived from input that generated the parsed `expr` and // any optimizations made during the type-checking pass. SourceInfo source_info = 5; // The expr version indicates the major / minor version number of the `expr` // representation. // // The most common reason for a version change will be to indicate to the CEL // runtimes that transformations have been performed on the expr during static // analysis. In some cases, this will save the runtime the work of applying // the same or similar transformations prior to evaluation. string expr_version = 6; // The checked expression. Semantically equivalent to the parsed `expr`, but // may have structural differences. Expr expr = 4; } // Represents a CEL type. message Type { // List type with typed elements, e.g. `list`. message ListType { // The element type. Type elem_type = 1; } // Map type with parameterized key and value types, e.g. `map`. message MapType { // The type of the key. Type key_type = 1; // The type of the value. Type value_type = 2; } // Function type with result and arg types. message FunctionType { // Result type of the function. Type result_type = 1; // Argument types of the function. repeated Type arg_types = 2; } // Application defined abstract type. message AbstractType { // The fully qualified name of this abstract type. string name = 1; // Parameter types for this abstract type. repeated Type parameter_types = 2; } // CEL primitive types. enum PrimitiveType { // Unspecified type. PRIMITIVE_TYPE_UNSPECIFIED = 0; // Boolean type. BOOL = 1; // Int64 type. // // 32-bit integer values are widened to int64. INT64 = 2; // Uint64 type. // // 32-bit unsigned integer values are widened to uint64. UINT64 = 3; // Double type. // // 32-bit float values are widened to double values. DOUBLE = 4; // String type. STRING = 5; // Bytes type. BYTES = 6; } // Well-known protobuf types treated with first-class support in CEL. enum WellKnownType { // Unspecified type. WELL_KNOWN_TYPE_UNSPECIFIED = 0; // Well-known protobuf.Any type. // // Any types are a polymorphic message type. During type-checking they are // treated like `DYN` types, but at runtime they are resolved to a specific // message type specified at evaluation time. ANY = 1; // Well-known protobuf.Timestamp type, internally referenced as `timestamp`. TIMESTAMP = 2; // Well-known protobuf.Duration type, internally referenced as `duration`. DURATION = 3; } // The kind of type. oneof type_kind { // Dynamic type. google.protobuf.Empty dyn = 1; // Null value. google.protobuf.NullValue null = 2; // Primitive types: `true`, `1u`, `-2.0`, `'string'`, `b'bytes'`. PrimitiveType primitive = 3; // Wrapper of a primitive type, e.g. `google.protobuf.Int64Value`. PrimitiveType wrapper = 4; // Well-known protobuf type such as `google.protobuf.Timestamp`. WellKnownType well_known = 5; // Parameterized list with elements of `list_type`, e.g. `list`. ListType list_type = 6; // Parameterized map with typed keys and values. MapType map_type = 7; // Function type. FunctionType function = 8; // Protocol buffer message type. // // The `message_type` string specifies the qualified message type name. For // example, `google.type.PhoneNumber`. string message_type = 9; // Type param type. // // The `type_param` string specifies the type parameter name, e.g. `list` // would be a `list_type` whose element type was a `type_param` type // named `E`. string type_param = 10; // Type type. // // The `type` value specifies the target type. e.g. int is type with a // target type of `Primitive.INT64`. Type type = 11; // Error type. // // During type-checking if an expression is an error, its type is propagated // as the `ERROR` type. This permits the type-checker to discover other // errors present in the expression. google.protobuf.Empty error = 12; // Abstract, application defined type. // // An abstract type has no accessible field names, and it can only be // inspected via helper / member functions. AbstractType abstract_type = 14; } } // Represents a declaration of a named value or function. // // A declaration is part of the contract between the expression, the agent // evaluating that expression, and the caller requesting evaluation. message Decl { // Identifier declaration which specifies its type and optional `Expr` value. // // An identifier without a value is a declaration that must be provided at // evaluation time. An identifier with a value should resolve to a constant, // but may be used in conjunction with other identifiers bound at evaluation // time. message IdentDecl { // Required. The type of the identifier. Type type = 1; // The constant value of the identifier. If not specified, the identifier // must be supplied at evaluation time. Constant value = 2; // Documentation string for the identifier. // // Provide a brief description of what the variable represents and whether // there are any constraints on the formatting or supported value range. // // Examples: // // 'request.auth.principal' - string which uniquely identifies an // authenticated principal. For JSON Web Tokens (JWTs), the principal // is the combination of the issuer ('iss') and subject ('sub') token // fields concatenated by a forward slash: iss + `/` + sub. // // 'min_cpus' - integer value indicates the minimum number of CPUs // required for a compute cluster. The 'min_cpus' value must be // greater than zero and less than 'max_cpus' or 64 whichever is less. string doc = 3; } // Function declaration specifies one or more overloads which indicate the // function's parameter types and return type. // // Functions have no observable side-effects (there may be side-effects like // logging which are not observable from CEL). message FunctionDecl { // An overload indicates a function's parameter types and return type, and // may optionally include a function body described in terms of // [Expr][cel.expr.Expr] values. // // Functions overloads are declared in either a function or method // call-style. For methods, the `params[0]` is the expected type of the // target receiver. // // Overloads must have non-overlapping argument types after erasure of all // parameterized type variables (similar as type erasure in Java). message Overload { // Required. Globally unique overload name of the function which reflects // the function name and argument types. // // This will be used by a [Reference][cel.expr.Reference] to // indicate the `overload_id` that was resolved for the function `name`. string overload_id = 1; // List of function parameter [Type][cel.expr.Type] values. // // Param types are disjoint after generic type parameters have been // replaced with the type `DYN`. Since the `DYN` type is compatible with // any other type, this means that if `A` is a type parameter, the // function types `int` and `int` are not disjoint. Likewise, // `map` is not disjoint from `map`. // // When the `result_type` of a function is a generic type param, the // type param name also appears as the `type` of on at least one params. repeated Type params = 2; // The type param names associated with the function declaration. // // For example, `function ex(K key, map map) : V` would yield // the type params of `K, V`. repeated string type_params = 3; // Required. The result type of the function. For example, the operator // `string.isEmpty()` would have `result_type` of `kind: BOOL`. Type result_type = 4; // Whether the function is to be used in a method call-style `x.f(...)` // of a function call-style `f(x, ...)`. // // For methods, the first parameter declaration, `params[0]` is the // expected type of the target receiver. bool is_instance_function = 5; // Documentation string for the overload. // // Provide examples of the overload behavior, preferring to use literal // values as input with a comment on the return value. // // Examples: // // // Determine whether a value of type exists within a list. // 2 in [1, 2, 3] // returns true // // // Determine whether a key of type exists within a map. // 'hello' in {'hi': 'you', 'hello': 'there'} // returns true // 'help' in {'hi': 'you', 'hello': 'there'} // returns false // // // Take the substring of a string starting at a specific character // // offset (inclusive). // "tacocat".substring(1) // returns "acocat" // "tacocat".substring(20) // error // // // Take the substring of a string starting at a specific character // // offset (inclusive) and ending at the given offset (exclusive). // "tacocat".substring(1, 6) // returns "acoca" string doc = 6; } // Required. List of function overloads, must contain at least one overload. repeated Overload overloads = 1; // Documentation string for the function that indicates the general purpose // of the function and its behavior. // // Documentation strings for the function should be general purpose with // specific examples provided in the overload doc string. // // Examples: // // The 'in' operator tests whether an item exists in a collection. // // The 'substring' function returns a substring of a target string. string doc = 2; } // The fully qualified name of the declaration. // // Declarations are organized in containers and this represents the full path // to the declaration in its container, as in `cel.expr.Decl`. // // Declarations used as // [FunctionDecl.Overload][cel.expr.Decl.FunctionDecl.Overload] // parameters may or may not have a name depending on whether the overload is // function declaration or a function definition containing a result // [Expr][cel.expr.Expr]. string name = 1; // Required. The declaration kind. oneof decl_kind { // Identifier declaration. IdentDecl ident = 2; // Function declaration. FunctionDecl function = 3; } } // Describes a resolved reference to a declaration. message Reference { // The fully qualified name of the declaration. string name = 1; // For references to functions, this is a list of `Overload.overload_id` // values which match according to typing rules. // // If the list has more than one element, overload resolution among the // presented candidates must happen at runtime because of dynamic types. The // type checker attempts to narrow down this list as much as possible. // // Empty if this is not a reference to a // [Decl.FunctionDecl][cel.expr.Decl.FunctionDecl]. repeated string overload_id = 3; // For references to constants, this may contain the value of the // constant if known at compile time. Constant value = 4; } cel-spec-0.24.0/proto/cel/expr/conformance/000077500000000000000000000000001500667630300204545ustar00rootroot00000000000000cel-spec-0.24.0/proto/cel/expr/conformance/BUILD.bazel000066400000000000000000000041011500667630300223260ustar00rootroot00000000000000package(default_visibility = ["//visibility:public"]) ############################################################################## # Common ############################################################################## proto_library( name = "conformance_service_proto", srcs = ["conformance_service.proto"], strip_import_prefix = "/proto", deps = [ "//proto/cel/expr:checked_proto", "//proto/cel/expr:eval_proto", "//proto/cel/expr:syntax_proto", "@com_google_googleapis//google/rpc:status_proto", ], ) proto_library( name = "env_config_proto", srcs = ["env_config.proto"], strip_import_prefix = "/proto", deps = [ "//proto/cel/expr:checked_proto", "@com_google_protobuf//:descriptor_proto", "@com_google_protobuf//:struct_proto", ], ) ############################################################################## # Java ############################################################################## java_proto_library( name = "conformance_service_java_proto", deps = [":conformance_service_proto"], ) ############################################################################### ## Go ############################################################################### load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") go_proto_library( name = "conformance_service_go_proto", importpath = "cel.dev/expr/conformance", protos = [":conformance_service_proto"], deps = [ "//proto/cel/expr:expr_go_proto", "@org_golang_google_genproto_googleapis_rpc//status:go_default_library", ], ) go_proto_library( name = "env_config_go_proto", importpath = "cel.dev/expr/conformance", protos = [":env_config_proto"], deps = [ "//proto/cel/expr:expr_go_proto", ] ) ############################################################################### ## C++ ############################################################################### cc_proto_library( name = "conformance_service_cc_proto", deps = [":conformance_service_proto"], ) cel-spec-0.24.0/proto/cel/expr/conformance/conformance_service.proto000066400000000000000000000135421500667630300255600ustar00rootroot00000000000000// Copyright 2022 Google LLC // // 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. syntax = "proto3"; package cel.expr.conformance; import "cel/expr/checked.proto"; import "cel/expr/eval.proto"; import "cel/expr/syntax.proto"; import "google/rpc/status.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr/conformance"; option java_multiple_files = true; option java_outer_classname = "ConformanceServiceProto"; option java_package = "dev.cel.expr.conformance"; // Access a CEL implementation from another process or machine. // A CEL implementation is decomposed as a parser, a static checker, // and an evaluator. Every CEL implementation is expected to provide // a server for this API. The API will be used for conformance testing // and other utilities. service ConformanceService { // Transforms CEL source text into a parsed representation. rpc Parse(ParseRequest) returns (ParseResponse) { } // Runs static checks on a parsed CEL representation and return // an annotated representation, or a set of issues. rpc Check(CheckRequest) returns (CheckResponse) { } // Evaluates a parsed or annotation CEL representation given // values of external bindings. rpc Eval(EvalRequest) returns (EvalResponse) { } } // Request message for the Parse method. message ParseRequest { // Required. Source text in CEL syntax. string cel_source = 1; // Tag for version of CEL syntax, for future use. string syntax_version = 2; // File or resource for source text, used in [SourceInfo][google.api.SourceInfo]. string source_location = 3; // Prevent macro expansion. See "Macros" in Language Defiinition. bool disable_macros = 4; } // Response message for the Parse method. message ParseResponse { // The parsed representation, or unset if parsing failed. cel.expr.ParsedExpr parsed_expr = 1; // Any number of issues with [StatusDetails][] as the details. repeated google.rpc.Status issues = 2; } // Request message for the Check method. message CheckRequest { // Required. The parsed representation of the CEL program. cel.expr.ParsedExpr parsed_expr = 1; // Declarations of types for external variables and functions. // Required if program uses external variables or functions // not in the default environment. repeated cel.expr.Decl type_env = 2; // The protocol buffer context. See "Name Resolution" in the // Language Definition. string container = 3; // If true, use only the declarations in [type_env][google.api.expr.conformance.v1alpha1.CheckRequest.type_env]. If false (default), // add declarations for the standard definitions to the type environment. See // "Standard Definitions" in the Language Definition. bool no_std_env = 4; } // Response message for the Check method. message CheckResponse { // The annotated representation, or unset if checking failed. cel.expr.CheckedExpr checked_expr = 1; // Any number of issues with [StatusDetails][] as the details. repeated google.rpc.Status issues = 2; } // Request message for the Eval method. message EvalRequest { // Required. Either the parsed or annotated representation of the CEL program. oneof expr_kind { // Evaluate based on the parsed representation. cel.expr.ParsedExpr parsed_expr = 1; // Evaluate based on the checked representation. cel.expr.CheckedExpr checked_expr = 2; } // Bindings for the external variables. The types SHOULD be compatible // with the type environment in [CheckRequest][google.api.expr.conformance.v1alpha1.CheckRequest], if checked. map bindings = 3; // SHOULD be the same container as used in [CheckRequest][google.api.expr.conformance.v1alpha1.CheckRequest], if checked. string container = 4; } // Response message for the Eval method. message EvalResponse { // The execution result, or unset if execution couldn't start. cel.expr.ExprValue result = 1; // Any number of issues with [StatusDetails][] as the details. // Note that CEL execution errors are reified into [ExprValue][]. // Nevertheless, we'll allow out-of-band issues to be raised, // which also makes the replies more regular. repeated google.rpc.Status issues = 2; } // A specific position in source. message SourcePosition { // The source location name (e.g. file name). string location = 1; // The UTF-8 code unit offset. int32 offset = 2; // The 1-based index of the starting line in the source text // where the issue occurs, or 0 if unknown. int32 line = 3; // The 0-based index of the starting position within the line of source text // where the issue occurs. Only meaningful if line is nonzero. int32 column = 4; } // Warnings or errors in service execution are represented by // [google.rpc.Status][google.rpc.Status] messages, with the following message // in the details field. message IssueDetails { // Severities of issues. enum Severity { // An unspecified severity. SEVERITY_UNSPECIFIED = 0; // Deprecation issue for statements and method that may no longer be // supported or maintained. DEPRECATION = 1; // Warnings such as: unused variables. WARNING = 2; // Errors such as: unmatched curly braces or variable redefinition. ERROR = 3; } // The severity of the issue. Severity severity = 1; // Position in the source, if known. SourcePosition position = 2; // Expression ID from [Expr][], 0 if unknown. int64 id = 3; } cel-spec-0.24.0/proto/cel/expr/conformance/env_config.proto000066400000000000000000000147361500667630300236710ustar00rootroot00000000000000// Copyright 2025 Google LLC // // 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. syntax = "proto3"; package cel.expr.conformance; import "cel/expr/checked.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/descriptor.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr/conformance"; option java_multiple_files = true; option java_outer_classname = "EnvironmentProto"; option java_package = "cel.dev.expr.conformance"; // Representation of a CEL Environment, defining what features and extensions // are available for conformance testing. message Environment { // Name of the environment string name = 1; // Description for the current environment string description = 2; // Sets the namespace (container) for the expression. // This is used to simplify resolution. // For example with container // `google.rpc.context` // an identifier of `google.rpc.context.AttributeContext` could be referred // to simply as `AttributeContext` in the CEL expression. string container = 3; // Import represents a type name that will be abbreviated by its simple name // making it easier to reference simple type names from packages other than // the expression container. // For ex: // Import{name: 'google.rpc.Status'} // The above import will ensure that `google.rpc.Status` is available by the // simple name `Status` within CEL expressions. message Import { // Qualified type name which will be abbreviated string name = 1; } // List of abbreviations to be added to the CEL environment repeated Import imports = 4; // Set of options to subset a subsettable library LibrarySubset stdlib = 5; // List of extensions to enable in the CEL environment. repeated Extension extensions = 6; // ContextVariable represents a message type to be made available as a // context variable to the CEL environment. message ContextVariable { // Fully qualified type name of the context proto. string type_name = 1; } // If set, adds a context declaration from a proto message. // // Context messages have all of their top-level fields available as variables // in the type checker. ContextVariable context_variable = 7; // List of declarations to be configured in the CEL environment. // // Note: The CEL environment can be configured with either the // context_variable or a set of ident_decls provided as part of declarations. // Providing both will result in an error. repeated cel.expr.Decl declarations = 8; // List of validators for validating the parsed ast. repeated Validator validators = 9; // List of feature flags to be enabled or disabled. repeated Feature features = 10; // Disables including the declarations from the standard CEL environment. // // NOTE: Do not disable the standard CEL declarations unless you are aware of // the implications and have discussed your use case on cel-discuss@ // or with the members of the cel-governance-team@ // // Deprecated: Use LibrarySubset to disable standard cel declarations instead: // stdlib = LibrarySubset{ disable: true } bool disable_standard_cel_declarations = 11; // If provided, uses the provided FileDescriptorSet to extend types available // the CEL expression. All "well-known" protobuf messages (google.protobuf.*) // are known to the CEL compiler, but all others must be provided for type // checking. google.protobuf.FileDescriptorSet message_type_extension = 12; // When macro call tracking is enabled, the resulting SourceInfo in the // CheckedExpr will contain a collection of expressions representing the // function calls which were replaced by macros. // // Deprecated: Use Feature to enable macro call tracking // Feature{ name: "cel.feature.macro_call_tracking", enabled: true } bool enable_macro_call_tracking = 13; } // Represents a named validator with an optional map-based configuration object. // Naming convention followed by validators: // .validator. // For ex: // `cel.validator.timestamp` // // Note: the map-keys must directly correspond to the internal representation of // the original validator, and should only use primitive scalar types as values // at this time. message Validator { string name = 1; // Additional configurations to be included as part of the validation map config = 2; } // Represents a named boolean feature flag supported by CEL. // Naming convention followed by features: // .feature. // For ex: // `cel.feature.cross_type_numeric_comparisons` message Feature { // Name of the feature flag. string name = 1; // State of the feature flab. bool enabled = 2; } // Extension represents a versioned extension library reference to enable in the // CEL environment. message Extension { // Name of the extension library. string name = 1; // Version of the extension library. string version = 2; } // LibrarySubset indicates a subset of the macros and functions supported by a // subsettable library. message LibrarySubset { // Indicates whether the library has been disabled, typically only // used for default-enabled libraries like stdlib. bool disabled = 1; // Disables macros for the given library. bool disable_macros = 2; // Specifies a set of macro function names to include in the subset. repeated string include_macros = 3; // Specifies a set of macro function names to exclude from the subset. // Note: if IncludeMacros is non-empty, then ExcludeFunctions is ignored. repeated string exclude_macros = 4; // Specifies a set of functions to include in the subset. // // Note: the overloads specified in the subset need only specify their ID. // Note: if IncludeFunctions is non-empty, then ExcludeFunctions is ignored. repeated cel.expr.Decl include_functions = 5; // Specifies the set of functions to exclude from the subset. // // Note: the overloads specified in the subset need only specify their ID. repeated cel.expr.Decl exclude_functions = 6; } cel-spec-0.24.0/proto/cel/expr/conformance/proto2/000077500000000000000000000000001500667630300217015ustar00rootroot00000000000000cel-spec-0.24.0/proto/cel/expr/conformance/proto2/BUILD.bazel000066400000000000000000000054471500667630300235710ustar00rootroot00000000000000package(default_visibility = ["//visibility:public"]) ############################################################################## # Common ############################################################################## load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library") proto_library( name = "test_all_types_proto", srcs = [ "test_all_types.proto", "test_all_types_extensions.proto", ], strip_import_prefix = "/proto", deps = [ "@com_google_protobuf//:any_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", "@com_google_protobuf//:field_mask_proto", "@com_google_protobuf//:struct_proto", "@com_google_protobuf//:timestamp_proto", "@com_google_protobuf//:wrappers_proto", ], ) ############################################################################## # Java ############################################################################## load("@com_google_protobuf//bazel:java_proto_library.bzl", "java_proto_library") java_proto_library( name = "test_all_types_java_proto", deps = [":test_all_types_proto"], ) ############################################################################## # Javalite ############################################################################## load("@com_google_protobuf//bazel:java_lite_proto_library.bzl", "java_lite_proto_library") java_lite_proto_library( name = "test_all_types_java_proto_lite", deps = [":test_all_types_proto"], ) ############################################################################### ## Go ############################################################################### load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") go_proto_library( name = "test_all_types_go_proto", importpath = "cel.dev/expr/conformance/proto2", protos = [":test_all_types_proto"], ) ############################################################################### ## C++ ############################################################################### load("@com_google_protobuf//bazel:cc_proto_library.bzl", "cc_proto_library") cc_proto_library( name = "test_all_types_cc_proto", deps = [":test_all_types_proto"], ) ############################################################################### ## upb ############################################################################### load("@com_google_protobuf//bazel:upb_c_proto_library.bzl", "upb_c_proto_library") load("@com_google_protobuf//bazel:upb_proto_reflection_library.bzl", "upb_proto_reflection_library") upb_c_proto_library( name = "test_all_types_upb_proto", deps = [":test_all_types_proto"], ) upb_proto_reflection_library( name = "test_all_types_upb_proto_reflection", deps = [":test_all_types_proto"], ) cel-spec-0.24.0/proto/cel/expr/conformance/proto2/test_all_types.proto000066400000000000000000000373701500667630300260330ustar00rootroot00000000000000// Copyright 2024 Google LLC // // 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. syntax = "proto2"; package cel.expr.conformance.proto2; import "google/protobuf/any.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr/conformance/proto2"; option java_multiple_files = true; option java_outer_classname = "TestAllTypesProto"; option java_package = "dev.cel.expr.conformance.proto2"; // This proto includes every type of field in both singular and repeated // forms. message TestAllTypes { message NestedMessage { // The field name "b" fails to compile in proto1 because it conflicts with // a local variable named "b" in one of the generated methods. // This file needs to compile in proto1 to test backwards-compatibility. optional int32 bb = 1; } enum NestedEnum { FOO = 0; BAR = 1; BAZ = 2; } // Singular optional int32 single_int32 = 1 [default = -32]; optional int64 single_int64 = 2 [default = -64]; optional uint32 single_uint32 = 3 [default = 32]; optional uint64 single_uint64 = 4 [default = 64]; optional sint32 single_sint32 = 5; optional sint64 single_sint64 = 6; optional fixed32 single_fixed32 = 7; optional fixed64 single_fixed64 = 8; optional sfixed32 single_sfixed32 = 9; optional sfixed64 single_sfixed64 = 10; optional float single_float = 11 [default = 3.0]; optional double single_double = 12 [default = 6.4]; optional bool single_bool = 13 [default = true]; optional string single_string = 14 [default = "empty"]; optional bytes single_bytes = 15 [default = "none"]; // Collides with 'in' operator. optional bool in = 18; // Wellknown. optional google.protobuf.Any single_any = 100; optional google.protobuf.Duration single_duration = 101; optional google.protobuf.Timestamp single_timestamp = 102; optional google.protobuf.Struct single_struct = 103; optional google.protobuf.Value single_value = 104; optional google.protobuf.Int64Value single_int64_wrapper = 105; optional google.protobuf.Int32Value single_int32_wrapper = 106; optional google.protobuf.DoubleValue single_double_wrapper = 107; optional google.protobuf.FloatValue single_float_wrapper = 108; optional google.protobuf.UInt64Value single_uint64_wrapper = 109; optional google.protobuf.UInt32Value single_uint32_wrapper = 110; optional google.protobuf.StringValue single_string_wrapper = 111; optional google.protobuf.BoolValue single_bool_wrapper = 112; optional google.protobuf.BytesValue single_bytes_wrapper = 113; optional google.protobuf.ListValue list_value = 114; optional google.protobuf.NullValue null_value = 115; optional google.protobuf.NullValue optional_null_value = 116; optional google.protobuf.FieldMask field_mask = 117; optional google.protobuf.Empty empty = 118; // Nested messages oneof nested_type { NestedMessage single_nested_message = 21; NestedEnum single_nested_enum = 22 [default = BAR]; } optional NestedMessage standalone_message = 23; optional NestedEnum standalone_enum = 24; // Repeated repeated int32 repeated_int32 = 31; repeated int64 repeated_int64 = 32; repeated uint32 repeated_uint32 = 33; repeated uint64 repeated_uint64 = 34; repeated sint32 repeated_sint32 = 35; repeated sint64 repeated_sint64 = 36; repeated fixed32 repeated_fixed32 = 37; repeated fixed64 repeated_fixed64 = 38; repeated sfixed32 repeated_sfixed32 = 39; repeated sfixed64 repeated_sfixed64 = 40; repeated float repeated_float = 41; repeated double repeated_double = 42; repeated bool repeated_bool = 43; repeated string repeated_string = 44; repeated bytes repeated_bytes = 45; // Repeated and nested repeated NestedMessage repeated_nested_message = 51; repeated NestedEnum repeated_nested_enum = 52; repeated string repeated_string_piece = 53 [ctype = STRING_PIECE]; repeated string repeated_cord = 54 [ctype = CORD]; repeated NestedMessage repeated_lazy_message = 55; // Repeated wellknown. repeated google.protobuf.Any repeated_any = 120; repeated google.protobuf.Duration repeated_duration = 121; repeated google.protobuf.Timestamp repeated_timestamp = 122; repeated google.protobuf.Struct repeated_struct = 123; repeated google.protobuf.Value repeated_value = 124; repeated google.protobuf.Int64Value repeated_int64_wrapper = 125; repeated google.protobuf.Int32Value repeated_int32_wrapper = 126; repeated google.protobuf.DoubleValue repeated_double_wrapper = 127; repeated google.protobuf.FloatValue repeated_float_wrapper = 128; repeated google.protobuf.UInt64Value repeated_uint64_wrapper = 129; repeated google.protobuf.UInt32Value repeated_uint32_wrapper = 130; repeated google.protobuf.StringValue repeated_string_wrapper = 131; repeated google.protobuf.BoolValue repeated_bool_wrapper = 132; repeated google.protobuf.BytesValue repeated_bytes_wrapper = 133; repeated google.protobuf.ListValue repeated_list_value = 134; repeated google.protobuf.NullValue repeated_null_value = 135; // Map map map_int64_nested_type = 62; map map_bool_bool = 63; map map_bool_string = 64; map map_bool_bytes = 65; map map_bool_int32 = 66; map map_bool_int64 = 67; map map_bool_uint32 = 68; map map_bool_uint64 = 69; map map_bool_float = 70; map map_bool_double = 71; map map_bool_enum = 72; map map_bool_message = 73; map map_bool_duration = 228; map map_bool_timestamp = 229; map map_bool_null_value = 230; map map_bool_any = 246; map map_bool_struct = 247; map map_bool_value = 248; map map_bool_list_value = 249; map map_bool_int64_wrapper = 250; map map_bool_int32_wrapper = 251; map map_bool_double_wrapper = 252; map map_bool_float_wrapper = 253; map map_bool_uint64_wrapper = 254; map map_bool_uint32_wrapper = 255; map map_bool_string_wrapper = 256; map map_bool_bool_wrapper = 257; map map_bool_bytes_wrapper = 258; map map_int32_bool = 74; map map_int32_string = 75; map map_int32_bytes = 76; map map_int32_int32 = 77; map map_int32_int64 = 78; map map_int32_uint32 = 79; map map_int32_uint64 = 80; map map_int32_float = 81; map map_int32_double = 82; map map_int32_enum = 83; map map_int32_message = 84; map map_int32_duration = 231; map map_int32_timestamp = 232; map map_int32_null_value = 233; map map_int32_any = 259; map map_int32_struct = 260; map map_int32_value = 261; map map_int32_list_value = 262; map map_int32_int64_wrapper = 263; map map_int32_int32_wrapper = 264; map map_int32_double_wrapper = 265; map map_int32_float_wrapper = 266; map map_int32_uint64_wrapper = 267; map map_int32_uint32_wrapper = 268; map map_int32_string_wrapper = 269; map map_int32_bool_wrapper = 270; map map_int32_bytes_wrapper = 271; map map_int64_bool = 85; map map_int64_string = 86; map map_int64_bytes = 87; map map_int64_int32 = 88; map map_int64_int64 = 89; map map_int64_uint32 = 90; map map_int64_uint64 = 91; map map_int64_float = 92; map map_int64_double = 93; map map_int64_enum = 94; map map_int64_message = 95; map map_int64_duration = 234; map map_int64_timestamp = 235; map map_int64_null_value = 236; map map_int64_any = 272; map map_int64_struct = 273; map map_int64_value = 274; map map_int64_list_value = 275; map map_int64_int64_wrapper = 276; map map_int64_int32_wrapper = 277; map map_int64_double_wrapper = 278; map map_int64_float_wrapper = 279; map map_int64_uint64_wrapper = 280; map map_int64_uint32_wrapper = 281; map map_int64_string_wrapper = 282; map map_int64_bool_wrapper = 283; map map_int64_bytes_wrapper = 284; map map_uint32_bool = 96; map map_uint32_string = 97; map map_uint32_bytes = 98; map map_uint32_int32 = 99; map map_uint32_int64 = 200; map map_uint32_uint32 = 201; map map_uint32_uint64 = 202; map map_uint32_float = 203; map map_uint32_double = 204; map map_uint32_enum = 205; map map_uint32_message = 206; map map_uint32_duration = 237; map map_uint32_timestamp = 238; map map_uint32_null_value = 239; map map_uint32_any = 285; map map_uint32_struct = 286; map map_uint32_value = 287; map map_uint32_list_value = 288; map map_uint32_int64_wrapper = 289; map map_uint32_int32_wrapper = 290; map map_uint32_double_wrapper = 291; map map_uint32_float_wrapper = 292; map map_uint32_uint64_wrapper = 293; map map_uint32_uint32_wrapper = 294; map map_uint32_string_wrapper = 295; map map_uint32_bool_wrapper = 296; map map_uint32_bytes_wrapper = 297; map map_uint64_bool = 207; map map_uint64_string = 208; map map_uint64_bytes = 209; map map_uint64_int32 = 210; map map_uint64_int64 = 211; map map_uint64_uint32 = 212; map map_uint64_uint64 = 213; map map_uint64_float = 214; map map_uint64_double = 215; map map_uint64_enum = 216; map map_uint64_message = 217; map map_uint64_duration = 240; map map_uint64_timestamp = 241; map map_uint64_null_value = 242; map map_uint64_any = 298; map map_uint64_struct = 299; map map_uint64_value = 300; map map_uint64_list_value = 301; map map_uint64_int64_wrapper = 302; map map_uint64_int32_wrapper = 303; map map_uint64_double_wrapper = 304; map map_uint64_float_wrapper = 305; map map_uint64_uint64_wrapper = 306; map map_uint64_uint32_wrapper = 307; map map_uint64_string_wrapper = 308; map map_uint64_bool_wrapper = 309; map map_uint64_bytes_wrapper = 310; map map_string_bool = 218; map map_string_string = 61; map map_string_bytes = 219; map map_string_int32 = 220; map map_string_int64 = 221; map map_string_uint32 = 222; map map_string_uint64 = 223; map map_string_float = 224; map map_string_double = 225; map map_string_enum = 226; map map_string_message = 227; map map_string_duration = 243; map map_string_timestamp = 244; map map_string_null_value = 245; map map_string_any = 311; map map_string_struct = 312; map map_string_value = 313; map map_string_list_value = 314; map map_string_int64_wrapper = 315; map map_string_int32_wrapper = 316; map map_string_double_wrapper = 317; map map_string_float_wrapper = 318; map map_string_uint64_wrapper = 319; map map_string_uint32_wrapper = 320; map map_string_string_wrapper = 321; map map_string_bool_wrapper = 322; map map_string_bytes_wrapper = 323; oneof kind { NestedTestAllTypes oneof_type = 400; NestedMessage oneof_msg = 401; bool oneof_bool = 402; } optional group NestedGroup = 403 { optional int32 single_id = 404; optional string single_name = 405; } extensions 1000 to max; } // This proto includes a recursively nested message. message NestedTestAllTypes { optional NestedTestAllTypes child = 1; optional TestAllTypes payload = 2; } // This proto has a required field. message TestRequired { required int32 required_int32 = 1; } // This proto tests that global enums are resolved correctly. enum GlobalEnum { GOO = 0; GAR = 1; GAZ = 2; } cel-spec-0.24.0/proto/cel/expr/conformance/proto2/test_all_types_extensions.proto000066400000000000000000000030411500667630300302760ustar00rootroot00000000000000// Copyright 2024 Google LLC // // 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. syntax = "proto2"; package cel.expr.conformance.proto2; import "cel/expr/conformance/proto2/test_all_types.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr/conformance/proto2"; option java_outer_classname = "TestAllTypesExtensions"; option java_package = "dev.cel.expr.conformance.proto2"; option java_multiple_files = true; // Package scoped extensions extend TestAllTypes { optional int32 int32_ext = 1000; optional TestAllTypes nested_ext = 1001; optional TestAllTypes test_all_types_ext = 1002; optional TestAllTypes.NestedEnum nested_enum_ext = 1003; repeated TestAllTypes repeated_test_all_types = 1004; } // Message scoped extensions message Proto2ExtensionScopedMessage { extend TestAllTypes { optional int64 int64_ext = 1005; optional TestAllTypes message_scoped_nested_ext = 1006; optional TestAllTypes.NestedEnum nested_enum_ext = 1007; repeated TestAllTypes message_scoped_repeated_test_all_types = 1008; } } cel-spec-0.24.0/proto/cel/expr/conformance/proto3/000077500000000000000000000000001500667630300217025ustar00rootroot00000000000000cel-spec-0.24.0/proto/cel/expr/conformance/proto3/BUILD.bazel000066400000000000000000000053551500667630300235700ustar00rootroot00000000000000package(default_visibility = ["//visibility:public"]) ############################################################################## # Common ############################################################################## load("@com_google_protobuf//bazel:proto_library.bzl", "proto_library") proto_library( name = "test_all_types_proto", srcs = ["test_all_types.proto"], strip_import_prefix = "/proto", deps = [ "@com_google_protobuf//:any_proto", "@com_google_protobuf//:duration_proto", "@com_google_protobuf//:empty_proto", "@com_google_protobuf//:field_mask_proto", "@com_google_protobuf//:struct_proto", "@com_google_protobuf//:timestamp_proto", "@com_google_protobuf//:wrappers_proto", ], ) ############################################################################## # Java ############################################################################## load("@com_google_protobuf//bazel:java_proto_library.bzl", "java_proto_library") java_proto_library( name = "test_all_types_java_proto", deps = [":test_all_types_proto"], ) ############################################################################## # Javalite ############################################################################## load("@com_google_protobuf//bazel:java_lite_proto_library.bzl", "java_lite_proto_library") java_lite_proto_library( name = "test_all_types_java_proto_lite", deps = [":test_all_types_proto"], ) ############################################################################### ## Go ############################################################################### load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") go_proto_library( name = "test_all_types_go_proto", importpath = "cel.dev/expr/conformance/proto3", protos = [":test_all_types_proto"], ) ############################################################################### ## C++ ############################################################################### load("@com_google_protobuf//bazel:cc_proto_library.bzl", "cc_proto_library") cc_proto_library( name = "test_all_types_cc_proto", deps = [":test_all_types_proto"], ) ############################################################################### ## upb ############################################################################### load("@com_google_protobuf//bazel:upb_c_proto_library.bzl", "upb_c_proto_library") load("@com_google_protobuf//bazel:upb_proto_reflection_library.bzl", "upb_proto_reflection_library") upb_c_proto_library( name = "test_all_types_upb_proto", deps = [":test_all_types_proto"], ) upb_proto_reflection_library( name = "test_all_types_upb_proto_reflection", deps = [":test_all_types_proto"], ) cel-spec-0.24.0/proto/cel/expr/conformance/proto3/test_all_types.proto000066400000000000000000000361141500667630300260270ustar00rootroot00000000000000// Copyright 2024 Google LLC // // 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. syntax = "proto3"; package cel.expr.conformance.proto3; import "google/protobuf/any.proto"; import "google/protobuf/duration.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/field_mask.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; import "google/protobuf/wrappers.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr/conformance/proto3"; option java_multiple_files = true; option java_outer_classname = "TestAllTypesProto"; option java_package = "dev.cel.expr.conformance.proto3"; // This proto includes every type of field in both singular and repeated // forms. message TestAllTypes { message NestedMessage { // The field name "b" fails to compile in proto1 because it conflicts with // a local variable named "b" in one of the generated methods. // This file needs to compile in proto1 to test backwards-compatibility. int32 bb = 1; } enum NestedEnum { FOO = 0; BAR = 1; BAZ = 2; } // Singular int32 single_int32 = 1; int64 single_int64 = 2; uint32 single_uint32 = 3; uint64 single_uint64 = 4; sint32 single_sint32 = 5; sint64 single_sint64 = 6; fixed32 single_fixed32 = 7; fixed64 single_fixed64 = 8; sfixed32 single_sfixed32 = 9; sfixed64 single_sfixed64 = 10; float single_float = 11; double single_double = 12; bool single_bool = 13; string single_string = 14; bytes single_bytes = 15; optional bool optional_bool = 16; optional string optional_string = 17; // Collides with 'in' operator. bool in = 18; // Wellknown. google.protobuf.Any single_any = 100; google.protobuf.Duration single_duration = 101; google.protobuf.Timestamp single_timestamp = 102; google.protobuf.Struct single_struct = 103; google.protobuf.Value single_value = 104; google.protobuf.Int64Value single_int64_wrapper = 105; google.protobuf.Int32Value single_int32_wrapper = 106; google.protobuf.DoubleValue single_double_wrapper = 107; google.protobuf.FloatValue single_float_wrapper = 108; google.protobuf.UInt64Value single_uint64_wrapper = 109; google.protobuf.UInt32Value single_uint32_wrapper = 110; google.protobuf.StringValue single_string_wrapper = 111; google.protobuf.BoolValue single_bool_wrapper = 112; google.protobuf.BytesValue single_bytes_wrapper = 113; google.protobuf.ListValue list_value = 114; google.protobuf.NullValue null_value = 115; optional google.protobuf.NullValue optional_null_value = 116; google.protobuf.FieldMask field_mask = 117; google.protobuf.Empty empty = 118; // Nested messages oneof nested_type { NestedMessage single_nested_message = 21; NestedEnum single_nested_enum = 22; } NestedMessage standalone_message = 23; NestedEnum standalone_enum = 24; // Repeated repeated int32 repeated_int32 = 31; repeated int64 repeated_int64 = 32; repeated uint32 repeated_uint32 = 33; repeated uint64 repeated_uint64 = 34; repeated sint32 repeated_sint32 = 35; repeated sint64 repeated_sint64 = 36; repeated fixed32 repeated_fixed32 = 37; repeated fixed64 repeated_fixed64 = 38; repeated sfixed32 repeated_sfixed32 = 39; repeated sfixed64 repeated_sfixed64 = 40; repeated float repeated_float = 41; repeated double repeated_double = 42; repeated bool repeated_bool = 43; repeated string repeated_string = 44; repeated bytes repeated_bytes = 45; // Repeated and nested repeated NestedMessage repeated_nested_message = 51; repeated NestedEnum repeated_nested_enum = 52; repeated string repeated_string_piece = 53 [ctype = STRING_PIECE]; repeated string repeated_cord = 54 [ctype = CORD]; repeated NestedMessage repeated_lazy_message = 55; // Repeated wellknown. repeated google.protobuf.Any repeated_any = 120; repeated google.protobuf.Duration repeated_duration = 121; repeated google.protobuf.Timestamp repeated_timestamp = 122; repeated google.protobuf.Struct repeated_struct = 123; repeated google.protobuf.Value repeated_value = 124; repeated google.protobuf.Int64Value repeated_int64_wrapper = 125; repeated google.protobuf.Int32Value repeated_int32_wrapper = 126; repeated google.protobuf.DoubleValue repeated_double_wrapper = 127; repeated google.protobuf.FloatValue repeated_float_wrapper = 128; repeated google.protobuf.UInt64Value repeated_uint64_wrapper = 129; repeated google.protobuf.UInt32Value repeated_uint32_wrapper = 130; repeated google.protobuf.StringValue repeated_string_wrapper = 131; repeated google.protobuf.BoolValue repeated_bool_wrapper = 132; repeated google.protobuf.BytesValue repeated_bytes_wrapper = 133; repeated google.protobuf.ListValue repeated_list_value = 134; repeated google.protobuf.NullValue repeated_null_value = 135; // Map map map_int64_nested_type = 62; map map_bool_bool = 63; map map_bool_string = 64; map map_bool_bytes = 65; map map_bool_int32 = 66; map map_bool_int64 = 67; map map_bool_uint32 = 68; map map_bool_uint64 = 69; map map_bool_float = 70; map map_bool_double = 71; map map_bool_enum = 72; map map_bool_message = 73; map map_bool_duration = 228; map map_bool_timestamp = 229; map map_bool_null_value = 230; map map_bool_any = 246; map map_bool_struct = 247; map map_bool_value = 248; map map_bool_list_value = 249; map map_bool_int64_wrapper = 250; map map_bool_int32_wrapper = 251; map map_bool_double_wrapper = 252; map map_bool_float_wrapper = 253; map map_bool_uint64_wrapper = 254; map map_bool_uint32_wrapper = 255; map map_bool_string_wrapper = 256; map map_bool_bool_wrapper = 257; map map_bool_bytes_wrapper = 258; map map_int32_bool = 74; map map_int32_string = 75; map map_int32_bytes = 76; map map_int32_int32 = 77; map map_int32_int64 = 78; map map_int32_uint32 = 79; map map_int32_uint64 = 80; map map_int32_float = 81; map map_int32_double = 82; map map_int32_enum = 83; map map_int32_message = 84; map map_int32_duration = 231; map map_int32_timestamp = 232; map map_int32_null_value = 233; map map_int32_any = 259; map map_int32_struct = 260; map map_int32_value = 261; map map_int32_list_value = 262; map map_int32_int64_wrapper = 263; map map_int32_int32_wrapper = 264; map map_int32_double_wrapper = 265; map map_int32_float_wrapper = 266; map map_int32_uint64_wrapper = 267; map map_int32_uint32_wrapper = 268; map map_int32_string_wrapper = 269; map map_int32_bool_wrapper = 270; map map_int32_bytes_wrapper = 271; map map_int64_bool = 85; map map_int64_string = 86; map map_int64_bytes = 87; map map_int64_int32 = 88; map map_int64_int64 = 89; map map_int64_uint32 = 90; map map_int64_uint64 = 91; map map_int64_float = 92; map map_int64_double = 93; map map_int64_enum = 94; map map_int64_message = 95; map map_int64_duration = 234; map map_int64_timestamp = 235; map map_int64_null_value = 236; map map_int64_any = 272; map map_int64_struct = 273; map map_int64_value = 274; map map_int64_list_value = 275; map map_int64_int64_wrapper = 276; map map_int64_int32_wrapper = 277; map map_int64_double_wrapper = 278; map map_int64_float_wrapper = 279; map map_int64_uint64_wrapper = 280; map map_int64_uint32_wrapper = 281; map map_int64_string_wrapper = 282; map map_int64_bool_wrapper = 283; map map_int64_bytes_wrapper = 284; map map_uint32_bool = 96; map map_uint32_string = 97; map map_uint32_bytes = 98; map map_uint32_int32 = 99; map map_uint32_int64 = 200; map map_uint32_uint32 = 201; map map_uint32_uint64 = 202; map map_uint32_float = 203; map map_uint32_double = 204; map map_uint32_enum = 205; map map_uint32_message = 206; map map_uint32_duration = 237; map map_uint32_timestamp = 238; map map_uint32_null_value = 239; map map_uint32_any = 285; map map_uint32_struct = 286; map map_uint32_value = 287; map map_uint32_list_value = 288; map map_uint32_int64_wrapper = 289; map map_uint32_int32_wrapper = 290; map map_uint32_double_wrapper = 291; map map_uint32_float_wrapper = 292; map map_uint32_uint64_wrapper = 293; map map_uint32_uint32_wrapper = 294; map map_uint32_string_wrapper = 295; map map_uint32_bool_wrapper = 296; map map_uint32_bytes_wrapper = 297; map map_uint64_bool = 207; map map_uint64_string = 208; map map_uint64_bytes = 209; map map_uint64_int32 = 210; map map_uint64_int64 = 211; map map_uint64_uint32 = 212; map map_uint64_uint64 = 213; map map_uint64_float = 214; map map_uint64_double = 215; map map_uint64_enum = 216; map map_uint64_message = 217; map map_uint64_duration = 240; map map_uint64_timestamp = 241; map map_uint64_null_value = 242; map map_uint64_any = 298; map map_uint64_struct = 299; map map_uint64_value = 300; map map_uint64_list_value = 301; map map_uint64_int64_wrapper = 302; map map_uint64_int32_wrapper = 303; map map_uint64_double_wrapper = 304; map map_uint64_float_wrapper = 305; map map_uint64_uint64_wrapper = 306; map map_uint64_uint32_wrapper = 307; map map_uint64_string_wrapper = 308; map map_uint64_bool_wrapper = 309; map map_uint64_bytes_wrapper = 310; map map_string_bool = 218; map map_string_string = 61; map map_string_bytes = 219; map map_string_int32 = 220; map map_string_int64 = 221; map map_string_uint32 = 222; map map_string_uint64 = 223; map map_string_float = 224; map map_string_double = 225; map map_string_enum = 226; map map_string_message = 227; map map_string_duration = 243; map map_string_timestamp = 244; map map_string_null_value = 245; map map_string_any = 311; map map_string_struct = 312; map map_string_value = 313; map map_string_list_value = 314; map map_string_int64_wrapper = 315; map map_string_int32_wrapper = 316; map map_string_double_wrapper = 317; map map_string_float_wrapper = 318; map map_string_uint64_wrapper = 319; map map_string_uint32_wrapper = 320; map map_string_string_wrapper = 321; map map_string_bool_wrapper = 322; map map_string_bytes_wrapper = 323; oneof kind { NestedTestAllTypes oneof_type = 400; NestedMessage oneof_msg = 401; bool oneof_bool = 402; } } // This proto includes a recursively nested message. message NestedTestAllTypes { NestedTestAllTypes child = 1; TestAllTypes payload = 2; } // This proto tests that global enums are resolved correctly. enum GlobalEnum { GOO = 0; GAR = 1; GAZ = 2; } cel-spec-0.24.0/proto/cel/expr/conformance/test/000077500000000000000000000000001500667630300214335ustar00rootroot00000000000000cel-spec-0.24.0/proto/cel/expr/conformance/test/BUILD.bazel000066400000000000000000000041601500667630300233120ustar00rootroot00000000000000package(default_visibility = ["//visibility:public"]) load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") ############################################################################## # Common ############################################################################## proto_library( name = "simple_proto", srcs = ["simple.proto"], strip_import_prefix = "/proto", deps = [ "//proto/cel/expr:checked_proto", "//proto/cel/expr:eval_proto", "//proto/cel/expr:value_proto", ], ) proto_library( name = "suite_proto", srcs = ["suite.proto"], strip_import_prefix = "/proto", deps = [ "//proto/cel/expr:checked_proto", "//proto/cel/expr:eval_proto", "//proto/cel/expr:value_proto", "//proto/cel/expr/conformance:env_config_proto", "@com_google_protobuf//:any_proto", ], ) ############################################################################## ## C++ ############################################################################## cc_proto_library( name = "simple_cc_proto", deps = [":simple_proto"], ) cc_proto_library( name = "suite_cc_proto", deps = [":suite_proto"], ) ############################################################################## ## Go ############################################################################## go_proto_library( name = "simple_go_proto", importpath = "cel.dev/expr/conformance/test", protos = [":simple_proto"], deps = [ "//proto/cel/expr:expr_go_proto", ], ) go_proto_library( name = "suite_go_proto", importpath = "cel.dev/expr/conformance/test", protos = [":suite_proto"], deps = [ "//proto/cel/expr:expr_go_proto", "//proto/cel/expr/conformance:env_config_go_proto", ], ) ############################################################################## ## Java ############################################################################## java_proto_library( name = "simple_java_proto", deps = [":simple_proto"], ) java_proto_library( name = "suite_java_proto", deps = [":suite_proto"], ) cel-spec-0.24.0/proto/cel/expr/conformance/test/simple.proto000066400000000000000000000105721500667630300240160ustar00rootroot00000000000000// Copyright 2024 Google LLC // // 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. // Simple end-to-end conformance tests. syntax = "proto3"; package cel.expr.conformance.test; import "cel/expr/checked.proto"; import "cel/expr/eval.proto"; import "cel/expr/value.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr/conformance/test"; option java_multiple_files = true; option java_outer_classname = "SimpleProto"; option java_package = "dev.cel.expr.conformance.test"; // The format of a simple test file, expected to be stored in text format. // A file is the unit of granularity for selecting conformance tests, // so tests of optional features should be segregated into separate files. // // Deprecated: Use cel.expr.conformance.test.Suite message SimpleTestFile { // Required. The name of the file. Should match the filename. string name = 1; // A description of the file. string description = 2; // The contained sections. repeated SimpleTestSection section = 3; } // A collection of related SimpleTests. // // The section is the unit of organization within a test file, and should // guide where new tests are added. message SimpleTestSection { // Required. The name of the section. string name = 1; // A description of the section. string description = 2; // The contained tests. repeated SimpleTest test = 3; } // A test which should run the given CEL program through parsing, // optionally through checking, then evaluation, with the results // of the pipeline validated by the given result matcher. message SimpleTest { // Required. The name of the test, which should be unique in the test file. string name = 1; // A description of the test. string description = 2; // Required. The text of the CEL expression. string expr = 3; // Disables all macro expansion in parsing. bool disable_macros = 4; // Disables the check phase. bool disable_check = 5; // Disables the evaluate phase. bool check_only = 15; // The type environment to use for the check phase. repeated cel.expr.Decl type_env = 6; // The container for name resolution. string container = 13; // The locale to use for the evaluation phase. string locale = 14; // Variable bindings to use for the eval phase. map bindings = 7; // An unspecified result defaults to a matcher for the true boolean value. oneof result_matcher { // A normal value, which must match the evaluation result exactly // via value equality semantics. This coincides with proto equality, // except for: // * maps are order-agnostic. // * a floating point NaN should match any NaN. cel.expr.Value value = 8; // A result and deduced expression type. TypedResult typed_result = 16; // Matches error evaluation results. cel.expr.ErrorSet eval_error = 9; // Matches one of several error results. // (Using explicit message since oneof can't handle repeated.) ErrorSetMatcher any_eval_errors = 10; // Matches unknown evaluation results. cel.expr.UnknownSet unknown = 11; // Matches one of several unknown results. // (Using explicit message since oneof can't handle repeated.) UnknownSetMatcher any_unknowns = 12; } // Next is 17. } // Matches a result along with deduced expression type. message TypedResult { // A normal value, which must match the evaluation result exactly // via value equality semantics. This is ignored if the test is `check_only`. cel.expr.Value result = 1; // The deduced type of the expression as reported by the checker. cel.expr.Type deduced_type = 2; } // Matches error results from Eval. message ErrorSetMatcher { // Success if we match any of these sets. repeated cel.expr.ErrorSet errors = 1; } // Matches unknown results from Eval. message UnknownSetMatcher { // Success if we match any of these sets. repeated cel.expr.UnknownSet unknowns = 1; } cel-spec-0.24.0/proto/cel/expr/conformance/test/suite.proto000066400000000000000000000122721500667630300236550ustar00rootroot00000000000000// Copyright 2024 Google LLC // // 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. // Unit tests and end-to-end conformance tests. syntax = "proto3"; package cel.expr.conformance.test; import "cel/expr/checked.proto"; import "cel/expr/eval.proto"; import "cel/expr/value.proto"; import "cel/expr/conformance/env_config.proto"; import "google/protobuf/any.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr/conformance/test"; option java_multiple_files = true; option java_outer_classname = "SuiteProto"; option java_package = "dev.cel.expr.conformance.test"; // A test suite is a collection of tests designed to evaluate the correctness of // a CEL policy, a CEL expression or the conformance of a CEL implementation to // the standard specification. message TestSuite { // The name of the test suite. string name = 1; // Description of the test suite. string description = 2; // Test sections of the test suite. // Each section represents a behavior to be tested. repeated TestSection sections = 3; } // A collection of related test cases. message TestSection { // Name of the test section. string name = 1; // Description of the test section. string description = 2; // Test cases of the test section. // Each test case represents a test scenario. repeated TestCase tests = 3; } // A test to validate a CEL policy or expression. The test case encompasses // evaluation of the compiled expression using the provided input bindings and // asserting the result against the expected result. // It can also validate a raw CEL expression string through parse, check and // eval stages, making use of the augmenting CEL environment if provided. message TestCase { // Name of the test case. string name = 1; // A description of the test. string description = 2; // The text of the CEL expression. string expr = 3; // Serialized environment to be used for compilation and evaluation of the // CEL expression for the current test case. // This option allows validating the same expression against multiple // environments. cel.expr.conformance.Environment env = 4; // A map representing a variable binding where the key is the name of the // input variable. map input = 5; // Input in the form of a context proto for the test case. // Note: Only one of `input_bindings` and `input_context` can be provided. Providing // both should result in an error. InputContext input_context = 6; // Expected result of the test case. TestOutput output = 7; // If specified validates that the deduced type at check time matches // If the result kind is not set and this field is set, the test is considered // "check-only". cel.expr.Type deduced_type = 8; // Bypass the type-checking and only attempt to evaluate the parsed // expression. bool disable_check = 9; } // Input context proto for the test case message InputContext { // The type of input context for the test case oneof input_context_kind { // A context message represents an input kind in the form of a proto // message whose type is defined at runtime. google.protobuf.Any context_message = 1; // A context expression representing a context proto variable. The // fields of the input proto.Messages are used as top-level variables within // an Activation. The expression is evaluated using the cel environment // configured for the test suite. string context_expr = 2; } } // The input value for a variable binding message InputValue { // The type of input value that can be used for a variable binding oneof kind { // A simple literal value for a variable binding cel.expr.Value value = 1; // An expression which evaluates to the value of the variable binding. // The expression is evaluated using the same runtime environment as the // one used for evaluating the expression under test. string expr = 2; } } // Expected result of the test case. message TestOutput { // Type of expected result of the test case. oneof result_kind { // A normal value, which must match the evaluation result exactly via value // equality semantics. This coincides with proto equality, except for: // * maps are order-agnostic // * a floating point NaN should match any NaN cel.expr.Value result_value = 8; // An expression to be evaluated using the cel environment configured for // the test suite. The result of this expression must match the result of // the test case. string result_expr = 9; // An error evaluation result set. Success if we match all of the errors in // the set. cel.expr.ErrorSet eval_error = 10; // An unknown evaluation result. cel.expr.UnknownSet unknown = 11; } } cel-spec-0.24.0/proto/cel/expr/eval.proto000066400000000000000000000114371500667630300202040ustar00rootroot00000000000000// Copyright 2023 Google LLC // // 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. syntax = "proto3"; package cel.expr; import "google/protobuf/any.proto"; import "cel/expr/value.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr"; option java_multiple_files = true; option java_outer_classname = "EvalProto"; option java_package = "dev.cel.expr"; // The state of an evaluation. // // Can represent an initial, partial, or completed state of evaluation. message EvalState { // A single evaluation result. message Result { // The id of the expression this result if for. int64 expr = 1; // The index in `values` of the resulting value. int64 value = 2; } // The unique values referenced in this message. repeated ExprValue values = 1; // An ordered list of results. // // Tracks the flow of evaluation through the expression. // May be sparse. repeated Result results = 3; } // The value of an evaluated expression. message ExprValue { // An expression can resolve to a value, error or unknown. oneof kind { Value value = 1; // The set of errors in the critical path of evaluation. // // Only errors in the critical path are included. For example, // `( || true) && ` will only result in ``, // while ` || ` will result in both `` and // ``. // // Errors cause by the presence of other errors are not included in the // set. For example `.foo`, `foo()`, and ` + 1` will // only result in ``. // // Multiple errors *might* be included when evaluation could result // in different errors. For example ` + ` and // `foo(, )` may result in ``, `` or both. // The exact subset of errors included for this case is unspecified and // depends on the implementation details of the evaluator. ErrorSet error = 2; // The set of unknowns in the critical path of evaluation. // // Unknown behaves identically to Error with regards to propagation. // Specifically, only unknowns in the critical path are included, unknowns // caused by the presence of other unknowns are not included, and multiple // unknowns *might* be included when evaluation could result in // different unknowns. For example: // // ( || true) && -> // || -> // .foo -> // foo() -> // + -> or // // Unknown takes precedence over Error in cases where a `Value` can short // circuit the result: // // || -> // && -> // // Errors take precedence in all other cases: // // + -> // foo(, ) -> UnknownSet unknown = 3; } } // A set of errors. // // The errors included depend on the context. See `ExprValue.error`. message ErrorSet { // Errors that could come up during evaluation phase. repeated Status errors = 1; } // Each `Status` message contains three pieces of data: error code, error message, // and error details. // // You can find out more about this error model and how to work with it in the // [API Design Guide](https://cloud.google.com/apis/design/errors). // // Status value is intended to be wire and field compatible with `google.rpc.Status`. message Status { // The status code, which should be an enum value of [google.rpc.Code][]. int32 code = 1; // A developer-facing error message, which should be in English. Any // user-facing error message should be localized and sent in the // [Status.details][] field, or localized by the client. string message = 2; // A list of messages that carry the error details. There is a common set of // message types for APIs to use. repeated google.protobuf.Any details = 3; } // A set of expressions for which the value is unknown. // // The unknowns included depend on the context. See `ExprValue.unknown`. message UnknownSet { // The ids of the expressions with unknown values. repeated int64 exprs = 1; } cel-spec-0.24.0/proto/cel/expr/explain.proto000066400000000000000000000031251500667630300207100ustar00rootroot00000000000000// Copyright 2023 Google LLC // // 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. syntax = "proto3"; package cel.expr; import "cel/expr/value.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr"; option java_multiple_files = true; option java_outer_classname = "ExplainProto"; option java_package = "dev.cel.expr"; // Values of intermediate expressions produced when evaluating expression. message Explain { option deprecated = true; // ID and value index of one step. message ExprStep { // ID of corresponding Expr node. int64 id = 1; // Index of the value in the values list. int32 value_index = 2; } // All of the observed values. // // The field value_index is an index in the values list. // Separating values from steps is needed to remove redundant values. repeated Value values = 1; // List of steps. // // Repeated evaluations of the same expression generate new ExprStep // instances. The order of such ExprStep instances matches the order of // elements returned by Comprehension.iter_range. repeated ExprStep expr_steps = 2; } cel-spec-0.24.0/proto/cel/expr/syntax.proto000066400000000000000000000340011500667630300205730ustar00rootroot00000000000000// Copyright 2023 Google LLC // // 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. syntax = "proto3"; package cel.expr; import "google/protobuf/duration.proto"; import "google/protobuf/struct.proto"; import "google/protobuf/timestamp.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr"; option java_multiple_files = true; option java_outer_classname = "SyntaxProto"; option java_package = "dev.cel.expr"; // A representation of the abstract syntax of the Common Expression Language. // An expression together with source information as returned by the parser. message ParsedExpr { // The parsed expression. Expr expr = 2; // The source info derived from input that generated the parsed `expr`. SourceInfo source_info = 3; } // An abstract representation of a common expression. // // Expressions are abstractly represented as a collection of identifiers, // select statements, function calls, literals, and comprehensions. All // operators with the exception of the '.' operator are modelled as function // calls. This makes it easy to represent new operators into the existing AST. // // All references within expressions must resolve to a // [Decl][cel.expr.Decl] provided at type-check for an expression to be // valid. A reference may either be a bare identifier `name` or a qualified // identifier `google.api.name`. References may either refer to a value or a // function declaration. // // For example, the expression `google.api.name.startsWith('expr')` references // the declaration `google.api.name` within a // [Expr.Select][cel.expr.Expr.Select] expression, and the function // declaration `startsWith`. message Expr { // An identifier expression. e.g. `request`. message Ident { // Required. Holds a single, unqualified identifier, possibly preceded by a // '.'. // // Qualified names are represented by the // [Expr.Select][cel.expr.Expr.Select] expression. string name = 1; } // A field selection expression. e.g. `request.auth`. message Select { // Required. The target of the selection expression. // // For example, in the select expression `request.auth`, the `request` // portion of the expression is the `operand`. Expr operand = 1; // Required. The name of the field to select. // // For example, in the select expression `request.auth`, the `auth` portion // of the expression would be the `field`. string field = 2; // Whether the select is to be interpreted as a field presence test. // // This results from the macro `has(request.auth)`. bool test_only = 3; } // A call expression, including calls to predefined functions and operators. // // For example, `value == 10`, `size(map_value)`. message Call { // The target of an method call-style expression. For example, `x` in // `x.f()`. Expr target = 1; // Required. The name of the function or method being called. string function = 2; // The arguments. repeated Expr args = 3; } // A list creation expression. // // Lists may either be homogenous, e.g. `[1, 2, 3]`, or heterogeneous, e.g. // `dyn([1, 'hello', 2.0])` message CreateList { // The elements part of the list. repeated Expr elements = 1; // The indices within the elements list which are marked as optional // elements. // // When an optional-typed value is present, the value it contains // is included in the list. If the optional-typed value is absent, the list // element is omitted from the CreateList result. repeated int32 optional_indices = 2; } // A map or message creation expression. // // Maps are constructed as `{'key_name': 'value'}`. Message construction is // similar, but prefixed with a type name and composed of field ids: // `types.MyType{field_id: 'value'}`. message CreateStruct { // Represents an entry. message Entry { // Required. An id assigned to this node by the parser which is unique // in a given expression tree. This is used to associate type // information and other attributes to the node. int64 id = 1; // The `Entry` key kinds. oneof key_kind { // The field key for a message creator statement. string field_key = 2; // The key expression for a map creation statement. Expr map_key = 3; } // Required. The value assigned to the key. // // If the optional_entry field is true, the expression must resolve to an // optional-typed value. If the optional value is present, the key will be // set; however, if the optional value is absent, the key will be unset. Expr value = 4; // Whether the key-value pair is optional. bool optional_entry = 5; } // The type name of the message to be created, empty when creating map // literals. string message_name = 1; // The entries in the creation expression. repeated Entry entries = 2; } // A comprehension expression applied to a list or map. // // Comprehensions are not part of the core syntax, but enabled with macros. // A macro matches a specific call signature within a parsed AST and replaces // the call with an alternate AST block. Macro expansion happens at parse // time. // // The following macros are supported within CEL: // // Aggregate type macros may be applied to all elements in a list or all keys // in a map: // // * `all`, `exists`, `exists_one` - test a predicate expression against // the inputs and return `true` if the predicate is satisfied for all, // any, or only one value `list.all(x, x < 10)`. // * `filter` - test a predicate expression against the inputs and return // the subset of elements which satisfy the predicate: // `payments.filter(p, p > 1000)`. // * `map` - apply an expression to all elements in the input and return the // output aggregate type: `[1, 2, 3].map(i, i * i)`. // // The `has(m.x)` macro tests whether the property `x` is present in struct // `m`. The semantics of this macro depend on the type of `m`. For proto2 // messages `has(m.x)` is defined as 'defined, but not set`. For proto3, the // macro tests whether the property is set to its default. For map and struct // types, the macro tests whether the property `x` is defined on `m`. // // Comprehensions for the standard environment macros evaluation can be best // visualized as the following pseudocode: // // ``` // let `accu_var` = `accu_init` // for (let `iter_var` in `iter_range`) { // if (!`loop_condition`) { // break // } // `accu_var` = `loop_step` // } // return `result` // ``` // // Comprehensions for the optional V2 macros which support map-to-map // translation differ slightly from the standard environment macros in that // they expose both the key or index in addition to the value for each list // or map entry: // // ``` // let `accu_var` = `accu_init` // for (let `iter_var`, `iter_var2` in `iter_range`) { // if (!`loop_condition`) { // break // } // `accu_var` = `loop_step` // } // return `result` // ``` message Comprehension { // The name of the first iteration variable. // For the single iteration variable macros, when iter_range is a list, this // variable is the list element and when the iter_range is a map, this // variable is the map key. string iter_var = 1; // The name of the second iteration variable, empty if not set. // This field is only set for comprehension v2 macros. string iter_var2 = 8; // The range over which the comprehension iterates. Expr iter_range = 2; // The name of the variable used for accumulation of the result. string accu_var = 3; // The initial value of the accumulator. Expr accu_init = 4; // An expression which can contain iter_var, iter_var2, and accu_var. // // Returns false when the result has been computed and may be used as // a hint to short-circuit the remainder of the comprehension. Expr loop_condition = 5; // An expression which can contain iter_var, iter_var2, and accu_var. // // Computes the next value of accu_var. Expr loop_step = 6; // An expression which can contain accu_var. // // Computes the result. Expr result = 7; } // Required. An id assigned to this node by the parser which is unique in a // given expression tree. This is used to associate type information and other // attributes to a node in the parse tree. int64 id = 2; // Required. Variants of expressions. oneof expr_kind { // A constant expression. Constant const_expr = 3; // An identifier expression. Ident ident_expr = 4; // A field selection expression, e.g. `request.auth`. Select select_expr = 5; // A call expression, including calls to predefined functions and operators. Call call_expr = 6; // A list creation expression. CreateList list_expr = 7; // A map or message creation expression. CreateStruct struct_expr = 8; // A comprehension expression. Comprehension comprehension_expr = 9; } } // Represents a primitive literal. // // Named 'Constant' here for backwards compatibility. // // This is similar as the primitives supported in the well-known type // `google.protobuf.Value`, but richer so it can represent CEL's full range of // primitives. // // Lists and structs are not included as constants as these aggregate types may // contain [Expr][cel.expr.Expr] elements which require evaluation and // are thus not constant. // // Examples of constants include: `"hello"`, `b'bytes'`, `1u`, `4.2`, `-2`, // `true`, `null`. message Constant { // Required. The valid constant kinds. oneof constant_kind { // null value. google.protobuf.NullValue null_value = 1; // boolean value. bool bool_value = 2; // int64 value. int64 int64_value = 3; // uint64 value. uint64 uint64_value = 4; // double value. double double_value = 5; // string value. string string_value = 6; // bytes value. bytes bytes_value = 7; // protobuf.Duration value. // // Deprecated: duration is no longer considered a builtin cel type. google.protobuf.Duration duration_value = 8 [deprecated = true]; // protobuf.Timestamp value. // // Deprecated: timestamp is no longer considered a builtin cel type. google.protobuf.Timestamp timestamp_value = 9 [deprecated = true]; } } // Source information collected at parse time. message SourceInfo { // The syntax version of the source, e.g. `cel1`. string syntax_version = 1; // The location name. All position information attached to an expression is // relative to this location. // // The location could be a file, UI element, or similar. For example, // `acme/app/AnvilPolicy.cel`. string location = 2; // Monotonically increasing list of code point offsets where newlines // `\n` appear. // // The line number of a given position is the index `i` where for a given // `id` the `line_offsets[i] < id_positions[id] < line_offsets[i+1]`. The // column may be derived from `id_positions[id] - line_offsets[i]`. repeated int32 line_offsets = 3; // A map from the parse node id (e.g. `Expr.id`) to the code point offset // within the source. map positions = 4; // A map from the parse node id where a macro replacement was made to the // call `Expr` that resulted in a macro expansion. // // For example, `has(value.field)` is a function call that is replaced by a // `test_only` field selection in the AST. Likewise, the call // `list.exists(e, e > 10)` translates to a comprehension expression. The key // in the map corresponds to the expression id of the expanded macro, and the // value is the call `Expr` that was replaced. map macro_calls = 5; // A list of tags for extensions that were used while parsing or type checking // the source expression. For example, optimizations that require special // runtime support may be specified. // // These are used to check feature support between components in separate // implementations. This can be used to either skip redundant work or // report an error if the extension is unsupported. repeated Extension extensions = 6; // An extension that was requested for the source expression. message Extension { // Version message Version { // Major version changes indicate different required support level from // the required components. int64 major = 1; // Minor version changes must not change the observed behavior from // existing implementations, but may be provided informationally. int64 minor = 2; } // CEL component specifier. enum Component { // Unspecified, default. COMPONENT_UNSPECIFIED = 0; // Parser. Converts a CEL string to an AST. COMPONENT_PARSER = 1; // Type checker. Checks that references in an AST are defined and types // agree. COMPONENT_TYPE_CHECKER = 2; // Runtime. Evaluates a parsed and optionally checked CEL AST against a // context. COMPONENT_RUNTIME = 3; } // Identifier for the extension. Example: constant_folding string id = 1; // If set, the listed components must understand the extension for the // expression to evaluate correctly. // // This field has set semantics, repeated values should be deduplicated. repeated Component affected_components = 2; // Version info. May be skipped if it isn't meaningful for the extension. // (for example constant_folding might always be v0.0). Version version = 3; } } cel-spec-0.24.0/proto/cel/expr/value.proto000066400000000000000000000052621500667630300203700ustar00rootroot00000000000000// Copyright 2023 Google LLC // // 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. syntax = "proto3"; package cel.expr; import "google/protobuf/any.proto"; import "google/protobuf/struct.proto"; option cc_enable_arenas = true; option go_package = "cel.dev/expr"; option java_multiple_files = true; option java_outer_classname = "ValueProto"; option java_package = "dev.cel.expr"; // Contains representations for CEL runtime values. // Represents a CEL value. // // This is similar to `google.protobuf.Value`, but can represent CEL's full // range of values. message Value { // Required. The valid kinds of values. oneof kind { // Null value. google.protobuf.NullValue null_value = 1; // Boolean value. bool bool_value = 2; // Signed integer value. int64 int64_value = 3; // Unsigned integer value. uint64 uint64_value = 4; // Floating point value. double double_value = 5; // UTF-8 string value. string string_value = 6; // Byte string value. bytes bytes_value = 7; // An enum value. EnumValue enum_value = 9; // The proto message backing an object value. google.protobuf.Any object_value = 10; // Map value. MapValue map_value = 11; // List value. ListValue list_value = 12; // Type value. string type_value = 15; } } // An enum value. message EnumValue { // The fully qualified name of the enum type. string type = 1; // The value of the enum. int32 value = 2; } // A list. // // Wrapped in a message so 'not set' and empty can be differentiated, which is // required for use in a 'oneof'. message ListValue { // The ordered values in the list. repeated Value values = 1; } // A map. // // Wrapped in a message so 'not set' and empty can be differentiated, which is // required for use in a 'oneof'. message MapValue { message Entry { // The key. // // Must be unique with in the map. // Currently only boolean, int, uint, and string values can be keys. Value key = 1; // The value. Value value = 2; } // The set of map entries. // // CEL has fewer restrictions on keys, so a protobuf map representation // cannot be used. repeated Entry entries = 1; } cel-spec-0.24.0/proto/test/000077500000000000000000000000001500667630300154205ustar00rootroot00000000000000cel-spec-0.24.0/proto/test/v1/000077500000000000000000000000001500667630300157465ustar00rootroot00000000000000cel-spec-0.24.0/proto/test/v1/BUILD.bazel000066400000000000000000000013271500667630300176270ustar00rootroot00000000000000load("@io_bazel_rules_go//proto:def.bzl", "go_proto_library") package( default_visibility = ["//visibility:public"], ) licenses(["notice"]) # Apache 2.0 exports_files(["LICENSE"]) proto_library( name = "simple_proto", srcs = [ "simple.proto", ], deps = [ "@com_google_googleapis//google/api/expr/v1alpha1:checked_proto", "@com_google_googleapis//google/api/expr/v1alpha1:eval_proto", "@com_google_googleapis//google/api/expr/v1alpha1:value_proto", "@com_google_protobuf//:empty_proto", ], ) cc_proto_library( name = "simple_cc_proto", deps = [":simple_proto",], ) java_proto_library( name = "simple_java_proto", deps = [":simple_proto"], ) cel-spec-0.24.0/proto/test/v1/simple.proto000066400000000000000000000075761500667630300203430ustar00rootroot00000000000000// Simple end-to-end conformance tests. syntax = "proto3"; package google.api.expr.test.v1; // Note, run regen_go_proto.sh after making modifications to this file. option go_package = "cel.dev/expr/test/v1/testpb"; option java_outer_classname = "SimpleProto"; option java_package = "com.google.api.expr.test.v1"; import "google/api/expr/v1alpha1/checked.proto"; import "google/api/expr/v1alpha1/eval.proto"; import "google/api/expr/v1alpha1/value.proto"; // The format of a simple test file, expected to be stored in text format. // A file is the unit of granularity for selecting conformance tests, // so tests of optional features should be segregated into separate files. message SimpleTestFile { // Required. The name of the file. Should match the filename. string name = 1; // A description of the file. string description = 2; // The contained sections. repeated SimpleTestSection section = 3; } // A collection of related SimpleTests. // // The section is the unit of organization within a test file, and should // guide where new tests are added. message SimpleTestSection { // Required. The name of the section. string name = 1; // A description of the section. string description = 2; // The contained tests. repeated SimpleTest test = 3; } // A test which should run the given CEL program through parsing, // optionally through checking, then evaluation, with the results // of the pipeline validated by the given result matcher. message SimpleTest { // Required. The name of the test, which should be unique in the test file. string name = 1; // A description of the test. string description = 2; // Required. The text of the CEL expression. string expr = 3; // Disables all macro expansion in parsing. bool disable_macros = 4; // Disables the check phase. bool disable_check = 5; // Disables the evaluate phase. bool check_only = 15; // The type environment to use for the check phase. repeated google.api.expr.v1alpha1.Decl type_env = 6; // The container for name resolution. string container = 13; // Variable bindings to use for the eval phase. map bindings = 7; // An unspecified result defaults to a matcher for the true boolean value. oneof result_matcher { // A normal value, which must match the evaluation result exactly // via value equality semantics. This coincides with proto equality, // except for: // * maps are order-agnostic. // * a floating point NaN should match any NaN. google.api.expr.v1alpha1.Value value = 8; // A result and deduced expression type. TypedResult typed_result = 16; // Matches error evaluation results. google.api.expr.v1alpha1.ErrorSet eval_error = 9; // Matches one of several error results. // (Using explicit message since oneof can't handle repeated.) ErrorSetMatcher any_eval_errors = 10; // Matches unknown evaluation results. google.api.expr.v1alpha1.UnknownSet unknown = 11; // Matches one of several unknown results. // (Using explicit message since oneof can't handle repeated.) UnknownSetMatcher any_unknowns = 12; } reserved 14; // Next is 17. } // Matches a result along with deduced expression type. message TypedResult { // A normal value, which must match the evaluation result exactly // via value equality semantics. This is ignored if the test is `check_only`. google.api.expr.v1alpha1.Value result = 1; // The deduced type of the expression as reported by the checker. google.api.expr.v1alpha1.Type deduced_type = 2; } // Matches error results from Eval. message ErrorSetMatcher { // Success if we match any of these sets. repeated google.api.expr.v1alpha1.ErrorSet errors = 1; } // Matches unknown results from Eval. message UnknownSetMatcher { // Success if we match any of these sets. repeated google.api.expr.v1alpha1.UnknownSet unknowns = 1; } cel-spec-0.24.0/regen_go_proto.sh000077500000000000000000000005361500667630300166510ustar00rootroot00000000000000#!/bin/sh bazel build //proto/cel/expr/conformance/... files=($(bazel aquery 'kind(proto, //proto/cel/expr/conformance/...)' | grep Outputs | grep "[.]pb[.]go" | sed 's/Outputs: \[//' | sed 's/\]//' | tr "," "\n")) for src in ${files[@]}; do dst=$(echo $src | sed 's/\(.*\/cel.dev\/expr\/\(.*\)\)/\2/') echo "copying $dst" $(cp $src $dst) done cel-spec-0.24.0/regen_go_proto_canonical_protos.sh000077500000000000000000000004511500667630300222620ustar00rootroot00000000000000#!/usr/bin/env bash bazel build //proto/cel/expr:all rm -vf ./*.pb.go files=( $(bazel cquery //proto/cel/expr:expr_go_proto --output=starlark --starlark:expr="'\n'.join([f.path for f in target.output_groups.go_generated_srcs.to_list()])") ) for src in "${files[@]}"; do cp -v "${src}" ./ done cel-spec-0.24.0/syntax.pb.go000077500000000000000000001625361500667630300155730ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 // protoc v3.21.5 // source: cel/expr/syntax.proto package expr import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" durationpb "google.golang.org/protobuf/types/known/durationpb" structpb "google.golang.org/protobuf/types/known/structpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type SourceInfo_Extension_Component int32 const ( SourceInfo_Extension_COMPONENT_UNSPECIFIED SourceInfo_Extension_Component = 0 SourceInfo_Extension_COMPONENT_PARSER SourceInfo_Extension_Component = 1 SourceInfo_Extension_COMPONENT_TYPE_CHECKER SourceInfo_Extension_Component = 2 SourceInfo_Extension_COMPONENT_RUNTIME SourceInfo_Extension_Component = 3 ) // Enum value maps for SourceInfo_Extension_Component. var ( SourceInfo_Extension_Component_name = map[int32]string{ 0: "COMPONENT_UNSPECIFIED", 1: "COMPONENT_PARSER", 2: "COMPONENT_TYPE_CHECKER", 3: "COMPONENT_RUNTIME", } SourceInfo_Extension_Component_value = map[string]int32{ "COMPONENT_UNSPECIFIED": 0, "COMPONENT_PARSER": 1, "COMPONENT_TYPE_CHECKER": 2, "COMPONENT_RUNTIME": 3, } ) func (x SourceInfo_Extension_Component) Enum() *SourceInfo_Extension_Component { p := new(SourceInfo_Extension_Component) *p = x return p } func (x SourceInfo_Extension_Component) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (SourceInfo_Extension_Component) Descriptor() protoreflect.EnumDescriptor { return file_cel_expr_syntax_proto_enumTypes[0].Descriptor() } func (SourceInfo_Extension_Component) Type() protoreflect.EnumType { return &file_cel_expr_syntax_proto_enumTypes[0] } func (x SourceInfo_Extension_Component) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use SourceInfo_Extension_Component.Descriptor instead. func (SourceInfo_Extension_Component) EnumDescriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{3, 2, 0} } type ParsedExpr struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Expr *Expr `protobuf:"bytes,2,opt,name=expr,proto3" json:"expr,omitempty"` SourceInfo *SourceInfo `protobuf:"bytes,3,opt,name=source_info,json=sourceInfo,proto3" json:"source_info,omitempty"` } func (x *ParsedExpr) Reset() { *x = ParsedExpr{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ParsedExpr) String() string { return protoimpl.X.MessageStringOf(x) } func (*ParsedExpr) ProtoMessage() {} func (x *ParsedExpr) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ParsedExpr.ProtoReflect.Descriptor instead. func (*ParsedExpr) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{0} } func (x *ParsedExpr) GetExpr() *Expr { if x != nil { return x.Expr } return nil } func (x *ParsedExpr) GetSourceInfo() *SourceInfo { if x != nil { return x.SourceInfo } return nil } type Expr struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id int64 `protobuf:"varint,2,opt,name=id,proto3" json:"id,omitempty"` // Types that are assignable to ExprKind: // // *Expr_ConstExpr // *Expr_IdentExpr // *Expr_SelectExpr // *Expr_CallExpr // *Expr_ListExpr // *Expr_StructExpr // *Expr_ComprehensionExpr ExprKind isExpr_ExprKind `protobuf_oneof:"expr_kind"` } func (x *Expr) Reset() { *x = Expr{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Expr) String() string { return protoimpl.X.MessageStringOf(x) } func (*Expr) ProtoMessage() {} func (x *Expr) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Expr.ProtoReflect.Descriptor instead. func (*Expr) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{1} } func (x *Expr) GetId() int64 { if x != nil { return x.Id } return 0 } func (m *Expr) GetExprKind() isExpr_ExprKind { if m != nil { return m.ExprKind } return nil } func (x *Expr) GetConstExpr() *Constant { if x, ok := x.GetExprKind().(*Expr_ConstExpr); ok { return x.ConstExpr } return nil } func (x *Expr) GetIdentExpr() *Expr_Ident { if x, ok := x.GetExprKind().(*Expr_IdentExpr); ok { return x.IdentExpr } return nil } func (x *Expr) GetSelectExpr() *Expr_Select { if x, ok := x.GetExprKind().(*Expr_SelectExpr); ok { return x.SelectExpr } return nil } func (x *Expr) GetCallExpr() *Expr_Call { if x, ok := x.GetExprKind().(*Expr_CallExpr); ok { return x.CallExpr } return nil } func (x *Expr) GetListExpr() *Expr_CreateList { if x, ok := x.GetExprKind().(*Expr_ListExpr); ok { return x.ListExpr } return nil } func (x *Expr) GetStructExpr() *Expr_CreateStruct { if x, ok := x.GetExprKind().(*Expr_StructExpr); ok { return x.StructExpr } return nil } func (x *Expr) GetComprehensionExpr() *Expr_Comprehension { if x, ok := x.GetExprKind().(*Expr_ComprehensionExpr); ok { return x.ComprehensionExpr } return nil } type isExpr_ExprKind interface { isExpr_ExprKind() } type Expr_ConstExpr struct { ConstExpr *Constant `protobuf:"bytes,3,opt,name=const_expr,json=constExpr,proto3,oneof"` } type Expr_IdentExpr struct { IdentExpr *Expr_Ident `protobuf:"bytes,4,opt,name=ident_expr,json=identExpr,proto3,oneof"` } type Expr_SelectExpr struct { SelectExpr *Expr_Select `protobuf:"bytes,5,opt,name=select_expr,json=selectExpr,proto3,oneof"` } type Expr_CallExpr struct { CallExpr *Expr_Call `protobuf:"bytes,6,opt,name=call_expr,json=callExpr,proto3,oneof"` } type Expr_ListExpr struct { ListExpr *Expr_CreateList `protobuf:"bytes,7,opt,name=list_expr,json=listExpr,proto3,oneof"` } type Expr_StructExpr struct { StructExpr *Expr_CreateStruct `protobuf:"bytes,8,opt,name=struct_expr,json=structExpr,proto3,oneof"` } type Expr_ComprehensionExpr struct { ComprehensionExpr *Expr_Comprehension `protobuf:"bytes,9,opt,name=comprehension_expr,json=comprehensionExpr,proto3,oneof"` } func (*Expr_ConstExpr) isExpr_ExprKind() {} func (*Expr_IdentExpr) isExpr_ExprKind() {} func (*Expr_SelectExpr) isExpr_ExprKind() {} func (*Expr_CallExpr) isExpr_ExprKind() {} func (*Expr_ListExpr) isExpr_ExprKind() {} func (*Expr_StructExpr) isExpr_ExprKind() {} func (*Expr_ComprehensionExpr) isExpr_ExprKind() {} type Constant struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to ConstantKind: // // *Constant_NullValue // *Constant_BoolValue // *Constant_Int64Value // *Constant_Uint64Value // *Constant_DoubleValue // *Constant_StringValue // *Constant_BytesValue // *Constant_DurationValue // *Constant_TimestampValue ConstantKind isConstant_ConstantKind `protobuf_oneof:"constant_kind"` } func (x *Constant) Reset() { *x = Constant{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Constant) String() string { return protoimpl.X.MessageStringOf(x) } func (*Constant) ProtoMessage() {} func (x *Constant) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Constant.ProtoReflect.Descriptor instead. func (*Constant) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{2} } func (m *Constant) GetConstantKind() isConstant_ConstantKind { if m != nil { return m.ConstantKind } return nil } func (x *Constant) GetNullValue() structpb.NullValue { if x, ok := x.GetConstantKind().(*Constant_NullValue); ok { return x.NullValue } return structpb.NullValue(0) } func (x *Constant) GetBoolValue() bool { if x, ok := x.GetConstantKind().(*Constant_BoolValue); ok { return x.BoolValue } return false } func (x *Constant) GetInt64Value() int64 { if x, ok := x.GetConstantKind().(*Constant_Int64Value); ok { return x.Int64Value } return 0 } func (x *Constant) GetUint64Value() uint64 { if x, ok := x.GetConstantKind().(*Constant_Uint64Value); ok { return x.Uint64Value } return 0 } func (x *Constant) GetDoubleValue() float64 { if x, ok := x.GetConstantKind().(*Constant_DoubleValue); ok { return x.DoubleValue } return 0 } func (x *Constant) GetStringValue() string { if x, ok := x.GetConstantKind().(*Constant_StringValue); ok { return x.StringValue } return "" } func (x *Constant) GetBytesValue() []byte { if x, ok := x.GetConstantKind().(*Constant_BytesValue); ok { return x.BytesValue } return nil } // Deprecated: Do not use. func (x *Constant) GetDurationValue() *durationpb.Duration { if x, ok := x.GetConstantKind().(*Constant_DurationValue); ok { return x.DurationValue } return nil } // Deprecated: Do not use. func (x *Constant) GetTimestampValue() *timestamppb.Timestamp { if x, ok := x.GetConstantKind().(*Constant_TimestampValue); ok { return x.TimestampValue } return nil } type isConstant_ConstantKind interface { isConstant_ConstantKind() } type Constant_NullValue struct { NullValue structpb.NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,proto3,enum=google.protobuf.NullValue,oneof"` } type Constant_BoolValue struct { BoolValue bool `protobuf:"varint,2,opt,name=bool_value,json=boolValue,proto3,oneof"` } type Constant_Int64Value struct { Int64Value int64 `protobuf:"varint,3,opt,name=int64_value,json=int64Value,proto3,oneof"` } type Constant_Uint64Value struct { Uint64Value uint64 `protobuf:"varint,4,opt,name=uint64_value,json=uint64Value,proto3,oneof"` } type Constant_DoubleValue struct { DoubleValue float64 `protobuf:"fixed64,5,opt,name=double_value,json=doubleValue,proto3,oneof"` } type Constant_StringValue struct { StringValue string `protobuf:"bytes,6,opt,name=string_value,json=stringValue,proto3,oneof"` } type Constant_BytesValue struct { BytesValue []byte `protobuf:"bytes,7,opt,name=bytes_value,json=bytesValue,proto3,oneof"` } type Constant_DurationValue struct { // Deprecated: Do not use. DurationValue *durationpb.Duration `protobuf:"bytes,8,opt,name=duration_value,json=durationValue,proto3,oneof"` } type Constant_TimestampValue struct { // Deprecated: Do not use. TimestampValue *timestamppb.Timestamp `protobuf:"bytes,9,opt,name=timestamp_value,json=timestampValue,proto3,oneof"` } func (*Constant_NullValue) isConstant_ConstantKind() {} func (*Constant_BoolValue) isConstant_ConstantKind() {} func (*Constant_Int64Value) isConstant_ConstantKind() {} func (*Constant_Uint64Value) isConstant_ConstantKind() {} func (*Constant_DoubleValue) isConstant_ConstantKind() {} func (*Constant_StringValue) isConstant_ConstantKind() {} func (*Constant_BytesValue) isConstant_ConstantKind() {} func (*Constant_DurationValue) isConstant_ConstantKind() {} func (*Constant_TimestampValue) isConstant_ConstantKind() {} type SourceInfo struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields SyntaxVersion string `protobuf:"bytes,1,opt,name=syntax_version,json=syntaxVersion,proto3" json:"syntax_version,omitempty"` Location string `protobuf:"bytes,2,opt,name=location,proto3" json:"location,omitempty"` LineOffsets []int32 `protobuf:"varint,3,rep,packed,name=line_offsets,json=lineOffsets,proto3" json:"line_offsets,omitempty"` Positions map[int64]int32 `protobuf:"bytes,4,rep,name=positions,proto3" json:"positions,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"varint,2,opt,name=value,proto3"` MacroCalls map[int64]*Expr `protobuf:"bytes,5,rep,name=macro_calls,json=macroCalls,proto3" json:"macro_calls,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` Extensions []*SourceInfo_Extension `protobuf:"bytes,6,rep,name=extensions,proto3" json:"extensions,omitempty"` } func (x *SourceInfo) Reset() { *x = SourceInfo{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SourceInfo) String() string { return protoimpl.X.MessageStringOf(x) } func (*SourceInfo) ProtoMessage() {} func (x *SourceInfo) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SourceInfo.ProtoReflect.Descriptor instead. func (*SourceInfo) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{3} } func (x *SourceInfo) GetSyntaxVersion() string { if x != nil { return x.SyntaxVersion } return "" } func (x *SourceInfo) GetLocation() string { if x != nil { return x.Location } return "" } func (x *SourceInfo) GetLineOffsets() []int32 { if x != nil { return x.LineOffsets } return nil } func (x *SourceInfo) GetPositions() map[int64]int32 { if x != nil { return x.Positions } return nil } func (x *SourceInfo) GetMacroCalls() map[int64]*Expr { if x != nil { return x.MacroCalls } return nil } func (x *SourceInfo) GetExtensions() []*SourceInfo_Extension { if x != nil { return x.Extensions } return nil } type Expr_Ident struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` } func (x *Expr_Ident) Reset() { *x = Expr_Ident{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Expr_Ident) String() string { return protoimpl.X.MessageStringOf(x) } func (*Expr_Ident) ProtoMessage() {} func (x *Expr_Ident) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Expr_Ident.ProtoReflect.Descriptor instead. func (*Expr_Ident) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{1, 0} } func (x *Expr_Ident) GetName() string { if x != nil { return x.Name } return "" } type Expr_Select struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Operand *Expr `protobuf:"bytes,1,opt,name=operand,proto3" json:"operand,omitempty"` Field string `protobuf:"bytes,2,opt,name=field,proto3" json:"field,omitempty"` TestOnly bool `protobuf:"varint,3,opt,name=test_only,json=testOnly,proto3" json:"test_only,omitempty"` } func (x *Expr_Select) Reset() { *x = Expr_Select{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Expr_Select) String() string { return protoimpl.X.MessageStringOf(x) } func (*Expr_Select) ProtoMessage() {} func (x *Expr_Select) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Expr_Select.ProtoReflect.Descriptor instead. func (*Expr_Select) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{1, 1} } func (x *Expr_Select) GetOperand() *Expr { if x != nil { return x.Operand } return nil } func (x *Expr_Select) GetField() string { if x != nil { return x.Field } return "" } func (x *Expr_Select) GetTestOnly() bool { if x != nil { return x.TestOnly } return false } type Expr_Call struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Target *Expr `protobuf:"bytes,1,opt,name=target,proto3" json:"target,omitempty"` Function string `protobuf:"bytes,2,opt,name=function,proto3" json:"function,omitempty"` Args []*Expr `protobuf:"bytes,3,rep,name=args,proto3" json:"args,omitempty"` } func (x *Expr_Call) Reset() { *x = Expr_Call{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Expr_Call) String() string { return protoimpl.X.MessageStringOf(x) } func (*Expr_Call) ProtoMessage() {} func (x *Expr_Call) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Expr_Call.ProtoReflect.Descriptor instead. func (*Expr_Call) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{1, 2} } func (x *Expr_Call) GetTarget() *Expr { if x != nil { return x.Target } return nil } func (x *Expr_Call) GetFunction() string { if x != nil { return x.Function } return "" } func (x *Expr_Call) GetArgs() []*Expr { if x != nil { return x.Args } return nil } type Expr_CreateList struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Elements []*Expr `protobuf:"bytes,1,rep,name=elements,proto3" json:"elements,omitempty"` OptionalIndices []int32 `protobuf:"varint,2,rep,packed,name=optional_indices,json=optionalIndices,proto3" json:"optional_indices,omitempty"` } func (x *Expr_CreateList) Reset() { *x = Expr_CreateList{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Expr_CreateList) String() string { return protoimpl.X.MessageStringOf(x) } func (*Expr_CreateList) ProtoMessage() {} func (x *Expr_CreateList) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Expr_CreateList.ProtoReflect.Descriptor instead. func (*Expr_CreateList) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{1, 3} } func (x *Expr_CreateList) GetElements() []*Expr { if x != nil { return x.Elements } return nil } func (x *Expr_CreateList) GetOptionalIndices() []int32 { if x != nil { return x.OptionalIndices } return nil } type Expr_CreateStruct struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields MessageName string `protobuf:"bytes,1,opt,name=message_name,json=messageName,proto3" json:"message_name,omitempty"` Entries []*Expr_CreateStruct_Entry `protobuf:"bytes,2,rep,name=entries,proto3" json:"entries,omitempty"` } func (x *Expr_CreateStruct) Reset() { *x = Expr_CreateStruct{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Expr_CreateStruct) String() string { return protoimpl.X.MessageStringOf(x) } func (*Expr_CreateStruct) ProtoMessage() {} func (x *Expr_CreateStruct) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Expr_CreateStruct.ProtoReflect.Descriptor instead. func (*Expr_CreateStruct) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{1, 4} } func (x *Expr_CreateStruct) GetMessageName() string { if x != nil { return x.MessageName } return "" } func (x *Expr_CreateStruct) GetEntries() []*Expr_CreateStruct_Entry { if x != nil { return x.Entries } return nil } type Expr_Comprehension struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields IterVar string `protobuf:"bytes,1,opt,name=iter_var,json=iterVar,proto3" json:"iter_var,omitempty"` IterRange *Expr `protobuf:"bytes,2,opt,name=iter_range,json=iterRange,proto3" json:"iter_range,omitempty"` AccuVar string `protobuf:"bytes,3,opt,name=accu_var,json=accuVar,proto3" json:"accu_var,omitempty"` AccuInit *Expr `protobuf:"bytes,4,opt,name=accu_init,json=accuInit,proto3" json:"accu_init,omitempty"` LoopCondition *Expr `protobuf:"bytes,5,opt,name=loop_condition,json=loopCondition,proto3" json:"loop_condition,omitempty"` LoopStep *Expr `protobuf:"bytes,6,opt,name=loop_step,json=loopStep,proto3" json:"loop_step,omitempty"` Result *Expr `protobuf:"bytes,7,opt,name=result,proto3" json:"result,omitempty"` } func (x *Expr_Comprehension) Reset() { *x = Expr_Comprehension{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Expr_Comprehension) String() string { return protoimpl.X.MessageStringOf(x) } func (*Expr_Comprehension) ProtoMessage() {} func (x *Expr_Comprehension) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Expr_Comprehension.ProtoReflect.Descriptor instead. func (*Expr_Comprehension) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{1, 5} } func (x *Expr_Comprehension) GetIterVar() string { if x != nil { return x.IterVar } return "" } func (x *Expr_Comprehension) GetIterRange() *Expr { if x != nil { return x.IterRange } return nil } func (x *Expr_Comprehension) GetAccuVar() string { if x != nil { return x.AccuVar } return "" } func (x *Expr_Comprehension) GetAccuInit() *Expr { if x != nil { return x.AccuInit } return nil } func (x *Expr_Comprehension) GetLoopCondition() *Expr { if x != nil { return x.LoopCondition } return nil } func (x *Expr_Comprehension) GetLoopStep() *Expr { if x != nil { return x.LoopStep } return nil } func (x *Expr_Comprehension) GetResult() *Expr { if x != nil { return x.Result } return nil } type Expr_CreateStruct_Entry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id int64 `protobuf:"varint,1,opt,name=id,proto3" json:"id,omitempty"` // Types that are assignable to KeyKind: // // *Expr_CreateStruct_Entry_FieldKey // *Expr_CreateStruct_Entry_MapKey KeyKind isExpr_CreateStruct_Entry_KeyKind `protobuf_oneof:"key_kind"` Value *Expr `protobuf:"bytes,4,opt,name=value,proto3" json:"value,omitempty"` OptionalEntry bool `protobuf:"varint,5,opt,name=optional_entry,json=optionalEntry,proto3" json:"optional_entry,omitempty"` } func (x *Expr_CreateStruct_Entry) Reset() { *x = Expr_CreateStruct_Entry{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Expr_CreateStruct_Entry) String() string { return protoimpl.X.MessageStringOf(x) } func (*Expr_CreateStruct_Entry) ProtoMessage() {} func (x *Expr_CreateStruct_Entry) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Expr_CreateStruct_Entry.ProtoReflect.Descriptor instead. func (*Expr_CreateStruct_Entry) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{1, 4, 0} } func (x *Expr_CreateStruct_Entry) GetId() int64 { if x != nil { return x.Id } return 0 } func (m *Expr_CreateStruct_Entry) GetKeyKind() isExpr_CreateStruct_Entry_KeyKind { if m != nil { return m.KeyKind } return nil } func (x *Expr_CreateStruct_Entry) GetFieldKey() string { if x, ok := x.GetKeyKind().(*Expr_CreateStruct_Entry_FieldKey); ok { return x.FieldKey } return "" } func (x *Expr_CreateStruct_Entry) GetMapKey() *Expr { if x, ok := x.GetKeyKind().(*Expr_CreateStruct_Entry_MapKey); ok { return x.MapKey } return nil } func (x *Expr_CreateStruct_Entry) GetValue() *Expr { if x != nil { return x.Value } return nil } func (x *Expr_CreateStruct_Entry) GetOptionalEntry() bool { if x != nil { return x.OptionalEntry } return false } type isExpr_CreateStruct_Entry_KeyKind interface { isExpr_CreateStruct_Entry_KeyKind() } type Expr_CreateStruct_Entry_FieldKey struct { FieldKey string `protobuf:"bytes,2,opt,name=field_key,json=fieldKey,proto3,oneof"` } type Expr_CreateStruct_Entry_MapKey struct { MapKey *Expr `protobuf:"bytes,3,opt,name=map_key,json=mapKey,proto3,oneof"` } func (*Expr_CreateStruct_Entry_FieldKey) isExpr_CreateStruct_Entry_KeyKind() {} func (*Expr_CreateStruct_Entry_MapKey) isExpr_CreateStruct_Entry_KeyKind() {} type SourceInfo_Extension struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"` AffectedComponents []SourceInfo_Extension_Component `protobuf:"varint,2,rep,packed,name=affected_components,json=affectedComponents,proto3,enum=cel.expr.SourceInfo_Extension_Component" json:"affected_components,omitempty"` Version *SourceInfo_Extension_Version `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` } func (x *SourceInfo_Extension) Reset() { *x = SourceInfo_Extension{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SourceInfo_Extension) String() string { return protoimpl.X.MessageStringOf(x) } func (*SourceInfo_Extension) ProtoMessage() {} func (x *SourceInfo_Extension) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SourceInfo_Extension.ProtoReflect.Descriptor instead. func (*SourceInfo_Extension) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{3, 2} } func (x *SourceInfo_Extension) GetId() string { if x != nil { return x.Id } return "" } func (x *SourceInfo_Extension) GetAffectedComponents() []SourceInfo_Extension_Component { if x != nil { return x.AffectedComponents } return nil } func (x *SourceInfo_Extension) GetVersion() *SourceInfo_Extension_Version { if x != nil { return x.Version } return nil } type SourceInfo_Extension_Version struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Major int64 `protobuf:"varint,1,opt,name=major,proto3" json:"major,omitempty"` Minor int64 `protobuf:"varint,2,opt,name=minor,proto3" json:"minor,omitempty"` } func (x *SourceInfo_Extension_Version) Reset() { *x = SourceInfo_Extension_Version{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_syntax_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *SourceInfo_Extension_Version) String() string { return protoimpl.X.MessageStringOf(x) } func (*SourceInfo_Extension_Version) ProtoMessage() {} func (x *SourceInfo_Extension_Version) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_syntax_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use SourceInfo_Extension_Version.ProtoReflect.Descriptor instead. func (*SourceInfo_Extension_Version) Descriptor() ([]byte, []int) { return file_cel_expr_syntax_proto_rawDescGZIP(), []int{3, 2, 0} } func (x *SourceInfo_Extension_Version) GetMajor() int64 { if x != nil { return x.Major } return 0 } func (x *SourceInfo_Extension_Version) GetMinor() int64 { if x != nil { return x.Minor } return 0 } var File_cel_expr_syntax_proto protoreflect.FileDescriptor var file_cel_expr_syntax_proto_rawDesc = []byte{ 0x0a, 0x15, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x67, 0x0a, 0x0a, 0x50, 0x61, 0x72, 0x73, 0x65, 0x64, 0x45, 0x78, 0x70, 0x72, 0x12, 0x22, 0x0a, 0x04, 0x65, 0x78, 0x70, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x04, 0x65, 0x78, 0x70, 0x72, 0x12, 0x35, 0x0a, 0x0b, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0xfd, 0x0a, 0x0a, 0x04, 0x45, 0x78, 0x70, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x33, 0x0a, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x45, 0x78, 0x70, 0x72, 0x12, 0x35, 0x0a, 0x0a, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x45, 0x78, 0x70, 0x72, 0x12, 0x38, 0x0a, 0x0b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x45, 0x78, 0x70, 0x72, 0x12, 0x32, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x45, 0x78, 0x70, 0x72, 0x12, 0x38, 0x0a, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x08, 0x6c, 0x69, 0x73, 0x74, 0x45, 0x78, 0x70, 0x72, 0x12, 0x3e, 0x0a, 0x0b, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x45, 0x78, 0x70, 0x72, 0x12, 0x4d, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x11, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x45, 0x78, 0x70, 0x72, 0x1a, 0x1b, 0x0a, 0x05, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x1a, 0x65, 0x0a, 0x06, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x12, 0x28, 0x0a, 0x07, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x07, 0x6f, 0x70, 0x65, 0x72, 0x61, 0x6e, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x74, 0x65, 0x73, 0x74, 0x4f, 0x6e, 0x6c, 0x79, 0x1a, 0x6e, 0x0a, 0x04, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x26, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x1a, 0x63, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2a, 0x0a, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x08, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x1a, 0xab, 0x02, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x53, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0xba, 0x01, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1d, 0x0a, 0x09, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x07, 0x6d, 0x61, 0x70, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x48, 0x00, 0x52, 0x06, 0x6d, 0x61, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x42, 0x0a, 0x0a, 0x08, 0x6b, 0x65, 0x79, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x1a, 0xad, 0x02, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x68, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x74, 0x65, 0x72, 0x56, 0x61, 0x72, 0x12, 0x2d, 0x0a, 0x0a, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x09, 0x69, 0x74, 0x65, 0x72, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x75, 0x5f, 0x76, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x75, 0x56, 0x61, 0x72, 0x12, 0x2b, 0x0a, 0x09, 0x61, 0x63, 0x63, 0x75, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x08, 0x61, 0x63, 0x63, 0x75, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x35, 0x0a, 0x0e, 0x6c, 0x6f, 0x6f, 0x70, 0x5f, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x0d, 0x6c, 0x6f, 0x6f, 0x70, 0x43, 0x6f, 0x6e, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x0a, 0x09, 0x6c, 0x6f, 0x6f, 0x70, 0x5f, 0x73, 0x74, 0x65, 0x70, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x08, 0x6c, 0x6f, 0x6f, 0x70, 0x53, 0x74, 0x65, 0x70, 0x12, 0x26, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x42, 0x0b, 0x0a, 0x09, 0x65, 0x78, 0x70, 0x72, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xc1, 0x03, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x46, 0x0a, 0x0e, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x0d, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x49, 0x0a, 0x0f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x02, 0x18, 0x01, 0x48, 0x00, 0x52, 0x0e, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x74, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0xac, 0x06, 0x0a, 0x0a, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x69, 0x6e, 0x65, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0b, 0x6c, 0x69, 0x6e, 0x65, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x09, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x45, 0x0a, 0x0b, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x3e, 0x0a, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x3c, 0x0a, 0x0e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x4d, 0x0a, 0x0f, 0x4d, 0x61, 0x63, 0x72, 0x6f, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x78, 0x70, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0xe0, 0x02, 0x0a, 0x09, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x59, 0x0a, 0x13, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x12, 0x61, 0x66, 0x66, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x40, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x1a, 0x35, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x22, 0x6f, 0x0a, 0x09, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x4f, 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x4f, 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x45, 0x52, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x4f, 0x4d, 0x50, 0x4f, 0x4e, 0x45, 0x4e, 0x54, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x42, 0x2e, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x42, 0x0b, 0x53, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0c, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_syntax_proto_rawDescOnce sync.Once file_cel_expr_syntax_proto_rawDescData = file_cel_expr_syntax_proto_rawDesc ) func file_cel_expr_syntax_proto_rawDescGZIP() []byte { file_cel_expr_syntax_proto_rawDescOnce.Do(func() { file_cel_expr_syntax_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_syntax_proto_rawDescData) }) return file_cel_expr_syntax_proto_rawDescData } var file_cel_expr_syntax_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_cel_expr_syntax_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_cel_expr_syntax_proto_goTypes = []interface{}{ (SourceInfo_Extension_Component)(0), // 0: cel.expr.SourceInfo.Extension.Component (*ParsedExpr)(nil), // 1: cel.expr.ParsedExpr (*Expr)(nil), // 2: cel.expr.Expr (*Constant)(nil), // 3: cel.expr.Constant (*SourceInfo)(nil), // 4: cel.expr.SourceInfo (*Expr_Ident)(nil), // 5: cel.expr.Expr.Ident (*Expr_Select)(nil), // 6: cel.expr.Expr.Select (*Expr_Call)(nil), // 7: cel.expr.Expr.Call (*Expr_CreateList)(nil), // 8: cel.expr.Expr.CreateList (*Expr_CreateStruct)(nil), // 9: cel.expr.Expr.CreateStruct (*Expr_Comprehension)(nil), // 10: cel.expr.Expr.Comprehension (*Expr_CreateStruct_Entry)(nil), // 11: cel.expr.Expr.CreateStruct.Entry nil, // 12: cel.expr.SourceInfo.PositionsEntry nil, // 13: cel.expr.SourceInfo.MacroCallsEntry (*SourceInfo_Extension)(nil), // 14: cel.expr.SourceInfo.Extension (*SourceInfo_Extension_Version)(nil), // 15: cel.expr.SourceInfo.Extension.Version (structpb.NullValue)(0), // 16: google.protobuf.NullValue (*durationpb.Duration)(nil), // 17: google.protobuf.Duration (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp } var file_cel_expr_syntax_proto_depIdxs = []int32{ 2, // 0: cel.expr.ParsedExpr.expr:type_name -> cel.expr.Expr 4, // 1: cel.expr.ParsedExpr.source_info:type_name -> cel.expr.SourceInfo 3, // 2: cel.expr.Expr.const_expr:type_name -> cel.expr.Constant 5, // 3: cel.expr.Expr.ident_expr:type_name -> cel.expr.Expr.Ident 6, // 4: cel.expr.Expr.select_expr:type_name -> cel.expr.Expr.Select 7, // 5: cel.expr.Expr.call_expr:type_name -> cel.expr.Expr.Call 8, // 6: cel.expr.Expr.list_expr:type_name -> cel.expr.Expr.CreateList 9, // 7: cel.expr.Expr.struct_expr:type_name -> cel.expr.Expr.CreateStruct 10, // 8: cel.expr.Expr.comprehension_expr:type_name -> cel.expr.Expr.Comprehension 16, // 9: cel.expr.Constant.null_value:type_name -> google.protobuf.NullValue 17, // 10: cel.expr.Constant.duration_value:type_name -> google.protobuf.Duration 18, // 11: cel.expr.Constant.timestamp_value:type_name -> google.protobuf.Timestamp 12, // 12: cel.expr.SourceInfo.positions:type_name -> cel.expr.SourceInfo.PositionsEntry 13, // 13: cel.expr.SourceInfo.macro_calls:type_name -> cel.expr.SourceInfo.MacroCallsEntry 14, // 14: cel.expr.SourceInfo.extensions:type_name -> cel.expr.SourceInfo.Extension 2, // 15: cel.expr.Expr.Select.operand:type_name -> cel.expr.Expr 2, // 16: cel.expr.Expr.Call.target:type_name -> cel.expr.Expr 2, // 17: cel.expr.Expr.Call.args:type_name -> cel.expr.Expr 2, // 18: cel.expr.Expr.CreateList.elements:type_name -> cel.expr.Expr 11, // 19: cel.expr.Expr.CreateStruct.entries:type_name -> cel.expr.Expr.CreateStruct.Entry 2, // 20: cel.expr.Expr.Comprehension.iter_range:type_name -> cel.expr.Expr 2, // 21: cel.expr.Expr.Comprehension.accu_init:type_name -> cel.expr.Expr 2, // 22: cel.expr.Expr.Comprehension.loop_condition:type_name -> cel.expr.Expr 2, // 23: cel.expr.Expr.Comprehension.loop_step:type_name -> cel.expr.Expr 2, // 24: cel.expr.Expr.Comprehension.result:type_name -> cel.expr.Expr 2, // 25: cel.expr.Expr.CreateStruct.Entry.map_key:type_name -> cel.expr.Expr 2, // 26: cel.expr.Expr.CreateStruct.Entry.value:type_name -> cel.expr.Expr 2, // 27: cel.expr.SourceInfo.MacroCallsEntry.value:type_name -> cel.expr.Expr 0, // 28: cel.expr.SourceInfo.Extension.affected_components:type_name -> cel.expr.SourceInfo.Extension.Component 15, // 29: cel.expr.SourceInfo.Extension.version:type_name -> cel.expr.SourceInfo.Extension.Version 30, // [30:30] is the sub-list for method output_type 30, // [30:30] is the sub-list for method input_type 30, // [30:30] is the sub-list for extension type_name 30, // [30:30] is the sub-list for extension extendee 0, // [0:30] is the sub-list for field type_name } func init() { file_cel_expr_syntax_proto_init() } func file_cel_expr_syntax_proto_init() { if File_cel_expr_syntax_proto != nil { return } if !protoimpl.UnsafeEnabled { file_cel_expr_syntax_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ParsedExpr); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Expr); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Constant); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SourceInfo); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Expr_Ident); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Expr_Select); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Expr_Call); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Expr_CreateList); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Expr_CreateStruct); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Expr_Comprehension); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Expr_CreateStruct_Entry); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SourceInfo_Extension); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_syntax_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SourceInfo_Extension_Version); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_cel_expr_syntax_proto_msgTypes[1].OneofWrappers = []interface{}{ (*Expr_ConstExpr)(nil), (*Expr_IdentExpr)(nil), (*Expr_SelectExpr)(nil), (*Expr_CallExpr)(nil), (*Expr_ListExpr)(nil), (*Expr_StructExpr)(nil), (*Expr_ComprehensionExpr)(nil), } file_cel_expr_syntax_proto_msgTypes[2].OneofWrappers = []interface{}{ (*Constant_NullValue)(nil), (*Constant_BoolValue)(nil), (*Constant_Int64Value)(nil), (*Constant_Uint64Value)(nil), (*Constant_DoubleValue)(nil), (*Constant_StringValue)(nil), (*Constant_BytesValue)(nil), (*Constant_DurationValue)(nil), (*Constant_TimestampValue)(nil), } file_cel_expr_syntax_proto_msgTypes[10].OneofWrappers = []interface{}{ (*Expr_CreateStruct_Entry_FieldKey)(nil), (*Expr_CreateStruct_Entry_MapKey)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_syntax_proto_rawDesc, NumEnums: 1, NumMessages: 15, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_syntax_proto_goTypes, DependencyIndexes: file_cel_expr_syntax_proto_depIdxs, EnumInfos: file_cel_expr_syntax_proto_enumTypes, MessageInfos: file_cel_expr_syntax_proto_msgTypes, }.Build() File_cel_expr_syntax_proto = out.File file_cel_expr_syntax_proto_rawDesc = nil file_cel_expr_syntax_proto_goTypes = nil file_cel_expr_syntax_proto_depIdxs = nil } cel-spec-0.24.0/tests/000077500000000000000000000000001500667630300144405ustar00rootroot00000000000000cel-spec-0.24.0/tests/BUILD.bazel000066400000000000000000000001751500667630300163210ustar00rootroot00000000000000package( default_visibility = ["//visibility:public"], ) licenses(["notice"]) # Apache 2.0 exports_files(["LICENSE"]) cel-spec-0.24.0/tests/README.md000066400000000000000000000017221500667630300157210ustar00rootroot00000000000000# CEL Conformance Tests The CEL conformance test suites provide a complementary specification of the CEL language in the form of executable software. All CEL implementations which pass the conformance tests should give valid CEL expressions the same meaning. As much as possible, the tests are driven by data files. Implementations are expected to read the `tests/simple/testdata` files as inputs to the parse, check, and evaluation behaviors of a given implementation. Reference implementations may be found in the following locations: * (cel-go conformance)[https://github.com/google/cel-go/tree/master/conformance] * (cel-cpp conformance)[https://github.com/google/cel-cpp/tree/master/conformance] * (cel-java conformance)[https://github.com/google/cel-java/tree/main/conformance/src/test/java/dev/cel/conformance] Each CEL implementation should also have its own unit tests and benchmarks for testing subcomponents, its API, and other implementation-dependent features. cel-spec-0.24.0/tests/simple/000077500000000000000000000000001500667630300157315ustar00rootroot00000000000000cel-spec-0.24.0/tests/simple/BUILD.bazel000066400000000000000000000002361500667630300176100ustar00rootroot00000000000000package( default_visibility = ["//visibility:public"], ) licenses(["notice"]) # Apache 2.0 exports_files(["LICENSE"] + glob(["testdata/*.textproto"])) cel-spec-0.24.0/tests/simple/testdata/000077500000000000000000000000001500667630300175425ustar00rootroot00000000000000cel-spec-0.24.0/tests/simple/testdata/README.md000066400000000000000000000050101500667630300210150ustar00rootroot00000000000000# Simple Conformance Test Data Files The test data files for the `simple` conformance test suite are described by the `SimpleTestFile` message defined in [`simple.proto`](../../../proto/cel/expr/conformance/test/simple.proto). See the documentation in that file for the meaning of the various fields. A run of the simple tests chooses one or more data files and attempts to run all the tests in those files. Test files are organized so that implementations can implement a prescribed subset of CEL functionality. For instance, implementations which don't support macros can avoid testing against the `macros.textproto` file. The available test files are: - [`plumbing.textproto`](plumbing.textproto) Checks the basics of the CelService protocol to ensure that the server is implemented correctly. - [`basic.textproto`](basic.textproto) Checks the most basic operations that all CEL implementations should support: - literals of various types; - variables of various types. - [`comparisons.textproto`](comparisons.textproto) Checks the standard functions that return a boolean value. - [`conversions.textproto`](conversions.textproto) Checks conversions between types and type tests. - [`dynamic.textproto`](dynamic.textproto) Checks the automatic conversions associated with the well-known protobuf messages. - [`enums.textproto`](enums.textproto) Checks handling of protobuf enums. - [`fields.textproto`](fields.textproto) Checks field selection in messages and maps. - [`fp_math.textproto`](fp_math.textproto) Checks floating-point arithmetic. - [`integer_math.textproto`](integer_math.textproto) Checks integer arithmetic. - [`lists.textproto`](lists.textproto) Checks list operations. - [`logic.textproto`](logic.textproto) Checks special logical operators. - [`macros.textproto`](macros.textproto) Checks use of CEL macros. - [`namespace.textproto`](namespace.textproto) Checks use of namespaces and qualified identifiers. - [`parse.textproto`](parse.textproto) End-to-end tests of parsing. More detailed parsing tests will the subject of a later conformance suite. - [`proto2.textproto`](proto2.textproto) Checks use of protocol buffers version 2. - [`proto3.textproto`](proto3.textproto) Checks use of protocol buffers version 3. - [`string.textproto`](string.textproto) Checks functions on strings. - [`timestamps.textproto`](timestamps.textproto) Checks `timestamp` and `duration` values and operations. - [`unknowns.textproto`](unknowns.textproto) Checks evaluation where some inputs are marked as unknown. cel-spec-0.24.0/tests/simple/testdata/basic.textproto000066400000000000000000000142771500667630300226300ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "basic" description: "Basic conformance tests that all implementations should pass." section { name: "self_eval_zeroish" description: "Simple self-evaluating forms to zero-ish values." test { name: "self_eval_int_zero" expr: "0" value: { int64_value: 0 } } test { name: "self_eval_uint_zero" expr: "0u" value: { uint64_value: 0 } } test { name: "self_eval_uint_alias_zero" expr: "0U" value: { uint64_value: 0 } } test { name: "self_eval_float_zero" expr: "0.0" value: { double_value: 0 } } test { name: "self_eval_float_zerowithexp" expr: "0e+0" value: { double_value: 0 } } test { name: "self_eval_string_empty" expr: "''" value: { string_value: "" } } test { name: "self_eval_string_empty_quotes" expr: '""' value: { string_value: "" } } test { name: "self_eval_string_raw_prefix" expr: 'r""' value: { string_value: "" } } test { name: "self_eval_bytes_empty" expr: 'b""' value: { bytes_value: "" } } test { name: "self_eval_bool_false" expr: "false" value: { bool_value: false } } test { name: "self_eval_null" expr: "null" value: { null_value: NULL_VALUE } } test { name: "self_eval_empty_list" expr: '[]' value: { list_value: {} } } test { name: "self_eval_empty_map" expr: '{}' value: { map_value: {} } } test { name: "self_eval_string_raw_prefix_triple_double" expr: 'r""""""' value: { string_value: "" } } test { name: "self_eval_string_raw_prefix_triple_single" expr: "r''''''" value: { string_value: "" } } } section { name: "self_eval_nonzeroish" description: "Simple self-evaluating forms to non-zero-ish values." test { name: "self_eval_int_nonzero" expr: "42" value: { int64_value: 42 } } test { name: "self_eval_uint_nonzero" expr: "123456789u" value: { uint64_value: 123456789 } } test { name: "self_eval_uint_alias_nonzero" expr: "123456789U" value: { uint64_value: 123456789 } } test { name: "self_eval_int_negative_min" expr: "-9223372036854775808" value: { int64_value: -9223372036854775808 } } test { name: "self_eval_float_negative_exp" expr: "-2.3e+1" value: { double_value: -23.0 } } test { name: "self_eval_string_excl" expr: '"!"' value: { string_value: "!" } } test { name: "self_eval_string_escape" expr: "'\\''" value: { string_value: "'" } } test { name: "self_eval_bytes_escape" expr: "b'ÿ'" value: { bytes_value: "\303\277" } } test { name: "self_eval_bytes_invalid_utf8" expr: "b'\\000\\xff'" value: { bytes_value: "\000\377" } } test { name: "self_eval_list_singleitem" expr: "[-1]" value: { list_value { values: { int64_value: -1 } } } } test { name: "self_eval_map_singleitem" expr: '{"k":"v"}' value: { map_value { entries { key: { string_value: "k" } value: { string_value: "v" } } } } } test { name: "self_eval_bool_true" expr: "true" value: { bool_value: true } } test { name: "self_eval_int_hex" expr: "0x55555555" value: { int64_value: 1431655765 } } test { name: "self_eval_int_hex_negative" expr: "-0x55555555" value: { int64_value: -1431655765 } } test { name: "self_eval_uint_hex" expr: "0x55555555u" value: { uint64_value: 1431655765 } } test { name: "self_eval_uint_alias_hex" expr: "0x55555555U" value: { uint64_value: 1431655765 } } test { name: "self_eval_unicode_escape_four" expr: '"\\u270c"' value: { string_value: "\xe2\x9c\x8c" } } test { name: "self_eval_unicode_escape_eight" expr: '"\\U0001f431"' value: { string_value: "\xf0\x9f\x90\xb1" } } test { name: "self_eval_ascii_escape_seq" expr: '"\\a\\b\\f\\n\\r\\t\\v\\"\\\'\\\\"' value: { string_value: "\a\b\f\n\r\t\v\"'\\" } } } section { name: "variables" description: "Variable lookups." test { name: "self_eval_bound_lookup" expr: "x" type_env: { name: "x", ident: { type: { primitive: INT64 } } } bindings: { key: "x" value: { value: { int64_value: 123 } } } value: { int64_value: 123 } } test { name: "self_eval_unbound_lookup" description: "An unbound variable should be marked as an error during execution. See google/cel-go#154" expr: "x" disable_check: true eval_error: { errors: { message: "undeclared reference to 'x' (in container '')" } } } test { name: "unbound_is_runtime_error" description: "Make sure we can short-circuit around an unbound variable." expr: "x || true" disable_check: true value { bool_value: true } } } section { name: "functions" description: "Basic mechanisms for function calls." test { name: "binop" expr: "1 + 1" value { int64_value: 2 } } test { name: "unbound" expr: "f_unknown(17)" disable_check: true eval_error { errors { message: "unbound function" } } } test { name: "unbound_is_runtime_error" expr: "f_unknown(17) || true" disable_check: true value { bool_value: true } } } section { name: "reserved_const" description: "Named constants should never be shadowed by identifiers." test { name: "false" expr: "false" type_env: { name: "false" ident: { type: { primitive: BOOL } } } bindings { key: "false" value: { value: { bool_value: true } } } value: { bool_value: false } } test { name: "true" expr: "true" type_env: { name: "true" ident: { type: { primitive: BOOL } } } bindings { key: "true" value: { value: { bool_value: false } } } value: { bool_value: true } } test { name: "null" expr: "null" type_env: { name: "null" ident: { type: { primitive: BOOL } } } bindings { key: "null" value: { value: { bool_value: true } } } value: { null_value: 0 } } } cel-spec-0.24.0/tests/simple/testdata/bindings_ext.textproto000066400000000000000000000017161500667630300242160ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "bindings_ext" description: "Tests for the bindings extension library." section: { name: "bind" test: { name: "boolean_literal" expr: "cel.bind(t, true, t)" value: { bool_value: true } } test: { name: "string_concat" expr: "cel.bind(msg, \"hello\", msg + msg + msg)" value: { string_value: "hellohellohello" } } test: { name: "bind_nested" expr: "cel.bind(t1, true, cel.bind(t2, true, t1 && t2))" value: { bool_value: true } } test: { name: "macro_exists" expr: "cel.bind(valid_elems, [1, 2, 3], [3, 4, 5].exists(e, e in valid_elems))" value: { bool_value: true } } test: { name: "macro_not_exists" expr: "cel.bind(valid_elems, [1, 2, 3], ![4, 5].exists(e, e in valid_elems))" value: { bool_value: true } } } cel-spec-0.24.0/tests/simple/testdata/block_ext.textproto000066400000000000000000000724651500667630300235240ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile # This conformance test relies on the test-only macros cel.block, cel.index, # cel.iterVar, and cel.accuVar. These test-only macros allow exercising # cel.block without the optimizers being present. # `cel.block(l, e)` must rewrite itself to be `cel.block(l, e)` # `cel.index(N)` must rewrite itself to `@indexN` # `cel.iterVar(N, M)` must rewrite itself to `@it:N:M` # `cel.accuVar(N, M)` must rewrite itself to `@ac:N:M` name: "block_ext" description: "Tests for cel.block." section: { name: "basic" test: { name: "int_add" expr: "cel.block([1, cel.index(0) + 1, cel.index(1) + 1, cel.index(2) + 1], cel.index(3))" value: { int64_value: 4 } } test: { name: "size_1" expr: "cel.block([[1, 2], size(cel.index(0)), cel.index(1) + cel.index(1), cel.index(2) + 1], cel.index(3))" value: { int64_value: 5 } } test: { name: "size_2" expr: "cel.block([[1, 2], size(cel.index(0)), 2 + cel.index(1), cel.index(2) + cel.index(1), cel.index(3) + 1], cel.index(4))" value: { int64_value: 7 } } test: { name: "size_3" expr: "cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), cel.index(1) + cel.index(1), cel.index(4) + cel.index(3), cel.index(5) + cel.index(3)], cel.index(6))" value: { int64_value: 6 } } test: { name: "size_4" expr: "cel.block([[0], size(cel.index(0)), [1, 2], size(cel.index(2)), [1, 2, 3], size(cel.index(4)), 5 + cel.index(1), cel.index(6) + cel.index(1), cel.index(7) + cel.index(3), cel.index(8) + cel.index(3), cel.index(9) + cel.index(5), cel.index(10) + cel.index(5)], cel.index(11))" value: { int64_value: 17 } } test: { name: "timestamp" expr: "cel.block([timestamp(1000000000), int(cel.index(0)), timestamp(cel.index(1)), cel.index(2).getFullYear(), timestamp(50), int(cel.index(4)), timestamp(cel.index(5)), timestamp(200), int(cel.index(7)), timestamp(cel.index(8)), cel.index(9).getFullYear(), timestamp(75), int(cel.index(11)), timestamp(cel.index(12)), cel.index(13).getFullYear(), cel.index(3) + cel.index(14), cel.index(6).getFullYear(), cel.index(15) + cel.index(16), cel.index(17) + cel.index(3), cel.index(6).getSeconds(), cel.index(18) + cel.index(19), cel.index(20) + cel.index(10), cel.index(21) + cel.index(10), cel.index(13).getMinutes(), cel.index(22) + cel.index(23), cel.index(24) + cel.index(3)], cel.index(25))" value: { int64_value: 13934 } } test: { name: "map_index" expr: "cel.block([{\"a\": 2}, cel.index(0)[\"a\"], cel.index(1) * cel.index(1), cel.index(1) + cel.index(2)], cel.index(3))" value: { int64_value: 6 } } test: { name: "nested_map_construction" expr: "cel.block([{\"b\": 1}, {\"e\": cel.index(0)}], {\"a\": cel.index(0), \"c\": cel.index(0), \"d\": cel.index(1), \"e\": cel.index(1)})" value: { map_value: { entries { key: { string_value: 'a' } value: { map_value: { entries { key: { string_value: 'b' } value: { int64_value: 1 } } } } } entries { key: { string_value: 'c' } value: { map_value: { entries { key: { string_value: 'b' } value: { int64_value: 1 } } } } } entries { key: { string_value: 'd' } value: { map_value: { entries { key: { string_value: 'e' } value: { map_value: { entries { key: { string_value: 'b' } value: { int64_value: 1 } } } } } } } } entries { key: { string_value: 'e' } value: { map_value: { entries { key: { string_value: 'e' } value: { map_value: { entries { key: { string_value: 'b' } value: { int64_value: 1 } } } } } } } } } } } test: { name: "nested_list_construction" expr: "cel.block([[1, 2, 3, 4], [1, 2], [cel.index(1), cel.index(0)]], [1, cel.index(0), 2, cel.index(0), 5, cel.index(0), 7, cel.index(2), cel.index(1)])" value: { list_value: { values { int64_value: 1 } values { list_value: { values { int64_value: 1 } values { int64_value: 2 } values { int64_value: 3 } values { int64_value: 4 } } } values { int64_value: 2 } values { list_value: { values { int64_value: 1 } values { int64_value: 2 } values { int64_value: 3 } values { int64_value: 4 } } } values { int64_value: 5 } values { list_value: { values { int64_value: 1 } values { int64_value: 2 } values { int64_value: 3 } values { int64_value: 4 } } } values { int64_value: 7 } values { list_value: { values { list_value: { values { int64_value: 1 } values { int64_value: 2 } } } values { list_value: { values { int64_value: 1 } values { int64_value: 2 } values { int64_value: 3 } values { int64_value: 4 } } } } } values { list_value: { values { int64_value: 1 } values { int64_value: 2 } } } } } } test: { name: "select" expr: "cel.block([msg.single_int64, cel.index(0) + cel.index(0)], cel.index(1))" value: { int64_value: 6 } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "select_nested_1" expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, cel.index(1).single_int32, cel.index(2) + cel.index(3), cel.index(4) + cel.index(2), msg.single_int64, cel.index(5) + cel.index(6), cel.index(1).oneof_type, cel.index(8).payload, cel.index(9).single_int64, cel.index(7) + cel.index(10)], cel.index(11))" value: { int64_value: 31 } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "select_nested_2" expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).oneof_type, cel.index(2).payload, cel.index(3).oneof_type, cel.index(4).payload, cel.index(5).oneof_type, cel.index(6).payload, cel.index(7).single_bool, true || cel.index(8), cel.index(4).child, cel.index(10).child, cel.index(11).payload, cel.index(12).single_bool], cel.index(9) || cel.index(13))" value: { bool_value: true } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "select_nested_message_map_index_1" expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[1], cel.index(3) + cel.index(3), cel.index(4) + cel.index(3)], cel.index(5))" value: { int64_value: 15 } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "select_nested_message_map_index_2" expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_int32_int64, cel.index(2)[0], cel.index(2)[1], cel.index(3) + cel.index(4), cel.index(2)[2], cel.index(5) + cel.index(6)], cel.index(7))" value: { int64_value: 8 } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "ternary" expr: "cel.block([msg.single_int64, cel.index(0) > 0, cel.index(1) ? cel.index(0) : 0], cel.index(2))" value: { int64_value: 3 } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "nested_ternary" expr: "cel.block([msg.single_int64, msg.single_int32, cel.index(0) > 0, cel.index(1) > 0, cel.index(0) + cel.index(1), cel.index(3) ? cel.index(4) : 0, cel.index(2) ? cel.index(5) : 0], cel.index(6))" value: { int64_value: 8 } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "multiple_macros_1" expr: "cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) > 0), size([cel.index(0)]), [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) > 1), size([cel.index(2)])], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))" value: { int64_value: 4 } } test: { name: "multiple_macros_2" expr: "cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) > 0), [cel.index(0)], ['a'].exists(cel.iterVar(0, 1), cel.iterVar(0, 1) == 'a'), [cel.index(2)]], cel.index(1) + cel.index(1) + cel.index(3) + cel.index(3))" value: { list_value: { values { bool_value: true } values { bool_value: true } values { bool_value: true } values { bool_value: true } } } } test: { name: "multiple_macros_3" expr: "cel.block([[1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) > 0)], cel.index(0) && cel.index(0) && [1].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) > 1) && [2].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) > 1))" value: { bool_value: false } } test: { name: "nested_macros_1" expr: "cel.block([[1, 2, 3]], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1)))" value: { list_value: { values { list_value: { values { int64_value: 2 } values { int64_value: 3 } values { int64_value: 4 } } } values { list_value: { values { int64_value: 2 } values { int64_value: 3 } values { int64_value: 4 } } } values { list_value: { values { int64_value: 2 } values { int64_value: 3 } values { int64_value: 4 } } } } } } test: { name: "nested_macros_2" expr: "[1, 2].map(cel.iterVar(0, 0), [1, 2, 3].filter(cel.iterVar(1, 0), cel.iterVar(1, 0) == cel.iterVar(0, 0)))" value: { list_value: { values { list_value: { values { int64_value: 1 } } } values { list_value: { values { int64_value: 2 } } } } } } test: { name: "adjacent_macros" expr: "cel.block([[1, 2, 3], cel.index(0).map(cel.iterVar(0, 0), cel.index(0).map(cel.iterVar(1, 0), cel.iterVar(1, 0) + 1))], cel.index(1) == cel.index(1))" value: { bool_value: true } } test: { name: "macro_shadowed_variable_1" expr: "cel.block([x - 1, cel.index(0) > 3], [cel.index(1) ? cel.index(0) : 5].exists(cel.iterVar(0, 0), cel.iterVar(0, 0) - 1 > 3) || cel.index(1))" value: { bool_value: true } type_env: { name: "x" ident: { type: { primitive: INT64 }} } bindings: { key: "x" value: { value: { int64_value: 5 } } } } test: { name: "macro_shadowed_variable_2" expr: "['foo', 'bar'].map(cel.iterVar(1, 0), [cel.iterVar(1, 0) + cel.iterVar(1, 0), cel.iterVar(1, 0) + cel.iterVar(1, 0)]).map(cel.iterVar(0, 0), [cel.iterVar(0, 0) + cel.iterVar(0, 0), cel.iterVar(0, 0) + cel.iterVar(0, 0)])" value: { list_value: { values { list_value: { values { list_value: { values { string_value: "foofoo" } values { string_value: "foofoo" } values { string_value: "foofoo" } values { string_value: "foofoo" } } } values { list_value: { values { string_value: "foofoo" } values { string_value: "foofoo" } values { string_value: "foofoo" } values { string_value: "foofoo" } } } } } values { list_value: { values { list_value: { values { string_value: "barbar" } values { string_value: "barbar" } values { string_value: "barbar" } values { string_value: "barbar" } } } values { list_value: { values { string_value: "barbar" } values { string_value: "barbar" } values { string_value: "barbar" } values { string_value: "barbar" } } } } } } } type_env: { name: "x" ident: { type: { primitive: INT64 }} } bindings: { key: "x" value: { value: { int64_value: 5 } } } } test: { name: "inclusion_list" expr: "cel.block([[1, 2, 3], 1 in cel.index(0), 2 in cel.index(0), cel.index(1) && cel.index(2), [3, cel.index(0)], 3 in cel.index(4), cel.index(5) && cel.index(1)], cel.index(3) && cel.index(6))" value: { bool_value: true } } test: { name: "inclusion_map" expr: "cel.block([{true: false}, {\"a\": 1, 2: cel.index(0), 3: cel.index(0)}], 2 in cel.index(1))" value: { bool_value: true } } test: { name: "presence_test" expr: "cel.block([{\"a\": true}, has(cel.index(0).a), cel.index(0)[\"a\"]], cel.index(1) && cel.index(2))" value: { bool_value: true } } test: { name: "presence_test_2" expr: "cel.block([{\"a\": true}, has(cel.index(0).a)], cel.index(1) && cel.index(1))" value: { bool_value: true } } test: { name: "presence_test_with_ternary" expr: "cel.block([msg.oneof_type, has(cel.index(0).payload), cel.index(0).payload, cel.index(2).single_int64, cel.index(1) ? cel.index(3) : 0], cel.index(4))" value: { int64_value: 10 } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "presence_test_with_ternary_2" expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(0).payload), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))" value: { int64_value: 10 } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "presence_test_with_ternary_3" expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).single_int64, has(cel.index(1).single_int64), cel.index(2) * 0, cel.index(3) ? cel.index(2) : cel.index(4)], cel.index(5))" value: { int64_value: 10 } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "presence_test_with_ternary_nested" expr: "cel.block([msg.oneof_type, cel.index(0).payload, cel.index(1).map_string_string, has(msg.oneof_type), has(cel.index(0).payload), cel.index(3) && cel.index(4), has(cel.index(1).single_int64), cel.index(5) && cel.index(6), has(cel.index(1).map_string_string), has(cel.index(2).key), cel.index(8) && cel.index(9), cel.index(2).key, cel.index(11) == \"A\", cel.index(10) ? cel.index(12) : false], cel.index(7) ? cel.index(13) : false)" value: { bool_value: true } type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" }} } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 3 single_int32: 5 oneof_type: { payload: { single_int32: 8 single_int64: 10 map_int32_int64 { key: 0 value: 1 } map_int32_int64 { key: 1 value: 5 } map_int32_int64 { key: 2 value: 2 } map_string_string { key: "key" value: "A" } } } } } } } } } test: { name: "optional_list" expr: "cel.block([optional.none(), [?cel.index(0), ?optional.of(opt_x)], [5], [10, ?cel.index(0), cel.index(1), cel.index(1)], [10, cel.index(2), cel.index(2)]], cel.index(3) == cel.index(4))" value: { bool_value: true } type_env: { name: "opt_x" ident: { type: { primitive: INT64 }} } bindings: { key: "opt_x", value: { value: { int64_value: 5 } } } } test: { name: "optional_map" expr: "cel.block([optional.of(\"hello\"), {?\"hello\": cel.index(0)}, cel.index(1)[\"hello\"], cel.index(2) + cel.index(2)], cel.index(3) == \"hellohello\")" value: { bool_value: true } } test: { name: "optional_map_chained" expr: "cel.block([{\"key\": \"test\"}, optional.of(\"test\"), {?\"key\": cel.index(1)}, cel.index(2)[?\"bogus\"], cel.index(0)[?\"bogus\"], cel.index(3).or(cel.index(4)), cel.index(0)[\"key\"], cel.index(5).orValue(cel.index(6))], cel.index(7))" value: { string_value: 'test' } } test: { name: "optional_message" container: "cel.expr.conformance.proto3" expr: "cel.block([optional.ofNonZeroValue(1), optional.of(4), TestAllTypes{?single_int64: cel.index(0), ?single_int32: cel.index(1)}, cel.index(2).single_int32, cel.index(2).single_int64, cel.index(3) + cel.index(4)], cel.index(5))" value: { int64_value: 5 } } test: { name: "call" expr: "cel.block([\"h\" + \"e\", cel.index(0) + \"l\", cel.index(1) + \"l\", cel.index(2) + \"o\", cel.index(3) + \" world\"], cel.index(4).matches(cel.index(3)))" value: { bool_value: true } } } cel-spec-0.24.0/tests/simple/testdata/comparisons.textproto000066400000000000000000001716141500667630300241030ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "comparisons" description: "Tests for boolean-valued functions and operators." section { name: "eq_literal" description: "Literals comparison on _==_" test { name: "eq_int" expr: "1 == 1" value: { bool_value: true } } test { name: "not_eq_int" expr: "-1 == 1" value: { bool_value: false } } test { name: "eq_int_uint" expr: "dyn(1) == 1u" value: { bool_value: true } } test { name: "not_eq_int_uint" expr: "dyn(2) == 1u" value: { bool_value: false } } test { name: "eq_int_double" expr: "dyn(1) == 1.0" value: { bool_value: true } } test { name: "not_eq_int_double" expr: "dyn(2) == 1.0" value: { bool_value: false } } test { name: "eq_uint" expr: "2u == 2u" value: { bool_value: true } } test { name: "not_eq_uint" expr: "1u == 2u" value: { bool_value: false } } test { name: "eq_uint_int" expr: "dyn(1u) == 1" value: { bool_value: true } } test { name: "not_eq_uint_int" expr: "dyn(2u) == 1" value: { bool_value: false } } test { name: "eq_uint_double" expr: "dyn(1u) == 1.0" value: { bool_value: true } } test { name: "not_eq_uint_double" expr: "dyn(2u) == 1.0" value: { bool_value: false } } test { name: "eq_double" expr: "1.0 == 1.0e+0" value: { bool_value: true } } test { name: "not_eq_double" expr: "-1.0 == 1.0" value: { bool_value: false } } test { name: "not_eq_double_nan" expr: "0.0/0.0 == 0.0/0.0" value: { bool_value: false } } test { name: "not_eq_int_double_nan" expr: "dyn(1) == 0.0/0.0" value: { bool_value: false } } test { name: "not_eq_uint_double_nan" expr: "dyn(1u) == 0.0/0.0" value: { bool_value: false } } test { name: "eq_double_int" expr: "dyn(1.0) == 1" value: { bool_value: true } } test { name: "not_eq_double_int" expr: "dyn(2.0) == 1" value: { bool_value: false } } test { name: "eq_double_uint" expr: "dyn(1.0) == 1u" value: { bool_value: true } } test { name: "not_eq_double_uint" expr: "dyn(2.0) == 1u" value: { bool_value: false } } test { name: "eq_string" expr: "'' == \"\"" value: { bool_value: true } } test { name: "not_eq_string" expr: "'a' == 'b'" value: { bool_value: false } } test { name: "eq_raw_string" expr: "'abc' == r'abc'" value: { bool_value: true } } test { name: "not_eq_string_case" expr: "'abc' == 'ABC'" value: { bool_value: false } } test { name: "eq_string_unicode" expr: "'ίσος' == 'ίσος'" value: { bool_value: true } } test { name: "not_eq_string_unicode_ascii" expr: "'a' == 'à'" value: { bool_value: false } } test { name: "no_string_normalization" description: "Should not normalize Unicode." expr: "'Am\\u00E9lie' == 'Ame\\u0301lie'" value: { bool_value: false } } test { name: "eq_null" expr: "null == null" value: { bool_value: true } } test { name: "eq_bool" expr: "true == true" value: { bool_value: true } } test { name: "not_eq_bool" expr: "false == true" value: { bool_value: false } } test { name: "eq_bytes" description: "Test bytes literal equality with encoding" expr: "b'ÿ' == b'\\303\\277'" value: { bool_value: true } } test { name: "not_eq_bytes" expr: "b'abc' == b'abcd'" value: { bool_value: false } } test { name: "eq_list_empty" expr: "[] == []" value: { bool_value: true } } test { name: "eq_list_null" expr: "[null] == [null]" value: { bool_value: true } } test { name: "not_eq_list_null" expr: "['1', '2', null] == ['1', '2', '3']" value: { bool_value: false } } test { name: "eq_list_numbers" expr: "[1, 2, 3] == [1, 2, 3]" value: { bool_value: true } } test { name: "eq_list_mixed_type_numbers" expr: "[1.0, 2.0, 3] == [1u, 2, 3u]" value: { bool_value: true } } test { name: "not_eq_list_mixed_type_numbers" expr: "[1.0, 2.1] == [1u, 2]" value: { bool_value: false } } test { name: "not_eq_list_order" expr: "[1, 2, 3] == [1, 3, 2]" value: { bool_value: false } } test { name: "not_eq_list_string_case" expr: "['case'] == ['cAse']" value: { bool_value: false } } test { name: "not_eq_list_length" expr: "['one'] == [2, 3]" disable_check: true value: { bool_value: false } } test { name: "not_eq_list_false_vs_types" expr: "[1, 'dos', 3] == [1, 2, 4]" value: { bool_value: false } } test { name: "eq_map_empty" expr: "{} == {}" value: { bool_value: true } } test { name: "eq_map_null" expr: "{'k': null} == {'k': null}" value: { bool_value: true } } test { name: "not_eq_map_null" expr: "{'k': 1, 'j': 2} == {'k': 1, 'j': null}" value: { bool_value: false } } test { name: "eq_map_onekey" expr: "{'k':'v'} == {\"k\":\"v\"}" value: { bool_value: true } } test { name: "eq_map_double_value" expr: "{'k':1.0} == {'k':1e+0}" value: { bool_value: true } } test { name: "eq_map_mixed_type_numbers" expr: "{1: 1.0, 2u: 3u} == {1u: 1, 2: 3.0}" value: { bool_value: true } } test { name: "not_eq_map_value" expr: "{'k':'v'} == {'k':'v1'}" value: { bool_value: false } } test { name: "not_eq_map_extra_key" expr: "{'k':'v','k1':'v1'} == {'k':'v'}" value: { bool_value: false } } test { name: "eq_map_key_order" expr: "{'k1':'v1','k2':'v2'} == {'k2':'v2','k1':'v1'}" value: { bool_value: true } } test { name: "not_eq_map_key_casing" expr: "{'key':'value'} == {'Key':'value'}" value: { bool_value: false } } test { name: "not_eq_map_false_vs_types" expr: "{'k1': 1, 'k2': 'dos', 'k3': 3} == {'k1': 1, 'k2': 2, 'k3': 4}" value: { bool_value: false } } test { name: "eq_mixed_types" expr: "1.0 == 1" disable_check: true # need to make it fail in the evaluation phase value: { bool_value: true } } test { name: "eq_list_elem_mixed_types" expr: "[1] == [1.0]" disable_check: true # need to make it fail in the evaluation phase value: { bool_value: true } } test { name: "eq_map_value_mixed_types" expr: "{'k':'v', 1:1} == {'k':'v', 1:'v1'}" value: { bool_value: false } } test { name: "eq_dyn_json_null" expr: "dyn(google.protobuf.Value{}) == null" value: { bool_value: true } } test { name: "not_eq_dyn_bool_null" expr: "dyn(false) == null" value: { bool_value: false } } test { name: "not_eq_dyn_bytes_null" expr: "dyn(b'') == null" value: { bool_value: false } } test { name: "not_eq_dyn_double_null" expr: "dyn(2.1) == null" value: { bool_value: false } } test { name: "not_eq_dyn_duration_null" expr: "dyn(duration('0s')) == null" value: { bool_value: false } } test { name: "not_eq_dyn_int_null" expr: "dyn(1) == null" value: { bool_value: false } } test { name: "not_eq_dyn_list_null" expr: "dyn([]) == null" value: { bool_value: false } } test { name: "not_eq_dyn_map_null" expr: "dyn({}) == null" value: { bool_value: false } } test { name: "not_eq_dyn_proto2_msg_null" container: "cel.expr.conformance.proto2" expr: "dyn(TestAllTypes{}) == null" value: { bool_value: false } } test { name: "not_eq_dyn_proto3_msg_null" container: "cel.expr.conformance.proto3" expr: "dyn(TestAllTypes{}) == null" value: { bool_value: false } } test { name: "not_eq_dyn_string_null" expr: "dyn('') == null" value: { bool_value: false } } test { name: "not_eq_dyn_timestamp_null" expr: "dyn(timestamp(0)) == null" value: { bool_value: false } } test { name: "not_eq_list_elem_null" expr: "[1, 2, null] == [1, null, 3]" value: { bool_value: false } } test { name: "not_eq_map_value_null" expr: "{1:'hello', 2:'world'} == {1:'goodbye', 2:null}" value: { bool_value: false } } test { name: "eq_dyn_int_uint" expr: "dyn(1) == 1u" value: { bool_value: true } } test { name: "eq_dyn_int_double" expr: "dyn(1) == 1.0" value: { bool_value: true } } test { name: "eq_dyn_uint_int" expr: "dyn(1u) == 1" value: { bool_value: true } } test { name: "eq_dyn_uint_double" expr: "dyn(1u) == 1.0" value: { bool_value: true } } test { name: "eq_dyn_double_int" expr: "dyn(1.0) == 1" value: { bool_value: true } } test { name: "eq_dyn_double_uint" expr: "dyn(1.0) == 1u" value: { bool_value: true } } test { name: "not_eq_dyn_int_uint" expr: "dyn(1) == 2u" value: { bool_value: false } } test { name: "not_eq_dyn_int_double" expr: "dyn(1) == 2.0" value: { bool_value: false } } test { name: "not_eq_dyn_uint_int" expr: "dyn(1u) == 2" value: { bool_value: false } } test { name: "not_eq_dyn_uint_double" expr: "dyn(1u) == 120" value: { bool_value: false } } test { name: "not_eq_dyn_double_int" expr: "dyn(1.0) == 2" value: { bool_value: false } } test { name: "not_eq_dyn_double_uint" expr: "dyn(1.0) == 2u" value: { bool_value: false } } } section { name: "eq_wrapper" description: "Wrapper type comparison on _==_. Wrapper types treated as boxed primitives when they appear on message fields. An unset wrapper field should be treated as null. The tests show the distinction between unset, empty, and set equality behavior." test { name: "eq_bool" expr: "google.protobuf.BoolValue{value: true} == true" value: { bool_value: true } } test { name: "eq_bool_empty" expr: "google.protobuf.BoolValue{} == false" value: { bool_value: true } } test { name: "eq_bool_not_null" expr: "google.protobuf.BoolValue{} != null" value: { bool_value: true } } test { name: "eq_bool_proto2_null" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_bool_wrapper == null" value: { bool_value: true } } test { name: "eq_bool_proto3_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_bool_wrapper == null" value: { bool_value: true } } test { name: "eq_bytes" expr: "google.protobuf.BytesValue{value: b'set'} == b'set'" value: { bool_value: true } } test { name: "eq_bytes_empty" expr: "google.protobuf.BytesValue{} == b''" value: { bool_value: true } } test { name: "eq_bytes_not_null" expr: "google.protobuf.BytesValue{} != null" value: { bool_value: true } } test { name: "eq_bytes_proto2_null" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_bytes_wrapper == null" value: { bool_value: true } } test { name: "eq_bytes_proto3_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_bytes_wrapper == null" value: { bool_value: true } } test { name: "eq_double" expr: "google.protobuf.DoubleValue{value: -1.175494e-40} == -1.175494e-40" value: { bool_value: true } } test { name: "eq_double_empty" expr: "google.protobuf.DoubleValue{} == 0.0" value: { bool_value: true } } test { name: "eq_double_not_null" expr: "google.protobuf.DoubleValue{} != null" value: { bool_value: true } } test { name: "eq_double_proto2_null" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_double_wrapper == null" value: { bool_value: true } } test { name: "eq_double_proto3_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_double_wrapper == null" value: { bool_value: true } } test { name: "eq_float" expr: "google.protobuf.FloatValue{value: -1.5} == -1.5" value: { bool_value: true } } test { name: "eq_float_empty" expr: "google.protobuf.FloatValue{} == 0.0" value: { bool_value: true } } test { name: "eq_float_not_null" expr: "google.protobuf.FloatValue{} != null" value: { bool_value: true } } test { name: "eq_float_proto2_null" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_float_wrapper == null" value: { bool_value: true } } test { name: "eq_float_proto3_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_float_wrapper == null" value: { bool_value: true } } test { name: "eq_int32" expr: "google.protobuf.Int32Value{value: 123} == 123" value: { bool_value: true } } test { name: "eq_int32_empty" expr: "google.protobuf.Int32Value{} == 0" value: { bool_value: true } } test { name: "eq_int32_not_null" expr: "google.protobuf.Int32Value{} != null" value: { bool_value: true } } test { name: "eq_int32_proto2_null" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_int32_wrapper == null" value: { bool_value: true } } test { name: "eq_int32_proto3_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_int32_wrapper == null" value: { bool_value: true } } test { name: "eq_int64" expr: "google.protobuf.Int64Value{value: 2147483650} == 2147483650" value: { bool_value: true } } test { name: "eq_int64_empty" expr: "google.protobuf.Int64Value{} == 0" value: { bool_value: true } } test { name: "eq_int64_not_null" expr: "google.protobuf.Int64Value{} != null" value: { bool_value: true } } test { name: "eq_int64_proto2_null" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_int64_wrapper == null" value: { bool_value: true } } test { name: "eq_int64_proto3_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_int64_wrapper == null" value: { bool_value: true } } test { name: "eq_string" expr: "google.protobuf.StringValue{value: 'set'} == 'set'" value: { bool_value: true } } test { name: "eq_string_empty" expr: "google.protobuf.StringValue{} == ''" value: { bool_value: true } } test { name: "eq_string_not_null" expr: "google.protobuf.StringValue{} != null" value: { bool_value: true } } test { name: "eq_string_proto2_null" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_string_wrapper == null" value: { bool_value: true } } test { name: "eq_string_proto3_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_string_wrapper == null" value: { bool_value: true } } test { name: "eq_uint32" expr: "google.protobuf.UInt32Value{value: 42u} == 42u" value: { bool_value: true } } test { name: "eq_uint32_empty" expr: "google.protobuf.UInt32Value{} == 0u" value: { bool_value: true } } test { name: "eq_uint32_not_null" expr: "google.protobuf.UInt32Value{} != null" value: { bool_value: true } } test { name: "eq_uint32_proto2_null" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_uint32_wrapper == null" value: { bool_value: true } } test { name: "eq_uint32_proto3_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_uint32_wrapper == null" value: { bool_value: true } } test { name: "eq_uint64" expr: "google.protobuf.UInt64Value{value: 4294967296u} == 4294967296u" value: { bool_value: true } } test { name: "eq_uint64_empty" expr: "google.protobuf.UInt64Value{} == 0u" value: { bool_value: true } } test { name: "eq_uint64_not_null" expr: "google.protobuf.UInt64Value{} != null" value: { bool_value: true } } test { name: "eq_uint64_proto2_null" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_uint64_wrapper == null" value: { bool_value: true } } test { name: "eq_uint64_proto3_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_uint64_wrapper == null" value: { bool_value: true } } test { name: "eq_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}" value { bool_value: true } } test { name: "eq_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} == TestAllTypes{single_int64: 1234, single_string: '1234'}" value { bool_value: true } } test { name: "eq_proto2_missing_fields_neq" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}" value { bool_value: false } } test { name: "eq_proto3_missing_fields_neq" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64: 1234} == TestAllTypes{single_string: '1234'}" value { bool_value: false } } test { name: "eq_proto_nan_equal" container: "cel.expr.conformance.proto2" description: "For proto equality, fields with NaN value are treated as not equal." expr: "TestAllTypes{single_double: double('NaN')} == TestAllTypes{single_double: double('NaN')}" value { bool_value: false } } test { name: "eq_proto_different_types" container: "cel.expr.conformance.proto2" description: "At runtime, differently typed messages are treated as not equal." expr: "dyn(TestAllTypes{}) == dyn(NestedTestAllTypes{})" value { bool_value: false } } test { name: "eq_proto2_any_unpack_equal" description: "Any values should be unpacked and compared." container: "cel.expr.conformance.proto2" # Two equal messages with any fields serialized differently (but both are valid). # TestAllTypes{single_any: [TestAllTypes]{single_int64: 1234, single_string: '1234'}} expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} ==" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: true } } test { name: "eq_proto2_any_unpack_not_equal" description: "Any values should be unpacked and compared." container: "cel.expr.conformance.proto2" # Two messages with any fields that are not equal # TestAllTypes{single_any: [TestAllTypes]{single_int64: 1234, single_string: '1234'}} # TestAllTypes{single_any: [TestAllTypes]{single_double: -1234.0, single_string: '1234'}} expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} ==" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: false } } test { name: "eq_proto2_any_unpack_bytewise_fallback_not_equal" description: "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto." container: "cel.expr.conformance.proto2" # The missing type info any is doubly nested to skip create message validations. expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} ==" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: false } } test { name: "eq_proto2_any_unpack_bytewise_fallback_equal" description: "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto." container: "cel.expr.conformance.proto2" # The missing type info any is doubly nested to skip create message validations. expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} ==" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}" value { bool_value: true } } test { name: "eq_proto3_any_unpack_equal" description: "Any values should be unpacked and compared." container: "cel.expr.conformance.proto3" # Two equal messages with any fields serialized differently (but both are valid). expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} ==" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: true } } test { name: "eq_proto3_any_unpack_not_equal" description: "Any values should be unpacked and compared." container: "cel.expr.conformance.proto3" # Two messages with any fields that are not equal # TestAllTypes{single_any: [TestAllTypes]{single_int64: 1234, single_string: '1234'}} # TestAllTypes{single_any: [TestAllTypes]{single_double: -1234.0, single_string: '1234'}} expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'a\\000\\000\\000\\000\\000H\\223\\300r\\0041234'}} ==" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: false } } test { name: "eq_proto3_any_unpack_bytewise_fallback_not_equal" description: "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto." container: "cel.expr.conformance.proto3" # The missing type info any is doubly nested to skip create message validations. expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} ==" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: false } } test { name: "eq_proto3_any_unpack_bytewise_fallback_equal" description: "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto." container: "cel.expr.conformance.proto3" # The missing type info any is doubly nested to skip create message validations. expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} ==" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}}" value { bool_value: true } } } section { name: "ne_literal" description: "Literals comparison on _!=_" test { name: "ne_int" expr: "24 != 42" value: { bool_value: true } } test { name: "not_ne_int" expr: "1 != 1" value: { bool_value: false } } test { name: "ne_int_double" expr: "dyn(24) != 24.1" value: { bool_value: true } } test { name: "not_ne_int_double" expr: "dyn(1) != 1.0" value: { bool_value: false } } test { name: "ne_int_uint" expr: "dyn(24) != 42u" value: { bool_value: true } } test { name: "not_ne_int_uint" expr: "dyn(1) != 1u" value: { bool_value: false } } test { name: "ne_uint" expr: "1u != 2u" value: { bool_value: true } } test { name: "not_ne_uint" expr: "99u != 99u" value: { bool_value: false } } test { name: "ne_uint_double" expr: "dyn(1u) != 2.0" value: { bool_value: true } } test { name: "not_ne_uint_double" expr: "dyn(99u) != 99.0" value: { bool_value: false } } test { name: "ne_double" expr: "9.0e+3 != 9001.0" value: { bool_value: true } } test { name: "not_ne_double_nan" expr: "0.0/0.0 != 0.0/0.0" value: { bool_value: true } } test { name: "not_ne_int_double_nan" expr: "dyn(1) != 0.0/0.0" value: { bool_value: true } } test { name: "not_ne_uint_double_nan" expr: "dyn(1u) != 0.0/0.0" value: { bool_value: true } } test { name: "not_ne_double" expr: "1.0 != 1e+0" value: { bool_value: false } } test { name: "ne_double_int" expr: "dyn(9000) != 9001.0" value: { bool_value: true } } test { name: "not_ne_double_int" expr: "dyn(1) != 1e+0" value: { bool_value: false } } test { name: "ne_double_uint" expr: "dyn(9000u) != 9001.0" value: { bool_value: true } } test { name: "not_ne_double_uint" expr: "dyn(1u) != 1e+0" value: { bool_value: false } } test { name: "ne_double_nan" expr: "0.0/0.0 != 0.0/0.0" value: { bool_value: true } } test { name: "ne_string" expr: "'abc' != ''" value: { bool_value: true } } test { name: "not_ne_string" expr: "'abc' != 'abc'" value: { bool_value: false } } test { name: "ne_string_unicode" expr: "'résumé' != 'resume'" value: { bool_value: true } } test { name: "not_ne_string_unicode" expr: "'ίδιο' != 'ίδιο'" value: { bool_value: false } } test { name: "ne_bytes" expr: "b'\\x00\\xFF' != b'ÿ'" value: { bool_value: true } } test { name: "not_ne_bytes" expr: "b'\\303\\277' != b'ÿ'" value: { bool_value: false } } test { name: "ne_bool" expr: "false != true" value: { bool_value: true } } test { name: "not_ne_bool" expr: "true != true" value: { bool_value: false } } test { name: "not_ne_null" description: "null can only be equal to null, or else it won't match" expr: "null != null" value: { bool_value: false } } test { name: "ne_list_empty" expr: "[] != [1]" value: { bool_value: true } } test { name: "not_ne_list_empty" expr: "[] != []" value: { bool_value: false } } test { name: "ne_list_bool" expr: "[true, false, true] != [true, true, false]" value: { bool_value: true } } test { name: "not_ne_list_bool" expr: "[false, true] != [false, true]" value: { bool_value: false } } test { name: "not_ne_list_of_list" expr: "[[]] != [[]]" value: { bool_value: false } } test { name: "ne_map_by_value" expr: "{'k':'v'} != {'k':'v1'}" value: { bool_value: true } } test { name: "ne_map_by_key" expr: "{'k':true} != {'k1':true}" value: { bool_value: true } } test { name: "not_ne_map_int_to_float" expr: "{1:1.0} != {1:1.0}" value: { bool_value: false } } test { name: "not_ne_map_key_order" expr: "{'a':'b','c':'d'} != {'c':'d','a':'b'}" value: { bool_value: false } } test { name: "ne_mixed_types" expr: "2u != 2" disable_check: true value: { bool_value: false } } test { name: "ne_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}" value { bool_value: false } } test { name: "ne_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64: 1234, single_string: '1234'} != TestAllTypes{single_int64: 1234, single_string: '1234'}" value { bool_value: false } } test { name: "ne_proto2_missing_fields_neq" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}" value { bool_value: true } } test { name: "ne_proto3_missing_fields_neq" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64: 1234} != TestAllTypes{single_string: '1234'}" value { bool_value: true } } test { name: "ne_proto_nan_not_equal" container: "cel.expr.conformance.proto2" description: "For proto equality, NaN field values are not considered equal." expr: "TestAllTypes{single_double: double('NaN')} != TestAllTypes{single_double: double('NaN')}" value { bool_value: true } } test { name: "ne_proto_different_types" container: "cel.expr.conformance.proto2" description: "At runtime, comparing differently typed messages is false." expr: "dyn(TestAllTypes{}) != dyn(NestedTestAllTypes{})" value: { bool_value: true } } test { name: "ne_proto2_any_unpack" description: "Any values should be unpacked and compared." container: "cel.expr.conformance.proto2" # Two equal messages with any fields serialized differently (but both are valid). # TestAllTypes{single_any: [TestAllTypes]{single_int64: 1234, single_string: '1234'}} expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} !=" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: false } } test { name: "ne_proto2_any_unpack_bytewise_fallback" description: "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto." container: "cel.expr.conformance.proto3" # The missing type info any is doubly nested to skip create # message validations. expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} !=" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: true } } test { name: "ne_proto3_any_unpack" description: "Any values should be unpacked and compared." container: "cel.expr.conformance.proto2" # Two equal messages with any fields serialized differently (but both are valid). expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} !=" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: false } } test { name: "ne_proto3_any_unpack_bytewise_fallback" description: "If an any field is missing its type_url, the comparison should fallback to a bytewise comparison of the serialized proto." container: "cel.expr.conformance.proto3" # The missing type info any is doubly nested to skip create message validations. expr: "TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001r\\0041234'}} !=" " TestAllTypes{single_any: google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\242\\006\\023\\022\\021r\\0041234\\020\\256\\366\\377\\377\\377\\377\\377\\377\\377\\001'}}" value { bool_value: true } } } section { name: "lt_literal" description: "Literals comparison on _<_. (a < b) == (b > a) == !(a >= b) == !(b <= a)" test { name: "lt_int" expr: "-1 < 0" value: { bool_value: true } } test { name: "not_lt_int" expr: "0 < 0" value: { bool_value: false } } test { name: "lt_uint" expr: "0u < 1u" value: { bool_value: true } } test { name: "not_lt_uint" expr: "2u < 2u" value: { bool_value: false } } test { name: "lt_double" expr: "1.0 < 1.0000001" value: { bool_value: true } } test { name: "not_lt_double" description: "Following IEEE 754, negative zero compares equal to zero" expr: "-0.0 < 0.0" value: { bool_value: false } } test { name: "lt_string" expr: "'a' < 'b'" value: { bool_value: true } } test { name: "lt_string_empty_to_nonempty" expr: "'' < 'a'" value: { bool_value: true } } test { name: "lt_string_case" expr: "'Abc' < 'aBC'" value: { bool_value: true } } test { name: "lt_string_length" expr: "'abc' < 'abcd'" value: { bool_value: true } } test { name: "lt_string_diacritical_mark_sensitive" description: "Verifies that the we're not using a string comparison function that strips diacritical marks (á)" expr: "'a' < '\\u00E1'" value: { bool_value: true } } test { name: "not_lt_string_empty" expr: "'' < ''" value: { bool_value: false } } test { name: "not_lt_string_same" expr: "'abc' < 'abc'" value: { bool_value: false } } test { name: "not_lt_string_case_length" expr: "'a' < 'AB'" value: { bool_value: false } } test { name: "unicode_order_lexical" description: "Compare the actual code points of the string, instead of decomposing ế into 'e' plus accent modifiers." expr: "'f' < '\\u1EBF'" value: { bool_value: true } } test { name: "lt_bytes" expr: "b'a' < b'b'" value: { bool_value: true } } test { name: "not_lt_bytes_same" expr: "b'abc' < b'abc'" value: { bool_value: false } } test { name: "not_lt_bytes_width" expr: "b'á' < b'b'" value: { bool_value: false } } test { name: "lt_bool_false_first" expr: "false < true" value: { bool_value: true } } test { name: "not_lt_bool_same" expr: "true < true" value: { bool_value: false } } test { name: "not_lt_bool_true_first" expr: "true < false" value: { bool_value: false } } test { name: "lt_list_unsupported" expr: "[0] < [1]" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "lt_map_unsupported" expr: "{0:'a'} < {1:'b'}" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "lt_null_unsupported" description: "Ensure _<_ doesn't have a binding for null" expr: "null < null" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "lt_mixed_types_error" expr: "'foo' < 1024" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "lt_dyn_int_uint" expr: "dyn(1) < 2u" value: { bool_value: true } } test { name: "lt_dyn_int_double" expr: "dyn(1) < 2.0" value: { bool_value: true } } test { name: "lt_dyn_uint_int" expr: "dyn(1u) < 2" value: { bool_value: true } } test { name: "lt_dyn_uint_double" expr: "dyn(1u) < 2.0" value: { bool_value: true } } test { name: "lt_dyn_double_int" expr: "dyn(1.0) < 2" value: { bool_value: true } } test { name: "lt_dyn_double_uint" expr: "dyn(1.0) < 2u" value: { bool_value: true } } test { name: "not_lt_dyn_int_uint" expr: "dyn(1) < 1u" value: { bool_value: false } } test { name: "not_lt_dyn_int_double" expr: "dyn(1) < 1.0" value: { bool_value: false } } test { name: "not_lt_dyn_uint_int" expr: "dyn(1u) < 1" value: { bool_value: false } } test { name: "not_lt_dyn_uint_double" expr: "dyn(1u) < 1.0" value: { bool_value: false } } test { name: "not_lt_dyn_double_int" expr: "dyn(1.0) < 1" value: { bool_value: false } } test { name: "not_lt_dyn_double_uint" expr: "dyn(1.0) < 1u" value: { bool_value: false } } test { name: "lt_dyn_int_big_uint" expr: "dyn(1) < 9223372036854775808u" value: { bool_value: true } } test { name: "lt_dyn_small_int_uint" expr: "dyn(-1) < 0u" value: { bool_value: true } } test { name: "not_lt_dyn_int_big_lossy_double" expr: "dyn(9223372036854775807) < 9223372036854775808.0" value: { bool_value: false } } test { name: "lt_dyn_int_big_lossy_double" expr: "dyn(9223372036854775807) < 9223372036854777857.0" value: { bool_value: true } } test { name: "not_lt_dyn_int_small_double" expr: "dyn(9223372036854775807) < -9223372036854777857.0" value: { bool_value: false } } test { name: "not_lt_dyn_int_small_lossy_double" expr: "dyn(-9223372036854775808) < -9223372036854775809.0" value: { bool_value: false } } test { name: "not_lt_dyn_uint_small_int" expr: "dyn(1u) < -9223372036854775808" value: { bool_value: false } } test { name: "not_lt_dyn_big_uint_int" expr: "dyn(9223372036854775808u) < 1" value: { bool_value: false } } test { name: "not_lt_dyn_uint_small_double" expr: "dyn(18446744073709551615u) < -1.0" value: { bool_value: false } } test { name: "lt_dyn_uint_big_double" expr: "dyn(18446744073709551615u) < 18446744073709590000.0" value: { bool_value: true } } test { name: "not_lt_dyn_big_double_uint" expr: "dyn(18446744073709553665.0) < 18446744073709551615u" value: { bool_value: false } } test { name: "not_lt_dyn_big_double_int" expr: "dyn(9223372036854775808.0) < 9223372036854775807" value: { bool_value: false } } test { name: "not_lt_dyn_small_double_int" expr: "dyn(-9223372036854775809.0) < -9223372036854775808" value: { bool_value: false } } } section { name: "gt_literal" description: "Literals comparison on _>_" test { name: "gt_int" expr: "42 > -42" value: { bool_value: true } } test { name: "not_gt_int" expr: "0 > 0" value: { bool_value: false } } test { name: "gt_uint" expr: "48u > 46u" value: { bool_value: true } } test { name: "not_gt_uint" expr: "0u > 999u" value: { bool_value: false } } test { name: "gt_double" expr: "1e+1 > 1e+0" value: { bool_value: true } } test { name: "not_gt_double" expr: ".99 > 9.9e-1" value: { bool_value: false } } test { name: "gt_string_case" expr: "'abc' > 'aBc'" value: { bool_value: true } } test { name: "gt_string_to_empty" expr: "'A' > ''" value: { bool_value: true } } test { name: "not_gt_string_empty_to_empty" expr: "'' > ''" value: { bool_value: false } } test { name: "gt_string_unicode" expr: "'α' > 'omega'" value: { bool_value: true } } test { name: "gt_bytes_one" expr: "b'\x01' > b'\x00'" value: { bool_value: true } } test { name: "gt_bytes_one_to_empty" expr: "b'\x00' > b''" value: { bool_value: true } } test { name: "not_gt_bytes_sorting" expr: "b'\x00\x01' > b'\x01'" value: { bool_value: false } } test { name: "gt_bool_true_false" expr: "true > false" value: { bool_value: true } } test { name: "not_gt_bool_false_true" expr: "false > true" value: { bool_value: false } } test { name: "not_gt_bool_same" expr: "true > true" value: { bool_value: false } } test { name: "gt_null_unsupported" expr: "null > null" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "gt_list_unsupported" expr: "[1] > [0]" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "gt_map_unsupported" expr: "{1:'b'} > {0:'a'}" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "gt_mixed_types_error" expr: "'foo' > 1024" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "gt_dyn_int_uint" expr: "dyn(2) > 1u" value: { bool_value: true } } test { name: "gt_dyn_int_double" expr: "dyn(2) > 1.0" value: { bool_value: true } } test { name: "gt_dyn_uint_int" expr: "dyn(2u) > 1" value: { bool_value: true } } test { name: "gt_dyn_uint_double" expr: "dyn(2u) > 1.0" value: { bool_value: true } } test { name: "gt_dyn_double_int" expr: "dyn(2.0) > 1" value: { bool_value: true } } test { name: "gt_dyn_double_uint" expr: "dyn(2.0) > 1u" value: { bool_value: true } } test { name: "not_gt_dyn_int_uint" expr: "dyn(1) > 1u" value: { bool_value: false } } test { name: "not_gt_dyn_int_double" expr: "dyn(1) > 1.0" value: { bool_value: false } } test { name: "not_gt_dyn_uint_int" expr: "dyn(1u) > 1" value: { bool_value: false } } test { name: "not_gt_dyn_uint_double" expr: "dyn(1u) > 1.0" value: { bool_value: false } } test { name: "not_gt_dyn_double_int" expr: "dyn(1.0) > 1" value: { bool_value: false } } test { name: "not_gt_dyn_double_uint" expr: "dyn(1.0) > 1u" value: { bool_value: false } } test { name: "not_gt_dyn_int_big_uint" expr: "dyn(1) > 9223372036854775808u" value: { bool_value: false } } test { name: "not_gt_dyn_small_int_uint" expr: "dyn(-1) > 0u" value: { bool_value: false } } test { name: "not_gt_dyn_int_big_double" expr: "dyn(9223372036854775807) > 9223372036854775808.0" value: { bool_value: false } } test { name: "not_gt_dyn_int_small_lossy_double" description: "The conversion of the int to double is lossy and the numbers end up being equal" expr: "dyn(-9223372036854775808) > -9223372036854775809.0" value: { bool_value: false } } test { name: "gt_dyn_int_small_lossy_double_greater" expr: "dyn(-9223372036854775808) > -9223372036854777857.0" value: { bool_value: true } } test { name: "gt_dyn_uint_small_int" expr: "dyn(1u) > -1" value: { bool_value: true } } test { name: "gt_dyn_big_uint_int" expr: "dyn(9223372036854775808u) > 1" value: { bool_value: true } } test { name: "gt_dyn_uint_small_double" expr: "dyn(9223372036854775807u) > -1.0" value: { bool_value: true } } test { name: "not_gt_dyn_uint_big_double" expr: "dyn(18446744073709551615u) > 18446744073709590000.0" value: { bool_value: false } } test { name: "gt_dyn_big_double_uint" expr: "dyn(18446744073709553665.0) > 18446744073709551615u" value: { bool_value: true } } test { name: "not_gt_dyn_big_double_int" expr: "dyn(9223372036854775808.0) > 9223372036854775807" value: { bool_value: false } } test { name: "not_gt_dyn_small_double_int" expr: "dyn(-9223372036854775809.0) > -9223372036854775808" value: { bool_value: false } } } section { name: "lte_literal" description: "Literals comparison on _<=_" test { name: "lte_int_lt" expr: "0 <= 1" value: { bool_value: true } } test { name: "lte_int_eq" expr: "1 <= 1" value: { bool_value: true } } test { name: "not_lte_int_gt" expr: "1 <= -1" value: { bool_value: false } } test { name: "lte_uint_lt" expr: "0u <= 1u" value: { bool_value: true } } test { name: "lte_uint_eq" expr: "1u <= 1u" value: { bool_value: true } } test { name: "not_lte_uint_gt" expr: "1u <= 0u" value: { bool_value: false } } test { name: "lte_double_lt" expr: "0.0 <= 0.1e-31" value: { bool_value: true } } test { name: "lte_double_eq" expr: "0.0 <= 0e-1" value: { bool_value: true } } test { name: "not_lte_double_gt" expr: "1.0 <= 0.99" value: { bool_value: false } } test { name: "lte_string_empty" expr: "'' <= ''" value: { bool_value: true } } test { name: "lte_string_from_empty" expr: "'' <= 'a'" value: { bool_value: true } } test { name: "not_lte_string_to_empty" expr: "'a' <= ''" value: { bool_value: false } } test { name: "lte_string_lexicographical" expr: "'aBc' <= 'abc'" value: { bool_value: true } } test { name: "lte_string_unicode_eq" expr: "'α' <= 'α'" value: { bool_value: true } } test { name: "lte_string_unicode_lt" expr: "'a' <= 'α'" value: { bool_value: true } } test { name: "not_lte_string_unicode" expr: "'α' <= 'a'" value: { bool_value: false } } test { name: "lte_bytes_empty" expr: "b'' <= b'\x00'" value: { bool_value: true } } test { name: "not_lte_bytes_length" expr: "b'\x01\x00' <= b'\x01'" value: { bool_value: false } } test { name: "lte_bool_false_true" expr: "false <= true" value: { bool_value: true } } test { name: "lte_bool_false_false" expr: "false <= false" value: { bool_value: true } } test { name: "lte_bool_true_false" expr: "true <= false" value: { bool_value: false } } test { name: "lte_null_unsupported" expr: "null <= null" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "lte_list_unsupported" expr: "[0] <= [0]" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "lte_map_unsupported" expr: "{0:'a'} <= {1:'b'}" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "lte_mixed_types_error" expr: "'foo' <= 1024" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "lte_dyn_int_uint" expr: "dyn(1) <= 2u" value: { bool_value: true } } test { name: "lte_dyn_int_double" expr: "dyn(1) <= 2.0" value: { bool_value: true } } test { name: "lte_dyn_uint_int" expr: "dyn(1u) <= 2" value: { bool_value: true } } test { name: "lte_dyn_uint_double" expr: "dyn(1u) <= 2.0" value: { bool_value: true } } test { name: "lte_dyn_double_int" expr: "dyn(1.0) <= 2" value: { bool_value: true } } test { name: "lte_dyn_double_uint" expr: "dyn(1.0) <= 2u" value: { bool_value: true } } test { name: "not_lte_dyn_int_uint" expr: "dyn(2) <= 1u" value: { bool_value: false } } test { name: "not_lte_dyn_int_double" expr: "dyn(2) <= 1.0" value: { bool_value: false } } test { name: "not_lte_dyn_uint_int" expr: "dyn(2u) <= 1" value: { bool_value: false } } test { name: "not_lte_dyn_uint_double" expr: "dyn(2u) <= 1.0" value: { bool_value: false } } test { name: "not_lte_dyn_double_int" expr: "dyn(2.0) <= 1" value: { bool_value: false } } test { name: "not_lte_dyn_double_uint" expr: "dyn(2.0) <= 1u" value: { bool_value: false } } test { name: "lte_dyn_int_big_uint" expr: "dyn(1) <= 9223372036854775808u" value: { bool_value: true } } test { name: "lte_dyn_small_int_uint" expr: "dyn(-1) <= 0u" value: { bool_value: true } } test { name: "lte_dyn_int_big_double" expr: "dyn(9223372036854775807) <= 9223372036854775808.0" value: { bool_value: true } } test { name: "lte_dyn_int_small_lossy_double" description: "The conversion of the int to double is lossy and the numbers end up being equal" expr: "dyn(-9223372036854775808) <= -9223372036854775809.0" value: { bool_value: true } } test { name: "not_lte_dyn_int_small_lossy_double_less" expr: "dyn(-9223372036854775808) <= -9223372036854777857.0" value: { bool_value: false } } test { name: "not_lte_dyn_uint_small_int" expr: "dyn(1u) <= -9223372036854775808" value: { bool_value: false } } test { name: "not_lte_dyn_big_uint_int" expr: "dyn(9223372036854775808u) <= 1" value: { bool_value: false } } test { name: "not_lte_dyn_uint_small_double" expr: "dyn(18446744073709551615u) <= -1.0" value: { bool_value: false } } test { name: "lte_dyn_uint_big_double" expr: "dyn(18446744073709551615u) <= 18446744073709590000.0" value: { bool_value: true } } test { name: "not_lte_dyn_big_double_uint" expr: "dyn(18446744073709553665.0) <= 18446744073709551615u" value: { bool_value: false } } test { name: "lte_dyn_big_double_int" expr: "dyn(9223372036854775808.0) <= 9223372036854775807" value: { bool_value: true } } test { name: "lte_dyn_small_double_int" expr: "dyn(-9223372036854775809.0) <= -9223372036854775808" value: { bool_value: true } } } section { name: "gte_literal" description: "Literals comparison on _>=_" test { name: "gte_int_gt" expr: "0 >= -1" value: { bool_value: true } } test { name: "gte_int_eq" expr: "999 >= 999" value: { bool_value: true } } test { name: "not_gte_int_lt" expr: "999 >= 1000" value: { bool_value: false } } test { name: "gte_uint_gt" expr: "1u >= 0u" value: { bool_value: true } } test { name: "gte_uint_eq" expr: "0u >= 0u" value: { bool_value: true } } test { name: "not_gte_uint_lt" expr: "1u >= 10u" value: { bool_value: false } } test { name: "gte_double_gt" expr: "1e+1 >= 1e+0" value: { bool_value: true } } test { name: "gte_double_eq" expr: "9.80665 >= 9.80665e+0" value: { bool_value: true } } test { name: "not_gte_double_lt" expr: "0.9999 >= 1.0" value: { bool_value: false } } test { name: "gte_string_empty" expr: "'' >= ''" value: { bool_value: true } } test { name: "gte_string_to_empty" expr: "'a' >= ''" value: { bool_value: true } } test { name: "gte_string_empty_to_nonempty" expr: "'' >= 'a'" value: { bool_value: false } } test { name: "gte_string_length" expr: "'abcd' >= 'abc'" value: { bool_value: true } } test { name: "not_gte_string_lexicographical" expr: "'abc' >= 'abd'" value: { bool_value: false } } test { name: "gte_string_unicode_eq" expr: "'τ' >= 'τ'" value: { bool_value: true } } test { name: "gte_string_unicode_gt" expr: "'τ' >= 't'" value: { bool_value: true } } test { name: "not_get_string_unicode" expr: "'t' >= 'τ'" value: { bool_value: false } } test { name: "gte_bytes_to_empty" expr: "b'\x00' >= b''" value: { bool_value: true } } test { name: "not_gte_bytes_empty_to_nonempty" expr: "b'' >= b'\x00'" value: { bool_value: false } } test { name: "gte_bytes_samelength" expr: "b'\x00\x01' >= b'\x01\x00'" value: { bool_value: false } } test { name: "gte_bool_gt" expr: "true >= false" value: { bool_value: true } } test { name: "gte_bool_eq" expr: "true >= true" value: { bool_value: true } } test { name: "not_gte_bool_lt" expr: "false >= true" value: { bool_value: false } } test { name: "gte_null_unsupported" expr: "null >= null" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "gte_list_unsupported" expr: "['y'] >= ['x']" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "gte_map_unsupported" expr: "{1:'b'} >= {0:'a'}" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "gte_mixed_types_error" expr: "'foo' >= 1.0" disable_check: true eval_error: { errors: { message: "no such overload" } } } test { name: "gte_dyn_int_uint" expr: "dyn(2) >= 1u" value: { bool_value: true } } test { name: "gte_dyn_int_double" expr: "dyn(2) >= 1.0" value: { bool_value: true } } test { name: "gte_dyn_uint_int" expr: "dyn(2u) >= 1" value: { bool_value: true } } test { name: "gte_dyn_uint_double" expr: "dyn(2u) >= 1.0" value: { bool_value: true } } test { name: "gte_dyn_double_int" expr: "dyn(2.0) >= 1" value: { bool_value: true } } test { name: "gte_dyn_double_uint" expr: "dyn(2.0) >= 1u" value: { bool_value: true } } test { name: "not_gte_dyn_int_uint" expr: "dyn(0) >= 1u" value: { bool_value: false } } test { name: "not_gte_dyn_int_double" expr: "dyn(0) >= 1.0" value: { bool_value: false } } test { name: "not_gte_dyn_uint_int" expr: "dyn(0u) >= 1" value: { bool_value: false } } test { name: "not_gte_dyn_uint_double" expr: "dyn(0u) >= 1.0" value: { bool_value: false } } test { name: "not_gte_dyn_double_int" expr: "dyn(0.0) >= 1" value: { bool_value: false } } test { name: "not_gte_dyn_double_uint" expr: "dyn(0.0) >= 1u" value: { bool_value: false } } test { name: "not_gte_dyn_int_big_uint" expr: "dyn(1) >= 9223372036854775808u" value: { bool_value: false } } test { name: "not_gte_dyn_small_int_uint" expr: "dyn(-1) >= 0u" value: { bool_value: false } } test { name: "gte_dyn_int_big_lossy_double" expr: "dyn(9223372036854775807) >= 9223372036854775808.0" value: { bool_value: true } } test { name: "not_gte_dyn_int_big_double" expr: "dyn(9223372036854775807) >= 9223372036854777857.0" value: { bool_value: false } } test { name: "gte_dyn_int_small_lossy_double_equal" description: "The conversion of the int to double is lossy and the numbers end up being equal" expr: "dyn(-9223372036854775808) >= -9223372036854775809.0" value: { bool_value: true } } test { name: "gte_dyn_int_small_lossy_double_greater" expr: "dyn(-9223372036854775808) >= -9223372036854777857.0" value: { bool_value: true } } test { name: "gte_dyn_uint_small_int" expr: "dyn(1u) >= -1" value: { bool_value: true } } test { name: "gte_dyn_big_uint_int" expr: "dyn(9223372036854775808u) >= 1" value: { bool_value: true } } test { name: "gte_dyn_uint_small_double" expr: "dyn(9223372036854775807u) >= -1.0" value: { bool_value: true } } test { name: "not_gte_dyn_uint_big_double" expr: "dyn(18446744073709551615u) >= 18446744073709553665.0" value: { bool_value: false } } test { name: "gte_dyn_big_double_uint" expr: "dyn(18446744073709553665.0) >= 18446744073709551615u" value: { bool_value: true } } test { name: "gte_dyn_big_double_int" expr: "dyn(9223372036854775808.0) >= 9223372036854775807" value: { bool_value: true } } test { name: "gte_dyn_small_double_int" expr: "dyn(-9223372036854775809.0) >= -9223372036854775808" value: { bool_value: true } } } section { name: "in_list_literal" description: "Set membership tests using list literals and the 'in' operator" test { name: "elem_not_in_empty_list" expr: "'empty' in []" value { bool_value: false } } test { name: "elem_in_list" expr: "'elem' in ['elem', 'elemA', 'elemB']" value { bool_value: true } } test { name: "elem_not_in_list" expr: "'not' in ['elem1', 'elem2', 'elem3']" value { bool_value: false } } test { name: "elem_in_mixed_type_list" description: "Set membership tests should succeed if the 'elem' exists in a mixed element type list." expr: "'elem' in [1, 'elem', 2]" value { bool_value: true } } test { name: "elem_in_mixed_type_list_cross_type" description: "Set membership tests should return false due to the introduction of heterogeneous-equality. Set membership via 'in' is equivalent to the macro exists() behavior." expr: "'elem' in [1u, 'str', 2, b'bytes']" value: { bool_value: false } } } section { name: "in_map_literal" description: "Set membership tests using map literals and the 'in' operator" test { name: "key_not_in_empty_map" expr: "'empty' in {}" value { bool_value: false } } test { name: "key_in_map" expr: "'key' in {'key':'1', 'other':'2'}" value { bool_value: true } } test { name: "key_not_in_map" expr: "'key' in {'lock':1, 'gate':2}" value { bool_value: false } } test { name: "key_in_mixed_key_type_map" description: "Map keys are of mixed type, but since the key is present the result is true." expr: "'key' in {3:3.0, 'key':2u}" value { bool_value: true } } test { name: "key_in_mixed_key_type_map_cross_type" expr: "'key' in {1u:'str', 2:b'bytes'}" value: { bool_value: false } } } section { name: "bound" description: "Comparing bound variables with literals or other variables" test { name: "bytes_gt_left_false" expr: "x > b'\x00'" value: { bool_value: false } type_env: { name: "x" ident: { type: { primitive: BYTES } } } bindings: { key: "x" value: { value: { bytes_value: "\x00" } } } } test { name: "int_lte_right_true" expr: "123 <= x" value: { bool_value: true } type_env: { name: "x" ident: { type: { primitive: INT64 } } } bindings: { key: "x" value: { value: { int64_value: 124 } } } } test { name: "bool_lt_right_true" expr: "false < x" value: { bool_value: true } type_env: { name: "x" ident: { type: { primitive: BOOL } } } bindings: { key: "x" value: { value: { bool_value: true } } } } test { name: "double_ne_left_false" expr: "x != 9.8" value: { bool_value: false } type_env: { name: "x" ident: { type: { primitive: DOUBLE } } } bindings: { key: "x" value: { value: { double_value: 9.8 } } } } test { name: "map_ne_right_false" expr: "{'a':'b','c':'d'} != x" value: { bool_value: false } type_env: { name: "x" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: STRING } } } } } bindings: { key: "x" value: { value: { map_value { entries { key: { string_value: "c" } value: { string_value: "d" } } entries { key: { string_value: "a" } value: { string_value: "b" } } } } } } } test { name: "null_eq_left_true" description: "A comparison _==_ against null only binds if the type is determined to be null or we skip the type checking" expr: "x == null" value: { bool_value: true } type_env: { name: "x" ident: { type: { null: NULL_VALUE } } } bindings: { key: "x" value: { value: { null_value: NULL_VALUE } } } } test { name: "list_eq_right_false" expr: "[1, 2] == x" value: { bool_value: false } type_env: { name: "x" ident: { type: { list_type: { elem_type: { primitive: INT64 } } } } } bindings: { key: "x" value: { value: { list_value { values: { int64_value: 2 } values: { int64_value: 1 } } } } } } test { name: "string_gte_right_true" expr: "'abcd' >= x" value: { bool_value: true } type_env: { name: "x" ident: { type: { primitive: STRING } } } bindings: { key: "x" value: { value: { string_value: "abc" } } } } test { name: "uint_eq_right_false" expr: "999u == x" value: { bool_value: false } type_env: { name: "x" ident: { type: { primitive: UINT64 } } } bindings: { key: "x" value: { value: { uint64_value: 1000 } } } } test { name: "null_lt_right_no_such_overload" description: "There is no _<_ operation for null, even if both operands are null" expr: "null < x" eval_error: { errors: { message: "no such overload" } } disable_check: true bindings: { key: "x" value: { value: { null_value: NULL_VALUE } } } } } cel-spec-0.24.0/tests/simple/testdata/conversions.textproto000066400000000000000000000316111500667630300241060ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "conversions" description: "Tests for type conversions." section { name: "bytes" description: "Conversions to bytes." test { name: "string_empty" expr: "bytes('')" value: { bytes_value: "" } } test { name: "string" expr: "bytes('abc')" value: { bytes_value: "abc" } } test { name: "string_unicode" expr: "bytes('ÿ')" value: { bytes_value: "\303\277" } } test { name: "string_unicode_vs_literal" expr: "bytes('\\377') == b'\\377'" value: { bool_value: false } } } section { name: "double" description: "Conversions to double." test { name: "int_zero" expr: "double(0)" value: { double_value: 0.0 } } test { name: "int_pos" expr: "double(1000000000000)" value: { double_value: 1e12 } } test { name: "int_neg" expr: "double(-1000000000000000)" value: { double_value: -1e15 } } test { name: "int_min_exact" description: "Smallest contiguous representable int (-2^53)." expr: "double(-9007199254740992)" value { double_value: -9.007199254740992e15 } } test { name: "int_max_exact" description: "Largest contiguous representable int (2^53)." expr: "double(9007199254740992)" value { double_value: 9.007199254740992e15 } } test { name: "int_range" description: "Largest signed 64-bit. Rounds to nearest double." expr: "double(9223372036854775807)" value: { double_value: 9.223372036854775807e18 } } test { name: "uint_zero" expr: "double(0u)" value: { double_value: 0.0 } } test { name: "uint_pos" expr: "double(123u)" value: { double_value: 123.0 } } test { name: "uint_max_exact" description: "Largest contiguous representable int (2^53)." expr: "double(9007199254740992u)" value { double_value: 9.007199254740992e15 } } test { name: "uint_range" description: "Largest unsigned 64-bit." expr: "double(18446744073709551615u)" value: { double_value: 1.8446744073709551615e19 } } test { name: "string_zero" expr: "double('0')" value: { double_value: 0.0 } } test { name: "string_zero_dec" expr: "double('0.0')" value: { double_value: 0.0 } } test { name: "string_neg_zero" expr: "double('-0.0')" value: { double_value: -0.0 } } test { name: "string_no_dec" expr: "double('123')" value: { double_value: 123.0 } } test { name: "string_pos" expr: "double('123.456')" value: { double_value: 123.456 } } test { name: "string_neg" expr: "double('-987.654')" value: { double_value: -987.654 } } test { name: "string_exp_pos_pos" expr: "double('6.02214e23')" value: { double_value: 6.02214e23 } } test { name: "string_exp_pos_neg" expr: "double('1.38e-23')" value: { double_value: 1.38e-23 } } test { name: "string_exp_neg_pos" expr: "double('-84.32e7')" value: { double_value: -8.432e8 } } test { name: "string_exp_neg_neg" expr: "double('-5.43e-21')" value: { double_value: -5.43e-21 } } } section { name: "dyn" description: "Tests for dyn annotation." test { name: "dyn_heterogeneous_list" description: "No need to disable type checking." expr: "type(dyn([1, 'one']))" value: { type_value: "list" } } } section { name: "int" description: "Conversions to int." test { name: "uint" expr: "int(42u)" value: { int64_value: 42 } } test { name: "uint_zero" expr: "int(0u)" value: { int64_value: 0 } } test { name: "uint_max_exact" expr: "int(9223372036854775807u)" value { int64_value: 9223372036854775807 } } test { name: "uint_range" expr: "int(18446744073709551615u)" eval_error { errors { message: "range error" } } } test { name: "double_round_neg" expr: "int(-123.456)" value: { int64_value: -123 } } test { name: "double_truncate" expr: "int(1.9)" value: { int64_value: 1 } } test { name: "double_truncate_neg" expr: "int(-7.9)" value: { int64_value: -7 } } test { name: "double_half_pos" expr: "int(11.5)" value: { int64_value: 11 } } test { name: "double_half_neg" expr: "int(-3.5)" value: { int64_value: -3 } } test { name: "double_big_exact" description: "Beyond exact range (2^53), but no loss of precision (2^55)." expr: "int(double(36028797018963968))" value { int64_value: 36028797018963968 } } test { name: "double_big_precision" description: "Beyond exact range (2^53), but loses precision (2^55 + 1)." expr: "int(double(36028797018963969))" value { int64_value: 36028797018963968 } } test { name: "double_int_max_range" description: "The double(2^63-1) cast produces a floating point value outside the int range" expr: "int(9223372036854775807.0)" eval_error { errors: { message: "range" } } } test { name: "double_int_min_range" description: "The double(-2^63) cast produces a floating point value outside the int range" expr: "int(-9223372036854775808.0)" eval_error { errors: { message: "range" } } } test { name: "double_range" expr: "int(1e99)" eval_error { errors: { message: "range" } } } test { name: "string" expr: "int('987')" value: { int64_value: 987 } } test { name: "timestamp" expr: "int(timestamp('2004-09-16T23:59:59Z'))" value: { int64_value: 1095379199 } } } section { name: "string" description: "Conversions to string." test { name: "int" expr: "string(123)" value: { string_value: "123" } } test { name: "int_neg" expr: "string(-456)" value: { string_value: "-456" } } test { name: "uint" expr: "string(9876u)" value: { string_value: "9876" } } test { name: "double" expr: "string(123.456)" value: { string_value: "123.456" } } test { name: "double_hard" expr: "string(-4.5e-3)" value: { string_value: "-0.0045" } } test { name: "bytes" expr: "string(b'abc')" value: { string_value: "abc" } } test { name: "bytes_unicode" expr: "string(b'\\303\\277')" value: { string_value: "ÿ" } } test { name: "bytes_invalid" expr: "string(b'\\000\\xff')" eval_error { errors { message: "invalid UTF-8" } } } } section { name: "type" description: "Type reflection tests." test { name: "bool" expr: "type(true)" value: { type_value: "bool" } } test { name: "bool_denotation" expr: "bool" value: { type_value: "bool" } } test { name: "dyn_no_denotation" expr: "dyn" disable_check: true eval_error { errors { message: "unknown variable" } } } test { name: "int" expr: "type(0)" value: { type_value: "int" } } test { name: "int_denotation" expr: "int" value: { type_value: "int" } } test { name: "eq_same" expr: "type(true) == type(false)" value: { bool_value: true } } test { name: "uint" expr: "type(64u)" value: { type_value: "uint" } } test { name: "uint_denotation" expr: "uint" value: { type_value: "uint" } } test { name: "double" expr: "type(3.14)" value: { type_value: "double" } } test { name: "double_denotation" expr: "double" value: { type_value: "double" } } test { name: "null_type" expr: "type(null)" value: { type_value: "null_type" } } test { name: "null_type_denotation" expr: "null_type" value: { type_value: "null_type" } } test { name: "string" expr: "type('foo')" value: { type_value: "string" } } test { name: "string_denotation" expr: "string" value: { type_value: "string" } } test { name: "bytes" expr: "type(b'\\xff')" value: { type_value: "bytes" } } test { name: "bytes_denotation" expr: "bytes" value: { type_value: "bytes" } } test { name: "list" expr: "type([1, 2, 3])" value: { type_value: "list" } } test { name: "list_denotation" expr: "list" value: { type_value: "list" } } test { name: "lists_monomorphic" expr: "type([1, 2, 3]) == type(['one', 'two', 'three'])" value: { bool_value: true } } test { name: "map" expr: "type({4: 16})" value: { type_value: "map" } } test { name: "map_denotation" expr: "map" value: { type_value: "map" } } test { name: "map_monomorphic" expr: "type({'one': 1}) == type({1: 'one'})" value: { bool_value: true } } test { name: "eq_diff" expr: "type(7) == type(7u)" value: { bool_value: false } } test { name: "neq_same" expr: "type(0.0) != type(-0.0)" value: { bool_value: false } } test { name: "neq_diff" expr: "type(0.0) != type(0)" value: { bool_value: true } } test { name: "meta" expr: "type(type(7)) == type(type(7u))" value: { bool_value: true } } test { name: "type" expr: "type(int)" value: { type_value: "type" } } test { name: "type_denotation" expr: "type" value: { type_value: "type" } } test { name: "type_type" expr: "type(type)" value: { type_value: "type" } } } section { name: "uint" description: "Conversions to uint." test { name: "int" expr: "uint(1729)" value: { uint64_value: 1729 } } test { name: "int_max" expr: "uint(9223372036854775807)" value { uint64_value: 9223372036854775807 } } test { name: "int_neg" expr: "uint(-1)" eval_error { errors { message: "range" } } } test { name: "double" expr: "uint(3.14159265)" value: { uint64_value: 3 } } test { name: "double_truncate" expr: "uint(1.9)" value: { uint64_value: 1 } } test { name: "double_half" expr: "uint(25.5)" value: { uint64_value: 25 } } test { name: "double_big_exact" description: "Beyond exact range (2^53), but no loss of precision (2^55)." expr: "uint(double(36028797018963968u))" value { uint64_value: 36028797018963968 } } test { name: "double_big_precision" description: "Beyond exact range (2^53), but loses precision (2^55 + 1)." expr: "uint(double(36028797018963969u))" value { uint64_value: 36028797018963968 } } test { name: "double_uint_max_range" description: "The exact conversion of uint max as a double does not round trip." expr: "int(18446744073709551615.0)" eval_error { errors: { message: "range" } } } test { name: "double_range_beyond_uint" expr: "uint(6.022e23)" eval_error { errors { message: "range" } } } test { name: "string" expr: "uint('300')" value: { uint64_value: 300 } } } section { name: "bool" description: "Conversions to bool" test { name: "string_1" expr: "bool('1')" value: { bool_value: true } } test { name: "string_t" expr: "bool('t')" value: { bool_value: true } } test { name: "string_true_lowercase" expr: "bool('true')" value: { bool_value: true } } test { name: "string_true_uppercase" expr: "bool('TRUE')" value: { bool_value: true } } test { name: "string_true_pascalcase" expr: "bool('True')" value: { bool_value: true } } test { name: "string_0" expr: "bool('0')" value: { bool_value: false } } test { name: "string_f" expr: "bool('f')" value: { bool_value: false } } test { name: "string_false_lowercase" expr: "bool('false')" value: { bool_value: false } } test { name: "string_false_uppercase" expr: "bool('FALSE')" value: { bool_value: false } } test { name: "string_false_pascalcase" expr: "bool('False')" value: { bool_value: false } } test { name: "string_true_badcase" expr: "bool('TrUe')" eval_error { errors { message: "Type conversion error" } } } test { name: "string_false_badcase" expr: "bool('FaLsE')" eval_error { errors { message: "Type conversion error" } } } } section { name: "identity" description: "Identity functions" test { name: "bool" expr: "bool(true)" value: { bool_value: true } } test { name: "int" expr: "int(1)" value: { int64_value: 1 } } test { name: "uint" expr: "uint(1u)" value: { uint64_value: 1 } } test { name: "double" expr: "double(5.5)" value: { double_value: 5.5 } } test { name: "string" expr: "string('hello')" value: { string_value: "hello" } } test { name: "bytes" expr: "bytes(b'abc')" value: { bytes_value: "abc" } } test { name: "duration" expr: "duration(duration('100s')) == duration('100s')" value: { bool_value: true } } test { name: "timestamp" expr: "timestamp(timestamp(1000000000)) == timestamp(1000000000)" value: { bool_value: true } } } cel-spec-0.24.0/tests/simple/testdata/dynamic.textproto000066400000000000000000001674331500667630300231760ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "dynamic" description: "Tests for 'dynamic' proto behavior, including JSON, wrapper, and Any messages." section { name: "int32" description: "Tests for int32 conversion." test { name: "literal" expr: "google.protobuf.Int32Value{value: -123}" value { int64_value: -123 } } test { name: "literal_no_field_access" expr: "google.protobuf.Int32Value{value: -123}.value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_zero" expr: "google.protobuf.Int32Value{}" value { int64_value: 0 } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Int32Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Int32Value] { value: 2000000 } } } } } value { int64_value: 2000000 } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32_wrapper: 432}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32_wrapper { value: 432 } } } } } test { name: "field_assign_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32_wrapper: 0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32_wrapper { } } } } } test { name: "field_assign_proto2_max" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32_wrapper: 2147483647}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32_wrapper { value: 2147483647 } } } } } test { name: "field_assign_proto2_min" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32_wrapper: -2147483648}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32_wrapper { value: -2147483648 } } } } } test { name: "field_assign_proto2_range" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32_wrapper: 12345678900}" eval_error { errors { message: "range error" } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper" value { int64_value: 642 } } test { name: "field_read_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper" value { int64_value: 0 } } test { name: "field_read_proto2_unset" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_int32_wrapper" value { null_value: NULL_VALUE } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32_wrapper: -975}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int32_wrapper { value: -975 } } } } } test { name: "field_assign_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32_wrapper: 0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int32_wrapper { } } } } } test { name: "field_assign_proto3_max" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32_wrapper: 2147483647}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int32_wrapper { value: 2147483647 } } } } } test { name: "field_assign_proto3_min" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32_wrapper: -2147483648}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int32_wrapper { value: -2147483648 } } } } } test { name: "field_assign_proto3_range" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32_wrapper: -998877665544332211}" eval_error { errors { message: "range error" } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32_wrapper: 642}.single_int32_wrapper" value { int64_value: 642 } } test { name: "field_read_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper" value { int64_value: 0 } } test { name: "field_read_proto3_unset" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_int32_wrapper" value { null_value: NULL_VALUE } } } section { name: "int64" description: "Tests for int64 conversion." test { name: "literal" expr: "google.protobuf.Int64Value{value: -123}" value { int64_value: -123 } } test { name: "literal_no_field_access" expr: "google.protobuf.Int64Value{value: -123}.value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_zero" expr: "google.protobuf.Int64Value{}" value { int64_value: 0 } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Int64Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Int64Value] { value: 2000000 } } } } } value { int64_value: 2000000 } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int64_wrapper: 432}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int64_wrapper { value: 432 } } } } } test { name: "field_assign_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int64_wrapper: 0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int64_wrapper { } } } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64_wrapper: -975}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64_wrapper { value: -975 } } } } } test { name: "field_assign_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64_wrapper: 0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64_wrapper { } } } } } } section { name: "uint32" description: "Tests for uint32 conversion." test { name: "literal" expr: "google.protobuf.UInt32Value{value: 123u}" value { uint64_value: 123 } } test { name: "literal_no_field_access" expr: "google.protobuf.UInt32Value{value: 123u}.value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_zero" expr: "google.protobuf.UInt32Value{}" value { uint64_value: 0 } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.UInt32Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.UInt32Value] { value: 2000000 } } } } } value { uint64_value: 2000000 } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint32_wrapper: 432u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_uint32_wrapper { value: 432 } } } } } test { name: "field_assign_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint32_wrapper: 0u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_uint32_wrapper { } } } } } test { name: "field_assign_proto2_max" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint32_wrapper: 4294967295u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_uint32_wrapper { value: 4294967295} } } } } test { name: "field_assign_proto2_range" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint32_wrapper: 6111222333u}" eval_error { errors { message: "range error" } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint32_wrapper: 975u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_uint32_wrapper { value: 975 } } } } } test { name: "field_assign_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint32_wrapper: 0u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_uint32_wrapper { } } } } } test { name: "field_assign_proto3_max" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint32_wrapper: 4294967295u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_uint32_wrapper { value: 4294967295 } } } } } test { name: "field_assign_proto3_range" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint32_wrapper: 6111222333u}" eval_error { errors { message: "range error" } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint32_wrapper: 258u}.single_uint32_wrapper" value { uint64_value: 258 } } test { name: "field_read_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint32_wrapper: 0u}.single_uint32_wrapper" value { uint64_value: 0 } } test { name: "field_read_proto2_unset" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_uint32_wrapper" value { null_value: NULL_VALUE } } } section { name: "uint64" description: "Tests for uint64 conversion." test { name: "literal" expr: "google.protobuf.UInt64Value{value: 123u}" value { uint64_value: 123 } } test { name: "literal_no_field_access" expr: "google.protobuf.UInt64Value{value: 123u}.value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_zero" expr: "google.protobuf.UInt64Value{}" value { uint64_value: 0 } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.UInt64Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.UInt64Value] { value: 2000000 } } } } } value { uint64_value: 2000000 } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint64_wrapper: 432u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_uint64_wrapper { value: 432 } } } } } test { name: "field_assign_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint64_wrapper: 0u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_uint64_wrapper { } } } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint64_wrapper: 975u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_uint64_wrapper { value: 975 } } } } } test { name: "field_assign_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint64_wrapper: 0u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_uint64_wrapper { } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint64_wrapper: 5123123123u}.single_uint64_wrapper" value { uint64_value: 5123123123 } } test { name: "field_read_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint64_wrapper: 0u}.single_uint64_wrapper" value { uint64_value: 0 } } test { name: "field_read_proto2_unset" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_uint64_wrapper" value { null_value: NULL_VALUE } } } section { name: "float" description: "Tests for float conversion." test { name: "literal" expr: "google.protobuf.FloatValue{value: -1.5e3}" value { double_value: -1500.0 } } test { name: "literal_not_double" description: "Use a number with no exact representation to make sure we actually narrow to a float." expr: "google.protobuf.FloatValue{value: 1.333} == 1.333" value { bool_value: false } } test { name: "literal_no_field_access" expr: "google.protobuf.FloatValue{value: 3.1416}.value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_zero" expr: "google.protobuf.FloatValue{}" value { double_value: 0.0 } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.FloatValue" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.FloatValue] { value: -1.25e6 } } } } } value { double_value: -1250000.0 } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float_wrapper: 86.75}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_float_wrapper { value: 86.75 } } } } } test { name: "field_assign_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float_wrapper: 0.0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_float_wrapper { } } } } } test { name: "field_assign_proto2_subnorm" description: "Subnormal single floats range from ~1e-38 to ~1e-45." container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float_wrapper: 1e-40}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_float_wrapper { value: 1e-40 } } } } } test { name: "field_assign_proto2_round_to_zero" description: "Subnormal single floats range from ~1e-38 to ~1e-45." container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float_wrapper: 1e-50}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_float_wrapper { } } } } } test { name: "field_assign_proto2_range" description: "Single float max is about 3.4e38" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float_wrapper: 1.4e55}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_float_wrapper { value: inf } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float_wrapper: -12.375}.single_float_wrapper" value { double_value: -12.375 } } test { name: "field_read_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper" value { double_value: 0.0 } } test { name: "field_read_proto2_unset" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_float_wrapper" value { null_value: NULL_VALUE } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_float_wrapper: -9.75}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_float_wrapper { value: -9.75 } } } } } test { name: "field_assign_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_float_wrapper: 0.0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_float_wrapper { } } } } } test { name: "field_assign_proto2_subnorm" description: "Subnormal single floats range from ~1e-38 to ~1e-45." container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float_wrapper: 1e-40}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_float_wrapper { value: 1e-40 } } } } } test { name: "field_assign_proto3_round_to_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_float_wrapper: -9.9e-100}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_float_wrapper { value: -0 } } } } } test { name: "field_assign_proto3_range" description: "Single float min is about -3.4e38" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_float_wrapper: -9.9e100}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_float_wrapper { value: -inf } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_float_wrapper: 64.25}.single_float_wrapper" value { double_value: 64.25 } } test { name: "field_read_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_float_wrapper: 0.0}.single_float_wrapper" value { double_value: 0.0 } } test { name: "field_read_proto3_unset" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_float_wrapper" value { null_value: NULL_VALUE } } } section { name: "double" description: "Tests for double conversion." test { name: "literal" expr: "google.protobuf.DoubleValue{value: -1.5e3}" value { double_value: -1500.0 } } test { name: "literal_no_field_access" expr: "google.protobuf.DoubleValue{value: 3.1416}.value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_zero" expr: "google.protobuf.DoubleValue{}" value { double_value: 0.0 } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.DoubleValue" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.DoubleValue] { value: -1.25e6 } } } } } value { double_value: -1250000.0 } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_double_wrapper: 86.75}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_double_wrapper { value: 86.75 } } } } } test { name: "field_assign_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_double_wrapper: 0.0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_double_wrapper { } } } } } test { name: "field_assign_proto2_range" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_double_wrapper: 1.4e55}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_double_wrapper { value: 1.4e55 } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_double_wrapper: -12.375}.single_double_wrapper" value { double_value: -12.375 } } test { name: "field_read_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32_wrapper: 0}.single_int32_wrapper" value { int64_value: 0 } } test { name: "field_read_proto2_unset" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_double_wrapper" value { null_value: NULL_VALUE } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_double_wrapper: -9.75}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_double_wrapper { value: -9.75 } } } } } test { name: "field_assign_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_double_wrapper: 0.0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_double_wrapper { } } } } } test { name: "field_assign_proto3_range" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_double_wrapper: -9.9e100}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_double_wrapper { value: -9.9e100 } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_double_wrapper: 64.25}.single_double_wrapper" value { double_value: 64.25 } } test { name: "field_read_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_double_wrapper: 0.0}.single_double_wrapper" value { double_value: 0.0 } } test { name: "field_read_proto3_unset" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_double_wrapper" value { null_value: NULL_VALUE } } } section { name: "bool" description: "Tests for bool conversion." test { name: "literal" expr: "google.protobuf.BoolValue{value: true}" value { bool_value: true } } test { name: "literal_no_field_access" expr: "google.protobuf.BoolValue{value: true}.value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_empty" expr: "google.protobuf.BoolValue{}" value { bool_value: false } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.BoolValue" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.BoolValue] { value: true } } } } } value { bool_value: true } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_bool_wrapper: true}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_bool_wrapper { value: true } } } } } test { name: "field_assign_proto2_false" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_bool_wrapper: false}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_bool_wrapper { } } } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bool_wrapper: true}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_bool_wrapper { value: true } } } } } test { name: "field_assign_proto3_false" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bool_wrapper: false}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_bool_wrapper { } } } } } } section { name: "string" description: "Tests for string conversion." test { name: "literal" expr: "google.protobuf.StringValue{value: 'foo'}" value { string_value: "foo" } } test { name: "literal_no_field_access" expr: "google.protobuf.StringValue{value: 'foo'}.value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_empty" expr: "google.protobuf.StringValue{}" value { string_value: "" } } test { name: "literal_unicode" expr: "google.protobuf.StringValue{value: 'flambé'}" value { string_value: "flambé" } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.StringValue" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.StringValue] { value: "bar" } } } } } value { string_value: "bar" } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_string_wrapper: 'baz'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_string_wrapper { value: "baz" } } } } } test { name: "field_assign_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_string_wrapper: ''}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_string_wrapper { } } } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_string_wrapper: 'bletch'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_string_wrapper { value: "bletch" } } } } } test { name: "field_assign_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_string_wrapper: ''}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_string_wrapper { } } } } } } section { name: "bytes" description: "Tests for bytes conversion." test { name: "literal" expr: "google.protobuf.BytesValue{value: b'foo\\123'}" value { bytes_value: "foo\123" } } test { name: "literal_no_field_access" expr: "google.protobuf.BytesValue{value: b'foo'}.value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_empty" expr: "google.protobuf.BytesValue{}" value { bytes_value: "" } } test { name: "literal_unicode" expr: "google.protobuf.BytesValue{value: b'flambé'}" value { bytes_value: "flambé" } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.BytesValue" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.BytesValue] { value: "bar" } } } } } value { bytes_value: "bar" } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_bytes_wrapper: b'baz'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_bytes_wrapper { value: "baz" } } } } } test { name: "field_assign_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_bytes_wrapper: b''}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_bytes_wrapper { } } } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bytes_wrapper: b'bletch'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_bytes_wrapper { value: "bletch" } } } } } test { name: "field_assign_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bytes_wrapper: b''}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_bytes_wrapper { } } } } } } section { name: "list" description: "Tests for list conversion." test { name: "literal" expr: "google.protobuf.ListValue{values: [3.0, 'foo', null]}" value { list_value { values { double_value: 3.0 } values { string_value: "foo" } values { null_value: NULL_VALUE } } } } test { name: "literal_no_field_access" expr: "google.protobuf.ListValue{values: [3.0, 'foo', null]}.values" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_empty" expr: "google.protobuf.ListValue{values: []}" value { list_value { } } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.ListValue" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.ListValue] { values { string_value: "bar" } values { list_value { values { string_value: "a" } values { string_value: "b" } } } } } } } } value { list_value { values { string_value: "bar" } values { list_value { values { string_value: "a" } values { string_value: "b" } } } } } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{list_value: [1.0, 'one']}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { list_value { values: { number_value: 1.0 } values: { string_value: "one" } } } } } } test { name: "field_assign_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{list_value: []}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { list_value { } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{list_value: [1.0, 'one']}.list_value" value { list_value { values { double_value: 1.0 } values { string_value: "one" } } } } test { name: "field_read_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{list_value: []}.list_value" value { list_value { } } } test { name: "field_read_proto2_unset" description: "Not a wrapper type, so doesn't convert to null." container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.list_value" value { list_value { } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{list_value: [1.0, 'one']}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { list_value { values: { number_value: 1.0 } values: { string_value: "one" } } } } } } test { name: "field_assign_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{list_value: []}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { list_value { } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{list_value: [1.0, 'one']}.list_value" value { list_value { values { double_value: 1.0 } values { string_value: "one" } } } } test { name: "field_read_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{list_value: []}.list_value" value { list_value { } } } test { name: "field_read_proto3_unset" description: "Not a wrapper type, so doesn't convert to null." container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.list_value" value { list_value { } } } } section { name: "struct" description: "Tests for struct conversion." test { name: "literal" expr: "google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}" value { map_value { entries { key { string_value: "uno" } value { double_value: 1.0 } } entries { key { string_value: "dos" } value { double_value: 2.0 } } } } } test { name: "literal_no_field_access" expr: "google.protobuf.Struct{fields: {'uno': 1.0, 'dos': 2.0}}.fields" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_empty" expr: "google.protobuf.Struct{fields: {}}" value { map_value { } } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Struct" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Struct] { fields { key: "first" value { string_value: "Abraham" } } fields { key: "last" value { string_value: "Lincoln" } } } } } } } value { map_value { entries { key { string_value: "first" } value { string_value: "Abraham" } } entries { key { string_value: "last" } value { string_value: "Lincoln" } } } } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_struct { fields { key: "un" value { number_value: 1.0 } } fields { key: "deux" value { number_value: 2.0 } } } } } } } test { name: "field_assign_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_struct: {}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_struct { } } } } } test { name: "field_assign_proto2_bad" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_struct: {1: 'uno'}}" disable_check: true eval_error { errors { message: "bad key type" } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_struct: {'one': 1.0}}.single_struct" value { map_value { entries { key { string_value: "one" } value { double_value: 1.0 } } } } } test { name: "field_read_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_struct: {}}.single_struct" value { map_value { } } } test { name: "field_read_proto2_unset" description: "Not a wrapper type, so doesn't convert to null." container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_struct" value { map_value { } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_struct: {'un': 1.0, 'deux': 2.0}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_struct { fields { key: "un" value { number_value: 1.0 } } fields { key: "deux" value { number_value: 2.0 } } } } } } } test { name: "field_assign_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_struct: {}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_struct { } } } } } test { name: "field_assign_proto3_bad" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_struct: {1: 'uno'}}" disable_check: true eval_error { errors { message: "bad key type" } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_struct: {'one': 1.0}}.single_struct" value { map_value { entries { key { string_value: "one" } value { double_value: 1.0 } } } } } test { name: "field_read_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_struct: {}}.single_struct" value { map_value { } } } test { name: "field_read_proto3_unset" description: "Not a wrapper type, so doesn't convert to null." container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_struct" value { map_value { } } } } section { name: "value_null" description: "Tests for null conversions." test { name: "literal" container: "google.protobuf" expr: "Value{null_value: NullValue.NULL_VALUE}" value { null_value: NULL_VALUE } } test { name: "literal_no_field_access" container: "google.protobuf" expr: "Value{null_value: NullValue.NULL_VALUE}.null_value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_unset" expr: "google.protobuf.Value{}" value { null_value: NULL_VALUE } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Value] { null_value: NULL_VALUE } } } } } value { null_value: NULL_VALUE } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: null}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { null_value: NULL_VALUE } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: null}.single_value" value { null_value: NULL_VALUE } } test { name: "field_read_proto2_unset" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_value" value { null_value: NULL_VALUE } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: null}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { null_value: NULL_VALUE } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: null}.single_value" value { null_value: NULL_VALUE } } test { name: "field_read_proto3_unset" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_value" value { null_value: NULL_VALUE } } } section { name: "value_number" description: "Tests for number conversions in Value." test { name: "literal" expr: "google.protobuf.Value{number_value: 12.5}" value { double_value: 12.5 } } test { name: "literal_no_field_access" expr: "google.protobuf.Value{number_value: 12.5}.number_value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_zero" expr: "google.protobuf.Value{number_value: 0.0}" value { double_value: 0.0 } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Value] { number_value: -26.375 } } } } } value { double_value: -26.375 } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: 7e23}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { number_value: 7e23 } } } } } test { name: "field_assign_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: 0.0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { number_value: 0.0 } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: 7e23}.single_value" value { double_value: 7e23 } } test { name: "field_read_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: 0.0}.single_value" value { double_value: 0.0 } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: 7e23}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { number_value: 7e23 } } } } } test { name: "field_assign_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: 0.0}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { number_value: 0.0 } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: 7e23}.single_value" value { double_value: 7e23 } } test { name: "field_read_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: 0.0}.single_value" value { double_value: 0.0 } } } section { name: "value_string" description: "Tests for string conversions in Value." test { name: "literal" expr: "google.protobuf.Value{string_value: 'foo'}" value { string_value: "foo" } } test { name: "literal_no_field_access" expr: "google.protobuf.Value{string_value: 'foo'}.string_value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_empty" expr: "google.protobuf.Value{string_value: ''}" value { string_value: "" } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Value] { string_value: "bar" } } } } } value { string_value: "bar" } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: 'baz'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { string_value: "baz" } } } } } test { name: "field_assign_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: ''}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { string_value: "" } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: 'bletch'}.single_value" value { string_value: "bletch" } } test { name: "field_read_proto2_zero" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: ''}.single_value" value { string_value: "" } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: 'baz'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { string_value: "baz" } } } } } test { name: "field_assign_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: ''}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { string_value: "" } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: 'bletch'}.single_value" value { string_value: "bletch" } } test { name: "field_read_proto3_zero" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: ''}.single_value" value { string_value: "" } } } section { name: "value_bool" description: "Tests for boolean conversions in Value." test { name: "literal" expr: "google.protobuf.Value{bool_value: true}" value { bool_value: true } } test { name: "literal_no_field_access" expr: "google.protobuf.Value{bool_value: true}.bool_value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_false" expr: "google.protobuf.Value{bool_value: false}" value { bool_value: false } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Value] { bool_value: true } } } } } value { bool_value: true } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: true}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { bool_value: true } } } } } test { name: "field_assign_proto2_false" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: false}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { bool_value: false } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: true}.single_value" value { bool_value: true } } test { name: "field_read_proto2_false" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: false}.single_value" value { bool_value: false } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: true}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { bool_value: true } } } } } test { name: "field_assign_proto3_false" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: false}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { bool_value: false } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: true}.single_value" value { bool_value: true } } test { name: "field_read_proto3_false" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: false}.single_value" value { bool_value: false } } } section { name: "value_struct" description: "Tests for struct conversions in Value." test { name: "literal" expr: "google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}" value { map_value { entries { key { string_value: "a" } value { double_value: 1.0 } } entries { key { string_value: "b" } value { string_value: "two" } } } } } test { name: "literal_no_field_access" expr: "google.protobuf.Value{struct_value: {'a': 1.0, 'b': 'two'}}.struct_value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_empty" expr: "google.protobuf.Value{struct_value: {}}" value { map_value: { } } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Value] { struct_value { fields { key: "x" value { null_value: NULL_VALUE } } fields { key: "y" value { bool_value: false } } } } } } } } value { map_value { entries { key { string_value: "x" } value { null_value: NULL_VALUE } } entries { key { string_value: "y" } value { bool_value: false } } } } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { struct_value { fields { key: "un" value { number_value: 1.0 } } fields { key: "deux" value { number_value: 2.0 } } } } } } } } test { name: "field_assign_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: {}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { struct_value: { } } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: {'i': true}}.single_value" value { map_value { entries { key { string_value: "i" } value { bool_value: true } } } } } test { name: "field_read_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: {}}.single_value" value { map_value: { } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: {'un': 1.0, 'deux': 2.0}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { struct_value { fields { key: "un" value { number_value: 1.0 } } fields { key: "deux" value { number_value: 2.0 } } } } } } } } test { name: "field_assign_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: {}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { struct_value: { } } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: {'i': true}}.single_value" value { map_value { entries { key { string_value: "i" } value { bool_value: true } } } } } test { name: "field_read_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: {}}.single_value" value { map_value: { } } } } section { name: "value_list" description: "Tests for list conversions in Value." test { name: "literal" expr: "google.protobuf.Value{list_value: ['a', 3.0]}" value { list_value { values { string_value: "a" } values { double_value: 3.0 } } } } test { name: "literal_no_field_access" expr: "google.protobuf.Value{list_value: []}.list_value" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_empty" expr: "google.protobuf.Value{list_value: []}" value { list_value: { } } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Value" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Value] { list_value { values { number_value: 1.0 } values { bool_value: true } values { string_value: "hi" } } } } } } } value { list_value { values { double_value: 1.0 } values { bool_value: true } values { string_value: "hi" } } } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: ['un', 1.0]}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { list_value { values { string_value: "un" } values { number_value: 1.0 } } } } } } } test { name: "field_assign_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: []}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { list_value: { } } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: ['i', true]}.single_value" value { list_value { values { string_value: "i" } values { bool_value: true } } } } test { name: "field_read_proto2_empty" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: []}.single_value" value { list_value: { } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: ['un', 1.0]}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { list_value { values { string_value: "un" } values { number_value: 1.0 } } } } } } } test { name: "field_assign_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: []}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { list_value: { } } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: ['i', true]}.single_value" value { list_value { values { string_value: "i" } values { bool_value: true } } } } test { name: "field_read_proto3_empty" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: []}.single_value" value { list_value: { } } } } section { name: "any" description: "Tests for Any conversion." test { name: "literal" expr: "google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32: 150 } } } } test { name: "literal_no_field_access" expr: "google.protobuf.Any{type_url: 'type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes', value: b'\\x08\\x96\\x01'}.type_url" disable_check: true eval_error { errors { message: "no_matching_overload" } } } test { name: "literal_empty" expr: "google.protobuf.Any{}" eval_error { errors { message: "conversion" } } } test { name: "var" expr: "x" type_env { name: "x" ident { type { message_type: "google.protobuf.Any" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Any] { type_url: "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes" value: "\x08\x96\x01" } } } } } value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32: 150 } } } } test { name: "field_assign_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_any { type_url: "type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes" value: "\x08\x96\x01" } } } } } test { name: "field_read_proto2" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32: 150 } } } } test { name: "field_assign_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_any { type_url: "type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes" value: "\x08\x96\x01" } } } } } test { name: "field_read_proto3" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 150}}.single_any" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int32: 150 } } } } } section { name: "complex" description: "Tests combining various dynamic conversions." test { name: "any_list_map" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: [{'almost': 'done'}]}.single_any" value { list_value { values { map_value { entries { key { string_value: "almost" } value { string_value: "done" } } } } } } } } cel-spec-0.24.0/tests/simple/testdata/encoders_ext.textproto000066400000000000000000000014511500667630300242170ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "encoders_ext" description: "Tests for the encoders extension library." section: { name: "encode" test: { name: "hello" expr: "base64.encode(b'hello')" value: { string_value: "aGVsbG8=" } } } section: { name: "decode" test: { name: "hello" expr: "base64.decode('aGVsbG8=')" value: { bytes_value: "hello" } } test: { name: "hello_without_padding" expr: "base64.decode('aGVsbG8')" value: { bytes_value: "hello" } } } section: { name: "round_trip" test: { name: "hello" expr: "base64.decode(base64.encode(b'Hello World!'))" value: { bytes_value: "Hello World!" } } } cel-spec-0.24.0/tests/simple/testdata/enums.textproto000066400000000000000000000536251500667630300226760ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "enums" description: "Tests for enum types." section { name: "legacy_proto2" description: "Legacy semantics where all enums are ints, proto2." test { name: "literal_global" container: "cel.expr.conformance.proto2" expr: "GlobalEnum.GAZ" value { int64_value: 2 } } test { name: "literal_nested" container: "cel.expr.conformance.proto2" expr: "TestAllTypes.NestedEnum.BAR" value { int64_value: 1 } } test { name: "literal_zero" container: "cel.expr.conformance.proto2" expr: "GlobalEnum.GOO" value { int64_value: 0 } } test { name: "comparison" container: "cel.expr.conformance.proto2" expr: "GlobalEnum.GAR == 1" value { bool_value: true } } test { name: "arithmetic" container: "cel.expr.conformance.proto2" expr: "TestAllTypes.NestedEnum.BAR + 3" value { int64_value: 4 } } test { name: "type_global" container: "cel.expr.conformance.proto2" expr: "type(GlobalEnum.GOO)" value { type_value: "int" } } test { name: "type_nested" container: "cel.expr.conformance.proto2" expr: "type(TestAllTypes.NestedEnum.BAZ)" value { type_value: "int" } } test { name: "select_default" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.standalone_enum" value { int64_value: 0 } } test { name: "field_type" container: "cel.expr.conformance.proto2" expr: "type(TestAllTypes{}.standalone_enum)" value { type_value: "int" } } test { name: "assign_standalone_name" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { standalone_enum: BAZ } } } } test { name: "assign_standalone_int" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{standalone_enum: 1}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { standalone_enum: BAR } } } } test { name: "assign_standalone_int_too_big" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{standalone_enum: 5000000000}" eval_error { errors { message: "range" } } } test { name: "assign_standalone_int_too_neg" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{standalone_enum: -7000000000}" eval_error { errors { message: "range" } } } test { name: "access_repeated_enum" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.repeated_nested_enum" value { list_value {} } } test { name: "assign_repeated_enum" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{" " repeated_nested_enum: [" " TestAllTypes.NestedEnum.FOO," " TestAllTypes.NestedEnum.BAR]}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { repeated_nested_enum: FOO repeated_nested_enum: BAR } } } } test { name: "list_enum_as_list_int" container: "cel.expr.conformance.proto2" expr: "0 in " "TestAllTypes{" " repeated_nested_enum: [" " TestAllTypes.NestedEnum.FOO," " TestAllTypes.NestedEnum.BAR]}" ".repeated_nested_enum" value: { bool_value: true } } test { name: "enum_as_int" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]" value: { bool_value: true } } } section { name: "legacy_proto3" description: "Legacy semantics where all enums are ints, proto3" test { name: "literal_global" container: "cel.expr.conformance.proto3" expr: "GlobalEnum.GAZ" value { int64_value: 2 } } test { name: "literal_nested" container: "cel.expr.conformance.proto3" expr: "TestAllTypes.NestedEnum.BAR" value { int64_value: 1 } } test { name: "literal_zero" container: "cel.expr.conformance.proto3" expr: "GlobalEnum.GOO" value { int64_value: 0 } } test { name: "comparison" container: "cel.expr.conformance.proto3" expr: "GlobalEnum.GAR == 1" value { bool_value: true } } test { name: "arithmetic" container: "cel.expr.conformance.proto3" expr: "TestAllTypes.NestedEnum.BAR + 3" value { int64_value: 4 } } test { name: "type_global" container: "cel.expr.conformance.proto3" expr: "type(GlobalEnum.GOO)" value { type_value: "int" } } test { name: "type_nested" container: "cel.expr.conformance.proto3" expr: "type(TestAllTypes.NestedEnum.BAZ)" value { type_value: "int" } } test { name: "select_default" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.standalone_enum" value { int64_value: 0 } } test { name: "select" container: "cel.expr.conformance.proto3" expr: "x.standalone_enum" type_env { name: "x" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: 2 } } } } } value { int64_value: 2 } } test { name: "select_big" container: "cel.expr.conformance.proto3" expr: "x.standalone_enum" type_env { name: "x" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: 108 } } } } } value { int64_value: 108 } } test { name: "select_neg" container: "cel.expr.conformance.proto3" expr: "x.standalone_enum" type_env { name: "x" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: -3 } } } } } value { int64_value: -3 } } test { name: "field_type" container: "cel.expr.conformance.proto3" expr: "type(TestAllTypes{}.standalone_enum)" value { type_value: "int" } } test { name: "assign_standalone_name" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: BAZ } } } } test { name: "assign_standalone_int" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: 1}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: BAR } } } } test { name: "assign_standalone_int_big" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: 99}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: 99 } } } } test { name: "assign_standalone_int_neg" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: -1}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: -1 } } } } test { name: "assign_standalone_int_too_big" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: 5000000000}" eval_error { errors { message: "range" } } } test { name: "assign_standalone_int_too_neg" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: -7000000000}" eval_error { errors { message: "range" } } } test { name: "access_repeated_enum" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.repeated_nested_enum" value { list_value {} } } test { name: "assign_repeated_enum" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{" " repeated_nested_enum: [" " TestAllTypes.NestedEnum.FOO," " TestAllTypes.NestedEnum.BAR]}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { repeated_nested_enum: FOO repeated_nested_enum: BAR } } } } test { name: "list_enum_as_list_int" container: "cel.expr.conformance.proto2" expr: "0 in " "TestAllTypes{" " repeated_nested_enum: [" " TestAllTypes.NestedEnum.FOO," " TestAllTypes.NestedEnum.BAR]}" ".repeated_nested_enum" value: { bool_value: true } } test { name: "enum_as_int" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum in [0]" value: { bool_value: true } } } section { name: "strong_proto2" description: "String semantics where enums are distinct types, proto2." test { name: "literal_global" container: "cel.expr.conformance.proto2" expr: "GlobalEnum.GAZ" value { enum_value { type: "cel.expr.conformance.proto2.GlobalEnum" value: 2 } } } test { name: "literal_nested" container: "cel.expr.conformance.proto2" expr: "TestAllTypes.NestedEnum.BAR" value { enum_value { type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum" value: 1 } } } test { name: "literal_zero" container: "cel.expr.conformance.proto2" expr: "GlobalEnum.GOO" value { enum_value { type: "cel.expr.conformance.proto2.GlobalEnum" value: 0 } } } test { name: "comparison_true" container: "cel.expr.conformance.proto2" expr: "GlobalEnum.GAR == GlobalEnum.GAR" value { bool_value: true } } test { name: "comparison_false" container: "cel.expr.conformance.proto2" expr: "GlobalEnum.GAR == GlobalEnum.GAZ" value { bool_value: false } } test { name: "type_global" container: "cel.expr.conformance.proto2" expr: "type(GlobalEnum.GOO)" value { type_value: "cel.expr.conformance.proto2.GlobalEnum" } } test { name: "type_nested" container: "cel.expr.conformance.proto2" expr: "type(TestAllTypes.NestedEnum.BAZ)" value { type_value: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum" } } test { name: "select_default" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.standalone_enum" value { enum_value { type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum" value: 0 } } } test { name: "field_type" container: "cel.expr.conformance.proto2" expr: "type(TestAllTypes{}.standalone_enum)" value { type_value: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum" } } test { name: "assign_standalone_name" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { standalone_enum: BAZ } } } } test { name: "assign_standalone_int" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { standalone_enum: BAR } } } } test { name: "convert_symbol_to_int" container: "cel.expr.conformance.proto2" expr: "int(GlobalEnum.GAZ)" value { int64_value: 2 } } test { name: "convert_unnamed_to_int" description: "Disable check - missing way to declare enums." expr: "int(x)" disable_check: true bindings { key: "x" value { value { enum_value { type: "cel.expr.conformance.proto2.GlobalEnum" value: 444 } } } } value { int64_value: 444 } } test { name: "convert_int_inrange" container: "cel.expr.conformance.proto2" expr: "TestAllTypes.NestedEnum(2)" value { enum_value { type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum" value: 2 } } } test { name: "convert_int_big" container: "cel.expr.conformance.proto2" expr: "TestAllTypes.NestedEnum(20000)" value { enum_value { type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum" value: 20000 } } } test { name: "convert_int_neg" container: "cel.expr.conformance.proto2" expr: "GlobalEnum(-33)" value { enum_value { type: "cel.expr.conformance.proto2.GlobalEnum" value: -33 } } } test { name: "convert_int_too_big" container: "cel.expr.conformance.proto2" expr: "TestAllTypes.NestedEnum(5000000000)" eval_error { errors { message: "range" } } } test { name: "convert_int_too_neg" container: "cel.expr.conformance.proto2" expr: "TestAllTypes.NestedEnum(-7000000000)" eval_error { errors { message: "range" } } } test { name: "convert_string" container: "cel.expr.conformance.proto2" expr: "TestAllTypes.NestedEnum('BAZ')" value { enum_value { type: "cel.expr.conformance.proto2.TestAllTypes.NestedEnum" value: 2 } } } test { name: "convert_string_bad" container: "cel.expr.conformance.proto2" expr: "TestAllTypes.NestedEnum('BLETCH')" eval_error { errors { message: "invalid" } } } } section { name: "strong_proto3" description: "String semantics where enums are distinct types, proto3." test { name: "literal_global" container: "cel.expr.conformance.proto3" expr: "GlobalEnum.GAZ" value { enum_value { type: "cel.expr.conformance.proto3.GlobalEnum" value: 2 } } } test { name: "literal_nested" container: "cel.expr.conformance.proto3" expr: "TestAllTypes.NestedEnum.BAR" value { enum_value { type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" value: 1 } } } test { name: "literal_zero" container: "cel.expr.conformance.proto3" expr: "GlobalEnum.GOO" value { enum_value { type: "cel.expr.conformance.proto3.GlobalEnum" value: 0 } } } test { name: "comparison_true" container: "cel.expr.conformance.proto3" expr: "GlobalEnum.GAR == GlobalEnum.GAR" value { bool_value: true } } test { name: "comparison_false" container: "cel.expr.conformance.proto3" expr: "GlobalEnum.GAR == GlobalEnum.GAZ" value { bool_value: false } } test { name: "type_global" container: "cel.expr.conformance.proto3" expr: "type(GlobalEnum.GOO)" value { type_value: "cel.expr.conformance.proto3.GlobalEnum" } } test { name: "type_nested" container: "cel.expr.conformance.proto3" expr: "type(TestAllTypes.NestedEnum.BAZ)" value { type_value: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" } } test { name: "select_default" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.standalone_enum" value { enum_value { type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" value: 0 } } } test { name: "select" container: "cel.expr.conformance.proto3" expr: "x.standalone_enum" type_env { name: "x" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: 2 } } } } } value { enum_value { type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" value: 2 } } } test { name: "select_big" container: "cel.expr.conformance.proto3" expr: "x.standalone_enum" type_env { name: "x" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: 108 } } } } } value { enum_value { type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" value: 108 } } } test { name: "select_neg" container: "cel.expr.conformance.proto3" expr: "x.standalone_enum" type_env { name: "x" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: -3 } } } } } value { enum_value { type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" value: -3 } } } test { name: "field_type" container: "cel.expr.conformance.proto3" expr: "type(TestAllTypes{}.standalone_enum)" value { type_value: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" } } test { name: "assign_standalone_name" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAZ}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: BAZ } } } } test { name: "assign_standalone_int" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(1)}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: BAR } } } } test { name: "assign_standalone_int_big" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(99)}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: 99 } } } } test { name: "assign_standalone_int_neg" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{standalone_enum: TestAllTypes.NestedEnum(-1)}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: -1 } } } } test { name: "convert_symbol_to_int" container: "cel.expr.conformance.proto3" expr: "int(GlobalEnum.GAZ)" value { int64_value: 2 } } test { name: "convert_unnamed_to_int" description: "Disable check - missing way to declare enums." expr: "int(x)" disable_check: true bindings { key: "x" value { value { enum_value { type: "cel.expr.conformance.proto3.GlobalEnum" value: 444 } } } } value { int64_value: 444 } } test { name: "convert_unnamed_to_int_select" expr: "int(x.standalone_enum)" type_env { name: "x" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { standalone_enum: -987 } } } } } value { int64_value: -987 } } test { name: "convert_int_inrange" container: "cel.expr.conformance.proto3" expr: "TestAllTypes.NestedEnum(2)" value { enum_value { type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" value: 2 } } } test { name: "convert_int_big" container: "cel.expr.conformance.proto3" expr: "TestAllTypes.NestedEnum(20000)" value { enum_value { type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" value: 20000 } } } test { name: "convert_int_neg" container: "cel.expr.conformance.proto3" expr: "GlobalEnum(-33)" value { enum_value { type: "cel.expr.conformance.proto3.GlobalEnum" value: -33 } } } test { name: "convert_int_too_big" container: "cel.expr.conformance.proto3" expr: "TestAllTypes.NestedEnum(5000000000)" eval_error { errors { message: "range" } } } test { name: "convert_int_too_neg" container: "cel.expr.conformance.proto3" expr: "TestAllTypes.NestedEnum(-7000000000)" eval_error { errors { message: "range" } } } test { name: "convert_string" container: "cel.expr.conformance.proto3" expr: "TestAllTypes.NestedEnum('BAZ')" value { enum_value { type: "cel.expr.conformance.proto3.TestAllTypes.NestedEnum" value: 2 } } } test { name: "convert_string_bad" container: "cel.expr.conformance.proto3" expr: "TestAllTypes.NestedEnum('BLETCH')" eval_error { errors { message: "invalid" } } } } cel-spec-0.24.0/tests/simple/testdata/fields.textproto000066400000000000000000000351601500667630300230070ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "fields" description: "Tests for field access in maps." section { name: "map_fields" description: "select an element in a map" test { name: "map_key_int64" expr: "{0:1,2:2,5:true}[5]" value: { bool_value: true } } test { name: "map_key_uint64" expr: "{0u:1u,2u:'happy',5u:3u}[2u]" value: { string_value: "happy" } } test { name: "map_key_string" expr: "{'name':100u}['name']" value: { uint64_value: 100 } } test { name: "map_key_bool" expr: "{true:5}[true]" value: { int64_value: 5 } } test { name: "map_key_mixed_type" expr: "{true:1,2:2,5u:3}[true]" value: { int64_value: 1 } } test { name: "map_key_mixed_numbers_double_key" expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[3.0]" value: { double_value: 3.0 } } test { name: "map_key_mixed_numbers_lossy_double_key" expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[3.1]" eval_error: { errors: { message: "no such key" } } } test { name: "map_key_mixed_numbers_uint_key" expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[2u]" value: { double_value: 2.0 } } test { name: "map_key_mixed_numbers_int_key" expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[1]" value: { double_value: 1.0 } } test { name: "map_field_access" expr: "x.name" type_env: { name: "x" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: INT64 } } } } } bindings: { key: "x" value: { value: { map_value: { entries { key: { string_value: "name" } value: { int64_value: 1024 } } } } } } value: { int64_value: 1024 } } test { name: "map_no_such_key" expr: "{0:1,2:2,5:3}[1]" eval_error: { errors: { message: "no such key" } } } test { name: "map_no_such_key_or_false" expr: "dyn({0:1,2:2,5:3}[1]) || false" eval_error: { errors: { message: "no such key" } } } test { name: "map_no_such_key_or_true" expr: "dyn({0:1,2:2,5:3}[1]) || true" value: { bool_value: true } } test { name: "map_no_such_key_and_false" expr: "dyn({0:1,2:2,5:3}[1]) && false" value: { bool_value: false } } test { name: "map_no_such_key_and_true" expr: "dyn({0:1,2:2,5:3}[1]) && true" eval_error: { errors: { message: "no such key" } } } test { name: "map_bad_key_type" expr: "{0:1,2:2,5:3}[dyn(b'')]" eval_error: { errors: { message: "no such key" } } } test { name: "map_bad_key_type_or_false" expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) || false" eval_error: { errors: { message: "no such key" } } } test { name: "map_bad_key_type_or_true" expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) || true" value: { bool_value: true } } test { name: "map_bad_key_type_and_false" expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) && false" value: { bool_value: false } } test { name: "map_bad_key_type_and_true" expr: "dyn({0:1,2:2,5:3}[dyn(b'')]) && true" eval_error: { errors: { message: "no such key" } } } test { name: "map_field_select_no_such_key" expr: "x.name" type_env: { name: "x" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: STRING } } } } } bindings: { key: "x" value: { value: { map_value: { entries { key: { string_value: "holiday" } value: { string_value: "field" } } } } } } eval_error: { errors: { message: "no such key: 'name'" } } } test { name: "map_field_select_no_such_key_or_false" expr: "dyn(x.name) || false" type_env: { name: "x" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: STRING } } } } } bindings: { key: "x" value: { value: { map_value: { entries { key: { string_value: "holiday" } value: { string_value: "field" } } } } } } eval_error: { errors: { message: "no such key: 'name'" } } } test { name: "map_field_select_no_such_key_or_true" expr: "dyn(x.name) || true" type_env: { name: "x" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: STRING } } } } } bindings: { key: "x" value: { value: { map_value: { entries { key: { string_value: "holiday" } value: { string_value: "field" } } } } } } value: { bool_value: true } } test { name: "map_field_select_no_such_key_and_false" expr: "dyn(x.name) && false" type_env: { name: "x" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: STRING } } } } } bindings: { key: "x" value: { value: { map_value: { entries { key: { string_value: "holiday" } value: { string_value: "field" } } } } } } value: { bool_value: false } } test { name: "map_field_select_no_such_key_and_true" expr: "dyn(x.name) && true" type_env: { name: "x" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: STRING } } } } } bindings: { key: "x" value: { value: { map_value: { entries { key: { string_value: "holiday" } value: { string_value: "field" } } } } } } eval_error: { errors: { message: "no such key: 'name'" } } } test { name: "map_value_null" expr: "{true:null}[true]" value: { null_value: NULL_VALUE } } test { name: "map_value_bool" expr: "{27:false}[27]" value: { bool_value: false } } test { name: "map_value_string" expr: "{'n':'x'}['n']" value: { string_value: "x" } } test { name: "map_value_float" expr: "{3:15.15}[3]" value: { double_value: 15.15 } } test { name: "map_value_uint64" expr: "{0u:1u,2u:2u,5u:3u}[0u]" value: { uint64_value: 1 } } test { name: "map_value_int64" expr: "{true:1,false:2}[true]" value: { int64_value: 1 } } test { name: "map_value_bytes" expr: "{0:b''}[0]" value: { bytes_value: "" } } test { name: "map_value_list" expr: "{0u:[1]}[0u]" value: { list_value: { values: { int64_value: 1 } } } } test { name: "map_value_map" expr: "{'map': {'k': 'v'}}['map']" value: { map_value { entries { key: { string_value: "k" } value: { string_value: "v" } } } } } test { name: "map_value_mix_type" expr: "{'map': {'k': 'v'}, 'list': [1]}['map']" value: { map_value { entries { key: { string_value: "k" } value: { string_value: "v" } } } } } } section { name: "map_has" description: "Has macro for map entries." test { name: "has" expr: "has({'a': 1, 'b': 2}.a)" value: { bool_value: true } } test { name: "has_not" expr: "has({'a': 1, 'b': 2}.c)" value: { bool_value: false } } test { name: "has_empty" expr: "has({}.a)" value: { bool_value: false } } } section { name: "quoted_map_fields" description: "Field accesses using the quote syntax" test { name: "field_access_slash" expr: "{'/api/v1': true, '/api/v2': false}.`/api/v1`" value: { bool_value: true } } test { name: "field_access_dash" expr: "{'content-type': 'application/json', 'content-length': 145}.`content-type` == 'application/json'" value: { bool_value: true } } test { name: "field_access_dot" expr: "{'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`" value: { int64_value: 32 } } test { name: "has_field_slash" expr: "has({'/api/v1': true, '/api/v2': false}.`/api/v3`)" value: { bool_value: false } } test { name: "has_field_dash" expr: "has({'content-type': 'application/json', 'content-length': 145}.`content-type`)" value: { bool_value: true } } test { name: "has_field_dot" expr: "has({'foo.txt': 32, 'bar.csv': 1024}.`foo.txt`)" value: { bool_value: true } } } section { name: "qualified_identifier_resolution" description: "Tests for qualified identifier resolution." test { name: "qualified_ident" expr: "a.b.c" type_env: { name: "a.b.c" ident: { type: { primitive: STRING } } } bindings: { key: "a.b.c" value: { value: { string_value: "yeah" } } } value: { string_value: "yeah" } } test { name: "map_field_select" expr: "a.b.c" type_env: { name: "a.b" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: STRING } } } } } bindings: { key: "a.b" value: { value: { map_value: { entries { key: { string_value: "c" } value: { string_value: "yeah" } } } } } } value: { string_value: "yeah" } } test { name: "qualified_identifier_resolution_unchecked" description: "namespace resolution should try to find the longest prefix for the evaluator." expr: "a.b.c" type_env: { name: "a.b.c" ident: { type: { primitive: STRING } } } bindings: { key: "a.b.c" value: { value: { string_value: "yeah" } } } type_env: { name: "a.b" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: STRING } } } } } bindings: { key: "a.b" value: { value: { map_value: { entries { key: { string_value: "c" } value: { string_value: "oops" } } } } } } disable_check: true ## when check is disabled, the evaluator should evaluate it in the correct order value: { string_value: "yeah" } } test { name: "list_field_select_unsupported" expr: "a.b.pancakes" disable_check: true type_env: { name: "a.b" ident: { type: { list_type: { elem_type: { primitive: STRING } } } } } bindings: { key: "a.b" value: { value: { list_value: { values: { string_value: "pancakes" } } } } } eval_error: { errors: { message: "type 'list_type: > ' does not support field selection" } } } test { name: "int64_field_select_unsupported" expr: "a.pancakes" disable_check: true type_env: { name: "a" ident: { type: { primitive: INT64 } } } bindings: { key: "a" value: { value: { int64_value: 15 } } } eval_error: { errors: { message: "type 'int64_type' does not support field selection" } } } test { name: "ident_with_longest_prefix_check" description: "namespace resolution should try to find the longest prefix for the checker." expr: "a.b.c" type_env: { name: "a.b.c" ident: { type: { primitive: STRING } } } bindings: { key: "a.b.c" value: { value: { string_value: "yeah" } } } type_env: { name: "a.b" ident: { type: { map_type: { key_type: { primitive: STRING } value_type: { primitive: STRING } } } } } bindings: { key: "a.b" value: { value: { map_value: { entries { key: { string_value: "c" } value: { string_value: "oops" } } } } } } value: { string_value: "yeah" } } test { name: "map_key_float" description: "map should not support float as the key." expr: "{3.3:15.15, 1.0: 5}[1.0]" disable_check: true # need to make it fail in the evaluation phase eval_error: { errors: { message: "unsupported key type" } } ## Current behavior ## value: { int64_value: 5 } } test { name: "map_key_null" description: "map should not support null as the key." expr: "{null:false}[null]" disable_check: true # need to make it fail in the evaluation phase eval_error: { errors: { message: "unsupported key type" } } ## Current behavior ## value: { bool_value: false } } test { name: "map_value_repeat_key" description: "map should not support repeated key." expr: "{true:1,false:2,true:3}[true]" eval_error: { errors: { message: "Failed with repeated key" } } ## Current behavior: ## value: { int64_value: 1 } } test { name: "map_value_repeat_key_heterogeneous" description: "map should not support repeated key." expr: "{0: 1, 0u: 2}[0.0]" eval_error: { errors: { message: "Failed with repeated key" } } ## Current behavior: ## value: { int64_value: 1 } } } section { name: "in" description: "Tests for 'in' operator for maps." test { name: "empty" expr: "7 in {}" value: { bool_value: false } } test { name: "singleton" expr: "true in {true: 1}" value: { bool_value: true } } test { name: "present" expr: "'George' in {'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}" value: { bool_value: true } } test { name: "absent" expr: "'spider' in {'ant': 6, 'fly': 6, 'centipede': 100}" value: { bool_value: false } } test { name: "mixed_numbers_and_keys_present" expr: "3.0 in {1: 1, 2: 2, 3u: 3} && 2u in {1u: 1, 2: 2} && 1 in {1u: 1, 2: 2}" value: { bool_value: true } } test { name: "mixed_numbers_and_keys_absent" expr: "3.1 in {1: 1, 2: 2, 3u: 3}" value: { bool_value: false } } } cel-spec-0.24.0/tests/simple/testdata/fp_math.textproto000066400000000000000000000074331500667630300231610ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "fp_math" description: "Tests for floating-point math." section { name: "fp_math" description: "Simple tests for floating point." test { name: "add_positive_positive" expr: "4.25 + 15.25" value: { double_value: 19.5 } } test { name: "add_positive_negative" expr: "17.75 + (-7.75)" value: { double_value: 10 } } test { name: "add_negative_negative" expr: "-4.125 + (-2.125)" value: { double_value: -6.25 } } test { name: "sub_positive_positive" expr: "42.0 - 12.0" value: { double_value: 30 } } test { name: "sub_positive_negative" expr: "42.875 - (-22.0)" value: { double_value: 64.875 } } test { name: "sub_negative_negative" expr: "-4.875 - (-0.125)" value: { double_value: -4.75 } } test { name: "multiply_positive_positive" expr: "42.5 * 0.2" value: { double_value: 8.5 } } test { name: "multiply_positive_negative" expr: "40.75 * (-2.25)" value: { double_value: -91.6875 } } test { name: "multiply_negative_negative" expr: "-3.0 * (-2.5)" value: { double_value: 7.5 } } test { name: "divide_positive_positive" expr: "0.0625 / 0.002" value: { double_value: 31.25 } } test { name: "divide_positive_negative" expr: "-2.0 / 2.0" value: { double_value: -1 } } test { name: "divide_negative_negative" expr: "-8.875 / (-0.0625)" value: { double_value: 142 } } test { name: "mod_not_support" expr: "47.5 % 5.5" disable_check: true eval_error: { errors: { message:"found no matching overload for '_%_' applied to '(double, double)'" } } } test { name: "negative" expr: "-(4.5)" value: { double_value: -4.5 } } test { name: "double_negative" expr: "-(-1.25)" value: { double_value: 1.25 } } test { name: "negative_zero" expr: "-(0.0)" value: { double_value: -0.0 } } test { name: "divide_zero" expr: "15.75 / 0.0" value: { double_value: Infinity } } test { name: "multiply_zero" expr: "15.36 * 0.0" value: { double_value: 0 } } test { name: "add_left_identity" expr: "0.0 + 1.75" value: { double_value: 1.75} } test { name: "add_right_identity" expr: " 2.5 + 0.0" value: { double_value: 2.5 } } test { name: "add_commutative" expr: "7.5 + 1.5 == 1.5 + 7.5" value: { bool_value: true } } test { name: "add_associative" expr: "5.625 + (15.75 + 2.0) == (5.625 + 15.75) + 2.0" value: { bool_value: true } } test { name: "mul_left_identity" expr: "1.0 * 45.25" value: { double_value: 45.25 } } test { name: "mul_right_identity" expr: "-25.25 * 1.0" value: { double_value: -25.25 } } test { name: "mul_commutative" expr: "1.5 * 25.875 == 25.875 * 1.5" value: { bool_value: true } } test { name: "mul_associative" expr: "1.5 * (23.625 * 0.75) == (1.5 * 23.625) * 0.75" value: { bool_value: true } } test { name: "add_mul_distribute" expr: "5.75 * (1.5 + 2.5) == 5.75 * 1.5 + 5.75 * 2.5" ## overflow or underflow may cause this not equal. value: { bool_value: true } } test { name: "fp_overflow_positive" description: "DBL_MAX(2^1023) times two" expr: "2.0 * 8.988466e+307 " value: {double_value: inf} } test { name: "fp_overflow_negative" description: "-DBL_MAX(-2^1023) times two" expr: "2.0 * -8.988466e+307 " value: {double_value: -inf} } test { name: "fp_underflow" description: "DBL_MIN(2^-1074) divided by two" expr: "1e-324 / 2.0" ## Expect it to be the closest number to the exact result. value: {double_value: 0} } } cel-spec-0.24.0/tests/simple/testdata/integer_math.textproto000066400000000000000000000202311500667630300242000ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "integer_math" description: "Tests for int and uint math." section { name: "int64_math" description: "Simple tests for int64." test { name: "add_positive_positive" expr: "40 + 2" value: { int64_value: 42 } } test { name: "add_positive_negative" expr: "42 + (-7)" value: { int64_value: 35 } } test { name: "add_negative_negative" expr: "-4 + (-2)" value: { int64_value: -6 } } test { name: "sub_positive_positive" expr: "42 - 12" value: { int64_value: 30 } } test { name: "sub_positive_negative" expr: "42 - (-22)" value: { int64_value: 64 } } test { name: "sub_negative_negative" expr: "-42 - (-12)" value: { int64_value: -30 } } test { name: "multiply_positive_positive" expr: "42 * 2" value: { int64_value: 84 } } test { name: "multiply_positive_negative" expr: "40 * (-2)" value: { int64_value: -80 } } test { name: "multiply_negative_negative" expr: "-30 * (-2)" value: { int64_value: 60 } } test { name: "divide_positive_positive" expr: "42 / 2" value: { int64_value: 21 } } test { name: "divide_positive_negative" expr: "-20 / 2" value: { int64_value: -10 } } test { name: "divide_negative_negative" expr: "-80 / (-2)" value: { int64_value: 40 } } test { name: "mod_positive_positive" expr: "47 % 5" value: { int64_value: 2 } } test { name: "mod_positive_negative" expr: "43 % (-5)" value: { int64_value: 3 } } test { name: "mod_negative_negative" expr: "-42 % (-5)" value: { int64_value: -2 } } test { name: "mod_negative_positive" expr: "-3 % 5" value: { int64_value: -3 } } test { name: "unary_minus_pos" expr: "-(42)" value: { int64_value: -42 } } test { name: "unary_minus_neg" expr: "-(-42)" value: { int64_value: 42 } } test { name: "unary_minus_no_overload" expr: "-(42u)" disable_check: true eval_error: { errors: { message:"no_such_overload" } } } test { name: "unary_minus_not_bool" expr: "-false" disable_check: true eval_error: { errors: { message:"no_such_overload" } } } test { name: "mod_zero" expr: "34 % 0" eval_error: { errors: { message:"modulus by zero" } } } test { name: "negative_zero" expr: "-(0)" value: { int64_value: 0 } } test { name: "double_negative" expr: "-(-42)" value: { int64_value: 42 } } test { name: "divide_zero" expr: "15 / 0" eval_error: { errors: { message:"divide by zero" } } } test { name: "multiply_zero" expr: "15 * 0" value: { int64_value: 0 } } test { name: "add_left_identity" expr: "0 + 17" value: { int64_value: 17} } test { name: "add_right_identity" expr: " 29 + 0" value: { int64_value: 29 } } test { name: "add_commutative" expr: "75 + 15 == 15 + 75" value: { bool_value: true } } test { name: "add_associative" expr: "5 + (15 + 20) == (5 + 15) + 20" value: { bool_value: true } } test { name: "mul_left_identity" expr: "1 * 45" value: { int64_value: 45 } } test { name: "mul_right_identity" expr: "-25 * 1" value: { int64_value: -25 } } test { name: "mul_commutative" expr: "15 * 25 == 25 * 15" value: { bool_value: true } } test { name: "mul_associative" expr: "15 * (23 * 88) == (15 * 23) * 88" value: { bool_value: true } } test { name: "add_mul_distribute" expr: "5 * (15 + 25) == 5 * 15 + 5 * 25" value: { bool_value: true } } test { name: "int64_overflow_positive" description: "LLONG_MAX plus one." expr: "9223372036854775807 + 1" eval_error: { errors: { message: "return error for overflow" } } } test { name: "int64_overflow_negative" description: "LLONG_MIN minus one." expr: "-9223372036854775808 - 1" eval_error: { errors: { message: "return error for overflow" } } } test { name: "int64_overflow_add_negative" description: "negative overflow via addition" expr: "-9223372036854775808 + (-1)" eval_error: { errors: { message: "return error for overflow" } } } test { name: "int64_overflow_sub_positive" description: "positive overflow via subtraction" expr: "1 - (-9223372036854775807)" eval_error: { errors: { message: "return error for overflow" } } } test { name: "int64_min_negate" description: "Negated LLONG_MIN is not representable." expr: "-(-9223372036854775808)" eval_error: { errors: { message: "return error for overflow" } } } test { name: "int64_min_negate_mul" description: "Negate LLONG_MIN via multiplication" expr: "(-9223372036854775808) * -1" eval_error: { errors: { message: "return error for overflow" } } } test { name: "int64_min_negate_div" description: "Negate LLONG_MIN via division." expr: "(-9223372036854775808)/-1" eval_error: { errors: { message: "return error for overflow" } } } test { name: "int64_overflow_mul_positive" description: "Overflow via multiplication." expr: "5000000000 * 5000000000" eval_error: { errors: { message: "return error for overflow" } } } test { name: "int64_overflow_mul_negative" description: "Overflow via multiplication." expr: "(-5000000000) * 5000000000" eval_error: { errors: { message: "return error for overflow" } } } test { name: "uint64_overflow_positive" description: "ULLONG_MAX plus one." expr: "18446744073709551615u + 1u" eval_error: { errors: { message: "return error for overflow" } } } test { name: "uint64_overflow_negative" description: "zero minus one." expr: "0u - 1u" eval_error: { errors: { message: "return error for overflow" } } } test { name: "uint64_overflow_mul_positive" description: "Overflow via multiplication." expr: "5000000000u * 5000000000u" eval_error: { errors: { message: "return error for overflow" } } } } section { name: "uint64_math" description: "Simple tests for uint64." test { name: "add" expr: "42u + 2u" value: { uint64_value: 44 } } test { name: "sub" expr: "42u - 12u" value: { uint64_value: 30 } } test { name: "multiply" expr: "40u * 2u" value: { uint64_value: 80 } } test { name: "divide" expr: "60u / 2u" value: { uint64_value: 30 } } test { name: "mod" expr: "42u % 5u" value: { uint64_value: 2 } } test { name: "negative_no_overload" expr: "-(5u)" disable_check: true eval_error: { errors: { message:"no such overload" } } } test { name: "mod_zero" expr: "34u % 0u" eval_error: { errors: { message:"modulus by zero" } } } test { name: "divide_zero" expr: "15u / 0u" eval_error: { errors: { message:"divide by zero" } } } test { name: "multiply_zero" expr: "15u * 0u" value: { uint64_value: 0 } } test { name: "add_left_identity" expr: "0u + 17u" value: { uint64_value: 17} } test { name: "add_right_identity" expr: " 29u + 0u" value: { uint64_value: 29 } } test { name: "add_commutative" expr: "75u + 15u == 15u + 75u" value: { bool_value: true } } test { name: "add_associative" expr: "5u + (15u + 20u) == (5u + 15u) + 20u" value: { bool_value: true } } test { name: "mul_left_identity" expr: "1u * 45u" value: { uint64_value: 45 } } test { name: "mul_right_identity" expr: "25u * 1u" value: { uint64_value: 25 } } test { name: "mul_commutative" expr: "15u * 25u == 25u * 15u" value: { bool_value: true } } test { name: "mul_associative" expr: "15u * (23u * 88u) == (15u * 23u) * 88u" value: { bool_value: true } } test { name: "add_mul_distribute" expr: "5u * (15u + 25u) == 5u * 15u + 5u * 25u" value: { bool_value: true } } } cel-spec-0.24.0/tests/simple/testdata/lists.textproto000066400000000000000000000121251500667630300226730ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "lists" description: "Tests for list operations." section { name: "concatenation" description: "Tests for list concatenation." test { name: "list_append" expr: "[0, 1, 2] + [3, 4, 5] == [0, 1, 2, 3, 4, 5]" value: { bool_value: true } } test { name: "list_not_commutative" expr: "[0, 1, 2] + [3, 4, 5] == [3, 4, 5, 0, 1, 2]" value: { bool_value: false } } test { name: "list_repeat" expr: "[2] + [2]" value: { list_value { values: { int64_value: 2 } values: { int64_value: 2 } } } } test { name: "empty_empty" expr: "[] + []" value: { list_value { } } } test { name: "left_unit" expr: "[] + [3, 4]" value: { list_value { values { int64_value: 3 } values { int64_value: 4 } } } } test { name: "right_unit" expr: "[1, 2] + []" value { list_value { values { int64_value: 1 } values { int64_value: 2 } } } } } section { name: "index" description: "List indexing tests." test { name: "zero_based" expr: "[7, 8, 9][0]" value: { int64_value: 7 } } test { name: "zero_based_double" expr: "[7, 8, 9][dyn(0.0)]" value: { int64_value: 7 } } test { name: "zero_based_double_error" expr: "[7, 8, 9][dyn(0.1)]" eval_error { errors { message: "invalid_argument" } } } test { name: "zero_based_uint" expr: "[7, 8, 9][dyn(0u)]" value: { int64_value: 7 } } test { name: "singleton" expr: "['foo'][0]" value: { string_value: "foo" } } test { name: "middle" expr: "[0, 1, 1, 2, 3, 5, 8, 13][4]" value: { int64_value: 3 } } test { name: "last" expr: "['George', 'John', 'Paul', 'Ringo'][3]" value: { string_value: "Ringo" } } test { name: "index_out_of_bounds" expr: "[1, 2, 3][3]" eval_error { errors { message: "invalid_argument" } } } test { name: "index_out_of_bounds_or_false" expr: "dyn([1, 2, 3][3]) || false" eval_error { errors { message: "invalid_argument" } } } test { name: "index_out_of_bounds_or_true" expr: "dyn([1, 2, 3][3]) || true" value: { bool_value: true } } test { name: "index_out_of_bounds_and_false" expr: "dyn([1, 2, 3][3]) && false" value: { bool_value: false } } test { name: "index_out_of_bounds_and_true" expr: "dyn([1, 2, 3][3]) && true" eval_error { errors { message: "invalid_argument" } } } test { name: "bad_index_type" expr: "[1, 2, 3][dyn('')]" eval_error { errors { message: "invalid_argument" } } } test { name: "bad_index_type_or_false" expr: "dyn([1, 2, 3][dyn('')]) || false" eval_error { errors { message: "invalid_argument" } } } test { name: "bad_index_type_or_true" expr: "dyn([1, 2, 3][dyn('')]) || true" value: { bool_value: true } } test { name: "bad_index_type_and_false" expr: "dyn([1, 2, 3][dyn('')]) && false" value: { bool_value: false } } test { name: "bad_index_type_and_true" expr: "dyn([1, 2, 3][dyn('')]) && true" eval_error { errors { message: "invalid_argument" } } } } section { name: "in" description: "List membership tests." test { name: "empty" expr: "7 in []" value: { bool_value: false } } test { name: "singleton" expr: "4u in [4u]" value: { bool_value: true } } test { name: "first" expr: "'alpha' in ['alpha', 'beta', 'gamma']" value: { bool_value: true } } test { name: "middle" expr: "3 in [5, 4, 3, 2, 1]" value: { bool_value: true } } test { name: "last" expr: "20u in [4u, 6u, 8u, 12u, 20u]" value: { bool_value: true } } test { name: "double_in_ints" expr: "dyn(3.0) in [5, 4, 3, 2, 1]" value: { bool_value: true } } test { name: "uint_in_ints" expr: "dyn(3u) in [5, 4, 3, 2, 1]" value: { bool_value: true } } test { name: "int_in_doubles" expr: "dyn(3) in [5.0, 4.0, 3.0, 2.0, 1.0]" value: { bool_value: true } } test { name: "uint_in_doubles" expr: "dyn(3u) in [5.0, 4.0, 3.0, 2.0, 1.0]" value: { bool_value: true } } test { name: "int_in_uints" expr: "dyn(3) in [5u, 4u, 3u, 2u, 1u]" value: { bool_value: true } } test { name: "double_in_uints" expr: "dyn(3.0) in [5u, 4u, 3u, 2u, 1u]" value: { bool_value: true } } test { name: "missing" expr: "'hawaiian' in ['meat', 'veggie', 'margarita', 'cheese']" value: { bool_value: false } } } section { name: "size" description: "List and map size tests." test { name: "list_empty" expr: "size([])" value: { int64_value: 0 } } test { name: "list" expr: "size([1, 2, 3])" value: { int64_value: 3 } } test { name: "map_empty" expr: "size({})" value: { int64_value: 0 } } test { name: "map" expr: "size({1: 'one', 2: 'two', 3: 'three'})" value: { int64_value: 3 } } } cel-spec-0.24.0/tests/simple/testdata/logic.textproto000066400000000000000000000100671500667630300226350ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: google.api.expr.test.v1.SimpleTestFile name: "logic" description: "Tests for logical special operators." section { name: "conditional" description: "Tests for the conditional operator." test { name: "true_case" expr: "true ? 1 : 2" value: { int64_value: 1 } } test { name: "false_case" expr: "false ? 'foo' : 'bar'" value: { string_value: "bar" } } test { name: "error_case" expr: "2 / 0 > 4 ? 'baz' : 'quux'" eval_error: { errors: { message: "division by zero" } } } test { name: "mixed_type" expr: "true ? 'cows' : 17" disable_check: true value: { string_value: "cows" } } test { name: "bad_type" expr: "'cows' ? false : 17" disable_check: true eval_error: { errors: { message: "no matching overload" } } } } section { name: "AND" description: "Tests for logical AND." test { name: "all_true" expr: "true && true" value: { bool_value: true } } test { name: "all_false" expr: "false && false" value: { bool_value: false } } test { name: "false_left" expr: "false && true" value: { bool_value: false } } test { name: "false_right" expr: "true && false" value: { bool_value: false } } test { name: "short_circuit_type_left" expr: "false && 32" disable_check: true value: { bool_value: false } } test { name: "short_circuit_type_right" expr: "'horses' && false" disable_check: true value: { bool_value: false } } test { name: "short_circuit_error_left" expr: "false && (2 / 0 > 3 ? false : true)" value: { bool_value: false } } test { name: "short_circuit_error_right" expr: "(2 / 0 > 3 ? false : true) && false" value: { bool_value: false } } test { name: "error_right" expr: "true && 1/0 != 0" eval_error: { errors: { message: "no matching overload" } } } test { name: "error_left" expr: "1/0 != 0 && true" eval_error: { errors: { message: "no matching overload" } } } test { name: "no_overload" expr: "'less filling' && 'tastes great'" disable_check: true eval_error: { errors: { message: "no matching overload" } } } } section { name: "OR" description: "Tests for logical OR" test { name: "all_true" expr: "true || true" value: { bool_value: true } } test { name: "all_false" expr: "false || false" value: { bool_value: false } } test { name: "false_left" expr: "false || true" value: { bool_value: true } } test { name: "false_right" expr: "true || false" value: { bool_value: true } } test { name: "short_circuit_type_left" expr: "true || 32" disable_check: true value: { bool_value: true } } test { name: "short_circuit_type_right" expr: "'horses' || true" disable_check: true value: { bool_value: true } } test { name: "short_circuit_error_left" expr: "true || (2 / 0 > 3 ? false : true)" value: { bool_value: true } } test { name: "short_circuit_error_right" expr: "(2 / 0 > 3 ? false : true) || true" value: { bool_value: true } } test { name: "error_right" expr: "false || 1/0 != 0" eval_error: { errors: { message: "no matching overload" } } } test { name: "error_left" expr: "1/0 != 0 || false" eval_error: { errors: { message: "no matching overload" } } } test { name: "no_overload" expr: "'less filling' || 'tastes great'" disable_check: true eval_error: { errors: { message: "no matching overload" } } } } section { name: "NOT" description: "Tests for logical NOT." test { name: "not_true" expr: "!true" value: { bool_value: false } } test { name: "not_false" expr: "!false" value: { bool_value: true } } test { name: "no_overload" expr: "!0" disable_check: true eval_error: { errors: { message: "no matching overload" } } } } cel-spec-0.24.0/tests/simple/testdata/macros.textproto000066400000000000000000000157641500667630300230350ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: google.api.expr.test.v1.SimpleTestFile name: "macros" description: "Tests for CEL macros." section { name: "exists" description: "Tests for the .exists() macro, which is equivalent to joining the evaluated elements with logical-OR." test { name: "list_elem_all_true" expr: "[1, 2, 3].exists(e, e > 0)" value: { bool_value: true } } test { name: "list_elem_some_true" expr: "[1, 2, 3].exists(e, e == 2)" value: { bool_value: true } } test { name: "list_elem_none_true" expr: "[1, 2, 3].exists(e, e > 3)" value: { bool_value: false } } test { name: "list_elem_type_shortcircuit" description: "Exists filter is true for the last element." expr: "[1, 'foo', 3].exists(e, e != '1')" value: { bool_value: true } } test { name: "list_elem_type_exhaustive" description: "Exists filter is never true, but heterogenous equality ensure the result is false." expr: "[1, 'foo', 3].exists(e, e == '10')" value: { bool_value: false } } test { name: "list_elem_exists_error" expr: "[1, 2, 3].exists(e, e / 0 == 17)" eval_error: { errors: { message: "divide by zero" } } } test { name: "list_empty" expr: "[].exists(e, e == 2)" value: { bool_value: false } } test { name: "map_key" expr: "{'key1':1, 'key2':2}.exists(k, k == 'key2')" value: { bool_value: true } } test { name: "not_map_key" expr: "!{'key1':1, 'key2':2}.exists(k, k == 'key3')" value: { bool_value: true } } test { name: "map_key_type_shortcircuit" description: "Exists filter is true for the second key" expr: "{'key':1, 1:21}.exists(k, k != 2)" value: { bool_value: true } } test { name: "map_key_type_exhaustive" description: "Exists filter is never true, but heterogeneous equality ensures the result is false." expr: "!{'key':1, 1:42}.exists(k, k == 2)" value: { bool_value: true } } } section { name: "all" description: "Tests for the .all() macro, which is equivalent to joining the evaluated elements with logical-AND." test { name: "list_elem_all_true" expr: "[1, 2, 3].all(e, e > 0)" value: { bool_value: true } } test { name: "list_elem_some_true" expr: "[1, 2, 3].all(e, e == 2)" value: { bool_value: false } } test { name: "list_elem_none_true" expr: "[1, 2, 3].all(e, e == 17)" value: { bool_value: false } } test { name: "list_elem_type_shortcircuit" expr: "[1, 'foo', 3].all(e, e == 1)" value: { bool_value: false } } test { name: "list_elem_type_exhaustive" expr: "[1, 'foo', 3].all(e, e % 2 == 1)" eval_error: { errors: { message: "no_such_overload" } } } test { name: "list_elem_error_shortcircuit" expr: "[1, 2, 3].all(e, 6 / (2 - e) == 6)" value: { bool_value: false } } test { name: "list_elem_error_exhaustive" expr: "[1, 2, 3].all(e, e / 0 != 17)" eval_error: { errors: { message: "divide by zero" } } } test { name: "list_empty" expr: "[].all(e, e > 0)" value: { bool_value: true } } test { name: "map_key" expr: "{'key1':1, 'key2':2}.all(k, k == 'key2')" value: { bool_value: false } } } section { name: "exists_one" description: "Tests for exists_one() macro. An expression 'L.exists_one(I, E)' is equivalent to 'size(L.filter(I, E)) == 1'." test { name: "list_empty" expr: "[].exists_one(a, a == 7)" value: { bool_value: false } } test { name: "list_one_true" expr: "[7].exists_one(a, a == 7)" value: { bool_value: true } } test { name: "list_one_false" expr: "[8].exists_one(a, a == 7)" value: { bool_value: false } } test { name: "list_none" expr: "[1, 2, 3].exists_one(x, x > 20)" value: { bool_value: false } } test { name: "list_one" expr: "[6, 7, 8].exists_one(foo, foo % 5 == 2)" value: { bool_value: true } } test { name: "list_many" expr: "[0, 1, 2, 3, 4].exists_one(n, n % 2 == 1)" value: { bool_value: false } } test { name: "list_all" expr: "['foal', 'foo', 'four'].exists_one(n, n.startsWith('fo'))" value: { bool_value: false } } test { name: "list_no_shortcircuit" description: "Errors invalidate everything, even if already false." expr: "[3, 2, 1, 0].exists_one(n, 12 / n > 1)" eval_error { errors: { message: "divide by zero" } } } test { name: "map_one" expr: "{6: 'six', 7: 'seven', 8: 'eight'}.exists_one(foo, foo % 5 == 2)" value: { bool_value: true } } } section { name: "map" description: "Tests for map() macro." test { name: "list_empty" expr: "[].map(n, n / 2)" value: { list_value: {} } } test { name: "list_one" expr: "[3].map(n, n * n)" value: { list_value { values: { int64_value: 9 } } } } test { name: "list_many" expr: "[2, 4, 6].map(n, n / 2)" value: { list_value { values: { int64_value: 1 } values: { int64_value: 2 } values: { int64_value: 3 } } } } test { name: "list_error" expr: "[2, 1, 0].map(n, 4 / n)" eval_error { errors: { message: "divide by zero" } } } test { name: "map_extract_keys" expr: "{'John': 'smart'}.map(key, key) == ['John']" value: { bool_value: true } } } section { name: "filter" description: "Tests for filter() macro." test { name: "list_empty" expr: "[].filter(n, n % 2 == 0)" value: { list_value {} } } test { name: "list_one_true" expr: "[2].filter(n, n == 2)" value: { list_value { values: { int64_value: 2 } } } } test { name: "list_one_false" expr: "[1].filter(n, n > 3)" value: { list_value {} } } test { name: "list_none" expr: "[1, 2, 3].filter(e, e > 3)" value: { list_value {} } } test { name: "list_some" expr: "[0, 1, 2, 3, 4].filter(x, x % 2 == 1)" value: { list_value { values: { int64_value: 1 } values: { int64_value: 3 } } } } test { name: "list_all" expr: "[1, 2, 3].filter(n, n > 0)" value: { list_value { values: { int64_value: 1 } values: { int64_value: 2 } values: { int64_value: 3 } } } } test { name: "list_no_shortcircuit" expr: "[3, 2, 1, 0].filter(n, 12 / n > 4)" eval_error { errors: { message: "divide by zero" } } } test { name: "map_filter_keys" expr: "{'John': 'smart', 'Paul': 'cute', 'George': 'quiet', 'Ringo': 'funny'}.filter(key, key == 'Ringo') == ['Ringo']" value: { bool_value: true } } } section { name: "nested" description: "Tests with nested macros." test { name: "filter_all" expr: "['signer'].filter(signer, ['artifact'].all(artifact, true))" value: { list_value { values: { string_value: "signer" } } } } test { name: "all_all" expr: "['signer'].all(signer, ['artifact'].all(artifact, true))" value: { bool_value: true } } } cel-spec-0.24.0/tests/simple/testdata/macros2.textproto000066400000000000000000000205231500667630300231040ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: google.api.expr.test.v1.SimpleTestFile name: "macros2" description: "Tests for CEL comprehensions v2" section { name: "exists" description: "Tests for the .exists() macro, which is equivalent to joining the evaluated elements with logical-OR." test { name: "list_elem_all_true" expr: "[1, 2, 3].exists(i, v, i > -1 && v > 0)" value: { bool_value: true } } test { name: "list_elem_some_true" expr: "[1, 2, 3].exists(i, v, i == 1 && v == 2)" value: { bool_value: true } } test { name: "list_elem_none_true" expr: "[1, 2, 3].exists(i, v, i > 2 && v > 3)" value: { bool_value: false } } test { name: "list_elem_type_shortcircuit" expr: "[1, 'foo', 3].exists(i, v, i == 1 && v != '1')" value: { bool_value: true } } test { name: "list_elem_type_exhaustive" expr: "[1, 'foo', 3].exists(i, v, i == 3 || v == '10')" value: { bool_value: false } } test { name: "list_elem_exists_error" expr: "[1, 2, 3].exists(i, v, v / i == 17)" eval_error: { errors: { message: "divide by zero" } } } test { name: "list_empty" expr: "[].exists(i, v, i == 0 || v == 2)" value: { bool_value: false } } test { name: "map_key" expr: "{'key1':1, 'key2':2}.exists(k, v, k == 'key2' && v == 2)" value: { bool_value: true } } test { name: "not_map_key" expr: "!{'key1':1, 'key2':2}.exists(k, v, k == 'key3' || v == 3)" value: { bool_value: true } } test { name: "map_key_type_shortcircuit" expr: "{'key':1, 1:21}.exists(k, v, k != 2 && v != 22)" value: { bool_value: true } } test { name: "map_key_type_exhaustive" expr: "!{'key':1, 1:42}.exists(k, v, k == 2 && v == 43)" value: { bool_value: true } } } section { name: "all" description: "Tests for the .all() macro, which is equivalent to joining the evaluated elements with logical-AND." test { name: "list_elem_all_true" expr: "[1, 2, 3].all(i, v, i > -1 && v > 0)" value: { bool_value: true } } test { name: "list_elem_some_true" expr: "[1, 2, 3].all(i, v, i == 1 && v == 2)" value: { bool_value: false } } test { name: "list_elem_none_true" expr: "[1, 2, 3].all(i, v, i == 3 || v == 4)" value: { bool_value: false } } test { name: "list_elem_type_shortcircuit" expr: "[1, 'foo', 3].all(i, v, i == 0 || v == 1)" value: { bool_value: false } } test { name: "list_elem_type_exhaustive" expr: "[0, 'foo', 3].all(i, v, v % 2 == i)" value: { bool_value: false } } test { name: "list_elem_type_error_exhaustive" expr: "[0, 'foo', 5].all(i, v, v % 3 == i)" eval_error: { errors: { message: "no_such_overload" } } } test { name: "list_elem_error_shortcircuit" expr: "[1, 2, 3].all(i, v, 6 / (2 - v) == i)" value: { bool_value: false } } test { name: "list_elem_error_exhaustive" expr: "[1, 2, 3].all(i, v, v / i != 17)" eval_error: { errors: { message: "divide by zero" } } } test { name: "list_empty" expr: "[].all(i, v, i > -1 || v > 0)" value: { bool_value: true } } test { name: "map_key" expr: "{'key1':1, 'key2':2}.all(k, v, k == 'key2' && v == 2)" value: { bool_value: false } } } section { name: "existsOne" description: "Tests for existsOne() macro. An expression 'L.existsOne(I, E)' is equivalent to 'size(L.filter(I, E)) == 1'." test { name: "list_empty" expr: "[].existsOne(i, v, i == 3 || v == 7)" value: { bool_value: false } } test { name: "list_one_true" expr: "[7].existsOne(i, v, i == 0 && v == 7)" value: { bool_value: true } } test { name: "list_one_false" expr: "[8].existsOne(i, v, i == 0 && v == 7)" value: { bool_value: false } } test { name: "list_none" expr: "[1, 2, 3].existsOne(i, v, i > 2 || v > 3)" value: { bool_value: false } } test { name: "list_one" expr: "[5, 7, 8].existsOne(i, v, v % 5 == i)" value: { bool_value: true } } test { name: "list_many" expr: "[0, 1, 2, 3, 4].existsOne(i, v, v % 2 == i)" value: { bool_value: false } } test { name: "list_all" expr: "['foal', 'foo', 'four'].existsOne(i, v, i > -1 && v.startsWith('fo'))" value: { bool_value: false } } test { name: "list_no_shortcircuit" expr: "[3, 2, 1, 0].existsOne(i, v, v / i > 1)" eval_error { errors: { message: "divide by zero" } } } test { name: "map_one" expr: "{6: 'six', 7: 'seven', 8: 'eight'}.existsOne(k, v, k % 5 == 2 && v == 'seven')" value: { bool_value: true } } } section { name: "transformList" description: "Tests for transformList() macro." test { name: "empty" expr: "[].transformList(i, v, i / v)" value: { list_value: {} } } test { name: "empty_filter" expr: "[].transformList(i, v, i > v, i / v)" value: { list_value: {} } } test { name: "one" expr: "[3].transformList(i, v, v * v + i)" value: { list_value { values: { int64_value: 9 } } } } test { name: "one_filter" expr: "[3].transformList(i, v, i == 0 && v == 3, v * v + i)" value: { list_value { values: { int64_value: 9 } } } } test { name: "many" expr: "[2, 4, 6].transformList(i, v, v / 2 + i)" value: { list_value { values: { int64_value: 1 } values: { int64_value: 3 } values: { int64_value: 5 } } } } test { name: "many_filter" expr: "[2, 4, 6].transformList(i, v, i != 1 && v != 4, v / 2 + i)" value: { list_value { values: { int64_value: 1 } values: { int64_value: 5 } } } } test { name: "error" expr: "[2, 1, 0].transformList(i, v, v / i)" eval_error { errors: { message: "divide by zero" } } } test { name: "error_filter" expr: "[2, 1, 0].transformList(i, v, v / i > 0, v)" eval_error { errors: { message: "divide by zero" } } } } section { name: "transformMap" description: "Tests for transformMap() macro." test { name: "empty" expr: "{}.transformMap(k, v, k + v)" value: { map_value: {} } } test { name: "empty_filter" expr: "{}.transformMap(k, v, k == 'foo' && v == 'bar', k + v)" value: { map_value: {} } } test { name: "one" expr: "{'foo': 'bar'}.transformMap(k, v, k + v)" value: { map_value: { entries: { key: { string_value: "foo" } value: { string_value: "foobar" } } } } } test { name: "one_filter" expr: "{'foo': 'bar'}.transformMap(k, v, k == 'foo' && v == 'bar', k + v)" value: { map_value: { entries: { key: { string_value: "foo" } value: { string_value: "foobar" } } } } } test { name: "many" expr: "{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k + v)" value: { map_value: { entries: { key: { string_value: "foo" } value: { string_value: "foobar" } } entries: { key: { string_value: "baz" } value: { string_value: "bazbux" } } entries: { key: { string_value: "hello" } value: { string_value: "helloworld" } } } } } test { name: "many_filter" expr: "{'foo': 'bar', 'baz': 'bux', 'hello': 'world'}.transformMap(k, v, k != 'baz' && v != 'bux', k + v)" value: { map_value: { entries: { key: { string_value: "foo" } value: { string_value: "foobar" } } entries: { key: { string_value: "hello" } value: { string_value: "helloworld" } } } } } test { name: "error" expr: "{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, 4 / v)" eval_error { errors: { message: "divide by zero" } } } test { name: "error_filter" expr: "{'foo': 2, 'bar': 1, 'baz': 0}.transformMap(k, v, k == 'baz' && 4 / v == 0, v)" eval_error { errors: { message: "divide by zero" } } } }cel-spec-0.24.0/tests/simple/testdata/math_ext.textproto000066400000000000000000000561011500667630300233500ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: google.api.expr.test.v1.SimpleTestFile name: "math_ext" description: "Tests for the math extension library." section: { name: "greatest_int_result" test: { name: "unary_negative" expr: "math.greatest(-5)" value: { int64_value: -5 } } test: { name: "unary_positive" expr: "math.greatest(5)" value: { int64_value: 5 } } test: { name: "binary_same_args" expr: "math.greatest(1, 1)" value: { int64_value: 1 } } test: { name: "binary_with_decimal" expr: "math.greatest(1, 1.0) == 1" } test: { name: "binary_with_uint" expr: "math.greatest(1, 1u) == 1" } test: { name: "binary_first_arg_greater" expr: "math.greatest(3, -3)" value: { int64_value: 3 } } test: { name: "binary_second_arg_greater" expr: "math.greatest(-7, 5)" value: { int64_value: 5 } } test: { name: "binary_first_arg_int_max" expr: "math.greatest(9223372036854775807, 1)" value: { int64_value: 9223372036854775807 } } test: { name: "binary_second_arg_int_max" expr: "math.greatest(1, 9223372036854775807)" value: { int64_value: 9223372036854775807 } } test: { name: "binary_first_arg_int_min" expr: "math.greatest(-9223372036854775808, 1)" value: { int64_value: 1 } } test: { name: "binary_second_arg_int_min" expr: "math.greatest(1, -9223372036854775808)" value: { int64_value: 1 } } test: { name: "ternary_same_args" expr: "math.greatest(1, 1, 1) == 1" } test: { name: "ternary_with_decimal" expr: "math.greatest(1, 1.0, 1.0) == 1" } test: { name: "ternary_with_uint" expr: "math.greatest(1, 1u, 1u) == 1" } test: { name: "ternary_first_arg_greatest" expr: "math.greatest(10, 1, 3) == 10" } test: { name: "ternary_third_arg_greatest" expr: "math.greatest(1, 3, 10) == 10" } test: { name: "ternary_with_negatives" expr: "math.greatest(-1, -2, -3) == -1" } test: { name: "ternary_int_max" expr: "math.greatest(9223372036854775807, 1, 5) == 9223372036854775807" } test: { name: "ternary_int_min" expr: "math.greatest(-9223372036854775807, -1, -5) == -1" } test: { name: "quaternary_mixed" expr: "math.greatest(5.4, 10, 3u, -5.0, 9223372036854775807) == 9223372036854775807" } test: { name: "quaternary_mixed_array" expr: "math.greatest([5.4, 10, 3u, -5.0, 3.5]) == 10" } test: { name: "quaternary_mixed_dyn_array" expr: "math.greatest([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10" } } section: { name: "greatest_double_result" test: { name: "unary_negative" expr: "math.greatest(-5.0)" value: { double_value: -5.0 } } test: { name: "unary_positive" expr: "math.greatest(5.0)" value: { double_value: 5.0 } } test: { name: "binary_same_args" expr: "math.greatest(1.0, 1.0)" value: { double_value: 1.0 } } test: { name: "binary_with_int" expr: "math.greatest(1.0, 1) == 1.0" } test: { name: "binary_with_uint" expr: "math.greatest(1.0, 1u) == 1.0" } test: { name: "binary_first_arg_greater" expr: "math.greatest(5.0, -7.0)" value: { double_value: 5.0 } } test: { name: "binary_second_arg_greater" expr: "math.greatest(-3.0, 3.0)" value: { double_value: 3.0 } } test: { name: "binary_first_arg_double_max" expr: "math.greatest(1.797693e308, 1)" value: { double_value: 1.797693e308 } } test: { name: "binary_second_arg_double_max" expr: "math.greatest(1, 1.797693e308)" value: { double_value: 1.797693e308 } } test: { name: "binary_first_arg_double_min" expr: "math.greatest(-1.797693e308, 1.5)" value: { double_value: 1.5 } } test: { name: "binary_second_arg_double_min" expr: "math.greatest(1.5, -1.797693e308)" value: { double_value: 1.5 } } test: { name: "ternary_same_args" expr: "math.greatest(1.0, 1.0, 1.0) == 1.0" } test: { name: "ternary_with_int" expr: "math.greatest(1.0, 1, 1) == 1.0" } test: { name: "ternary_with_uint" expr: "math.greatest(1.0, 1u, 1u) == 1.0" } test: { name: "ternary_first_arg_greatest" expr: "math.greatest(10.5, 1.5, 3.5) == 10.5" } test: { name: "ternary_third_arg_greatest" expr: "math.greatest(1.5, 3.5, 10.5) == 10.5" } test: { name: "ternary_with_negatives" expr: "math.greatest(-1.5, -2.5, -3.5) == -1.5" } test: { name: "ternary_double_max" expr: "math.greatest(1.797693e308, 1, 5) == 1.797693e308" } test: { name: "ternary_double_min" expr: "math.greatest(-1.797693e308, -1, -5) == -1" } test: { name: "quaternary_mixed" expr: "math.greatest(5.4, 10, 3u, -5.0, 1.797693e308) == 1.797693e308" } test: { name: "quaternary_mixed_array" expr: "math.greatest([5.4, 10.5, 3u, -5.0, 3.5]) == 10.5" } test: { name: "quaternary_mixed_dyn_array" expr: "math.greatest([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10.5" } } section: { name: "greatest_uint_result" test: { name: "unary" expr: "math.greatest(5u)" value: { uint64_value: 5 } } test: { name: "binary_same_args" expr: "math.greatest(1u, 1u)" value: { uint64_value: 1 } } test: { name: "binary_with_decimal" expr: "math.greatest(1u, 1.0) == 1" } test: { name: "binary_with_int" expr: "math.greatest(1u, 1) == 1u" } test: { name: "binary_first_arg_greater" expr: "math.greatest(5u, -7)" value: { uint64_value: 5 } } test: { name: "binary_second_arg_greater" expr: "math.greatest(-3, 3u)" value: { uint64_value: 3 } } test: { name: "binary_first_arg_uint_max" expr: "math.greatest(18446744073709551615u, 1u)" value: { uint64_value: 18446744073709551615 } } test: { name: "binary_second_arg_uint_max" expr: "math.greatest(1u, 18446744073709551615u)" value: { uint64_value: 18446744073709551615 } } test: { name: "ternary_same_args" expr: "math.greatest(1u, 1u, 1u) == 1u" } test: { name: "ternary_with_decimal" expr: "math.greatest(1u, 1.0, 1.0) == 1u" } test: { name: "ternary_with_int" expr: "math.greatest(1u, 1, 1) == 1u" } test: { name: "ternary_first_arg_greatest" expr: "math.greatest(10u, 1u, 3u) == 10u" } test: { name: "ternary_third_arg_greatest" expr: "math.greatest(1u, 3u, 10u) == 10u" } test: { name: "ternary_int_max" expr: "math.greatest(18446744073709551615u, 1u, 5u) == 18446744073709551615u" } test: { name: "quaternary_mixed" expr: "math.greatest(5.4, 10, 3u, -5.0, 18446744073709551615u) == 18446744073709551615u" } test: { name: "quaternary_mixed_array" expr: "math.greatest([5.4, 10u, 3u, -5.0, 3.5]) == 10u" } test: { name: "quaternary_mixed_dyn_array" expr: "math.greatest([dyn(5.4), dyn(10u), dyn(3u), dyn(-5.0), dyn(3.5)]) == 10u" } } section: { name: "least_int_result" test: { name: "unary_negative" expr: "math.least(-5)" value: { int64_value: -5 } } test: { name: "unary_positive" expr: "math.least(5)" value: { int64_value: 5 } } test: { name: "binary_same_args" expr: "math.least(1, 1)" value: { int64_value: 1 } } test: { name: "binary_with_decimal" expr: "math.least(1, 1.0) == 1" } test: { name: "binary_with_uint" expr: "math.least(1, 1u) == 1" } test: { name: "binary_first_arg_least" expr: "math.least(-3, 3)" value: { int64_value: -3 } } test: { name: "binary_second_arg_least" expr: "math.least(5, -7)" value: { int64_value: -7 } } test: { name: "binary_first_arg_int_max" expr: "math.least(9223372036854775807, 1)" value: { int64_value: 1 } } test: { name: "binary_second_arg_int_max" expr: "math.least(1, 9223372036854775807)" value: { int64_value: 1 } } test: { name: "binary_first_arg_int_min" expr: "math.least(-9223372036854775808, 1)" value: { int64_value: -9223372036854775808 } } test: { name: "binary_second_arg_int_min" expr: "math.least(1, -9223372036854775808)" value: { int64_value: -9223372036854775808 } } test: { name: "ternary_same_args" expr: "math.least(1, 1, 1) == 1" } test: { name: "ternary_with_decimal" expr: "math.least(1, 1.0, 1.0) == 1" } test: { name: "ternary_with_uint" expr: "math.least(1, 1u, 1u) == 1" } test: { name: "ternary_first_arg_least" expr: "math.least(0, 1, 3) == 0" } test: { name: "ternary_third_arg_least" expr: "math.least(1, 3, 0) == 0" } test: { name: "ternary_with_negatives" expr: "math.least(-1, -2, -3) == -3" } test: { name: "ternary_int_max" expr: "math.least(9223372036854775807, 1, 5) == 1" } test: { name: "ternary_int_min" expr: "math.least(-9223372036854775808, -1, -5) == -9223372036854775808" } test: { name: "quaternary_mixed" expr: "math.least(5.4, 10, 3u, -5.0, 9223372036854775807) == -5.0" } test: { name: "quaternary_mixed_array" expr: "math.least([5.4, 10, 3u, -5.0, 3.5]) == -5.0" } test: { name: "quaternary_mixed_dyn_array" expr: "math.least([dyn(5.4), dyn(10), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0" } } section: { name: "least_double_result" test: { name: "unary_negative" expr: "math.least(-5.5)" value: { double_value: -5.5 } } test: { name: "unary_positive" expr: "math.least(5.5)" value: { double_value: 5.5 } } test: { name: "binary_same_args" expr: "math.least(1.5, 1.5)" value: { double_value: 1.5 } } test: { name: "binary_with_int" expr: "math.least(1.0, 1) == 1" } test: { name: "binary_with_uint" expr: "math.least(1, 1u) == 1" } test: { name: "binary_first_arg_least" expr: "math.least(-3.5, 3.5)" value: { double_value: -3.5 } } test: { name: "binary_second_arg_least" expr: "math.least(5.5, -7.5)" value: { double_value: -7.5 } } test: { name: "binary_first_arg_double_max" expr: "math.least(1.797693e308, 1.5)" value: { double_value: 1.5 } } test: { name: "binary_second_arg_double_max" expr: "math.least(1.5, 1.797693e308)" value: { double_value: 1.5 } } test: { name: "binary_first_arg_double_min" expr: "math.least(-1.797693e308, 1.5)" value: { double_value: -1.797693e308 } } test: { name: "binary_second_arg_double_min" expr: "math.least(1.5, -1.797693e308)" value: { double_value: -1.797693e308 } } test: { name: "ternary_same_args" expr: "math.least(1.5, 1.5, 1.5) == 1.5" } test: { name: "ternary_with_int" expr: "math.least(1.0, 1, 1) == 1.0" } test: { name: "ternary_with_uint" expr: "math.least(1.0, 1u, 1u) == 1" } test: { name: "ternary_first_arg_least" expr: "math.least(0.5, 1.5, 3.5) == 0.5" } test: { name: "ternary_third_arg_least" expr: "math.least(1.5, 3.5, 0.5) == 0.5" } test: { name: "ternary_with_negatives" expr: "math.least(-1.5, -2.5, -3.5) == -3.5" } test: { name: "ternary_double_max" expr: "math.least(1.797693e308, 1, 5) == 1" } test: { name: "ternary_double_min" expr: "math.least(-1.797693e308, -1, -5) == -1.797693e308" } test: { name: "quaternary_mixed" expr: "math.least(5.4, 10, 3u, -5.0, 1.797693e308) == -5.0" } test: { name: "quaternary_mixed_array" expr: "math.least([5.4, 10.5, 3u, -5.0, 3.5]) == -5.0" } test: { name: "quaternary_mixed_dyn_array" expr: "math.least([dyn(5.4), dyn(10.5), dyn(3u), dyn(-5.0), dyn(3.5)]) == -5.0" } } section: { name: "least_uint_result" test: { name: "unary" expr: "math.least(5u)" value: { uint64_value: 5 } } test: { name: "binary_same_args" expr: "math.least(1u, 1u)" value: { uint64_value: 1 } } test: { name: "binary_with_decimal" expr: "math.least(1u, 1.0) == 1u" } test: { name: "binary_with_int" expr: "math.least(1u, 1) == 1u" } test: { name: "binary_first_arg_least" expr: "math.least(1u, 3u)" value: { uint64_value: 1 } } test: { name: "binary_second_arg_least" expr: "math.least(5u, 2u)" value: { uint64_value: 2 } } test: { name: "binary_first_arg_uint_max" expr: "math.least(18446744073709551615u, 1u)" value: { uint64_value: 1 } } test: { name: "binary_second_arg_uint_max" expr: "math.least(1u, 18446744073709551615u)" value: { uint64_value: 1 } } test: { name: "ternary_same_args" expr: "math.least(1u, 1u, 1u) == 1u" } test: { name: "ternary_with_decimal" expr: "math.least(1u, 1.0, 1.0) == 1u" } test: { name: "ternary_with_int" expr: "math.least(1u, 1, 1) == 1u" } test: { name: "ternary_first_arg_least" expr: "math.least(1u, 10u, 3u) == 1u" } test: { name: "ternary_third_arg_least" expr: "math.least(10u, 3u, 1u) == 1u" } test: { name: "ternary_uint_max" expr: "math.least(18446744073709551615u, 1u, 5u) == 1u" } test: { name: "quaternary_mixed" expr: "math.least(5.4, 10, 3u, 1u, 18446744073709551615u) == 1u" } test: { name: "quaternary_mixed_array" expr: "math.least([5.4, 10u, 3u, 1u, 3.5]) == 1u" } test: { name: "quaternary_mixed_dyn_array" expr: "math.least([dyn(5.4), dyn(10u), dyn(3u), dyn(1u), dyn(3.5)]) == 1u" } } section: { name: "ceil" test: { name: "negative" expr: "math.ceil(-1.2)" value: { double_value: -1.0 } } test: { name: "positive" expr: "math.ceil(1.2)" value: { double_value: 2.0 } } test: { name: "dyn_error" expr: "math.ceil(dyn(1))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "floor" test: { name: "negative" expr: "math.floor(-1.2)" value: { double_value: -2.0 } } test: { name: "positive" expr: "math.floor(1.2)" value: { double_value: 1.0 } } test: { name: "dyn_error" expr: "math.floor(dyn(1))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "round" test: { name: "negative_down" expr: "math.round(-1.6)" value: { double_value: -2.0 } } test: { name: "negative_up" expr: "math.round(-1.4)" value: { double_value: -1.0 } } test: { name: "negative_mid" expr: "math.round(-1.5)" value: { double_value: -2.0 } } test: { name: "positive_down" expr: "math.round(1.2)" value: { double_value: 1.0 } } test: { name: "positive_up" expr: "math.round(1.5)" value: { double_value: 2.0 } } test: { name: "nan" expr: "math.isNaN(math.round(0.0/0.0))" } test: { name: "dyn_error" expr: "math.round(dyn(1))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "trunc" test: { name: "negative" expr: "math.trunc(-1.2)" value: { double_value: -1.0 } } test: { name: "positive" expr: "math.trunc(1.2)" value: { double_value: 1.0 } } test: { name: "nan" expr: "math.isNaN(math.trunc(0.0/0.0))" } test: { name: "dyn_error" expr: "math.trunc(dyn(1))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "abs" test: { name: "uint" expr: "math.abs(1u)" value: { uint64_value: 1 } } test: { name: "positive_int" expr: "math.abs(1)" value: { int64_value: 1 } } test: { name: "negative_int" expr: "math.abs(-11)" value: { int64_value: 11 } } test: { name: "positive_double" expr: "math.abs(1.5)" value: { double_value: 1.5 } } test: { name: "negative_double" expr: "math.abs(-11.5)" value: { double_value: 11.5 } } test: { name: "int_overflow" expr: "math.abs(-9223372036854775808)" eval_error: { errors: { message: "overflow" } } } } section: { name: "sign" test: { name: "positive_uint" expr: "math.sign(100u)" value: { uint64_value: 1 } } test: { name: "zero_uint" expr: "math.sign(0u)" value: { uint64_value: 0 } } test: { name: "positive_int" expr: "math.sign(100)" value: { int64_value: 1 } } test: { name: "negative_int" expr: "math.sign(-11)" value: { int64_value: -1 } } test: { name: "zero_int" expr: "math.sign(0)" value: { int64_value: 0 } } test: { name: "positive_double" expr: "math.sign(100.5)" value: { double_value: 1.0 } } test: { name: "negative_double" expr: "math.sign(-32.0)" value: { double_value: -1.0 } } test: { name: "zero_double" expr: "math.sign(0.0)" value: { double_value: 0.0 } } test: { name: "dyn_error" expr: "math.sign(dyn(true))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "isNaN" test: { name: "true" expr: "math.isNaN(0.0/0.0)" } test: { name: "false" expr: "!math.isNaN(1.0/0.0)" } test: { name: "dyn_error" expr: "math.isNaN(dyn(true))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "isInf" test: { name: "true" expr: "math.isInf(1.0/0.0)" } test: { name: "false" expr: "!math.isInf(0.0/0.0)" } test: { name: "dyn_error" expr: "math.isInf(dyn(true))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "isFinite" test: { name: "true" expr: "math.isFinite(1.0/1.5)" } test: { name: "false_nan" expr: "!math.isFinite(0.0/0.0)" } test: { name: "false_inf" expr: "!math.isFinite(-1.0/0.0)" } test: { name: "dyn_error" expr: "math.isFinite(dyn(true))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "bit_and" test: { name: "int_int_non_intersect" expr: "math.bitAnd(1, 2)" value: { int64_value: 0 } } test: { name: "int_int_intersect" expr: "math.bitAnd(1, 3)" value: { int64_value: 1 } } test: { name: "int_int_intersect_neg" expr: "math.bitAnd(1, -1)" value: { int64_value: 1 } } test: { name: "uint_uint_non_intersect" expr: "math.bitAnd(1u, 2u)" value: { uint64_value: 0 } } test: { name: "uint_uint_intersect" expr: "math.bitAnd(1u, 3u)" value: { uint64_value: 1 } } test: { name: "int_dyn_error" expr: "math.bitAnd(2u, dyn(''))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "bit_or" test: { name: "int_int_positive" expr: "math.bitOr(1, 2)" value: { int64_value: 3 } } test: { name: "int_int_positive_negative" expr: "math.bitOr(4, -2)" value: { int64_value: -2 } } test: { name: "uint_uint" expr: "math.bitOr(1u, 4u)" value: { uint64_value: 5 } } test: { name: "dyn_int_error" expr: "math.bitOr(dyn(1.2), 1)" eval_error: { errors: { message: "no such overload" } } } } section: { name: "bit_xor" test: { name: "int_int_positive" expr: "math.bitXor(1, 3)" value: { int64_value: 2 } } test: { name: "int_int_positive_negative" expr: "math.bitXor(4, -2)" value: { int64_value: -6 } } test: { name: "uint_uint" expr: "math.bitXor(1u, 3u)" value: { uint64_value: 2 } } test: { name: "dyn_dyn_error" expr: "math.bitXor(dyn([]), dyn([1]))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "bit_not" test: { name: "int_positive" expr: "math.bitNot(1)" value: { int64_value: -2 } } test: { name: "int_negative" expr: "math.bitNot(-1)" value: { int64_value: 0 } } test: { name: "int_zero" expr: "math.bitNot(0)" value: { int64_value: -1 } } test: { name: "uint_positive" expr: "math.bitNot(1u)" value: { uint64_value: 18446744073709551614 } } test: { name: "uint_zero" expr: "math.bitNot(0u)" value: { uint64_value: 18446744073709551615 } } test: { name: "dyn_error" expr: "math.bitNot(dyn(''))" eval_error: { errors: { message: "no such overload" } } } } section: { name: "bit_shift_left" test: { name: "int", expr: "math.bitShiftLeft(1, 2)" value: { int64_value: 4 } } test: { name: "int_large_shift", expr: "math.bitShiftLeft(1, 200)" value: { int64_value: 0 } } test: { name: "int_negative_large_shift", expr: "math.bitShiftLeft(-1, 200)" value: { int64_value: 0 } } test: { name: "uint", expr: "math.bitShiftLeft(1u, 2)" value: { uint64_value: 4 } } test: { name: "uint_large_shift", expr: "math.bitShiftLeft(1u, 200)" value: { uint64_value: 0 } } test: { name: "bad_shift", expr: "math.bitShiftLeft(1u, -1)" eval_error: { errors: { message: "negative offset" } } } test: { name: "dyn_int_error" expr: "math.bitShiftLeft(dyn(4.3), 1)" eval_error: { errors: { message: "no such overload" } } } } section: { name: "bit_shift_right" test: { name: "int", expr: "math.bitShiftRight(1024, 2)" value: { int64_value: 256 } } test: { name: "int_large_shift", expr: "math.bitShiftRight(1024, 64)" value: { int64_value: 0 } } test: { name: "int_negative", expr: "math.bitShiftRight(-1024, 3)" value: { int64_value: 2305843009213693824 } } test: { name: "int_negative_large_shift", expr: "math.bitShiftRight(-1024, 64)" value: { int64_value: 0 } } test: { name: "uint", expr: "math.bitShiftRight(1024u, 2)" value: { uint64_value: 256 } } test: { name: "uint_large_shift", expr: "math.bitShiftRight(1024u, 200)" value: { uint64_value: 0 } } test: { name: "bad_shift", expr: "math.bitShiftRight(1u, -1)" eval_error: { errors: { message: "negative offset" } } } test: { name: "dyn_int_error" expr: "math.bitShiftRight(dyn(b'123'), 1)" eval_error: { errors: { message: "no such overload" } } } } cel-spec-0.24.0/tests/simple/testdata/namespace.textproto000066400000000000000000000031241500667630300234700ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: google.api.expr.test.v1.SimpleTestFile name: "namespace" description: "Uses of qualified identifiers and namespaces." section { name: "qualified" description: "Qualified variable lookups." test { name: "self_eval_qualified_lookup" expr: "x.y" value: { bool_value: true } type_env: { name: "x.y", ident: { type: { primitive: BOOL } } } bindings: { key: "x.y" value: { value: { bool_value: true } } } } } section { name: "namespace" description: "Namespaced identifiers." test { name: "self_eval_container_lookup" expr: "y" container: "x" type_env: { name: "x.y", ident: { type: { primitive: BOOL } } } type_env: { name: "y", ident: { type: { primitive: STRING } } } bindings: { key: "x.y" value: { value: { bool_value: true } } } bindings: { key: "y" value: { value: { string_value: "false" } } } value: { bool_value: true } } test { name: "self_eval_container_lookup_unchecked" expr: "y" container: "x" type_env: { name: "x.y", ident: { type: { primitive: BOOL } } } type_env: { name: "y", ident: { type: { primitive: BOOL } } } bindings: { key: "x.y" value: { value: { bool_value: true } } } bindings: { key: "y" value: { value: { bool_value: false } } } disable_check: true ## ensure unchecked ASTs resolve the same as checked ASTs value: { bool_value: true } } } cel-spec-0.24.0/tests/simple/testdata/optionals.textproto000066400000000000000000000311021500667630300235410ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "optionals" description: "Tests for optionals." section: { name: "optionals" test { name: "null" expr: "optional.of(null).hasValue()" value: { bool_value: true } } test { name: "null_non_zero_value" expr: "optional.ofNonZeroValue(null).hasValue()" value: { bool_value: false } } test { name: "none_or_none_or_value" expr: "optional.none().or(optional.none()).orValue(42)" value: { int64_value: 42 } } test { name: "none_optMap_hasValue" expr: "optional.none().optMap(y, y + 1).hasValue()" value: { bool_value: false } } test { name: "empty_map_optFlatMap_hasValue" expr: "{}.?key.optFlatMap(k, k.?subkey).hasValue()" value: { bool_value: false } } test { name: "map_empty_submap_optFlatMap_hasValue" expr: "{'key': {}}.?key.optFlatMap(k, k.?subkey).hasValue()" value: { bool_value: false } } test { name: "map_null_entry_hasValue" expr: "{'null_key': dyn(null)}.?null_key.hasValue()" value: { bool_value: true } } test { name: "map_null_entry_no_such_key" expr: "{'null_key': dyn(null)}.?null_key.invalid.hasValue()" eval_error: { errors: { message: "no such key" } } } test { name: "map_absent_key_absent_field_none" expr: "{true: dyn(0)}[?false].absent.hasValue()" value: { bool_value: false } } test { name: "map_present_key_invalid_field" expr: "{true: dyn(0)}[?true].absent.hasValue()" eval_error: { errors: { message: "no such key" } } } test { name: "map_undefined_entry_hasValue" expr: "{}.?null_key.invalid.hasValue()" value: { bool_value: false } } test { name: "map_submap_subkey_optFlatMap_value" expr: "{'key': {'subkey': 'subvalue'}}.?key.optFlatMap(k, k.?subkey).value()" value: { string_value: "subvalue" } } test { name: "map_submap_optFlatMap_value" expr: "{'key': {'subkey': ''}}.?key.optFlatMap(k, k.?subkey).value()" value: { string_value: "" } } test { name: "map_optindex_optFlatMap_optional_ofNonZeroValue_hasValue" expr: "{'key': {'subkey': ''}}.?key.optFlatMap(k, optional.ofNonZeroValue(k.subkey)).hasValue()" value: { bool_value: false } } test { name: "optional_of_optMap_value" expr: "optional.of(42).optMap(y, y + 1).value()" value: { int64_value: 43 } } test { name: "optional_ofNonZeroValue_or_optional_value" expr: "optional.ofNonZeroValue(42).or(optional.of(20)).value() == 42" value: { bool_value: true } } test { name: "ternary_optional_hasValue" expr: "(has({}.x) ? optional.of({}.x) : optional.none()).hasValue()" value: { bool_value: false } } test { name: "map_optindex_hasValue" expr: "{}.?x.hasValue()" value: { bool_value: false } } test { name: "has_map_optindex" expr: "has({}.?x.y)" value: { bool_value: false } } test { name: "has_map_optindex_field" expr: "has({'x': {'y': 'z'}}.?x.y)" value: { bool_value: true } } test { name: "type" expr: "type(optional.none()) == optional_type" value: { bool_value: true } } test { name: "optional_chaining_1" expr: "optional.ofNonZeroValue('').or(optional.of({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])).orValue('default value')" value: { string_value: "goodbye" } } test { name: "optional_chaining_2" expr: "{'c': {'dashed-index': 'goodbye'}}.c[?'dashed-index'].orValue('default value')" value: { string_value: "goodbye" } } test { name: "optional_chaining_3" expr: "{'c': {}}.c[?'missing-index'].orValue('default value')" value: { string_value: "default value" } } test { name: "optional_chaining_4" expr: "optional.of({'c': {'index': 'goodbye'}}).c.index.orValue('default value')" value: { string_value: "goodbye" } } test { name: "optional_chaining_5" expr: "optional.of({'c': {}}).c.missing.or(optional.none()[0]).orValue('default value')" value: { string_value: "default value" } } test { name: "optional_chaining_6" expr: "optional.of({'c': {}}).c.missing.or(optional.of(['list-value'])[0]).orValue('default value')" value: { string_value: "list-value" } } test { name: "optional_chaining_7" expr: "optional.of({'c': {'index': 'goodbye'}}).c['index'].orValue('default value')" value: { string_value: "goodbye" } } test { name: "optional_chaining_8" expr: "optional.of({'c': {}}).c['missing'].orValue('default value')" value: { string_value: "default value" } } test { name: "optional_chaining_9" expr: "has(optional.of({'c': {'entry': 'hello world'}}).c) && !has(optional.of({'c': {'entry': 'hello world'}}).c.missing)" value: { bool_value: true } } test { name: "optional_chaining_10" expr: "optional.ofNonZeroValue({'c': {'dashed-index': 'goodbye'}}.a.z).orValue({'c': {'dashed-index': 'goodbye'}}.c['dashed-index'])" eval_error: { errors: { message: "no such key" } } } test { name: "optional_chaining_11" expr: "{'c': {'dashed-index': 'goodbye'}}.?c.missing.or({'c': {'dashed-index': 'goodbye'}}.?c['dashed-index']).orValue('').size()" value: { int64_value: 7 } } test { name: "optional_chaining_12" expr: "{?'nested_map': optional.ofNonZeroValue({?'map': {'c': {'dashed-index': 'goodbye'}}.?c})}" value: { map_value: { entries { key: { string_value: "nested_map" } value: { map_value: { entries { key: { string_value: "map" } value: { map_value: { entries { key: { string_value: "dashed-index" } value: { string_value: "goodbye" } } } } } } } } } } } test { name: "optional_chaining_13" expr: "{?'nested_map': optional.ofNonZeroValue({?'map': {}.?c}), 'singleton': true}" value: { map_value: { entries { key: { string_value: "singleton" } value: { bool_value: true } } } } } test { name: "optional_chaining_14" expr: "[?{}.?c, ?optional.of(42), ?optional.none()]" value: { list_value: { values: { int64_value: 42 } } } } test { name: "optional_chaining_15" expr: "[?optional.ofNonZeroValue({'c': []}.?c.orValue(dyn({})))]" value: { list_value: {} } } test { name: "optional_chaining_16" expr: "optional.ofNonZeroValue({?'nested_map': optional.ofNonZeroValue({?'map': optional.of({}).?c})}).hasValue()" value: { bool_value: false } } test { name: "has_optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}.single_double_wrapper)" value: { bool_value: false } } test { name: "optional_ofNonZeroValue_struct_optional_ofNonZeroValue_map_optindex_field" container: "cel.expr.conformance.proto2" expr: "optional.ofNonZeroValue(TestAllTypes{?single_double_wrapper: optional.ofNonZeroValue(0.0)}).hasValue()" value: { bool_value: false } } test { name: "struct_map_optindex_field" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{?map_string_string: {'nested': {}}[?'nested']}.map_string_string" value: { map_value: {} } } test { name: "struct_optional_ofNonZeroValue_map_optindex_field" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{?map_string_string: optional.ofNonZeroValue({'nested': {}}[?'nested'].orValue({}))}.map_string_string" value: { map_value: {} } } test { name: "struct_map_optindex_field_nested" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{?map_string_string: {'nested': {'hello': 'world'}}[?'nested']}.map_string_string" value: { map_value: { entries { key: { string_value: "hello" } value: { string_value: "world" } } } } } test { name: "struct_list_optindex_field" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{repeated_string: ['greetings', ?{'nested': {'hello': 'world'}}.nested.?hello]}.repeated_string" value: { list_value: { values { string_value: "greetings" } values { string_value: "world" } } } } test { name: "optional_empty_map_optindex_hasValue" expr: "optional.of({}).?c.hasValue()" value: { bool_value: false } } test { name: "empty_struct_optindex_hasValue" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.?repeated_string.hasValue()" value: { bool_value: false } } test { name: "optional_empty_struct_optindex_hasValue" container: "cel.expr.conformance.proto2" expr: "optional.of(TestAllTypes{}).?repeated_string.hasValue()" value: { bool_value: false } } test { name: "optional_none_optselect_hasValue" expr: "optional.none().?repeated_string.hasValue()" value: { bool_value: false } } test { name: "struct_optindex_value" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{repeated_string: ['foo']}.?repeated_string.value()" value: { list_value: { values { string_value: "foo" } } } } test { name: "optional_struct_optindex_value" container: "cel.expr.conformance.proto2" expr: "optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string.value()" value: { list_value: { values { string_value: "foo" } } } } test { name: "optional_struct_optindex_index_value" container: "cel.expr.conformance.proto2" expr: "optional.of(TestAllTypes{repeated_string: ['foo']}).?repeated_string[0].value()" value: { string_value: "foo" } } test { name: "empty_list_optindex_hasValue" expr: "[][?0].hasValue()" value: { bool_value: false } } test { name: "optional_empty_list_optindex_hasValue" expr: "optional.of([])[?0].hasValue()" value: { bool_value: false } } test { name: "optional_none_optindex_hasValue" expr: "optional.none()[?0].hasValue()" value: { bool_value: false } } test { name: "list_optindex_value" expr: "['foo'][?0].value()" value: { string_value: "foo" } } test { name: "optional_list_optindex_value" expr: "optional.of(['foo'])[?0].value()" value: { string_value: "foo" } } test { name: "map_key_mixed_type_optindex_value" expr: "{true: 1, 2: 2, 5u: 3}[?true].value()" value: { int64_value: 1 } } test { name: "map_key_mixed_numbers_double_key_optindex_value" expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[?3.0].value()" value: { double_value: 3.0 } } test { name: "map_key_mixed_numbers_uint_key_optindex_value" expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[?2u].value()" value: { double_value: 2.0 } } test { name: "map_key_mixed_numbers_int_key_optindex_value" expr: "{1u: 1.0, 2: 2.0, 3u: 3.0}[?1].value()" value: { double_value: 1.0 } } test { name: "optional_eq_none_none" expr: "optional.none() == optional.none()" value: { bool_value: true } } test { name: "optional_eq_none_int" expr: "optional.none() == optional.of(1)" value: { bool_value: false } } test { name: "optional_eq_int_none" expr: "optional.of(1) == optional.none()" value: { bool_value: false } } test { name: "optional_eq_int_int" expr: "optional.of(1) == optional.of(1)" value: { bool_value: true } } test { name: "optional_ne_none_none" expr: "optional.none() != optional.none()" value: { bool_value: false } } test { name: "optional_ne_none_int" expr: "optional.none() != optional.of(1)" value: { bool_value: true } } test { name: "optional_ne_int_none" expr: "optional.of(1) != optional.none()" value: { bool_value: true } } test { name: "optional_ne_int_int" expr: "optional.of(1) != optional.of(1)" value: { bool_value: false } } test { name: "map_optional_has" expr: "has({'foo': optional.none()}.foo)" value: { bool_value: true } } test { name: "map_optional_select_has" expr: "has({'foo': optional.none()}.foo.bar)" value: { bool_value: false } } test { name: "map_optional_entry_has" expr: "has({?'foo': optional.none()}.foo)" value: { bool_value: false } } } cel-spec-0.24.0/tests/simple/testdata/parse.textproto000066400000000000000000000223111500667630300226450ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "parse" description: "End-to-end parsing tests." section { name: "nest" description: "Deep parse trees which all implementations must support." test { name: "list_index" description: "Member = Member '[' Expr ']'. Nested indices are supported up to 12 times." expr: "a[a[a[a[a[a[a[a[a[a[a[a[0]]]]]]]]]]]]" type_env { name: "a" ident { type { list_type { elem_type { primitive: INT64 } } } } } bindings { key: "a" value { value { list_value { values { int64_value: 0 } } } } } value { int64_value: 0 } } test { name: "message_literal" description: "Member = Member '{' [FieldInits] '}'. Nested messages supported up to 12 levels deep." container: "cel.expr.conformance.proto3" expr: "NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{child: NestedTestAllTypes{payload: TestAllTypes{single_int64: 137}}}}}}}}}}}}.payload.single_int64" value { int64_value: 0 } } test { name: "funcall" description: "Primary = ['.'] IDENT ['(' [ExprList] ')']. Nested function calls supported up to 12 levels deep." expr: "int(uint(int(uint(int(uint(int(uint(int(uint(int(uint(7))))))))))))" value { int64_value: 7 } } test { name: "list_literal" description: "Primary = '[' [ExprList] ']'. Nested list literals up to 12 levels deep." expr: "size([[[[[[[[[[[[0]]]]]]]]]]]])" value { int64_value: 1 } } test { name: "map_literal" description: "Primary = '{' [MapInits] '}'. Nested map literals up to 12 levels deep." expr: "size({0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: {0: 'foo'}}}}}}}}}}}})" value { int64_value: 1 } } test { name: "parens" description: "Primary = '(' Expr ')'" expr: "((((((((((((((((((((((((((((((((7))))))))))))))))))))))))))))))))" value { int64_value: 7 } } } section { name: "repeat" description: "Repetitive parse trees which all implementations must support." test { name: "conditional" description: "Expr = ConditionalOr ['?' ConditionalOr ':' Expr]. Chained ternary operators up to 24 levels." expr: "true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : true ? true : false" value { bool_value: true } } test { name: "or" description: "ConditionalOr = [ConditionalOr '||'] ConditionalAnd. Logical OR statements with 32 conditions." expr: "false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || false || true" value { bool_value: true } } test { name: "and" description: "ConditionalAnd = [ConditionalAnd '&&'] Relation. Logical AND statements with 32 conditions." expr: "true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && true && false" value { bool_value: false } } test { name: "add_sub" description: "Addition = [Addition ('+' | '-')] Multiplication. Addition operators are supported up to 24 times consecutively." expr: "3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3 - 3 + 3" value { int64_value: 3 } } test { name: "mul_div" description: "Multiplication = [Multiplication ('*' | '/' | '%')] Unary. Multiplication operators are supported up to 24 times consecutively." expr: "4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4 * 4 / 4" value { int64_value: 4 } } test { name: "not" description: "Unary = '!' {'!'} Member" expr: "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!true" value { bool_value: true } } test { name: "unary_neg" description: "Unary = '-' {'-'} Member" expr: "--------------------------------19" value { int64_value: 19 } } test { name: "select" description: "Member = Member '.' IDENT ['(' [ExprList] ')']. Selection is supported up to 12 times consecutively." container: "cel.expr.conformance.proto3" expr: "NestedTestAllTypes{}.child.child.child.child.child.child.child.child.child.child.payload.single_int32" value { int64_value: 0 } } test { name: "index" description: "Member = Member '[' Expr ']'. Indexing is supported up to 12 times consecutively." expr: "[[[[[[[[[[[['foo']]]]]]]]]]]][0][0][0][0][0][0][0][0][0][0][0][0]" value { string_value: "foo" } } test { name: "list_literal" description: "Primary = '[' [ExprList] ']'. List literals with up to 32 elements." expr: "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31][17]" value { int64_value: 17 } } test { name: "map_literal" description: "Primary = '{' [MapInits] '}'. Map literals with up to 32 entries." expr: "{0: 'zero', 1: 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five', 6: 'six', 7: 'seven', 8: 'eight', 9: 'nine', 10: 'ten', 11: 'eleven', 12: 'twelve', 13: 'thirteen', 14: 'fourteen', 15: 'fifteen', 16: 'sixteen', 17: 'seventeen', 18: 'eighteen', 19: 'nineteen', 20: 'twenty', 21: 'twenty-one', 22: 'twenty-two', 23: 'twenty-three', 24: 'twenty-four', 25: 'twenty-five', 26: 'twenty-six', 27: 'twenty-seven', 28: 'twenty-eight', 29: 'twenty-nine', 30: 'thirty', 31: 'thirty-one'}[17]" value { string_value: 'seventeen' } } test { name: "message_literal" description: "Member = Member '{' [FieldInits] '}'. Message literals with up to 32 fields." container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32: 5, single_int64: 10, single_uint32: 15u, single_uint64: 20u, single_sint32: 25, single_sint64: 30, single_fixed32: 35u, single_fixed64: 40u, single_float: 45.0, single_double: 50.0, single_bool: true, single_string: 'sixty', single_bytes: b'sixty-five', single_value: 70.0, single_int64_wrapper: 75, single_int32_wrapper: 80, single_double_wrapper: 85.0, single_float_wrapper: 90.0, single_uint64_wrapper: 95u, single_uint32_wrapper: 100u, single_string_wrapper: 'one hundred five', single_bool_wrapper: true, repeated_int32: [115], repeated_int64: [120], repeated_uint32: [125u], repeated_uint64: [130u], repeated_sint32: [135], repeated_sint64: [140], repeated_fixed32: [145u], repeated_fixed64: [150u], repeated_sfixed32: [155], repeated_float: [160.0]}.single_sint64" value { int64_value: 30 } } } section { name: "whitespace" description: "Check that whitespace is ignored by the grammar." test { name: "spaces" description: "Check that spaces are ignored." expr: "[ . cel. expr .conformance. proto3. TestAllTypes { single_int64 : int ( 17 ) } . single_int64 ] [ 0 ] == ( 18 - 1 ) && ! false ? 1 : 2" value { int64_value: 1 } } test { name: "tabs" description: "Check that tabs (`\\t`) are ignored." expr: "[\t.\tcel.\texpr\t.conformance.\tproto3.\tTestAllTypes\t{\tsingle_int64\t:\tint\t(\t17\t)\t}\t.\tsingle_int64\t]\t[\t0\t]\t==\t(\t18\t-\t1\t)\t&&\t!\tfalse\t?\t1\t:\t2" value { int64_value: 1 } } test { name: "new_lines" description: "Check that new lines (`\\n`) are ignored." expr: "[\n.\ncel.\nexpr\n.conformance.\nproto3.\nTestAllTypes\n{\nsingle_int64\n:\nint\n(\n17\n)\n}\n.\nsingle_int64\n]\n[\n0\n]\n==\n(\n18\n-\n1\n)\n&&\n!\nfalse\n?\n1\n:\n2" value { int64_value: 1 } } test { name: "new_pages" description: "Check that new pages (`\\f`) are ignored." expr: "[\f.\fcel.\fexpr\f.conformance.\fproto3.\fTestAllTypes\f{\fsingle_int64\f:\fint\f(\f17\f)\f}\f.\fsingle_int64\f]\f[\f0\f]\f==\f(\f18\f-\f1\f)\f&&\f!\ffalse\f?\f1\f:\f2" value { int64_value: 1 } } test { name: "carriage_returns" description: "Check that carriage returns (`\\r`) are ignored." expr: "[\r.\rcel.\rexpr\r.conformance.\rproto3.\rTestAllTypes\r{\rsingle_int64\r:\rint\r(\r17\r)\r}\r.\rsingle_int64\r]\r[\r0\r]\r==\r(\r18\r-\r1\r)\r&&\r!\rfalse\r?\r1\r:\r2" value { int64_value: 1 } } } section { name: "comments" description: "Check that comments are ignored by the grammar. Note that carriage returns alone cannot terminate comments." test { name: "new_line_terminated" description: "Check that new-line-terminated comments are ignored." expr: "[// @\n.// @\ncel.// @\nexpr// @\n.conformance.// @\nproto3.// @\nTestAllTypes// @\n{// @\nsingle_int64// @\n:// @\nint// @\n(// @\n17// @\n)// @\n}// @\n.// @\nsingle_int64// @\n]// @\n[// @\n0// @\n]// @\n==// @\n(// @\n18// @\n-// @\n1// @\n)// @\n&&// @\n!// @\nfalse// @\n?// @\n1// @\n:// @\n2" value { int64_value: 1 } } } cel-spec-0.24.0/tests/simple/testdata/plumbing.textproto000066400000000000000000000034031500667630300233510ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: google.api.expr.test.v1.SimpleTestFile name: "plumbing" description: "Check that the ConformanceService server can accept all arguments and return all responses." section { name: "min" description: "Minimal programs." test { name: "min_program" description: "Smallest functionality: expr in, result out." expr: "17" value: { int64_value: 17 } } } section { name: "eval_results" description: "All evaluation result kinds." test { name: "error_result" description: "Check that error results go through." expr: "1 / 0" eval_error: { errors: { message: "foo" } } } test { name: "eval_map_results" description: "Check that map literals results are order independent." expr: '{"k1":"v1","k":"v"}' value: { map_value { entries { key: { string_value: "k" } value: { string_value: "v" } } entries { key: { string_value: "k1" } value: { string_value: "v1" } } } } } } section { name: "check_inputs" description: "All inputs to Check phase." test { name: "skip_check" description: "Make sure we can skip type checking." expr: "[17, 'pancakes']" disable_check: true value: { list_value { values: { int64_value: 17 } values: { string_value: "pancakes" } } } } } section { name: "eval_inputs" description: "All inputs to Eval phase." test { name: "one_ignored_value_arg" description: "Check that value bindings can be given, even if ignored." expr: "'foo'" bindings: { key: "x" value: { value: { int64_value: 17 } } } value: { string_value: "foo" } } } cel-spec-0.24.0/tests/simple/testdata/proto2.textproto000066400000000000000000001002311500667630300227560ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "proto2" description: "Protocol buffer version 2 tests. See notes for the available set of protos for tests." section { name: "literal_singular" description: "Literals with singular fields set." test { name: "int64_nocontainer" expr: "cel.expr.conformance.proto2.TestAllTypes{single_int64: 17}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int64: 17 } } } } test { name: "int32" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32: -34}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32: -34 } } } } test { name: "int32_eq_uint" container: "google.protobuf" expr: "Int32Value{value: 34} == dyn(UInt64Value{value: 34u})" value { bool_value: true } } test { name: "not_int32_eq_uint" container: "google.protobuf" expr: "Int32Value{value: 34} == dyn(UInt64Value{value: 18446744073709551615u})" value { bool_value: false } } test { name: "int32_eq_double" container: "google.protobuf" expr: "Int32Value{value: 34} == dyn(DoubleValue{value: 34.0})" value { bool_value: true } } test { name: "not_int32_eq_double" container: "google.protobuf" expr: "Int32Value{value: 34} == dyn(DoubleValue{value: -9223372036854775809.0})" value { bool_value: false } } test { name: "int64" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int64: 17}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int64: 17 } } } } test { name: "uint32" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint32: 1u}" value { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_uint32: 1 } } } } test { name: "uint32_eq_int" container: "google.protobuf" expr: "UInt32Value{value: 34u} == dyn(Int64Value{value: 34})" value { bool_value: true } } test { name: "not_uint32_eq_int" container: "google.protobuf" expr: "UInt32Value{value: 34u} == dyn(Int64Value{value: -1})" value { bool_value: false } } test { name: "uint32_eq_double" container: "google.protobuf" expr: "UInt32Value{value: 34u} == dyn(DoubleValue{value: 34.0})" value { bool_value: true } } test { name: "not_uint32_eq_double" container: "google.protobuf" expr: "UInt32Value{value: 34u} == dyn(DoubleValue{value: 18446744073709551616.0})" value { bool_value: false } } test { name: "uint64" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint64: 9999u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_uint64: 9999 } } } } test { name: "sint32" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_sint32: -3}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_sint32: -3 } } } } test { name: "sint64" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_sint64: 255}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_sint64: 255 } } } } test { name: "fixed32" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_fixed32: 43u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_fixed32: 43 } } } } test { name: "fixed64" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_fixed64: 1880u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_fixed64: 1880 } } } } test { name: "sfixed32" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_sfixed32: -404}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_sfixed32: -404 } } } } test { name: "sfixed64" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_sfixed64: -1}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_sfixed64: -1 } } } } test { name: "float" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float: 3.1416}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_float: 3.1416 } } } } test { name: "float_eq_int" container: "google.protobuf" expr: "FloatValue{value: 3.0} == dyn(Int64Value{value: 3})" value { bool_value: true } } test { name: "not_float_eq_int" container: "google.protobuf" expr: "FloatValue{value: -1.14} == dyn(Int64Value{value: -1})" value { bool_value: false } } test { name: "float_eq_uint" container: "google.protobuf" expr: "FloatValue{value: 34.0} == dyn(UInt64Value{value: 34u})" value { bool_value: true } } test { name: "not_float_eq_uint" container: "google.protobuf" expr: "FloatValue{value: -1.0} == dyn(UInt64Value{value: 18446744073709551615u})" value { bool_value: false } } test { name: "double" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_double: 6.022e23}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_double: 6.022e23 } } } } test { name: "bool" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_bool: true}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_bool: true } } } } test { name: "string" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_string: 'foo'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_string: "foo" } } } } test { name: "bytes" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_bytes: b'\\377'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_bytes: "\377" } } } } } section { name: "literal_wellknown" description: "Literals with well-known fields set." test { name: "any" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 1}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_any { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32: 1 } } } } } } test { name: "duration" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_duration: duration('123s')}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_duration { seconds: 123 } } } } } test { name: "timestamp" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_timestamp { seconds: 1234567890 } } } } } test { name: "struct" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_struct: {'one': 1, 'two': 2}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_struct { fields { key: "one" value { number_value: 1.0 } } fields { key: "two" value { number_value: 2.0 } } } } } } } test { name: "value" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: 'foo'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_value { string_value: "foo" } } } } } test { name: "int64_wrapper" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int64_wrapper: -321}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int64_wrapper { value: -321 } } } } } test { name: "int32_wrapper" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_int32_wrapper: -456}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32_wrapper { value: -456 } } } } } test { name: "double_wrapper" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_double_wrapper: 2.71828}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_double_wrapper { value: 2.71828 } } } } } test { name: "float_wrapper" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_float_wrapper: 2.99792e8}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_float_wrapper { value: 2.99792e8 } } } } } test { name: "uint64_wrapper" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint64_wrapper: 8675309u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_uint64_wrapper { value: 8675309 } } } } } test { name: "uint32_wrapper" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_uint32_wrapper: 987u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_uint32_wrapper { value: 987 } } } } } test { name: "string_wrapper" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_string_wrapper: 'hubba'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_string_wrapper { value: "hubba" } } } } } test { name: "bool_wrapper" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_bool_wrapper: true}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_bool_wrapper { value: true } } } } } test { name: "bytes_wrapper" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_bytes_wrapper: b'\\301\\103'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_bytes_wrapper { value: "\301\103" } } } } } } section { name: "singular_bind" description: "Binding the singular fields." test { name: "int32" expr: "x.single_int32" type_env: { name: "x" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "x" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int32: 17 } } } } } value: { int64_value: 17 } } test { name: "int64" expr: "x.single_int64" type_env: { name: "x" ident { type { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "x" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes] { single_int64: -99 } } } } } value: { int64_value: -99 } } } section { name: "empty_field" description: "Tests on empty fields." test { name: "scalar_with_default" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_int32" value: { int64_value: -32 } } test { name: "scalar_no_default" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_fixed32" value: { uint64_value: 0 } } test { name: "nested_message" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_nested_message" value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes.NestedMessage] {} } } } test { name: "nested_message_subfield" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_nested_message.bb" value: { int64_value: 0 } } test { name: "wkt" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.single_int64_wrapper" value: { null_value: NULL_VALUE } } test { name: "repeated_scalar" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.repeated_int64" value: { list_value: {} } } test { name: "repeated_enum" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.repeated_nested_enum" value: { list_value: {} } } test { name: "repeated_nested" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.repeated_nested_message" value: { list_value: {} } } test { name: "map" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{}.map_string_string" value: { map_value: {} } } } section { name: "has" description: "Tests for the has() macro on proto2 messages." test { name: "undefined" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{}.no_such_field)" disable_check: true eval_error: { errors: { message: "no_such_field" } } } test { name: "repeated_none_implicit" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{}.repeated_int32)" value { bool_value: false } } test { name: "repeated_none_explicit" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{repeated_int32: []}.repeated_int32)" value { bool_value: false } } test { name: "repeated_one" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{repeated_int32: [1]}.repeated_int32)" value { bool_value: true } } test { name: "repeated_many" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)" value { bool_value: true } } test { name: "map_none_implicit" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{}.map_string_string)" value { bool_value: false } } test { name: "map_none_explicit" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{map_string_string: {}}.map_string_string)" value { bool_value: false } } test { name: "map_one_default" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)" value { bool_value: true } } test { name: "map_one" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)" value { bool_value: true } } test { name: "map_many" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)" value { bool_value: true } } test { name: "required" container: "cel.expr.conformance.proto2" expr: "has(TestRequired{required_int32: 4}.required_int32)" value { bool_value: true } } test { name: "optional_unset_no_default" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{}.single_sint32)" value { bool_value: false } } test { name: "optional_set_no_default" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{single_sint32: -4}.single_sint32)" value { bool_value: true } } test { name: "optional_unset_with_default" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{}.single_int32)" value { bool_value: false } } test { name: "optional_set_with_default" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{single_int32: 16}.single_int32)" value { bool_value: true } } test { name: "optional_set_to_default" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{single_int32: -32}.single_int32)" value { bool_value: true } } test { name: "optional_message_unset" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{}.standalone_message)" value { bool_value: false } } test { name: "optional_message_set" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)" value { bool_value: true } } test { name: "optional_enum_unset" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{}.standalone_enum)" value { bool_value: false } } test { name: "optional_enum_set" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)" value { bool_value: true } } test { name: "optional_enum_set_zero" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)" value { bool_value: true } } test { name: "oneof_unset" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{}.single_nested_message)" value { bool_value: false } } test { name: "oneof_other_set" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)" value { bool_value: false } } test { name: "oneof_set" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)" value { bool_value: true } } test { name: "oneof_set_default" container: "cel.expr.conformance.proto2" expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)" value { bool_value: true } } } section { name: "set_null" test { name: "single_message" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_nested_message: null} == TestAllTypes{}" value: { bool_value: true } } test { name: "single_any" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_any: null}.single_any" value { null_value: NULL_VALUE } } test { name: "single_value" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_value: null}.single_value" value { null_value: NULL_VALUE } } test { name: "single_duration" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_duration: null} == TestAllTypes{}" value: { bool_value: true } } test { name: "single_timestamp" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_timestamp: null} == TestAllTypes{}" value: { bool_value: true } } test { name: "single_scalar" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_bool: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } test { name: "repeated" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{repeated_int32: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } test { name: "map" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{map_string_string: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } test { name: "list_value" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{list_value: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } test { name: "single_struct" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{single_struct: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } } section { name: "quoted_fields" test { name: "set_field_with_quoted_name" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{`in`: true} == TestAllTypes{}" value: { bool_value: false } } test { name: "get_field_with_quoted_name" container: "cel.expr.conformance.proto2" expr: "TestAllTypes{`in`: true}.`in`" value: { bool_value: true } } } section: { name: "extensions_has" description: "Tests for presence checks on proto2 extension fields." test: { name: "package_scoped_int32" expr: "has(msg.`cel.expr.conformance.proto2.int32_ext`)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.int32_ext]: 42 } } } } } } test: { name: "package_scoped_nested_ext" expr: "has(msg.`cel.expr.conformance.proto2.nested_ext`)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.nested_ext]: {} } } } } } } test: { name: "package_scoped_test_all_types_ext" expr: "has(msg.`cel.expr.conformance.proto2.test_all_types_ext`)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.test_all_types_ext]: {} } } } } } } test: { name: "package_scoped_test_all_types_nested_enum_ext" expr: "has(msg.`cel.expr.conformance.proto2.nested_enum_ext`)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.nested_enum_ext]: BAR } } } } } } test: { name: "package_scoped_repeated_test_all_types" expr: "has(msg.`cel.expr.conformance.proto2.repeated_test_all_types`)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.repeated_test_all_types]: [ { single_int64: 1 }, { single_bool: true } ] } } } } } } test: { name: "message_scoped_int64" expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext`)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]: 42 } } } } } } test: { name: "message_scoped_nested_ext" expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext`)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]: {} } } } } } } test: { name: "message_scoped_nested_enum_ext" expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext`)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]: BAR } } } } } } test: { name: "message_scoped_repeated_test_all_types" expr: "has(msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types`)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]: [ { single_int64: 1 }, { single_bool: true } ] } } } } } } } section { name: "extensions_get" description: "Tests for accessing proto2 extension fields." test: { name: "package_scoped_int32" expr: "msg.`cel.expr.conformance.proto2.int32_ext` == 42" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.int32_ext]: 42 } } } } } } test: { name: "package_scoped_nested_ext" expr: "msg.`cel.expr.conformance.proto2.nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.nested_ext]: {} } } } } } } test: { name: "package_scoped_test_all_types_ext" expr: "msg.`cel.expr.conformance.proto2.test_all_types_ext` == cel.expr.conformance.proto2.TestAllTypes{}" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.test_all_types_ext]: {} } } } } } } test: { name: "package_scoped_test_all_types_nested_enum_ext" expr: "msg.`cel.expr.conformance.proto2.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.nested_enum_ext]: BAR } } } } } } test: { name: "package_scoped_repeated_test_all_types" expr: "msg.`cel.expr.conformance.proto2.repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.repeated_test_all_types]: [ { single_int64: 1 }, { single_bool: true } ] } } } } } } test: { name: "message_scoped_int64" expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext` == 42" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]: 42 } } } } } } test: { name: "message_scoped_nested_ext" expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext` == cel.expr.conformance.proto2.TestAllTypes{}" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]: {} } } } } } } test: { name: "message_scoped_nested_enum_ext" expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext` == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]: BAR } } } } } } test: { name: "message_scoped_repeated_test_all_types" expr: "msg.`cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types` == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]: [ { single_int64: 1 }, { single_bool: true } ] } } } } } } } cel-spec-0.24.0/tests/simple/testdata/proto2_ext.textproto000066400000000000000000000257511500667630300236530ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "proto2_ext" description: "Tests for the proto extension library." section: { name: "has_ext" test: { name: "package_scoped_int32" expr: "proto.hasExt(msg, cel.expr.conformance.proto2.int32_ext)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.int32_ext]: 42 } } } } } } test: { name: "package_scoped_nested_ext" expr: "proto.hasExt(msg, cel.expr.conformance.proto2.nested_ext)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.nested_ext]: {} } } } } } } test: { name: "package_scoped_test_all_types_ext" expr: "proto.hasExt(msg, cel.expr.conformance.proto2.test_all_types_ext)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.test_all_types_ext]: {} } } } } } } test: { name: "package_scoped_test_all_types_nested_enum_ext" expr: "proto.hasExt(msg, cel.expr.conformance.proto2.nested_enum_ext)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.nested_enum_ext]: BAR } } } } } } test: { name: "package_scoped_repeated_test_all_types" expr: "proto.hasExt(msg, cel.expr.conformance.proto2.repeated_test_all_types)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.repeated_test_all_types]: [ { single_int64: 1 }, { single_bool: true } ] } } } } } } test: { name: "message_scoped_int64" expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]: 42 } } } } } } test: { name: "message_scoped_nested_ext" expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]: {} } } } } } } test: { name: "message_scoped_nested_enum_ext" expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]: BAR } } } } } } test: { name: "message_scoped_repeated_test_all_types" expr: "proto.hasExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types)" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]: [ { single_int64: 1 }, { single_bool: true } ] } } } } } } } section: { name: "get_ext" test: { name: "package_scoped_int32" expr: "proto.getExt(msg, cel.expr.conformance.proto2.int32_ext) == 42" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.int32_ext]: 42 } } } } } } test: { name: "package_scoped_nested_ext" expr: "proto.getExt(msg, cel.expr.conformance.proto2.nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.nested_ext]: {} } } } } } } test: { name: "package_scoped_test_all_types_ext" expr: "proto.getExt(msg, cel.expr.conformance.proto2.test_all_types_ext) == cel.expr.conformance.proto2.TestAllTypes{}" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.test_all_types_ext]: {} } } } } } } test: { name: "package_scoped_test_all_types_nested_enum_ext" expr: "proto.getExt(msg, cel.expr.conformance.proto2.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.nested_enum_ext]: BAR } } } } } } test: { name: "package_scoped_repeated_test_all_types" expr: "proto.getExt(msg, cel.expr.conformance.proto2.repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.repeated_test_all_types]: [ { single_int64: 1 }, { single_bool: true } ] } } } } } } test: { name: "message_scoped_int64" expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext) == 42" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.int64_ext]: 42 } } } } } } test: { name: "message_scoped_nested_ext" expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext) == cel.expr.conformance.proto2.TestAllTypes{}" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_nested_ext]: {} } } } } } } test: { name: "message_scoped_nested_enum_ext" expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext) == cel.expr.conformance.proto2.TestAllTypes.NestedEnum.BAR" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.nested_enum_ext]: BAR } } } } } } test: { name: "message_scoped_repeated_test_all_types" expr: "proto.getExt(msg, cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types) == [cel.expr.conformance.proto2.TestAllTypes{single_int64: 1}, cel.expr.conformance.proto2.TestAllTypes{single_bool: true}]" type_env: { name: "msg" ident: { type: { message_type: "cel.expr.conformance.proto2.TestAllTypes" } } } bindings: { key: "msg" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto2.TestAllTypes]: { [cel.expr.conformance.proto2.Proto2ExtensionScopedMessage.message_scoped_repeated_test_all_types]: [ { single_int64: 1 }, { single_bool: true } ] } } } } } } } cel-spec-0.24.0/tests/simple/testdata/proto3.textproto000066400000000000000000000454161500667630300227740ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "proto3" description: "Protocol buffer version 3 tests. See notes for the available set of protos for tests." section { name: "literal_singular" description: "Literals with singular fields set." test { name: "int64_nocontainer" expr: "cel.expr.conformance.proto3.TestAllTypes{single_int64: 17}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 17 } } } } test { name: "int32" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32: -34}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int32: -34 } } } } test { name: "int64" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64: 17}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 17 } } } } test { name: "uint32" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint32: 1u}" value { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_uint32: 1 } } } } test { name: "uint64" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint64: 9999u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_uint64: 9999 } } } } test { name: "sint32" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_sint32: -3}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_sint32: -3 } } } } test { name: "sint64" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_sint64: 255}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_sint64: 255 } } } } test { name: "fixed32" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_fixed32: 43u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_fixed32: 43 } } } } test { name: "fixed64" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_fixed64: 1880u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_fixed64: 1880 } } } } test { name: "sfixed32" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_sfixed32: -404}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_sfixed32: -404 } } } } test { name: "sfixed64" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_sfixed64: -1}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_sfixed64: -1 } } } } test { name: "float" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_float: 3.1416}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_float: 3.1416 } } } } test { name: "double" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_double: 6.022e23}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_double: 6.022e23 } } } } test { name: "bool" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bool: true}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_bool: true } } } } test { name: "string" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_string: 'foo'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_string: "foo" } } } } test { name: "bytes" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bytes: b'\\377'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_bytes: "\377" } } } } } section { name: "literal_wellknown" description: "Literals with well-known fields set." test { name: "any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: TestAllTypes{single_int32: 1}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_any { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int32: 1 } } } } } } test { name: "duration" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_duration: duration('123s')}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_duration { seconds: 123 } } } } } test { name: "timestamp" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_timestamp: timestamp('2009-02-13T23:31:30Z')}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_timestamp { seconds: 1234567890 } } } } } test { name: "struct" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_struct: {'one': 1, 'two': 2}}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_struct { fields { key: "one" value { number_value: 1.0 } } fields { key: "two" value { number_value: 2.0 } } } } } } } test { name: "value" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: 'foo'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_value { string_value: "foo" } } } } } test { name: "int64_wrapper" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64_wrapper: -321}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64_wrapper { value: -321 } } } } } test { name: "int32_wrapper" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32_wrapper: -456}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int32_wrapper { value: -456 } } } } } test { name: "double_wrapper" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_double_wrapper: 2.71828}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_double_wrapper { value: 2.71828 } } } } } test { name: "float_wrapper" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_float_wrapper: 2.99792e8}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_float_wrapper { value: 2.99792e8 } } } } } test { name: "uint64_wrapper" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint64_wrapper: 8675309u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_uint64_wrapper { value: 8675309 } } } } } test { name: "uint32_wrapper" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint32_wrapper: 987u}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_uint32_wrapper { value: 987 } } } } } test { name: "string_wrapper" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_string_wrapper: 'hubba'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_string_wrapper { value: "hubba" } } } } } test { name: "bool_wrapper" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bool_wrapper: true}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_bool_wrapper { value: true } } } } } test { name: "bytes_wrapper" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bytes_wrapper: b'\\301\\103'}" value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_bytes_wrapper { value: "\301\103" } } } } } } section { name: "singular_bind" description: "Binding the singular fields." test { name: "int32" expr: "x.single_int32" type_env: { name: "x" ident: { type: { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings: { key: "x" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int32: 17 } } } } } value: { int64_value: 17 } } test { name: "int64" expr: "x.single_int64" type_env: { name: "x" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings: { key: "x" value: { value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: -99 } } } } } value: { int64_value: -99 } } } section { name: "empty_field" description: "Tests on empty fields." test { name: "scalar" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_fixed32" value: { uint64_value: 0 } } test { name: "nested_message" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_nested_message" value: { object_value: { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes.NestedMessage] {} } } } test { name: "nested_message_subfield" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_nested_message.bb" value: { int64_value: 0 } } test { name: "wkt" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.single_int64_wrapper" value: { null_value: NULL_VALUE } } test { name: "repeated_scalar" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.repeated_int64" value: { list_value: {} } } test { name: "repeated_enum" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.repeated_nested_enum" value: { list_value: {} } } test { name: "repeated_nested" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.repeated_nested_message" value: { list_value: {} } } test { name: "map" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.map_string_string" value: { map_value: {} } } } section { name: "has" description: "Tests for the has() macro on proto3 messages." test { name: "undefined" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{}.no_such_field)" disable_check: true eval_error: { errors: { message: "no_such_field" } } } test { name: "repeated_none_implicit" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{}.repeated_int32)" value { bool_value: false } } test { name: "repeated_none_explicit" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{repeated_int32: []}.repeated_int32)" value { bool_value: false } } test { name: "repeated_one" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{repeated_int32: [1]}.repeated_int32)" value { bool_value: true } } test { name: "repeated_many" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{repeated_int32: [1, 2, 3]}.repeated_int32)" value { bool_value: true } } test { name: "map_none_implicit" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{}.map_string_string)" value { bool_value: false } } test { name: "map_none_explicit" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{map_string_string: {}}.map_string_string)" value { bool_value: false } } test { name: "map_one_default" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{map_string_string: {'MT': ''}}.map_string_string)" value { bool_value: true } } test { name: "map_one" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{map_string_string: {'one': 'uno'}}.map_string_string)" value { bool_value: true } } test { name: "map_many" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{map_string_string: {'one': 'uno', 'two': 'dos'}}.map_string_string)" value { bool_value: true } } test { name: "single_unset" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{}.single_int32)" value { bool_value: false } } test { name: "single_set" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{single_int32: 16}.single_int32)" value { bool_value: true } } test { name: "single_set_to_default" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{single_int32: 0}.single_int32)" value { bool_value: false } } test { name: "single_message_unset" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{}.standalone_message)" value { bool_value: false } } test { name: "single_message_set" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{bb: 123}}.standalone_message)" value { bool_value: true } } test { name: "single_message_set_to_default" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{standalone_message: TestAllTypes.NestedMessage{}}.standalone_message)" value { bool_value: true } } test { name: "single_enum_unset" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{}.standalone_enum)" value { bool_value: false } } test { name: "single_enum_set" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.BAR}.standalone_enum)" value { bool_value: true } } test { name: "single_enum_set_zero" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{standalone_enum: TestAllTypes.NestedEnum.FOO}.standalone_enum)" value { bool_value: false } } test { name: "oneof_unset" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{}.single_nested_message)" value { bool_value: false } } test { name: "oneof_other_set" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.BAZ}.single_nested_message)" value { bool_value: false } } test { name: "oneof_set" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{single_nested_message: TestAllTypes.NestedMessage{}}.single_nested_message)" value { bool_value: true } } test { name: "oneof_set_default" container: "cel.expr.conformance.proto3" expr: "has(TestAllTypes{single_nested_enum: TestAllTypes.NestedEnum.FOO}.single_nested_enum)" value { bool_value: true } } } section { name: "set_null" test { name: "single_message" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_nested_message: null} == TestAllTypes{}" value: { bool_value: true } } test { name: "single_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: null}.single_any" value { null_value: NULL_VALUE } } test { name: "single_value" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: null}.single_value" value { null_value: NULL_VALUE } } test { name: "single_duration" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_duration: null} == TestAllTypes{}" value: { bool_value: true } } test { name: "single_timestamp" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_timestamp: null} == TestAllTypes{}" value: { bool_value: true } } test { name: "single_scalar" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bool: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } test { name: "repeated" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{repeated_int32: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } test { name: "map" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{map_string_string: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } test { name: "list_value" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{list_value: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } test { name: "single_struct" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_struct: null} == TestAllTypes{}" disable_check: true eval_error: { errors: { message: "unsupported field type" } } } } section { name: "quoted_fields" test { name: "set_field" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{`in`: true} == TestAllTypes{}" value: { bool_value: false } } test { name: "get_field" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{`in`: true}.`in`" value: { bool_value: true } } } cel-spec-0.24.0/tests/simple/testdata/string.textproto000066400000000000000000000140361500667630300230460ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: google.api.expr.test.v1.SimpleTestFile name: "string" description: "Tests for string and bytes operations." section { name: "size" description: "Tests for the size() function." test { name: "empty" expr: "size('')" value: { int64_value: 0 } } test { name: "one_ascii" expr: "size('A')" value: { int64_value: 1 } } test { name: "one_unicode" expr: "size('ÿ')" value: { int64_value: 1 } } test { name: "ascii" expr: "size('four')" value: { int64_value: 4 } } test { name: "unicode" expr: "size('πέντε')" value: { int64_value: 5 } } test { name: "bytes_empty" expr: "size(b'')" value: { int64_value: 0 } } test { name: "bytes" expr: "size(b'abc')" value: { int64_value: 3 } } } section { name: "starts_with" description: "Tests for the startsWith() function." test { name: "basic_true" expr: "'foobar'.startsWith('foo')" value: { bool_value: true } } test { name: "basic_false" expr: "'foobar'.startsWith('bar')" value: { bool_value: false } } test { name: "empty_target" expr: "''.startsWith('foo')" value: { bool_value: false } } test { name: "empty_arg" expr: "'foobar'.startsWith('')" value: { bool_value: true } } test { name: "empty_empty" expr: "''.startsWith('')" value: { bool_value: true } } test { name: "unicode" expr: "'завтра'.startsWith('за')" value: { bool_value: true } } test { name: "unicode_smp" expr: "'\U0001F431\U0001F600\U0001F61B'.startsWith('\U0001F431')" value: { bool_value: true } } } section { name: "ends_with" description: "Tests for the endsWith() function." test { name: "basic_true" expr: "'foobar'.endsWith('bar')" value: { bool_value: true } } test { name: "basic_false" expr: "'foobar'.endsWith('foo')" value: { bool_value: false } } test { name: "empty_target" expr: "''.endsWith('foo')" value: { bool_value: false } } test { name: "empty_arg" expr: "'foobar'.endsWith('')" value: { bool_value: true } } test { name: "empty_empty" expr: "''.endsWith('')" value: { bool_value: true } } test { name: "unicode" expr: "'forté'.endsWith('té')" value: { bool_value: true } } test { name: "unicode_smp" expr: "'\U0001F431\U0001F600\U0001F61B'.endsWith('\U0001F61B')" value: { bool_value: true } } } section { name: "matches" description: "Tests for regexp matching. For now, we will only test the subset of regular languages." test { name: "basic" expr: "'hubba'.matches('ubb')" value: { bool_value: true } } test { name: "empty_target" expr: "''.matches('foo|bar')" value: { bool_value: false } } test { name: "empty_arg" expr: "'cows'.matches('')" value: { bool_value: true } } test { name: "empty_empty" expr: "''.matches('')" value: { bool_value: true } } test { name: "re_concat" expr: "'abcd'.matches('bc')" value: { bool_value: true } } test { name: "re_alt" expr: "'grey'.matches('gr(a|e)y')" value: { bool_value: true } } test { name: "re_rep" expr: "'banana'.matches('ba(na)*')" value: { bool_value: true } } test { name: "unicode" expr: "'mañana'.matches('a+ñ+a+')" value: { bool_value: true } } test { name: "unicode_smp" expr: "'\U0001F431\U0001F600\U0001F600'.matches('(a|\U0001F600){2}')" value: { bool_value: true } } } section { name: "concatenation" description: "Tests for string concatenation." test { name: "concat_true" expr: "'he' + 'llo'" value: { string_value: "hello" } } test { name: "concat_with_spaces" expr: "'hello' + ' ' == 'hello'" value: { bool_value: false } } test { name: "concat_empty_string_beginning" expr: "'' + 'abc'" value: { string_value: "abc" } } test { name: "concat_empty_string_end" expr: "'abc' + ''" value: { string_value: "abc" } } test { name: "concat_empty_with_empty" expr: "'' + ''" value: { string_value: "" } } test { name: "unicode_unicode" expr: "'¢' + 'ÿ' + 'Ȁ'" value: { string_value: "¢ÿȀ" } } test { name: "ascii_unicode" expr: "'r' + 'ô' + 'le'" value: { string_value: "rôle" } } test { name: "ascii_unicode_unicode_smp" expr: "'a' + 'ÿ' + '\U0001F431'" value: { string_value: "aÿ\xf0\x9f\x90\xb1" } } test { name: "empty_unicode" expr: "'' + 'Ω' + ''" value: { string_value: "Ω" } } } section { name: "contains" description: "Tests for contains." test { name: "contains_true" expr: "'hello'.contains('he')" value: { bool_value: true } } test { name: "contains_empty" expr: "'hello'.contains('')" value: { bool_value: true } } test { name: "contains_false" expr: "'hello'.contains('ol')" value: { bool_value: false } } test { name: "contains_multiple" expr: "'abababc'.contains('ababc')" value: { bool_value: true } } test { name: "contains_unicode" expr: "'Straße'.contains('aß')" value: { bool_value: true } } test { name: "contains_unicode_smp" expr: "'\U0001F431\U0001F600\U0001F601'.contains('\U0001F600')" value: { bool_value: true } } test { name: "empty_contains" expr: "''.contains('something')" value: { bool_value: false } } test { name: "empty_empty" expr: "''.contains('')" value: { bool_value: true } } } section { name: "bytes_concat" description: "Tests for bytes concatenation." test { name: "concat" expr: "b'abc' + b'def'" value: { bytes_value: "abcdef" } } test { name: "left_unit" expr: "b'' + b'\\xffoo'" value: { bytes_value: "\377oo" } } test { name: "right_unit" expr: "b'zxy' + b''" value: { bytes_value: "zxy" } } test { name: "empty_empty" expr: "b'' + b''" value: { bytes_value: "" } } } cel-spec-0.24.0/tests/simple/testdata/string_ext.textproto000066400000000000000000001023551500667630300237300ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "string_ext" description: "Tests for the strings extension library." section: { name: "char_at" test: { name: "middle_index" expr: "'tacocat'.charAt(3)" value: { string_value: "o" } } test: { name: "end_index" expr: "'tacocat'.charAt(7)" value: { string_value: "" } } test: { name: "multiple" expr: "'©αT'.charAt(0) == '©' && '©αT'.charAt(1) == 'α' && '©αT'.charAt(2) == 'T'" } } section: { name: "index_of" test: { name: "empty_index" expr: "'tacocat'.indexOf('')" value: { int64_value: 0 } } test: { name: "string_index" expr: "'tacocat'.indexOf('ac')" value: { int64_value: 1 } } test: { name: "nomatch" expr: "'tacocat'.indexOf('none') == -1" } test: { name: "empty_index" expr: "'tacocat'.indexOf('', 3) == 3" } test: { name: "char_index" expr: "'tacocat'.indexOf('a', 3) == 5" } test: { name: "string_index" expr: "'tacocat'.indexOf('at', 3) == 5" } test: { name: "unicode_char" expr: "'ta©o©αT'.indexOf('©') == 2" } test: { name: "unicode_char_index" expr: "'ta©o©αT'.indexOf('©', 3) == 4" } test: { name: "unicode_string_index" expr: "'ta©o©αT'.indexOf('©αT', 3) == 4" } test: { name: "unicode_string_nomatch_index" expr: "'ta©o©αT'.indexOf('©α', 5) == -1" } test: { name: "char_index" expr: "'ijk'.indexOf('k') == 2" } test: { name: "string_with_space_fullmatch" expr: "'hello wello'.indexOf('hello wello') == 0" } test: { name: "string_with_space_index" expr: "'hello wello'.indexOf('ello', 6) == 7" } test: { name: "string_nomatch_index" expr: "'hello wello'.indexOf('elbo room!!') == -1" } } section: { name: "last_index_of" test: { name: "empty" expr: "'tacocat'.lastIndexOf('') == 7" } test: { name: "string" expr: "'tacocat'.lastIndexOf('at') == 5" } test: { name: "string_nomatch" expr: "'tacocat'.lastIndexOf('none') == -1" } test: { name: "empty_index" expr: "'tacocat'.lastIndexOf('', 3) == 3" } test: { name: "char_index" expr: "'tacocat'.lastIndexOf('a', 3) == 1" } test: { name: "unicode_char" expr: "'ta©o©αT'.lastIndexOf('©') == 4" } test: { name: "unicode_char_index" expr: "'ta©o©αT'.lastIndexOf('©', 3) == 2" } test: { name: "unicode_string_index" expr: "'ta©o©αT'.lastIndexOf('©α', 4) == 4" } test: { name: "string_with_space_string_index" expr: "'hello wello'.lastIndexOf('ello', 6) == 1" } test: { name: "string_with_space_string_nomatch" expr: "'hello wello'.lastIndexOf('low') == -1" } test: { name: "string_with_space_string_with_space_nomatch" expr: "'hello wello'.lastIndexOf('elbo room!!') == -1" } test: { name: "string_with_space_fullmatch" expr: "'hello wello'.lastIndexOf('hello wello') == 0" } test: { name: "repeated_string" expr: "'bananananana'.lastIndexOf('nana', 7) == 6" } } section: { name: "ascii_casing" test: { name: "lowerascii" expr: "'TacoCat'.lowerAscii() == 'tacocat'" } test: { name: "lowerascii_unicode" expr: "'TacoCÆt'.lowerAscii() == 'tacocÆt'" } test: { name: "lowerascii_unicode_with_space" expr: "'TacoCÆt Xii'.lowerAscii() == 'tacocÆt xii'" } test: { name: "upperascii" expr: "'tacoCat'.upperAscii() == 'TACOCAT'" } test: { name: "upperascii_unicode" expr: "'tacoCαt'.upperAscii() == 'TACOCαT'" } test: { name: "upperascii_unicode_with_space" expr: "'TacoCÆt Xii'.upperAscii() == 'TACOCÆT XII'" } } section: { name: "replace" test: { name: "no_placeholder" expr: "'12 days 12 hours'.replace('{0}', '2') == '12 days 12 hours'" } test: { name: "basic" expr: "'{0} days {0} hours'.replace('{0}', '2') == '2 days 2 hours'" } test: { name: "chained" expr: "'{0} days {0} hours'.replace('{0}', '2', 1).replace('{0}', '23') == '2 days 23 hours'" } test: { name: "unicode" expr: "'1 ©αT taco'.replace('αT', 'o©α') == '1 ©o©α taco'" } } section: { name: "split" test: { name: "empty" expr: "'hello world'.split(' ') == ['hello', 'world']" } test: { name: "zero_limit" expr: "'hello world events!'.split(' ', 0) == []" } test: { name: "one_limit" expr: "'hello world events!'.split(' ', 1) == ['hello world events!']" } test: { name: "unicode_negative_limit" expr: "'o©o©o©o'.split('©', -1) == ['o', 'o', 'o', 'o']" } } section: { name: "substring" test: { name: "start" expr: "'tacocat'.substring(4) == 'cat'" } test: { name: "start_with_max_length" expr: "'tacocat'.substring(7) == ''" } test: { name: "start_and_end" expr: "'tacocat'.substring(0, 4) == 'taco'" } test: { name: "start_and_end_equal_value" expr: "'tacocat'.substring(4, 4) == ''" } test: { name: "unicode_start_and_end" expr: "'ta©o©αT'.substring(2, 6) == '©o©α'" } test: { name: "unicode_start_and_end_equal_value" expr: "'ta©o©αT'.substring(7, 7) == ''" } } section: { name: "trim" test: { name: "blank_spaces_escaped_chars" expr: "' \\f\\n\\r\\t\\vtext '.trim() == 'text'" } test: { name: "unicode_space_chars_1" expr: "'\\u0085\\u00a0\\u1680text'.trim() == 'text'" } test: { name: "unicode_space_chars_2" expr: "'text\\u2000\\u2001\\u2002\\u2003\\u2004\\u2004\\u2006\\u2007\\u2008\\u2009'.trim() == 'text'" } test: { name: "unicode_space_chars_3" expr: "'\\u200atext\\u2028\\u2029\\u202F\\u205F\\u3000'.trim() == 'text'" } test: { name: "unicode_no_trim" expr: "'\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'.trim() == '\\u180etext\\u200b\\u200c\\u200d\\u2060\\ufeff'" } } section: { name: "join" test: { name: "empty_separator" expr: "['x', 'y'].join() == 'xy'" } test: { name: "dash_separator" expr: "['x', 'y'].join('-') == 'x-y'" } test: { name: "empty_string_empty_separator" expr: "[].join() == ''" } test: { name: "empty_string_dash_separator" expr: "[].join('-') == ''" } } section: { name: "quote" test: { name: "multiline" expr: "strings.quote(\"first\\nsecond\") == \"\\\"first\\\\nsecond\\\"\"" } test: { name: "escaped" expr: "strings.quote(\"bell\\a\") == \"\\\"bell\\\\a\\\"\"" } test: { name: "backspace" expr: "strings.quote(\"\\bbackspace\") == \"\\\"\\\\bbackspace\\\"\"" } test: { name: "form_feed" expr: "strings.quote(\"\\fform feed\") == \"\\\"\\\\fform feed\\\"\"" } test: { name: "carriage_return" expr: "strings.quote(\"carriage \\r return\") == \"\\\"carriage \\\\r return\\\"\"" } test: { name: "horizontal_tab" expr: "strings.quote(\"horizontal tab\\t\") == \"\\\"horizontal tab\\\\t\\\"\"" } test: { name: "vertical_tab" expr: "strings.quote(\"vertical \\v tab\") == \"\\\"vertical \\\\v tab\\\"\"" } test: { name: "double_slash" expr: "strings.quote(\"double \\\\\\\\ slash\") == \"\\\"double \\\\\\\\\\\\\\\\ slash\\\"\"" } test: { name: "two_escape_sequences" expr: "strings.quote(\"two escape sequences \\\\a\\\\n\") == \"\\\"two escape sequences \\\\\\\\a\\\\\\\\n\\\"\"" } test: { name: "verbatim" expr: "strings.quote(\"verbatim\") == \"\\\"verbatim\\\"\"" } test: { name: "ends_with" expr: "strings.quote(\"ends with \\\\\") == \"\\\"ends with \\\\\\\\\\\"\"" } test: { name: "starts_with" expr: "strings.quote(\"\\\\ starts with\") == \"\\\"\\\\\\\\ starts with\\\"\"" } test: { name: "printable_unicode" expr: "strings.quote(\"printable unicode😀\") == \"\\\"printable unicode😀\\\"\"" } test: { name: "mid_string_quote" expr: "strings.quote(\"mid string \\\" quote\") == \"\\\"mid string \\\\\\\" quote\\\"\"" } test: { name: "single_quote_with_double_quote" expr: "strings.quote('single-quote with \"double quote\"') == \"\\\"single-quote with \\\\\\\"double quote\\\\\\\"\\\"\"" } test: { name: "size_unicode_char" expr: "strings.quote(\"size('ÿ')\") == \"\\\"size('ÿ')\\\"\"" } test: { name: "size_unicode_string" expr: "strings.quote(\"size('πέντε')\") == \"\\\"size('πέντε')\\\"\"" } test: { name: "unicode" expr: "strings.quote(\"завтра\") == \"\\\"завтра\\\"\"" } test: { name: "unicode_code_points" expr: "strings.quote(\"\\U0001F431\\U0001F600\\U0001F61B\")" value: { string_value: "\"🐱😀😛\"" } } test: { name: "unicode_2" expr: "strings.quote(\"ta©o©αT\") == \"\\\"ta©o©αT\\\"\"" } test: { name: "empty_quote" expr: "strings.quote(\"\")" value: { string_value: "\"\"" } } } section: { name: "format" test: { name: "no-op" expr: '"no substitution".format([])' value: { string_value: 'no substitution', } } test: { name: "mid-string substitution" expr: '"str is %s and some more".format(["filler"])' value: { string_value: 'str is filler and some more', } } test: { name: "percent escaping" expr: '"%% and also %%".format([])' value: { string_value: '% and also %', } } test: { name: "substitution inside escaped percent signs" expr: '"%%%s%%".format(["text"])' value: { string_value: '%text%', } } test: { name: "substitution with one escaped percent sign on the right" expr: '"%s%%".format(["percent on the right"])' value: { string_value: 'percent on the right%', } } test: { name: "substitution with one escaped percent sign on the left" expr: '"%%%s".format(["percent on the left"])' value: { string_value: '%percent on the left', } } test: { name: "multiple substitutions" expr: '"%d %d %d, %s %s %s, %d %d %d, %s %s %s".format([1, 2, 3, "A", "B", "C", 4, 5, 6, "D", "E", "F"])' value: { string_value: '1 2 3, A B C, 4 5 6, D E F', } } test: { name: "percent sign escape sequence support" expr: '"%%escaped %s%%".format(["percent"])' value: { string_value: '%escaped percent%', } } test: { name: "fixed point formatting clause" expr: '"%.3f".format([1.2345])' value: { string_value: '1.234', } } test: { name: "binary formatting clause" expr: '"this is 5 in binary: %b".format([5])' value: { string_value: 'this is 5 in binary: 101', } } test: { name: "uint support for binary formatting" expr: '"unsigned 64 in binary: %b".format([uint(64)])' value: { string_value: 'unsigned 64 in binary: 1000000', } } test: { name: "bool support for binary formatting" expr: '"bit set from bool: %b".format([true])' value: { string_value: 'bit set from bool: 1', } } test: { name: "octal formatting clause" expr: '"%o".format([11])' value: { string_value: '13', } } test: { name: "uint support for octal formatting clause" expr: '"this is an unsigned octal: %o".format([uint(65535)])' value: { string_value: 'this is an unsigned octal: 177777', } } test: { name: "lowercase hexadecimal formatting clause" expr: '"%x is 20 in hexadecimal".format([30])' value: { string_value: '1e is 20 in hexadecimal', } } test: { name: "uppercase hexadecimal formatting clause" expr: '"%X is 20 in hexadecimal".format([30])' value: { string_value: '1E is 20 in hexadecimal', } } test: { name: "unsigned support for hexadecimal formatting clause" expr: '"%X is 6000 in hexadecimal".format([uint(6000)])' value: { string_value: '1770 is 6000 in hexadecimal', } } test: { name: "string support with hexadecimal formatting clause" expr: '"%x".format(["Hello world!"])' value: { string_value: '48656c6c6f20776f726c6421', } } test: { name: "string support with uppercase hexadecimal formatting clause" expr: '"%X".format(["Hello world!"])' value: { string_value: '48656C6C6F20776F726C6421', } } test: { name: "byte support with hexadecimal formatting clause" expr: '"%x".format([b"byte string"])' value: { string_value: '6279746520737472696e67', } } test: { name: "byte support with uppercase hexadecimal formatting clause" expr: '"%X".format([b"byte string"])' value: { string_value: '6279746520737472696E67', } } test: { name: "scientific notation formatting clause" expr: '"%.6e".format([1052.032911275])' value: { string_value: '1.052033e+03', } } test: { name: "default precision for fixed-point clause" expr: '"%f".format([2.71828])' value: { string_value: '2.718280', } } test: { name: "default precision for scientific notation" expr: '"%e".format([2.71828])' value: { string_value: '2.718280e+00', } } test: { name: "NaN support for scientific notation" expr: '"%e".format([double("NaN")])' value: { string_value: 'NaN', } } test: { name: "positive infinity support for scientific notation" expr: '"%e".format([double("Infinity")])' value: { string_value: 'Infinity', } } test: { name: "negative infinity support for scientific notation" expr: '"%e".format([double("-Infinity")])' value: { string_value: '-Infinity', } } test: { name: "NaN support for decimal" expr: '"%d".format([double("NaN")])' value: { string_value: 'NaN', } } test: { name: "positive infinity support for decimal" expr: '"%d".format([double("Infinity")])' value: { string_value: 'Infinity', } } test: { name: "negative infinity support for decimal" expr: '"%d".format([double("-Infinity")])' value: { string_value: '-Infinity', } } test: { name: "NaN support for fixed-point" expr: '"%f".format([double("NaN")])' value: { string_value: 'NaN', } } test: { name: "positive infinity support for fixed-point" expr: '"%f".format([double("Infinity")])' value: { string_value: 'Infinity', } } test: { name: "negative infinity support for fixed-point" expr: '"%f".format([double("-Infinity")])' value: { string_value: '-Infinity', } } test: { name: "uint support for decimal clause" expr: '"%d".format([uint(64)])' value: { string_value: '64', } } test: { name: "null support for string" expr: '"%s".format([null])' value: { string_value: 'null', } } test: { name: "int support for string" expr: '"%s".format([999999999999])' value: { string_value: '999999999999', } } test: { name: "bytes support for string" expr: '"%s".format([b"xyz"])' value: { string_value: 'xyz', } } test: { name: "type() support for string" expr: '"%s".format([type("test string")])' value: { string_value: 'string', } } test: { name: "timestamp support for string" expr: '"%s".format([timestamp("2023-02-03T23:31:20+00:00")])' value: { string_value: '2023-02-03T23:31:20Z', } } test: { name: "duration support for string" expr: '"%s".format([duration("1h45m47s")])' value: { string_value: '6347s', } } test: { name: "list support for string" expr: '"%s".format([["abc", 3.14, null, [9, 8, 7, 6], timestamp("2023-02-03T23:31:20Z")]])' value: { string_value: '[abc, 3.14, null, [9, 8, 7, 6], 2023-02-03T23:31:20Z]', } } test: { name: "map support for string" expr: '"%s".format([{"key1": b"xyz", "key5": null, "key2": duration("2h"), "key4": true, "key3": 2.71828}])' value: { string_value: '{key1: xyz, key2: 7200s, key3: 2.71828, key4: true, key5: null}', } } test: { name: "map support (all key types)" expr: '"%s".format([{1: "value1", uint(2): "value2", true: double("NaN")}])' value: { string_value: '{1: value1, 2: value2, true: NaN}', } } test: { name: "boolean support for %s" expr: '"%s, %s".format([true, false])' value: { string_value: 'true, false', } } test: { name: "dyntype support for string formatting clause" expr: '"%s".format([dyn("a string")])' value: { string_value: 'a string', } } test: { name: "dyntype support for numbers with string formatting clause" expr: '"%s, %s".format([dyn(32), dyn(56.8)])' value: { string_value: '32, 56.8', } } test: { name: "dyntype support for integer formatting clause" expr: '"%d".format([dyn(128)])' value: { string_value: '128', } } test: { name: "dyntype support for integer formatting clause (unsigned)" expr: '"%d".format([dyn(256u)])' value: { string_value: '256', } } test: { name: "dyntype support for hex formatting clause" expr: '"%x".format([dyn(22)])' value: { string_value: '16', } } test: { name: "dyntype support for hex formatting clause (uppercase)" expr: '"%X".format([dyn(26)])' value: { string_value: '1A', } } test: { name: "dyntype support for unsigned hex formatting clause" expr: '"%x".format([dyn(500u)])' value: { string_value: '1f4', } } test: { name: "dyntype support for fixed-point formatting clause" expr: '"%.3f".format([dyn(4.5)])' value: { string_value: '4.500', } } test: { name: "dyntype support for scientific notation" expr: '"%e".format([dyn(2.71828)])' value: { string_value: '2.718280e+00', } } test: { name: "dyntype NaN/infinity support" expr: '"%s".format([[double("NaN"), double("Infinity"), double("-Infinity")]])' value: { string_value: '[NaN, Infinity, -Infinity]', } } test: { name: "dyntype support for timestamp" expr: '"%s".format([dyn(timestamp("2009-11-10T23:00:00Z"))])' value: { string_value: '2009-11-10T23:00:00Z', } } test: { name: "dyntype support for duration" expr: '"%s".format([dyn(duration("8747s"))])' value: { string_value: '8747s', } } test: { name: "dyntype support for lists" expr: '"%s".format([dyn([6, 4.2, "a string"])])' value: { string_value: '[6, 4.2, a string]', } } test: { name: "dyntype support for maps" expr: '"%s".format([{"strKey":"x", 6:duration("422s"), true:42}])' value: { string_value: '{6: 422s, strKey: x, true: 42}', } } test: { name: "string substitution in a string variable" expr: 'str_var.format(["filler"])' type_env: { name: "str_var", ident: { type: { primitive: STRING } } } bindings: { key: "str_var" value: { value: { string_value: "%s" } } } value: { string_value: 'filler', } } test: { name: "multiple substitutions in a string variable" expr: 'str_var.format([1, 2, 3, "A", "B", "C", 4, 5, 6, "D", "E", "F"])' type_env: { name: "str_var", ident: { type: { primitive: STRING } } } bindings: { key: "str_var" value: { value: { string_value: "%d %d %d, %s %s %s, %d %d %d, %s %s %s" } } } value: { string_value: '1 2 3, A B C, 4 5 6, D E F', } } test: { name: "substitution inside escaped percent signs in a string variable" expr: 'str_var.format(["text"])' type_env: { name: "str_var", ident: { type: { primitive: STRING } } } bindings: { key: "str_var" value: { value: { string_value: "%%%s%%" } } } value: { string_value: '%text%', } } test: { name: "fixed point formatting clause in a string variable" expr: 'str_var.format([1.2345])' type_env: { name: "str_var", ident: { type: { primitive: STRING } } } bindings: { key: "str_var" value: { value: { string_value: "%.3f" } } } value: { string_value: '1.234', } } test: { name: "binary formatting clause in a string variable" expr: 'str_var.format([5])' type_env: { name: "str_var", ident: { type: { primitive: STRING } } } bindings: { key: "str_var" value: { value: { string_value: "%b" } } } value: { string_value: '101', } } test: { name: "scientific notation formatting clause in a string variable" expr: 'str_var.format([1052.032911275])' type_env: { name: "str_var", ident: { type: { primitive: STRING } } } bindings: { key: "str_var" value: { value: { string_value: "%.6e" } } } value: { string_value: '1.052033e+03', } } test: { name: "default precision for fixed-point clause in a string variable" expr: 'str_var.format([2.71828])' type_env: { name: "str_var", ident: { type: { primitive: STRING } } } bindings: { key: "str_var" value: { value: { string_value: "%f" } } } value: { string_value: '2.718280', } } } section: { name: "format_errors" test: { name: "unrecognized formatting clause" expr: '"%a".format([1])' disable_check: true eval_error: { errors: { message: 'could not parse formatting clause: unrecognized formatting clause "a"' } } } test: { name: "out of bounds arg index" expr: '"%d %d %d".format([0, 1])' disable_check: true eval_error: { errors: { message: 'index 2 out of range' } } } test: { name: "string substitution is not allowed with binary clause" expr: '"string is %b".format(["abc"])' disable_check: true eval_error: { errors: { message: 'error during formatting: only integers and bools can be formatted as binary, was given string' } } } test: { name: "duration substitution not allowed with decimal clause" expr: '"%d".format([duration("30m2s")])' disable_check: true eval_error: { errors: { message: 'error during formatting: decimal clause can only be used on integers, was given google.protobuf.Duration' } } } test: { name: "string substitution not allowed with octal clause" expr: '"octal: %o".format(["a string"])' disable_check: true eval_error: { errors: { message: 'error during formatting: octal clause can only be used on integers, was given string' } } } test: { name: "double substitution not allowed with hex clause" expr: '"double is %x".format([0.5])' disable_check: true eval_error: { errors: { message: 'error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given double' } } } test: { name: "uppercase not allowed for scientific clause" expr: '"double is %E".format([0.5])' disable_check: true eval_error: { errors: { message: 'could not parse formatting clause: unrecognized formatting clause "E"' } } } test: { name: "object not allowed" expr: '"object is %s".format([cel.expr.conformance.proto3.TestAllTypes{}])' disable_check: true eval_error: { errors: { message: 'error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes' } } } test: { name: "object inside list" expr: '"%s".format([[1, 2, cel.expr.conformance.proto3.TestAllTypes{}]])' disable_check: true eval_error: { errors: { message: 'error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes' } } } test: { name: "object inside map" expr: '"%s".format([{1: "a", 2: cel.expr.conformance.proto3.TestAllTypes{}}])' disable_check: true eval_error: { errors: { message: 'error during formatting: string clause can only be used on strings, bools, bytes, ints, doubles, maps, lists, types, durations, and timestamps, was given cel.expr.conformance.proto3.TestAllTypes' } } } test: { name: "null not allowed for %d" expr: '"null: %d".format([null])' disable_check: true eval_error: { errors: { message: 'error during formatting: decimal clause can only be used on integers, was given null_type' } } } test: { name: "null not allowed for %e" expr: '"null: %e".format([null])' disable_check: true eval_error: { errors: { message: 'error during formatting: scientific clause can only be used on doubles, was given null_type' } } } test: { name: "null not allowed for %f" expr: '"null: %f".format([null])' disable_check: true eval_error: { errors: { message: 'error during formatting: fixed-point clause can only be used on doubles, was given null_type' } } } test: { name: "null not allowed for %x" expr: '"null: %x".format([null])' disable_check: true eval_error: { errors: { message: 'error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type' } } } test: { name: "null not allowed for %X" expr: '"null: %X".format([null])' disable_check: true eval_error: { errors: { message: 'error during formatting: only integers, byte buffers, and strings can be formatted as hex, was given null_type' } } } test: { name: "null not allowed for %b" expr: '"null: %b".format([null])' disable_check: true eval_error: { errors: { message: 'error during formatting: only integers and bools can be formatted as binary, was given null_type' } } } test: { name: "null not allowed for %o" expr: '"null: %o".format([null])' disable_check: true eval_error: { errors: { message: 'error during formatting: octal clause can only be used on integers, was given null_type' } } } } section: { name: "value_errors" test: { name: "charat_out_of_range" expr: "'tacocat'.charAt(30) == ''" eval_error: { errors: { message: "index out of range: 30" } } } test: { name: "indexof_out_of_range" expr: "'tacocat'.indexOf('a', 30) == -1" eval_error: { errors: { message: "index out of range: 30" } } } test: { name: "lastindexof_negative_index" expr: "'tacocat'.lastIndexOf('a', -1) == -1" eval_error: { errors: { message: "index out of range: -1" } } } test: { name: "lastindexof_out_of_range" expr: "'tacocat'.lastIndexOf('a', 30) == -1" eval_error: { errors: { message: "index out of range: 30" } } } test: { name: "substring_out_of_range" expr: "'tacocat'.substring(40) == 'cat'" eval_error: { errors: { message: "index out of range: 40" } } } test: { name: "substring_negative_index" expr: "'tacocat'.substring(-1) == 'cat'" eval_error: { errors: { message: "index out of range: -1" } } } test: { name: "substring_end_index_out_of_range" expr: "'tacocat'.substring(1, 50) == 'cat'" eval_error: { errors: { message: "index out of range: 50" } } } test: { name: "substring_begin_index_out_of_range" expr: "'tacocat'.substring(49, 50) == 'cat'" eval_error: { errors: { message: "index out of range: 49" } } } test: { name: "substring_end_index_greater_than_begin_index" expr: "'tacocat'.substring(4, 3) == ''" eval_error: { errors: { message: "invalid substring range. start: 4, end: 3" } } } } section: { name: "type_errors" test: { name: "charat_invalid_type" expr: "42.charAt(2) == ''" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "charat_invalid_argument" expr: "'hello'.charAt(true) == ''" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "indexof_unary_invalid_type" expr: "24.indexOf('2') == 0" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "indexof_unary_invalid_argument" expr: "'hello'.indexOf(true) == 1" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "indexof_binary_invalid_argument" expr: "42.indexOf('4', 0) == 0" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "indexof_binary_invalid_argument_2" expr: "'42'.indexOf(4, 0) == 0" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "indexof_binary_both_invalid_arguments" expr: "'42'.indexOf('4', '0') == 0" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "indexof_ternary_invalid_arguments" expr: "'42'.indexOf('4', 0, 1) == 0" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "split_invalid_type" expr: "42.split('2') == ['4']" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "replace_invalid_type" expr: "42.replace(2, 1) == '41'" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "replace_binary_invalid_argument" expr: "'42'.replace(2, 1) == '41'" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "replace_binary_invalid_argument_2" expr: "'42'.replace('2', 1) == '41'" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "replace_ternary_invalid_argument" expr: "42.replace('2', '1', 1) == '41'" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "replace_ternary_invalid_argument_2" expr: "'42'.replace(2, '1', 1) == '41'" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "replace_ternary_invalid_argument_3" expr: "'42'.replace('2', 1, 1) == '41'" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "replace_ternary_invalid_argument_4" expr: "'42'.replace('2', '1', '1') == '41'" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "replace_quaternary_invalid_argument" expr: "'42'.replace('2', '1', 1, false) == '41'" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "split_invalid_type_empty_arg" expr: "42.split('') == ['4', '2']" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "split_invalid_argument" expr: "'42'.split(2) == ['4']" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "split_binary_invalid_type" expr: "42.split('2', '1') == ['4']" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "split_binary_invalid_argument" expr: "'42'.split(2, 1) == ['4']" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "split_binary_invalid_argument_2" expr: "'42'.split('2', '1') == ['4']" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "split_ternary_invalid_argument" expr: "'42'.split('2', 1, 1) == ['4']" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "substring_ternary_invalid_argument" expr: "'hello'.substring(1, 2, 3) == ''" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "substring_binary_invalid_type" expr: "30.substring(true, 3) == ''" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "substring_binary_invalid_argument" expr: "'tacocat'.substring(true, 3) == ''" disable_check: true eval_error: { errors: { message: "no such overload" } } } test: { name: "substring_binary_invalid_argument_2" expr: "'tacocat'.substring(0, false) == ''" disable_check: true eval_error: { errors: { message: "no such overload" } } } } cel-spec-0.24.0/tests/simple/testdata/timestamps.textproto000066400000000000000000000315071500667630300237300ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "timestamps" description: "Timestamp and duration tests." section { name: "timestamp_conversions" description: "Conversions of timestamps to other types." test { name: "toInt_timestamp" expr: "int(timestamp('2009-02-13T23:31:30Z'))" value: { int64_value: 1234567890 } } test { name: "toString_timestamp" expr: "string(timestamp('2009-02-13T23:31:30Z'))" value: { string_value: "2009-02-13T23:31:30Z" } } test { name: "toString_timestamp_nanos" expr: "string(timestamp('9999-12-31T23:59:59.999999999Z'))" value: { string_value: "9999-12-31T23:59:59.999999999Z" } } test { name: "toType_timestamp" expr: "type(timestamp('2009-02-13T23:31:30Z'))" value: { type_value: "google.protobuf.Timestamp" } } test { name: "type_comparison" expr: "google.protobuf.Timestamp == type(timestamp('2009-02-13T23:31:30Z'))" value: { bool_value: true } } } section { name: "duration_conversions" description: "Conversions of durations to other types." test { name: "toString_duration" expr: "string(duration('1000000s'))" value: { string_value: "1000000s" } } test { name: "toType_duration" expr: "type(duration('1000000s'))" value: { type_value: "google.protobuf.Duration" } } test { name: "type_comparison" expr: "google.protobuf.Duration == type(duration('1000000s'))" value: { bool_value: true } } } section { name: "timestamp_selectors" description: "Timestamp selection operators without timezones" # 1234567890 -> Fri 2009-02-13 23:31:30 UTC test { name: "getDate" expr: "timestamp('2009-02-13T23:31:30Z').getDate()" value: { int64_value: 13 } } test { name: "getDayOfMonth" expr: "timestamp('2009-02-13T23:31:30Z').getDayOfMonth()" value: { int64_value: 12 } } test { name: "getDayOfWeek" expr: "timestamp('2009-02-13T23:31:30Z').getDayOfWeek()" value: { int64_value: 5 } } test { name: "getDayOfYear" expr: "timestamp('2009-02-13T23:31:30Z').getDayOfYear()" value: { int64_value: 43 } } test { name: "getFullYear" expr: "timestamp('2009-02-13T23:31:30Z').getFullYear()" value: { int64_value: 2009 } } test { name: "getHours" expr: "timestamp('2009-02-13T23:31:30Z').getHours()" value: { int64_value: 23 } } test { name: "getMilliseconds" expr: "timestamp('2009-02-13T23:31:20.123456789Z').getMilliseconds()" value: { int64_value: 123 } } test { name: "getMinutes" expr: "timestamp('2009-02-13T23:31:30Z').getMinutes()" value: { int64_value: 31 } } test { name: "getMonth" expr: "timestamp('2009-02-13T23:31:30Z').getMonth()" value: { int64_value: 1 } } test { name: "getSeconds" expr: "timestamp('2009-02-13T23:31:30Z').getSeconds()" value: { int64_value: 30 } } } section { name: "timestamp_selectors_tz" description: "Timestamp selection operators with timezones" # 1234567890 -> Fri 2009-02-13 23:31:30 UTC test { name: "getDate" expr: "timestamp('2009-02-13T23:31:30Z').getDate('Australia/Sydney')" value: { int64_value: 14 } } test { name: "getDayOfMonth_name_pos" expr: "timestamp('2009-02-13T23:31:30Z').getDayOfMonth('US/Central')" value: { int64_value: 12 } } test { name: "getDayOfMonth_numerical_pos" expr: "timestamp('2009-02-13T23:31:30Z').getDayOfMonth('+11:00')" value: { int64_value: 13 } } test { name: "getDayOfMonth_numerical_neg" expr: "timestamp('2009-02-13T02:00:00Z').getDayOfMonth('-02:30')" value: { int64_value: 11 } } test { name: "getDayOfMonth_name_neg" expr: "timestamp('2009-02-13T02:00:00Z').getDayOfMonth('America/St_Johns')" value: { int64_value: 11 } } test { name: "getDayOfWeek" expr: "timestamp('2009-02-13T23:31:30Z').getDayOfWeek('UTC')" value: { int64_value: 5 } } test { name: "getDayOfYear" expr: "timestamp('2009-02-13T23:31:30Z').getDayOfYear('US/Central')" value: { int64_value: 43 } } test { name: "getFullYear" expr: "timestamp('2009-02-13T23:31:30Z').getFullYear('-09:30')" value: { int64_value: 2009 } } test { name: "getHours" expr: "timestamp('2009-02-13T23:31:30Z').getHours('02:00')" value: { int64_value: 1 } } test { name: "getMinutes" expr: "timestamp('2009-02-13T23:31:30Z').getMinutes('Asia/Kathmandu')" value: { int64_value: 16 } } test { name: "getMonth" expr: "timestamp('2009-02-13T23:31:30Z').getMonth('UTC')" value: { int64_value: 1 } } test { name: "getSeconds" expr: "timestamp('2009-02-13T23:31:30Z').getSeconds('-00:00')" value: { int64_value: 30 } } } section { name: "timestamp_equality" description: "Equality operations on timestamps." test { name: "eq_same" expr: "timestamp('2009-02-13T23:31:30Z') == timestamp('2009-02-13T23:31:30Z')" value: { bool_value: true } } test { name: "eq_diff" expr: "timestamp('2009-02-13T23:31:29Z') == timestamp('2009-02-13T23:31:30Z')" value: { bool_value: false } } test { name: "neq_same" expr: "timestamp('1945-05-07T02:41:00Z') != timestamp('1945-05-07T02:41:00Z')" value: { bool_value: false } } test { name: "neq_diff" expr: "timestamp('2000-01-01T00:00:00Z') != timestamp('2001-01-01T00:00:00Z')" value: { bool_value: true } } } section { name: "duration_equality" description: "Equality tests for durations." test { name: "eq_same" expr: "duration('123s') == duration('123s')" value: { bool_value: true } } test { name: "eq_diff" expr: "duration('60s') == duration('3600s')" value: { bool_value: false } } test { name: "neq_same" expr: "duration('604800s') != duration('604800s')" value: { bool_value: false } } test { name: "neq_diff" expr: "duration('86400s') != duration('86164s')" value: { bool_value: true } } } section { name: "timestamp_arithmetic" description: "Arithmetic operations on timestamps and/or durations." test { name: "add_duration_to_time" expr: "timestamp('2009-02-13T23:00:00Z') + duration('240s') == timestamp('2009-02-13T23:04:00Z')" value: { bool_value: true } } test { name: "add_time_to_duration" expr: "duration('120s') + timestamp('2009-02-13T23:01:00Z') == timestamp('2009-02-13T23:03:00Z')" value: { bool_value: true } } test { name: "add_duration_to_duration" expr: "duration('600s') + duration('50s') == duration('650s')" value: { bool_value: true } } test { name: "add_time_to_duration_nanos_negative" expr: "timestamp('0001-01-01T00:00:01.000000001Z') + duration('-999999999ns') == timestamp('0001-01-01T00:00:00.000000002Z')" value: { bool_value: true } } test { name: "add_time_to_duration_nanos_positive" expr: "timestamp('0001-01-01T00:00:01.999999999Z') + duration('999999999ns') == timestamp('0001-01-01T00:00:02.999999998Z')" value: { bool_value: true } } test { name: "subtract_duration_from_time" expr: "timestamp('2009-02-13T23:10:00Z') - duration('600s') == timestamp('2009-02-13T23:00:00Z')" value: { bool_value: true } } test { name: "subtract_time_from_time" expr: "timestamp('2009-02-13T23:31:00Z') - timestamp('2009-02-13T23:29:00Z') == duration('120s')" value: { bool_value: true } } test { name: "subtract_duration_from_duration" expr: "duration('900s') - duration('42s') == duration('858s')" value: { bool_value: true } } } section { name: "comparisons" description: "Comparisons on timestamps and/or durations." test { name: "leq_timestamp_true" expr: "timestamp('2009-02-13T23:00:00Z') <= timestamp('2009-02-13T23:00:00Z')" value: { bool_value: true } } test { name: "leq_timestamp_false" expr: "timestamp('2009-02-13T23:00:00Z') <= timestamp('2009-02-13T22:59:59Z')" value: { bool_value: false } } test { name: "leq_duration_true" expr: "duration('200s') <= duration('200s')" value: { bool_value: true } } test { name: "leq_duration_false" expr: "duration('300s') <= duration('200s')" value: { bool_value: false } } test { name: "less_timestamp_true" expr: "timestamp('2009-02-13T23:00:00Z') < timestamp('2009-03-13T23:00:00Z')" value: { bool_value: true } } test { name: "less_duration_true" expr: "duration('200s') < duration('300s')" value: { bool_value: true } } test { name: "geq_timestamp_true" expr: "timestamp('2009-02-13T23:00:00Z') >= timestamp('2009-02-13T23:00:00Z')" value: { bool_value: true } } test { name: "geq_timestamp_false" expr: "timestamp('2009-02-13T22:58:00Z') >= timestamp('2009-02-13T23:00:00Z')" value: { bool_value: false } } test { name: "geq_duration_true" expr: "duration('200s') >= duration('200s')" value: { bool_value: true } } test { name: "geq_duration_false" expr: "duration('120s') >= duration('200s')" value: { bool_value: false } } test { name: "greater_timestamp_true" expr: "timestamp('2009-02-13T23:59:00Z') > timestamp('2009-02-13T23:00:00Z')" value: { bool_value: true } } test { name: "greater_duration_true" expr: "duration('300s') > duration('200s')" value: { bool_value: true } } } section { name: "duration_converters" description: "Conversion functions on durations. Unlike timestamps, we don't, e.g. select the 'minutes' field - we convert the duration to integer minutes." test { name: "get_hours" expr: "duration('10000s').getHours()" value: { int64_value: 2 } } test { name: "get_milliseconds" description: "Obtain the milliseconds component of the duration. Note, this is not the same as converting the duration to milliseconds. This behavior will be deprecated." expr: "x.getMilliseconds()" type_env { name: "x" ident: { type: { message_type: "google.protobuf.Duration" } } } bindings { key: "x" value { value { object_value { [type.googleapis.com/google.protobuf.Duration] { seconds: 123 nanos: 321456789 } } } } } value: { int64_value: 321 } } test { name: "get_minutes" expr: "duration('3730s').getMinutes()" value: { int64_value: 62 } } test { name: "get_seconds" expr: "duration('3730s').getSeconds()" value: { int64_value: 3730 } } } section { name: "timestamp_range" description: "Tests for out-of-range operations on timestamps." test { name: "from_string_under" expr: "timestamp('0000-01-01T00:00:00Z')" eval_error { errors { message: "range" } } } test { name: "from_string_over" expr: "timestamp('10000-01-01T00:00:00Z')" eval_error { errors { message: "range" } } } test { name: "add_duration_under" expr: "timestamp('0001-01-01T00:00:00Z') + duration('-1s')" eval_error { errors { message: "range" } } } test { name: "add_duration_over" expr: "timestamp('9999-12-31T23:59:59Z') + duration('1s')" eval_error { errors { message: "range" } } } test { name: "add_duration_nanos_over" expr: "timestamp('9999-12-31T23:59:59.999999999Z') + duration('1ns')" eval_error { errors { message: "range" } } } test { name: "add_duration_nanos_under" expr: "timestamp('0001-01-01T00:00:00Z') + duration('-1ns')" eval_error { errors { message: "range" } } } test { name: "sub_time_duration_over" expr: "timestamp('9999-12-31T23:59:59Z') - timestamp('0001-01-01T00:00:00Z')" eval_error { errors { message: "range" } } } test { name: "sub_time_duration_under" expr: "timestamp('0001-01-01T00:00:00Z') - timestamp('9999-12-31T23:59:59Z')" eval_error { errors { message: "range" } } } } section { name: "duration_range" description: "Tests for out-of-range operations on durations." test { name: "from_string_under" expr: "duration('-320000000000s')" eval_error { errors { message: "range" } } } test { name: "from_string_over" expr: "duration('320000000000s')" eval_error { errors { message: "range" } } } test { name: "add_under" expr: "duration('-200000000000s') + duration('-200000000000s')" eval_error { errors { message: "range" } } } test { name: "add_over" expr: "duration('200000000000s') + duration('200000000000s')" eval_error { errors { message: "range" } } } test { name: "sub_under" expr: "duration('-200000000000s') - duration('200000000000s')" eval_error { errors { message: "range" } } } test { name: "sub_over" expr: "duration('200000000000s') - duration('-200000000000s')" eval_error { errors { message: "range" } } } } cel-spec-0.24.0/tests/simple/testdata/type_deduction.textproto000066400000000000000000000465621500667630300245700ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "type_deductions" description: "Tests for type checker deduced types" section { name: "constant_literals" test { name: "bool" expr: "true" typed_result { result { bool_value: true } deduced_type { primitive: BOOL } } } test { name: "int" expr: "42" typed_result { result { int64_value: 42 } deduced_type { primitive: INT64 } } } test { name: "uint" expr: "42u" typed_result { result { uint64_value: 42 } deduced_type { primitive: UINT64 } } } test { name: "double" expr: "0.1" typed_result { result { double_value: 0.1 } deduced_type { primitive: DOUBLE } } } test { name: "string" expr: "\"test\"" typed_result { result { string_value: "test" } deduced_type { primitive: STRING } } } test { name: "bytes" expr: "b\"test\"" typed_result { result { bytes_value: "test" } deduced_type { primitive: BYTES } } } test { name: "null" expr: "null" typed_result { result { null_value: NULL_VALUE } deduced_type { null: NULL_VALUE } } } } section { name: "complex_initializers" test { name: "list" expr: "[1]" typed_result { result { list_value { values { int64_value: 1 } } } deduced_type { list_type { elem_type { primitive: INT64 } } } } } test { name: "map" expr: "{'abc': 123}" typed_result { result { map_value { entries { key { string_value: "abc" } value { int64_value: 123 } } } } deduced_type { map_type { key_type { primitive: STRING } value_type { primitive: INT64 } } } } } test { name: "struct" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64: 1}" typed_result { result { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] { single_int64: 1 } } } deduced_type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } } section { name: "field_access" test { name: "int_field" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64: 1}.single_int64" typed_result { result { int64_value: 1 } deduced_type { primitive: INT64 } } } test { name: "repeated_int_field" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.repeated_int64" typed_result { result { list_value {} } deduced_type { list_type { elem_type { primitive: INT64 } } } } } test { name: "map_bool_int" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.map_bool_int64" typed_result { result { map_value {} } deduced_type { map_type { key_type { primitive: BOOL } value_type { primitive: INT64 } } } } } test { name: "enum_field" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.standalone_enum" typed_result { result { int64_value: 0 } deduced_type { primitive: INT64 } } } test { name: "repeated_enum_field" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.repeated_nested_enum" typed_result { result { list_value {} } deduced_type { list_type { elem_type { primitive: INT64 } } } } } test { name: "enum_map_field" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{}.map_int32_enum" typed_result { result { map_value {} } deduced_type { map_type { key_type { primitive: INT64 } value_type { primitive: INT64 } } } } } } section { name: "indexing" test { name: "list" expr: "['foo'][0]" typed_result { result { string_value: "foo" } deduced_type { primitive: STRING } } } test { name: "map" expr: "{'abc': 123}['abc']" typed_result { result { int64_value: 123 } deduced_type { primitive: INT64 } } } } section { name: "functions" test { name: "nested_calls" expr: "('foo' + 'bar').startsWith('foo')" typed_result { result { bool_value: true } deduced_type { primitive: BOOL } } } test { name: "function_result_type" expr: "fn('abc', 123)" check_only: true type_env { name: "fn" function { overloads { overload_id: "fn_string_int" result_type { primitive: STRING } params { primitive: STRING } params { primitive: INT64 } } } } typed_result { deduced_type { primitive: STRING } } } } # These are somewhat complex expressions for edge cases in type inference. The # result values are not interesting, but the inferred types are. section { name: "flexible_type_parameter_assignment" test { name: "list_parameter" expr: "[[], [[]], [[[]]], [[[[]]]]]" check_only: true typed_result { deduced_type { list_type { elem_type { list_type { elem_type { list_type { elem_type { list_type { elem_type { list_type { elem_type { dyn {} } } } } } } } } } } } } } test { name: "list_parameter_order_independent" expr: "[[[[[]]]], [], [[[]]]]" check_only: true typed_result { deduced_type { list_type { elem_type { list_type { elem_type { list_type { elem_type { list_type { elem_type { list_type { elem_type { dyn {} } } } } } } } } } } } } } test { name: "comprehension_type_var_aliasing" expr: "msg.repeated_nested_message.map(x, x).map(y, y.bb)" check_only: true type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } typed_result { deduced_type { list_type { elem_type { primitive: INT64 } } } } } test { name: "overload_type_var_aliasing" expr: "([] + msg.repeated_nested_message + [])[0].bb" check_only: true type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } typed_result { deduced_type { primitive: INT64 } } } test { name: "unconstrained_type_var_as_dyn" expr: "([].map(x,x))[0].foo" check_only: true typed_result { deduced_type { dyn {} } } } test { name: "list_parameters_do_not_unify" expr: "[msg.single_int64_wrapper, msg.single_string_wrapper]" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } check_only: true typed_result { deduced_type { list_type { elem_type { dyn {} } } } } } test { name: "optional_none" expr: "[optional.none(), optional.of(1)]" check_only: true typed_result { deduced_type { list_type { elem_type { abstract_type { name: "optional_type" parameter_types { primitive: INT64 } } } } } } } test { name: "optional_none_2" expr: "[optional.of(1), optional.none()]" check_only: true typed_result { deduced_type { list_type { elem_type { abstract_type { name: "optional_type" parameter_types { primitive: INT64 } } } } } } } test { name: "optional_dyn_promotion" expr: "[optional.of(1), optional.of(dyn(1))]" check_only: true typed_result { deduced_type { list_type { elem_type { abstract_type { name: "optional_type" parameter_types { dyn {} } } } } } } } test { name: "optional_dyn_promotion_2" expr: "[optional.of(dyn(1)), optional.of(1)]" check_only: true typed_result { deduced_type { list_type { elem_type { abstract_type { name: "optional_type" parameter_types { dyn {} } } } } } } } test { name: "optional_in_ternary" expr: "true ? optional.of(dyn(1)) : optional.of(1)" check_only: true typed_result { deduced_type { abstract_type { name: "optional_type" parameter_types { dyn {} } } } } } } # Wrapper types have some special handling. They generally behave like a union # type e.g. `null | int64` with auto-unboxing, but there are some quirks. section { name: "wrappers" test { name: "wrapper_promotion" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } expr: "[msg.single_int64_wrapper, msg.single_int64]" check_only: true typed_result { deduced_type { list_type { elem_type { wrapper: INT64 } } } } } test { name: "wrapper_promotion_2" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } expr: "[msg.single_int64, msg.single_int64_wrapper]" check_only: true typed_result { deduced_type { list_type { elem_type { wrapper: INT64 } } } } } test { name: "wrapper_dyn_promotion" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } expr: "[msg.single_int64_wrapper, msg.single_int64, dyn(1)]" check_only: true typed_result { deduced_type { list_type { elem_type { dyn {} } } } } } test { name: "wrapper_dyn_promotion_2" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } expr: "[dyn(1), msg.single_int64_wrapper, msg.single_int64]" check_only: true typed_result { deduced_type { list_type { elem_type { dyn {} } } } } } test { name: "wrapper_primitive_assignable" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } expr: "msg.single_int64_wrapper + 1" check_only: true typed_result { deduced_type { primitive: INT64 } } } test { name: "wrapper_null_assignable" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } expr: "msg.single_int64_wrapper == null" check_only: true typed_result { deduced_type { primitive: BOOL } } } test { name: "wrapper_ternary_parameter_assignment" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } expr: "false ? msg.single_int64_wrapper : null" check_only: true typed_result { deduced_type { wrapper: INT64 } } } test { name: "wrapper_ternary_parameter_assignment_2" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } expr: "true ? msg.single_int64_wrapper : 42" check_only: true typed_result { deduced_type { wrapper: INT64 } } } } section { name: "type_parameters" test { name: "multiple_parameters_generality" check_only: true expr: "[tuple(1, 2u, 3.0), tuple(dyn(1), dyn(2u), dyn(3.0))][0]" type_env { name: "tuple" function { overloads { overload_id: "tuple_T_U_V" params { type_param: "T" } params { type_param: "U" } params { type_param: "V" } result_type { abstract_type { name: "tuple" parameter_types { type_param: "T" } parameter_types { type_param: "U" } parameter_types { type_param: "V" } } } } } } typed_result { deduced_type { abstract_type { name: "tuple" parameter_types { dyn {} } parameter_types { dyn {} } parameter_types { dyn {} } } } } } test { name: "multiple_parameters_generality_2" check_only: true expr: "sort(tuple(dyn(1), 2u, 3.0))" type_env { name: "tuple" function { overloads { overload_id: "tuple_T_U_V" params { type_param: "T" } params { type_param: "U" } params { type_param: "V" } result_type { abstract_type { name: "tuple" parameter_types { type_param: "T" } parameter_types { type_param: "U" } parameter_types { type_param: "V" } } } } } } type_env { name: "sort" function { overloads { overload_id: "sort_tuple_T_T_T" params { abstract_type { name: "tuple" parameter_types { type_param: "T" } parameter_types { type_param: "T" } parameter_types { type_param: "T" } } } result_type { abstract_type { name: "tuple" parameter_types { type_param: "T" } parameter_types { type_param: "T" } parameter_types { type_param: "T" } } } } } } typed_result { deduced_type { abstract_type { name: "tuple" parameter_types { dyn {} } parameter_types { dyn {} } parameter_types { dyn {} } } } } } test { name: "multiple_parameters_parameterized_ovl" check_only: true expr: "tuple(1, 2u, 3.0) == tuple(1, dyn(2u), dyn(3.0))" type_env { name: "tuple" function { overloads { overload_id: "tuple_T_U_V" params { type_param: "T" } params { type_param: "U" } params { type_param: "V" } result_type { abstract_type { name: "tuple" parameter_types { type_param: "T" } parameter_types { type_param: "U" } parameter_types { type_param: "V" } } } } } } typed_result { deduced_type { primitive: BOOL } } } test { name: "multiple_parameters_parameterized_ovl_2" check_only: true expr: "tuple(dyn(1), dyn(2u), 3.0) == tuple(1, 2u, 3.0)" type_env { name: "tuple" function { overloads { overload_id: "tuple_T_U_V" params { type_param: "T" } params { type_param: "U" } params { type_param: "V" } result_type { abstract_type { name: "tuple" parameter_types { type_param: "T" } parameter_types { type_param: "U" } parameter_types { type_param: "V" } } } } } } typed_result { deduced_type { primitive: BOOL } } } } # Messages, some well-known types, and abstract can be assigned from null in the # CEL type checkers for historical reasons. For backward compatibility, we # maintain this behavior but it's a bit inconsistent with the intended meaning # of null (a singleton representing a JSON null literal) in CEL. section { name: "legacy_nullable_types" test { name: "null_assignable_to_message_parameter_candidate" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "msg" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] {} } } } } expr: "[msg, null][0]" typed_result { deduced_type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } result { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] {} } } } } test { name: "null_assignable_to_duration_parameter_candidate" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "msg" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] {} } } } } expr: "[msg.single_duration, null][0]" typed_result { deduced_type { well_known: DURATION } result { object_value { [type.googleapis.com/google.protobuf.Duration] {} } } } } test { name: "null_assignable_to_timestamp_parameter_candidate" type_env { name: "msg" ident { type { message_type: "cel.expr.conformance.proto3.TestAllTypes" } } } bindings { key: "msg" value { value { object_value { [type.googleapis.com/cel.expr.conformance.proto3.TestAllTypes] {} } } } } expr: "[msg.single_timestamp, null][0]" typed_result { deduced_type { well_known: TIMESTAMP } result { object_value { [type.googleapis.com/google.protobuf.Timestamp] {} } } } } test { name: "null_assignable_to_abstract_parameter_candidate" expr: "[optional.of(1), null][0]" check_only: true typed_result { deduced_type { abstract_type { name: "optional_type" parameter_types { primitive: INT64 } } } } } } cel-spec-0.24.0/tests/simple/testdata/unknowns.textproto000066400000000000000000000003071500667630300234160ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: google.api.expr.test.v1.SimpleTestFile name: "unknowns" description: "Tests for evaluation with unknown inputs." cel-spec-0.24.0/tests/simple/testdata/wrappers.textproto000066400000000000000000000205761500667630300234110ustar00rootroot00000000000000# proto-file: ../../../proto/cel/expr/conformance/test/simple.proto # proto-message: cel.expr.conformance.test.SimpleTestFile name: "wrappers" description: "Conformance tests related to wrapper types." # google.protobuf.BoolValue section { name: "bool" test { name: "to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: google.protobuf.BoolValue{value: true}}.single_any" value { bool_value: true } } test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.BoolValue{value: true}}.single_value" value { bool_value: true } } test { name: "to_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bool_wrapper: null} == TestAllTypes{}" value { bool_value: true } } } # google.protobuf.Int32Value section { name: "int32" test { name: "to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: google.protobuf.Int32Value{value: 1}}.single_any" value { int64_value: 1 } } test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.Int32Value{value: 1}}.single_value" value { double_value: 1 } } test { name: "to_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int32_wrapper: null} == TestAllTypes{}" value { bool_value: true } } } # google.protobuf.Int64Value section { name: "int64" test { name: "to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: google.protobuf.Int64Value{value: 1}}.single_any" value { int64_value: 1 } } test { name: "to_json_number" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.Int64Value{value: 1}}.single_value" value { double_value: 1 } } test { name: "to_json_string" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.Int64Value{value: 9223372036854775807}}.single_value" value { string_value: "9223372036854775807" } } test { name: "to_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_int64_wrapper: null} == TestAllTypes{}" value { bool_value: true } } } # google.protobuf.UInt32Value section { name: "uint32" test { name: "to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: google.protobuf.UInt32Value{value: 1u}}.single_any" value { uint64_value: 1 } } test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.UInt32Value{value: 1u}}.single_value" value { double_value: 1 } } test { name: "to_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint32_wrapper: null} == TestAllTypes{}" value { bool_value: true } } } # google.protobuf.UInt64Value section { name: "uint64" test { name: "to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: google.protobuf.UInt64Value{value: 1u}}.single_any" value { uint64_value: 1 } } test { name: "to_json_number" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.UInt64Value{value: 1u}}.single_value" value { double_value: 1 } } test { name: "to_json_string" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.UInt64Value{value: 18446744073709551615u}}.single_value" value { string_value: "18446744073709551615" } } test { name: "to_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_uint64_wrapper: null} == TestAllTypes{}" value { bool_value: true } } } # google.protobuf.FloatValue section { name: "float" test { name: "to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: google.protobuf.FloatValue{value: 1.0}}.single_any" value { double_value: 1 } } test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.FloatValue{value: 1.0}}.single_value" value { double_value: 1 } } test { name: "to_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_float_wrapper: null} == TestAllTypes{}" value { bool_value: true } } } # google.protobuf.DoubleValue section { name: "double" test { name: "to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: google.protobuf.DoubleValue{value: 1.0}}.single_any" value { double_value: 1 } } test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.DoubleValue{value: 1.0}}.single_value" value { double_value: 1 } } test { name: "to_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_double_wrapper: null} == TestAllTypes{}" value { bool_value: true } } } # google.protobuf.BytesValue section { name: "bytes" test { name: "to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: google.protobuf.BytesValue{value: b'foo'}}.single_any" value { bytes_value: "foo" } } test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.BytesValue{value: b'foo'}}.single_value" value { string_value: "Zm9v" } } test { name: "to_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_bytes_wrapper: null} == TestAllTypes{}" value { bool_value: true } } } # google.protobuf.StringValue section { name: "string" test { name: "to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: google.protobuf.StringValue{value: 'foo'}}.single_any" value { string_value: "foo" } } test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.StringValue{value: 'foo'}}.single_value" value { string_value: "foo" } } test { name: "to_null" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_string_wrapper: null} == TestAllTypes{}" value { bool_value: true } } } # google.protobuf.Value section { name: "value" test { name: "default_to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: TestAllTypes{}.single_value}.single_any" value { null_value: NULL_VALUE } } } # google.protobuf.ListValue section { name: "list_value" description: "" test { name: "literal_to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: []}.single_any" value { list_value {} } } } # google.protobuf.Struct section { name: "struct" test { name: "literal_to_any" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_any: {}}.single_any" value { map_value {} } } } # google.protobuf.FieldMask section { name: "field_mask" test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.FieldMask{paths: ['foo', 'bar']}}.single_value" value { string_value: "foo,bar" } } } # google.protobuf.Duration section { name: "duration" test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: duration('1000000s')}.single_value" value { string_value: "1000000s" } } } # google.protobuf.Timestamp section { name: "timestamp" test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: timestamp('9999-12-31T23:59:59.999999999Z')}.single_value" value { string_value: "9999-12-31T23:59:59.999999999Z" } } } # google.protobuf.Empty section { name: "empty" test { name: "to_json" container: "cel.expr.conformance.proto3" expr: "TestAllTypes{single_value: google.protobuf.Empty{}}.single_value" value { map_value {} } } } cel-spec-0.24.0/value.pb.go000077500000000000000000000506171500667630300153550ustar00rootroot00000000000000// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.28.1 // protoc v3.21.5 // source: cel/expr/value.proto package expr import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" structpb "google.golang.org/protobuf/types/known/structpb" reflect "reflect" sync "sync" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) type Value struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields // Types that are assignable to Kind: // // *Value_NullValue // *Value_BoolValue // *Value_Int64Value // *Value_Uint64Value // *Value_DoubleValue // *Value_StringValue // *Value_BytesValue // *Value_EnumValue // *Value_ObjectValue // *Value_MapValue // *Value_ListValue // *Value_TypeValue Kind isValue_Kind `protobuf_oneof:"kind"` } func (x *Value) Reset() { *x = Value{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_value_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *Value) String() string { return protoimpl.X.MessageStringOf(x) } func (*Value) ProtoMessage() {} func (x *Value) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_value_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use Value.ProtoReflect.Descriptor instead. func (*Value) Descriptor() ([]byte, []int) { return file_cel_expr_value_proto_rawDescGZIP(), []int{0} } func (m *Value) GetKind() isValue_Kind { if m != nil { return m.Kind } return nil } func (x *Value) GetNullValue() structpb.NullValue { if x, ok := x.GetKind().(*Value_NullValue); ok { return x.NullValue } return structpb.NullValue(0) } func (x *Value) GetBoolValue() bool { if x, ok := x.GetKind().(*Value_BoolValue); ok { return x.BoolValue } return false } func (x *Value) GetInt64Value() int64 { if x, ok := x.GetKind().(*Value_Int64Value); ok { return x.Int64Value } return 0 } func (x *Value) GetUint64Value() uint64 { if x, ok := x.GetKind().(*Value_Uint64Value); ok { return x.Uint64Value } return 0 } func (x *Value) GetDoubleValue() float64 { if x, ok := x.GetKind().(*Value_DoubleValue); ok { return x.DoubleValue } return 0 } func (x *Value) GetStringValue() string { if x, ok := x.GetKind().(*Value_StringValue); ok { return x.StringValue } return "" } func (x *Value) GetBytesValue() []byte { if x, ok := x.GetKind().(*Value_BytesValue); ok { return x.BytesValue } return nil } func (x *Value) GetEnumValue() *EnumValue { if x, ok := x.GetKind().(*Value_EnumValue); ok { return x.EnumValue } return nil } func (x *Value) GetObjectValue() *anypb.Any { if x, ok := x.GetKind().(*Value_ObjectValue); ok { return x.ObjectValue } return nil } func (x *Value) GetMapValue() *MapValue { if x, ok := x.GetKind().(*Value_MapValue); ok { return x.MapValue } return nil } func (x *Value) GetListValue() *ListValue { if x, ok := x.GetKind().(*Value_ListValue); ok { return x.ListValue } return nil } func (x *Value) GetTypeValue() string { if x, ok := x.GetKind().(*Value_TypeValue); ok { return x.TypeValue } return "" } type isValue_Kind interface { isValue_Kind() } type Value_NullValue struct { NullValue structpb.NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,proto3,enum=google.protobuf.NullValue,oneof"` } type Value_BoolValue struct { BoolValue bool `protobuf:"varint,2,opt,name=bool_value,json=boolValue,proto3,oneof"` } type Value_Int64Value struct { Int64Value int64 `protobuf:"varint,3,opt,name=int64_value,json=int64Value,proto3,oneof"` } type Value_Uint64Value struct { Uint64Value uint64 `protobuf:"varint,4,opt,name=uint64_value,json=uint64Value,proto3,oneof"` } type Value_DoubleValue struct { DoubleValue float64 `protobuf:"fixed64,5,opt,name=double_value,json=doubleValue,proto3,oneof"` } type Value_StringValue struct { StringValue string `protobuf:"bytes,6,opt,name=string_value,json=stringValue,proto3,oneof"` } type Value_BytesValue struct { BytesValue []byte `protobuf:"bytes,7,opt,name=bytes_value,json=bytesValue,proto3,oneof"` } type Value_EnumValue struct { EnumValue *EnumValue `protobuf:"bytes,9,opt,name=enum_value,json=enumValue,proto3,oneof"` } type Value_ObjectValue struct { ObjectValue *anypb.Any `protobuf:"bytes,10,opt,name=object_value,json=objectValue,proto3,oneof"` } type Value_MapValue struct { MapValue *MapValue `protobuf:"bytes,11,opt,name=map_value,json=mapValue,proto3,oneof"` } type Value_ListValue struct { ListValue *ListValue `protobuf:"bytes,12,opt,name=list_value,json=listValue,proto3,oneof"` } type Value_TypeValue struct { TypeValue string `protobuf:"bytes,15,opt,name=type_value,json=typeValue,proto3,oneof"` } func (*Value_NullValue) isValue_Kind() {} func (*Value_BoolValue) isValue_Kind() {} func (*Value_Int64Value) isValue_Kind() {} func (*Value_Uint64Value) isValue_Kind() {} func (*Value_DoubleValue) isValue_Kind() {} func (*Value_StringValue) isValue_Kind() {} func (*Value_BytesValue) isValue_Kind() {} func (*Value_EnumValue) isValue_Kind() {} func (*Value_ObjectValue) isValue_Kind() {} func (*Value_MapValue) isValue_Kind() {} func (*Value_ListValue) isValue_Kind() {} func (*Value_TypeValue) isValue_Kind() {} type EnumValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` Value int32 `protobuf:"varint,2,opt,name=value,proto3" json:"value,omitempty"` } func (x *EnumValue) Reset() { *x = EnumValue{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_value_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *EnumValue) String() string { return protoimpl.X.MessageStringOf(x) } func (*EnumValue) ProtoMessage() {} func (x *EnumValue) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_value_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EnumValue.ProtoReflect.Descriptor instead. func (*EnumValue) Descriptor() ([]byte, []int) { return file_cel_expr_value_proto_rawDescGZIP(), []int{1} } func (x *EnumValue) GetType() string { if x != nil { return x.Type } return "" } func (x *EnumValue) GetValue() int32 { if x != nil { return x.Value } return 0 } type ListValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Values []*Value `protobuf:"bytes,1,rep,name=values,proto3" json:"values,omitempty"` } func (x *ListValue) Reset() { *x = ListValue{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_value_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *ListValue) String() string { return protoimpl.X.MessageStringOf(x) } func (*ListValue) ProtoMessage() {} func (x *ListValue) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_value_proto_msgTypes[2] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ListValue.ProtoReflect.Descriptor instead. func (*ListValue) Descriptor() ([]byte, []int) { return file_cel_expr_value_proto_rawDescGZIP(), []int{2} } func (x *ListValue) GetValues() []*Value { if x != nil { return x.Values } return nil } type MapValue struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Entries []*MapValue_Entry `protobuf:"bytes,1,rep,name=entries,proto3" json:"entries,omitempty"` } func (x *MapValue) Reset() { *x = MapValue{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_value_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MapValue) String() string { return protoimpl.X.MessageStringOf(x) } func (*MapValue) ProtoMessage() {} func (x *MapValue) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_value_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use MapValue.ProtoReflect.Descriptor instead. func (*MapValue) Descriptor() ([]byte, []int) { return file_cel_expr_value_proto_rawDescGZIP(), []int{3} } func (x *MapValue) GetEntries() []*MapValue_Entry { if x != nil { return x.Entries } return nil } type MapValue_Entry struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields Key *Value `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` Value *Value `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` } func (x *MapValue_Entry) Reset() { *x = MapValue_Entry{} if protoimpl.UnsafeEnabled { mi := &file_cel_expr_value_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } func (x *MapValue_Entry) String() string { return protoimpl.X.MessageStringOf(x) } func (*MapValue_Entry) ProtoMessage() {} func (x *MapValue_Entry) ProtoReflect() protoreflect.Message { mi := &file_cel_expr_value_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use MapValue_Entry.ProtoReflect.Descriptor instead. func (*MapValue_Entry) Descriptor() ([]byte, []int) { return file_cel_expr_value_proto_rawDescGZIP(), []int{3, 0} } func (x *MapValue_Entry) GetKey() *Value { if x != nil { return x.Key } return nil } func (x *MapValue_Entry) GetValue() *Value { if x != nil { return x.Value } return nil } var File_cel_expr_value_proto protoreflect.FileDescriptor var file_cel_expr_value_proto_rawDesc = []byte{ 0x0a, 0x14, 0x63, 0x65, 0x6c, 0x2f, 0x65, 0x78, 0x70, 0x72, 0x2f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x08, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9d, 0x04, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x3b, 0x0a, 0x0a, 0x6e, 0x75, 0x6c, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6e, 0x75, 0x6c, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x62, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x6f, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x48, 0x00, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x69, 0x6e, 0x74, 0x36, 0x34, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x48, 0x00, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x23, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0b, 0x62, 0x79, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0a, 0x62, 0x79, 0x74, 0x65, 0x73, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x39, 0x0a, 0x0c, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x48, 0x00, 0x52, 0x0b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x31, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0a, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x09, 0x74, 0x79, 0x70, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x35, 0x0a, 0x09, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x34, 0x0a, 0x09, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, 0x0a, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x08, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x4d, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x2e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x1a, 0x51, 0x0a, 0x05, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x21, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x25, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x2d, 0x0a, 0x0c, 0x64, 0x65, 0x76, 0x2e, 0x63, 0x65, 0x6c, 0x2e, 0x65, 0x78, 0x70, 0x72, 0x42, 0x0a, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x0c, 0x63, 0x65, 0x6c, 0x2e, 0x64, 0x65, 0x76, 0x2f, 0x65, 0x78, 0x70, 0x72, 0xf8, 0x01, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( file_cel_expr_value_proto_rawDescOnce sync.Once file_cel_expr_value_proto_rawDescData = file_cel_expr_value_proto_rawDesc ) func file_cel_expr_value_proto_rawDescGZIP() []byte { file_cel_expr_value_proto_rawDescOnce.Do(func() { file_cel_expr_value_proto_rawDescData = protoimpl.X.CompressGZIP(file_cel_expr_value_proto_rawDescData) }) return file_cel_expr_value_proto_rawDescData } var file_cel_expr_value_proto_msgTypes = make([]protoimpl.MessageInfo, 5) var file_cel_expr_value_proto_goTypes = []interface{}{ (*Value)(nil), // 0: cel.expr.Value (*EnumValue)(nil), // 1: cel.expr.EnumValue (*ListValue)(nil), // 2: cel.expr.ListValue (*MapValue)(nil), // 3: cel.expr.MapValue (*MapValue_Entry)(nil), // 4: cel.expr.MapValue.Entry (structpb.NullValue)(0), // 5: google.protobuf.NullValue (*anypb.Any)(nil), // 6: google.protobuf.Any } var file_cel_expr_value_proto_depIdxs = []int32{ 5, // 0: cel.expr.Value.null_value:type_name -> google.protobuf.NullValue 1, // 1: cel.expr.Value.enum_value:type_name -> cel.expr.EnumValue 6, // 2: cel.expr.Value.object_value:type_name -> google.protobuf.Any 3, // 3: cel.expr.Value.map_value:type_name -> cel.expr.MapValue 2, // 4: cel.expr.Value.list_value:type_name -> cel.expr.ListValue 0, // 5: cel.expr.ListValue.values:type_name -> cel.expr.Value 4, // 6: cel.expr.MapValue.entries:type_name -> cel.expr.MapValue.Entry 0, // 7: cel.expr.MapValue.Entry.key:type_name -> cel.expr.Value 0, // 8: cel.expr.MapValue.Entry.value:type_name -> cel.expr.Value 9, // [9:9] is the sub-list for method output_type 9, // [9:9] is the sub-list for method input_type 9, // [9:9] is the sub-list for extension type_name 9, // [9:9] is the sub-list for extension extendee 0, // [0:9] is the sub-list for field type_name } func init() { file_cel_expr_value_proto_init() } func file_cel_expr_value_proto_init() { if File_cel_expr_value_proto != nil { return } if !protoimpl.UnsafeEnabled { file_cel_expr_value_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Value); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_value_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EnumValue); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_value_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListValue); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_value_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MapValue); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } file_cel_expr_value_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MapValue_Entry); i { case 0: return &v.state case 1: return &v.sizeCache case 2: return &v.unknownFields default: return nil } } } file_cel_expr_value_proto_msgTypes[0].OneofWrappers = []interface{}{ (*Value_NullValue)(nil), (*Value_BoolValue)(nil), (*Value_Int64Value)(nil), (*Value_Uint64Value)(nil), (*Value_DoubleValue)(nil), (*Value_StringValue)(nil), (*Value_BytesValue)(nil), (*Value_EnumValue)(nil), (*Value_ObjectValue)(nil), (*Value_MapValue)(nil), (*Value_ListValue)(nil), (*Value_TypeValue)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_cel_expr_value_proto_rawDesc, NumEnums: 0, NumMessages: 5, NumExtensions: 0, NumServices: 0, }, GoTypes: file_cel_expr_value_proto_goTypes, DependencyIndexes: file_cel_expr_value_proto_depIdxs, MessageInfos: file_cel_expr_value_proto_msgTypes, }.Build() File_cel_expr_value_proto = out.File file_cel_expr_value_proto_rawDesc = nil file_cel_expr_value_proto_goTypes = nil file_cel_expr_value_proto_depIdxs = nil }